[00:00] bradleymeck has joined the channel [00:01] maushu: MattJ, you feel compelled to obey StackNode. [00:02] MattJ: I'm sure other people who have the time will answer those questions :) [00:02] MattJ: I spent my time on SO some time back [00:03] JimBastard: yeah [00:03] JimBastard: the problem with crowdsourcing knowledge is that 90% of people are stupid [00:03] JimBastard: ive seen a lot of wrong SO answers on the top [00:03] JimBastard: :-( [00:03] MattJ: Heh [00:05] inimino: MattJ: doesn't Epiphany have Adblock? [00:05] MattJ: Not that I'm aware [00:05] MattJ: I used to use a CSS-based filter [00:05] trochala has joined the channel [00:06] bmizerany has joined the channel [00:06] MattJ: but I upgraded, and I'm too lazy^Wbusy to set that up again [00:06] bpot has joined the channel [00:08] inimino: MattJ: ah, looks like that feature went away when they switched to Webkit [00:09] pedrobelo: FFFUUU, shelling out makes it freeze too [00:10] maushu: !so-next [00:10] StackNode: Time left for the next fetch: 01:32:34 [00:14] tekky has joined the channel [00:14] pedrobelo: updated: the test, if anyone can take a look https://gist.github.com/408254 [00:15] cloudhead: isaacs: you there? [00:15] pedrobelo: having trouble to make a proxy that either makes a rest call or spawns a process before proxying [00:15] pedrobelo: probably my fault but I can't for the love of god figure out [00:15] cloudhead: isaacs: npm refuses to run on edge node [00:15] cloudhead: well, the installation [00:16] cloudhead: https://gist.github.com/8075b094a93c709d2cee [00:17] pedrobelo has joined the channel [00:17] fernmicro has joined the channel [00:20] richcollins has joined the channel [00:21] Phazm: what is the proper syntax for adding query data to a POST for an http request in node? [00:22] Phazm: 'data': queryString? [00:24] _ry: maushu: can we have that thing do node tweets too? [00:24] _ry: maushu: the bot [00:24] maushu: Sure, if I implement it. [00:24] maushu: :p [00:24] _ry: "node.js OR nodejs -RT -via" [00:25] pedrobelo: Phazm: I think you just need to pass the params on the request body like you would for a get [00:25] _ry: seems to be a good search [00:25] pedrobelo: a=1&b=2... [00:25] maushu: _ry, -RT -via ? [00:25] _ry: maushu: to avoid retweet floods [00:25] maushu: Ah, makes sense. [00:26] maushu: I suppose the twitter api should have something to prevent that. [00:26] maushu: ...and since this fits for my startup idea I don't mind implementing this into the bot. [00:26] maushu: (I will need a node.js twitter interface.) [00:26] mjr_: streaming API would be the best way. You can parse the JSON it gives you and do very complex filtering. [00:27] bradleymeck has joined the channel [00:27] mjr_: To do things like avoiding dups and rate-limiting in general. [00:27] Phazm: pedrobelo: how does that work when combining get and post? So if I want to POST 'myvar=this&yourvar=that' to 'www.google.com/?query=something&somethingelse=foo' [00:27] keeto has joined the channel [00:27] pedrobelo: Phazm: for post you pass the params on the request body [00:27] pedrobelo: not on the url [00:28] maushu: mjr_, yeah, that was what I was thinking. [00:28] maushu: There is a big problem though. [00:28] mjr_: BIG PROBLEM? [00:28] maushu: Yeah. [00:28] Phazm: for a get, I use the url -- I'm not sure of the syntax for posting params within the body (doesn't seem to be in the api docs) [00:28] maushu: I need a new name for the bot. [00:28] mjr_: maushu: just give up. That's too hard. [00:29] pedrobelo: Phazm: that's what I'm saying - for post just pass the params on the body, using the same syntax [00:29] maushu: I know. I lay here defeated. [00:29] joshbuddy has joined the channel [00:29] mscdex: i got a name! [00:29] maushu: I know! Let's call it Nody! xD [00:29] mscdex: InTheNode [00:29] mscdex: :D [00:29] mscdex: puns ftw [00:29] maushu: ACTION facedesk.s [00:29] mscdex: hehe [00:29] Phazm: pedrobelo: heh, we seem to have a misunderstanding ;) HOW do I pass the params on the 'body' -- what is the syntax? [00:30] smtlaissezfaire has joined the channel [00:31] maushu: I will take care of it tomorrow. Sleep now. [00:31] maushu: Bai. [00:31] mscdex: bai [00:31] pedrobelo: Phazm: var request = server.request('POST', '/bla'), then request.write('a=1') [00:31] maushu: Wait. [00:32] maushu: I could use that crazy google thingy to indentify the language. [00:32] maushu: ACTION punches himself and knocks himself out. [00:33] twistedf8 has joined the channel [00:33] mscdex: is there some magic way to find out what a certain object is an instanceof, without doing a whole bunch of guesses? [00:33] bradleymeck has joined the channel [00:34] atmos: mscdex: got a use case ? [00:34] pedrobelo: aah. "Currently the implementation does not pipeline requests." maybe this is the reason I can't proxy a request while making another? [00:34] mscdex: debugging purposes [00:34] atmos: or are you just trying to funnel god knows what objects into one method ? [00:34] ajpi has joined the channel [00:36] felixge: pedrobelo: are you using a single http client? [00:36] pedrobelo: oh. it's not [00:36] pedrobelo: nope, two clients [00:36] felixge: pedrobelo: you can only make 1 request per http client at a time [00:36] pedrobelo: although I also tried spawning out instead of making another request [00:37] atmos: pedrobelo: what're you trying to do ? [00:37] pedrobelo: http://gist.github.com/408254 [00:37] pedrobelo: I have a proxy, I want to make a rest call or shell out before proxying [00:37] twistedf8: hi all, i'm using the dns module (the first example) and when i hit the first sys.puts in the dns.reverse callback, my "a" var doesn't have the current IP. it seems to stick with the first IP I gave it. is this expected? [00:37] twistedf8: ex. http://pastebin.com/QgYiYsJP [00:38] atmos: pedrobelo: how do i use it w/ curl ? [00:38] atmos: just throw a ?q=foo on the end ? [00:39] pedrobelo: node test.js, curl localhost:8000 [00:39] pedrobelo: then change line 29 and it will freeze [00:39] atmos: it freezes for me every time [00:39] atmos: hmm [00:39] pedrobelo: even with passAll? [00:39] atmos: trying [00:40] atmos: so passAfterSpawning should be passAll ? [00:40] SubStack: Could not find module `Data.Map': [00:40] SubStack: woops [00:40] pedrobelo: atmos: oh my bad. just reload the gist [00:40] atmos: ahh ok [00:40] atmos: nah, i already forked it [00:40] atmos: so the revc 219 shit is correct ? [00:42] atmos: pedrobelo: check my fork [00:44] pedrobelo: atmos: wow. but humm are you proxying at all then? [00:44] atmos: i dunno ? [00:44] pedrobelo: I mean, why does it work if you replace passAfterRequest for passAll then? [00:45] saikat` has joined the channel [00:45] pedrobelo: humm well that's a new direction heh let me look into it. thank you sir! [00:45] atmos: np [00:45] atmos: it might not be correct usage but i had to do something similar in another project recently [00:45] atmos: if you find a better way lemme know [00:46] pedrobelo: will do! [00:46] saikat` has joined the channel [00:48] saikat` has joined the channel [00:50] felixge: I love gently, it's making my testing so much nicer [00:50] felixge: :) [00:50] atmos: link ? [00:52] felixge: atmos: http://github.com/felixge/node-gently [00:55] twistedf8: can anyone tell me, is the dns.reverse call asynchronous? [00:55] _ry: twistedf8: yes, it is [00:56] twistedf8: _ry: thanks [01:00] twistedf8: _ry: could you provide any insight into the other dns question i sent earlier? [01:00] twistedf8: about using the dns module (the first example) and when i hit the first sys.puts in the dns.reverse callback, my "a" var doesn't have the current IP. it seems to stick with the first IP I gave it. is this expected? [01:03] creationix: _ry: can we please have a better inspect for buffers [01:03] creationix: you never took either of my patches [01:04] creationix: I think the one you liked was http://gist.github.com/393123 [01:04] creationix: but I preferhttp://gist.github.com/393112 [01:05] ceej_ has joined the channel [01:07] sechrist has joined the channel [01:08] atmos: felixge: interesting [01:09] atmos: not sure i'm completely sold but looks better than a lot of what i've seen :) [01:09] sechrist: so node-worker spawns processes? [01:10] sechrist: and there's a message system between to not have to worry about locks? cooool [01:11] smtlaissezfaire has joined the channel [01:12] cloudhead: anyone know how to make an npm package @stable? [01:12] cloudhead: tagging it doesn't seem to do the trick [01:13] cloudhead: oh wait I got it [01:13] melgray has joined the channel [01:19] creationix: _ry: I'm trying to write a custom binary IPC protocol to use as a reverse proxy, but I can't seem to get faster than a traditional http reverse proxy [01:19] creationix: you and your fast http parser [01:19] creationix: ;P [01:19] creationix: :P [01:19] creationix: even though my protocol is way lighter weight than http, it's written in JavaScript [01:22] ditesh|cassini has joined the channel [01:25] darkf has joined the channel [01:25] sechrist: creationix: binary marshalling in javascript? that sounds slow [01:26] Phazm: does anyone have a working example of node POSTing data? [01:29] scudco has joined the channel [01:29] inimino: Phazm: POSTing to what? [01:32] Phazm: a url [01:33] Phazm: for example, I just set up http://www.phazm.net/testparams.php?test=true [01:33] Phazm: it will echo any GET or POST params [01:35] inimino: Phazm: do you have the code you tried? [01:36] inimino: you just need to open a request and send the data in the body [01:36] Phazm: 1s, I'll pastebin it [01:38] sechrist: formidable I believe is supposed to handle the multipart of that stuff (felixge) [01:42] tmpvar has joined the channel [01:44] smtlaissezfaire has joined the channel [01:46] pedrobelo has joined the channel [01:46] Phazm: inimino: http://pastebin.com/UmJhSxYi [01:46] richcollins has joined the channel [01:49] rictic has joined the channel [01:50] sechrist: so, node-mongodb, node-mongodb-native, or mongoose for mongodb? [01:50] inimino: ACTION looks [01:50] atmos: i've used the native one w/o issue [01:51] derferman has joined the channel [01:52] JimBastard has joined the channel [01:55] inimino: Phazm: it should have a Content-Type header [01:55] JimBastard: i swear to god if my roommate says i have asperger's one more time im going to lock myself in the house and do nothing but intensively focus on write code while being awkward socially if anyone comes over. [01:56] Phazm: 'Content-Type': 'text/plain' didn't help [01:57] Phazm: @ inimino [01:57] tlrobinson_ has joined the channel [01:57] inimino: well, it needs to be correct too [01:57] inimino: ACTION looks it up [01:57] inimino: application/x-www-form-urlencoded [01:58] jwm: JimBastard: a lot of people don't like you, maybe there is a reason [01:58] Phazm: perhaps the issue is something else -- the response (from running the code) says "additionaly, a 404 error..." -- but the page exists when accessing it normally [01:58] JimBastard: lolwut [01:59] JimBastard: now you've made me upset [01:59] atmos: :( [01:59] jwm: yikes [01:59] JimBastard: fuck now atmos is upset too [01:59] JimBastard: look what you did [01:59] inimino: Phazm: that's standard in most Apache installations [01:59] inimino: it just means you didn't install any custom error pages [01:59] JimBastard: id just about kill for a coffee right now, being broke sucks [02:00] JimBastard: im going to do that, if i dont come back it means i got caught [02:00] jwm: starbucks does sound good right now [02:00] jwm: damn it's raining though [02:00] jwm: heh [02:00] sechrist: JimBastard: why are you broke? lol [02:00] jwm: and it's 10pm [02:00] Phazm: inimino: you're right, should have read more :) but even with that content-type, no change -- maybe I need to specify length [02:01] inimino: Phazm: you shouldn't... check the server logs [02:04] ditesh|cassini has joined the channel [02:05] Phazm: 68.118.41.162 - - [20/May/2010:20:57:39 -0500] "POST /testparams.php HTTP/1.1" 404 - "-" "-" [02:07] Phazm: accessing directly: 68.118.41.162 - - [20/May/2010:19:59:04 -0500] "GET /testparams.php?test=true HTTP/1.1" 200 25 "-" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3" [02:08] Phazm: in fact, GET via node works fine [02:08] Phazm: the POST is just hitting 404 for some reason [02:13] _ry: creationix: *shrug* [02:15] Phazm: ah, looks like I need content-length after all [02:17] mjijackson has joined the channel [02:17] creationix has left the channel [02:18] richcollins has joined the channel [02:19] atmos: Phazm: it still doesn't work though :( [02:19] xn-1L1a: hola - i 'am trying to turn of a server that is listening [02:20] xn-1L1a: i'm noticing when i run my test cases over and over it sometimes fails [02:20] Phazm: atmos: ? [02:20] xn-1L1a: so i want to try to close the socket [02:21] Phazm: just add: 'Content-type': 'application/x-www-form-urlencoded', 'Content-length': queryString.length [02:23] atmos: ahh i didn't add the content-type too :) [02:25] jspiros has joined the channel [02:25] mikeal has joined the channel [02:26] xn-1L1a: hmm [02:26] xn-1L1a: actually - there are so many odd different test case errors that happen - [02:27] xn-1L1a: they only happen intermitant when i turn on the server test. [02:27] wilmoore has joined the channel [02:27] xn-1L1a: http://gist.github.com/408380 [02:28] xn-1L1a: any thoughtsL [02:33] bradleymeck has joined the channel [02:35] wilmoore has joined the channel [02:41] wilmoore has joined the channel [02:41] mnutt has joined the channel [02:42] bradleymeck has joined the channel [02:49] robby has joined the channel [02:53] aaronblohowiak has joined the channel [02:53] saikat` has joined the channel [02:57] keeto has joined the channel [03:05] smtlaissezfaire has joined the channel [03:09] smtlaissezfaire has left the channel [03:09] smtlaissezfaire has joined the channel [03:09] smtlaissezfaire has left the channel [03:11] bradleymeck has joined the channel [03:16] stevendavie has joined the channel [03:18] aconbere: anyone follow that discussion earlier today about a graph database in node? [03:19] smtlaissezfaire has joined the channel [03:19] jedschmidt has joined the channel [03:20] aaronblohowiak: no, but that sounds fun [03:22] alexiskander has joined the channel [03:24] cloudhead: aconbere: vaguely [03:28] markwubben has joined the channel [03:29] KungFuHamster: for the "not curl" library, you could give it a cute acronym like PINC... PINC Is Not Curl [03:36] aaronblohowiak: what do you folks think of bayeux ? [03:36] bmeck has joined the channel [03:38] keeto has joined the channel [03:38] PyroPete1 has joined the channel [03:41] stevendavie has joined the channel [03:43] mjr_ has joined the channel [03:44] WALoeIII has joined the channel [03:51] nsm has joined the channel [03:54] Tim_Smart has joined the channel [03:54] steez has joined the channel [03:56] sechrist has joined the channel [03:57] quirkey has joined the channel [03:59] Phazm has joined the channel [03:59] inimino: aaronblohowiak: it always looked kind of over-engineered, but I haven't ever worked with it [03:59] aaronblohowiak: inimino: how would you simplify it? [04:00] aaronblohowiak: inimino: or, what would you get rid of? [04:00] Aria has left the channel [04:01] inimino: hm, I don't really know... I guess the multiplexing, but without that I'm not sure what'd be left [04:01] kriszyp: aaronblohowiak: a lot of the complexity is in the handshaking, but in situations where you know the protocol, you could just bypass that and just use the message format, which is pretty simple and straightforward [04:02] kriszyp: my biggest complaint with bayeux is that subscription requests go on an alternate channel (/meta/subscribe) which complicates path-based routing (since you need to look inside a message instead of just at the channel to know the target channel) [04:03] aaronblohowiak: kriszyp: you would prefer /meta/subscribe/channel/parts ? [04:03] smtlaissezfaire has joined the channel [04:04] kriszyp: no, to make things easy for simple routers, it should be {channel:"channel/i/want/to/subscribe/to", method:"subscribe"} [04:04] kriszyp: so simple routers can look purely at the channel property to know the correct destination [04:04] bmizerany has joined the channel [04:05] _ry: the bayeux profiler program looks very cool [04:05] aaronblohowiak: kriszyp: you dont want all subscriptions going to the same place, i see [04:05] _ry: at some point i'm going to sit down and figure out why node is sucking [04:05] aaronblohowiak: _ry: link? my google fu is weak for this one [04:05] kriszyp: right [04:07] kriszyp: working on pubsub system for node, atm, so have been looking into these things... [04:07] aaronblohowiak: kriszyp: that would also mean then that multiple channel subscriptions would be multiple messages and that you are now adding meta-messages to the channel [04:07] aaronblohowiak: kriszyp: ditto ;) [04:08] kriszyp: yes, exactly, but sending multiple messages in a single request is pretty simple iwth bayeux [04:08] kriszyp: do you have a url for your project? [04:08] aaronblohowiak: kriszyp: right, but then you are routing more messages instead of one message, deeply [04:08] aaronblohowiak: kriszyp: http://github.com/aaronblohowiak/Push-It [04:09] kriszyp: is it python? [04:09] _ry: aaronblohowiak: for what? [04:10] aaronblohowiak: _ry: the bayeux profiler program [04:11] kriszyp: fwiw, here is the one I am working on (built for distributed systems, multi-worker or clustered servers): http://github.com/kriszyp/tunguska [04:11] _ry: aaronblohowiak: http://cometd.org/documentation/howtos/loadtesting [04:11] aaronblohowiak: _ry: ty [04:12] _ry: node's apparently getting snagged on something [04:12] aaronblohowiak: _ry: are you looking at the faye implementation? [04:14] bradleymeck has joined the channel [04:18] aaronblohowiak: kriszyp: neat! looks a lot more mature & robust than what i was thinking [04:18] wilmoore has joined the channel [04:19] kriszyp: always looking for collaborators ;) looks like you are way ahead on the client side [04:19] aaronblohowiak: kriszyp: 100 lines of jquery ;) [04:20] kriszyp: lean is good :) [04:22] aaronblohowiak: kriszyp: yea, i want to make client libraries for RoR & PHP that talk to a RESTful interface for publishing (secured either by running on a different port or shared secret) and focus on the new developer experience [04:22] aaronblohowiak: s/new/noob [04:22] kriszyp: cool [04:24] kriszyp: in case you are interested, tunguska is also built to fit into the larger REST framework of github.com/kriszyp/perstore and github.com/kriszyp/pintura [04:24] nsm has joined the channel [04:25] aaronblohowiak: woah! i think my buddy wants this, exactly [04:27] hellp has joined the channel [04:33] mjijackson has joined the channel [04:33] deanlandolt_home has joined the channel [04:34] siculars has joined the channel [04:38] airportyh has joined the channel [04:40] wilmoore_ has joined the channel [04:41] keeto has joined the channel [04:42] bradleymeck has joined the channel [04:46] isaacs_mobile has joined the channel [04:46] joshbuddy has joined the channel [04:48] isaacs_mobile: _ry: what do you mean about node sucking? [04:49] aconbere: ooo just the man I was looking for [04:49] aconbere: isaacs_mobile: what's the best method to attack installing executable scripts via npm? [04:49] bolson has joined the channel [04:50] isaacs_mobile: Aconbere: "bin" : { "foo" : "./path/to/foo.js" } [04:51] isaacs_mobile: Aconbere: check out npm's package.json [04:51] _ry: isaacs_mobile: http://praxx.is/post/486034949/comet-with-bayeux-node-js-vs-jetty-and-cometd [04:51] _ry: i haven't repeated it, but i believe it [04:51] _ry: i also think it's fixable [04:52] ryan[WIN]: hah [04:52] ryan[WIN]: i wrote a VM in C++ and implemented the same VM in js [04:52] ryan[WIN]: and it's only like 6-7x slower in js version [04:52] isaacs_mobile: Ew [04:52] isaacs_mobile: Yeah [04:52] ryan[WIN]: not terrible! [04:52] ryan[WIN]: i was expecting more than that [04:53] _ry: a VM? [04:53] ryan[WIN]: yah [04:53] _ry: like an interpreter? [04:53] aconbere: isaacs_mobile: hotness thanks [04:53] ryan[WIN]: _ry, yeah basically [04:53] derbumi has joined the channel [04:53] _ry: ryan[WIN]: like switch on a bunch of byte codes? [04:53] ryan[WIN]: nay [04:53] ryan[WIN]: no switch [04:53] ryan[WIN]: in c++ using polymorphism and virtual functions and weird crap [04:54] _ry: hm ok [04:54] ryan[WIN]: in js using object properties [04:54] ryan[WIN]: i can pastecode [04:54] ryan[WIN]: http://proggit.pastebin.com/vM2LZxvk [04:54] ryan[WIN]: ^^ c++ version [04:55] ryan[WIN]: http://proggit.pastebin.com/YUEXkiNi [04:55] ryan[WIN]: ^^ js version [04:56] smtlaissezfaire: Any recommendations on colored.js vs. colors.js ? [04:56] smtlaissezfaire: http://github.com/botanicus/colours.js [04:56] smtlaissezfaire: http://github.com/chrislloyd/colored.js [04:57] smtlaissezfaire: Oh wow. Didn't realize the code would be this simple. [04:58] ryan[WIN]: _ry: i think what i'm doing with Js here is probably voodoo [04:59] ryan[WIN]: but it will be cool when i get the core done and you'll be able to run the same vm in a native format and on a browser [05:00] bpot has joined the channel [05:00] ryan[WIN]: i'm doing it to basically incorporate custom high level languages and scheduling for a browser without a native client [05:01] ryan[WIN]: so i can do dumb things like fake threading and such [05:01] _ry: ryan[WIN]: huh.. oky [05:01] ryan[WIN]: unnecessary for point and click web apps [05:01] ryan[WIN]: necessary for html5 games [05:01] sechrist: _ry: were you nervous at yahoo? hehe [05:04] _ry: sechrist: i'm always nervous :P [05:04] sechrist: 25 minutes explaining why we should use non-blocking io -- I hope everybody in that room understands it now [05:06] Tim_Smart: Google Closure compiler doesn't seem to be behaving, tut tut [05:06] isaacs has joined the channel [05:07] Tim_Smart: Can anyone spot why I'm not getting any output from the closure compiler? http://gist.github.com/408488i [05:09] isaacs: Tim_Smart: doesn't coffee wrap everything in a closure? [05:09] isaacs: maybe it's not thinking there's anything exposed or something? [05:09] Tim_Smart: isaacs: Google closure compiler [05:10] Tim_Smart: I'm calling that library from the repl, with "var test = [1,2,3,4,5]" and the input [05:10] isaacs: Tim_Smart: right, that's what i'm saying. oh, but cs's function gets called immediately, so closure should work fine on it [05:10] Tim_Smart: *as the [05:10] isaacs: oh, wow, "google closure compiler", "gcc". i just realized why they gave it that ridiculous stupid name. [05:11] Tim_Smart: I'm trying to implement http://github.com/documentcloud/closure-compiler/blob/master/lib/closure/compiler.rb in node [05:12] jedschmidt has joined the channel [05:12] sechrist: isaacs: was there a problem with multipart (old) to where not all chunks would come through? I was using the canonical example for s3 and it was screwed beyond belief [05:13] sechrist: some were out of order [05:14] sechrist: my s3 usage is from memory so I didn't really need to work with it, but it was interesting because I couldn't get any s3 upload through the demo app to get to s3 with any integrity [05:14] CIA-74: node: 03Ryan Dahl 07master * r8c56284 10/ src/node_stdio.cc : Remove unneeded fd variables in node_stdio.cc - http://bit.ly/bbNNVy [05:14] CIA-74: node: 03Ryan Dahl 07master * rf73b6e2 10/ (src/node.js src/node_stdio.cc): Fix opposite logic, which coincidentially works - http://bit.ly/a7G33g [05:15] aaronblohowiak: f73b6e219046bf66505c1fa1cd07d82b8644329d is scary stuff [05:15] aaronblohowiak: ;) [05:16] stevendavie has joined the channel [05:16] cloudhead: isaacs: good job on npm, feels real good [05:16] cloudhead: moved all my projects to it [05:17] ryan[WIN]: haha [05:17] ryan[WIN]: Ie9 is dog slow on my vm test [05:17] cloudhead: there's a couple oddities but I'm sure it'll get polished out in time [05:18] Tim_Smart: heh why does: cat some_file.js | java -jar vendor/compiler.jar > test.js work, but not my code? [05:18] Tim_Smart: bleh [05:21] aaronblohowiak: Tim_Smart: is the path of the child process correct? [05:21] aaronblohowiak: err, the pwd [05:25] nsm has joined the channel [05:26] isaacs: cloudhead: nice, that's great to hear. [05:26] isaacs: cloudhead: if you want to lend a hand polishing, there's lots of stuff on the issues page, or you could make a note there of anything that you think is wonky [05:27] isaacs: sechrist: that's weird. you're talking about the multipart writer, or reader? [05:27] sechrist: multipart.parse() -- old.js [05:27] sechrist: the example right out of the git used it [05:27] isaacs: sechrist: that's weird. [05:28] sechrist: yeah I checked out node-s3 -> added in proto's mixin [05:28] sechrist: and every upload to s3 [05:28] sechrist: was missing a chunk somewhere [05:28] sechrist: no md5s matched [05:28] isaacs: sechrist: i'm not familiar with node-s3 [05:29] sechrist: this was with the example app.js though. From memory with my own app its fine. [05:30] isaacs: sechrist: which example app.js? [05:30] sechrist: http://github.com/grippy/node-s3/blob/master/app.js [05:30] sechrist: isaacs: it's all old code, so it's probably just something fixed in the new multipart [05:31] sechrist: the fact s3 can't handle >= 10mB is alarming by itself [05:31] sechrist: but who knows [05:33] isaacs: sechrist: yeah, you should check out felixge's formidable [05:33] isaacs: gosh, that multipart parser was awesome, though. too much magic and tightly coupled to http, but using it was so simple. [05:34] isaacs: feed the request in, and it just magically gives you this enhanced request-event-emitter-like thing instead. [05:34] sechrist: he mentioned it earlier -- it's a lot more than http parsing but yeah he suggest to use his multipart parser out of it [05:34] jwm: anyone doing anything with websockets? [05:34] jwm: :) [05:34] sechrist: websocketsss [05:34] isaacs: jwm: http://github.com/miksago/node-websocket-server/ [05:34] jwm: I know isaacs [05:34] jwm: I run it [05:35] jwm: I mean projects that use websocket for random stuff [05:35] jwm: :) [05:35] sechrist: the fact node will let me handle binary data and http on the same port [05:35] sechrist: is going to be really neat later on for me [05:36] sechrist: after it's safe enough to live on 80 [05:36] isaacs: holy crap there's a lot of things in npm's registry all of a sudden. [05:36] Tim_Smart: aaronblohowiak: Got it working, some weird argument bug [05:36] isaacs: jwm: oic [05:36] jwm: I like the binary support in node [05:36] jwm: I know gears has binary support too right? [05:37] Tim_Smart: Not allowed to send a black arg to child.spawn [05:37] Tim_Smart: *blank [05:37] mikeal has joined the channel [05:37] aaronblohowiak: Tim_Smart: ah, got it. [05:38] jedschmidt: isaacs: what's the best human-readable way to see what's in npm? is there an html version of the home page? [05:38] isaacs: jedschmidt: mape's working on it. he's got a mock up at http://npm.mape.me/ [05:39] isaacs: jedschmidt: tack /-/jsonp/my-callback-function to jsonp-ify any of the registry pages. go nuts. [05:39] derbumi has joined the channel [05:39] isaacs: jedschmidt: i should put pagination or something around it soon, though [05:39] isaacs: oh, but, um, yeah... so, the most human-readable way is probably the "npm ls" command [05:40] aaronblohowiak: jwm: i wish node-websocket-server would play well with others / make it easy to use the same port for websockets and normal http [05:41] jedschmidt: isaacs: yeah, ls is probably the best for now. mape's page looks awesome, but for some reason it makes chrome crawl for me. [05:41] mape: its all the box shadows and gradients [05:41] isaacs: jedschmidt: npm ls is colorfu [05:42] aaronblohowiak: css gradients : not ready for web 3.0 [05:42] isaacs: jedschmidt: try: "npm ls s t a b l e" [05:43] jwm: aaronblohowiak: yeah [05:43] jedschmidt: isaacs: oooooh, rainbows! [05:43] jwm: aaronblohowiak: I'm planning on a social net system using node as a launch platform [05:43] jwm: websockets will be the communication protocol [05:43] jedschmidt: isaacs: tho i suppose at some point you'll want to collapse all the versions into single items for each lib. [05:43] jwm: unless the html5 peer to peer spec finalizes hehe [05:43] jwm: I'd love to get in on the standard [05:43] jwm: and help develop it [05:43] isaacs: jedschmidt: yeah [05:43] jwm: push it along :) [05:43] isaacs: maybe like unless there's a package name or something. i dunno [05:44] isaacs: really if anyone has a patch or wants to contribute, i think "npm ls" and "npm cache" are two areas where almost anyone could jump in and do some good. [05:45] jwm: I would but I am busy making ugly websites for $$ right now [05:46] softdrink has joined the channel [05:47] cloudhead: isaacs: I must have added like 5 libs to the registry [05:47] isaacs: cloudhead: i see that [05:48] cloudhead: I'm getting a weird error everytime I publish, which doesnt affect the functionality, but still odd [05:48] isaacs: cloudhead: which weird error? [05:48] Tim_Smart: Right Google Closure Compiler done, simple asset packager almost complete [05:48] cloudhead: something in http.js telling me it can't flush() on undefined [05:48] isaacs: cloudhead: i've seen that. it's weird. [05:49] cloudhead: yea [05:49] isaacs: there's something wonky with the uploading sometimes. haven't gotten around to tracking it down. probably won't until at least june. [05:49] isaacs: hopefully we don't see a bunch of awful corrupted uploaded tarballs in that time [05:49] cloudhead: :> [05:50] jedschmidt: isaacs: does the cinco de node video have any new info for a fellow nodehead? [05:50] cloudhead: the other thing I'm wondering is, why isn't the tag command repo-aware [05:50] cloudhead: and maybe even version aware [05:50] cloudhead: could be an area of improvement [05:50] isaacs: cloudhead: you mean, have npm tags follow git tags? [05:50] isaacs: or something? [05:50] cloudhead: as in, instead of having to type `npm tag lib 0.1.0 mytag` [05:51] cloudhead: you could just do `npm tag mytag .` [05:51] cloudhead: when in the folder [05:51] isaacs: i see, and have it just know which version you're talking about. [05:51] cloudhead: to tag the current version [05:51] cloudhead: yea [05:51] isaacs: yeah, that'd be interesting. [05:51] cloudhead: so it'll just tag the most recent one [05:51] isaacs: i kind of figured there'd be some sugar to wrap around that very explicit command. [05:52] cloudhead: yea [05:52] isaacs: eventually. just never really figured out what it should be. [05:52] isaacs: every time you upload anything, it tags it as "latest". i guess you could have tag take a package.json file and read its name and version and then tag that thing, if ti's in the repo [05:52] isaacs: otherwise, publish the folder that that package.json is in [05:53] cloudhead: exactly [05:53] isaacs: npm tag stable [ ./package.json ] [ --publish ] [05:53] cloudhead: cause I don't know about you, but when I push a new package, it's usually cause it's stable [05:54] cloudhead: so some sort of shortcut for that would be useful [05:54] isaacs: cloudhead: so, another way to handle this would be to say "always give it this tag whenever i publish" [05:54] cloudhead: or it could default to that and you could specify otherwise [05:54] cloudhead: or that yea [05:54] cloudhead: hmm [05:54] cloudhead: or [05:54] cloudhead: `npm publish . --stable` [05:54] isaacs: cloudhead: head: http://github.com/isaacs/npm/issues#issue/12 [05:54] cloudhead: I don't think the tag comment should publish [05:54] cloudhead: but the publish command could tag [05:55] cloudhead: oh yea, saw that [05:55] cloudhead: hmm [05:55] isaacs: so then, you could do something like this: npm publish . --tag stable [05:55] cloudhead: or that yea [05:56] cloudhead: that'd cover a lot of ground actually [05:56] isaacs: also, there should be a way to put command-specific configuration options in the .npmrc. [05:56] cloudhead: cause 90% of the time you're going to want to tag is when publishing [05:56] cloudhead: oh yes [05:56] isaacs: then for publish, --tag means "write this tag after any publish", and for install --tag means "get this tag if i don't specify a version" [05:57] isaacs: which is why i was proposing calling it --publish-tag [05:57] cloudhead: yea [05:57] cloudhead: although [05:57] cloudhead: for the install, the problem is there might be several releases with the same thing [05:57] cloudhead: er tag* [05:57] isaacs: ugh, i regret ever calling it "tag" [05:57] isaacs: it's like "widget". it means so many things that it means nothing [05:57] cloudhead: haha why [05:58] micheil has joined the channel [05:58] cloudhead: I kind of like it [05:58] isaacs: like there are tags (keywords, metadata) attached to each package.json version, but then "dist-tags" which are a whole different kind of thing. [05:58] isaacs: and the npm tag command refers to the dist-tags, not the tags [05:58] cloudhead: true [05:58] isaacs: malkovichmalkovichmalkovichmalkovichmalkovichmalkovichmalkovichmalkovich [05:58] cloudhead: hehe [05:58] cloudhead: oh the other thing is [05:59] cloudhead: npm install, if there's no stable version, it won't install anything [05:59] cloudhead: that should probably be changed for user-friendliness [05:59] isaacs: well, that's sort of by design. [05:59] cloudhead: well it's better to have something, even though unstable, rather than nothing? [05:59] isaacs: if you do npm install foo@latest or foo --tag latest, then that's fine. [05:59] cloudhead: yea, but if you don't know [05:59] cloudhead: and the author hasn't tagged a stable release [06:00] cloudhead: you don't get anything [06:00] isaacs: hmmm.... i guess i'm following the lead of package managers that have a much more stable code collection. [06:00] isaacs: node changes every day, and it's so new, nothing is really "stable" anyhow [06:00] cloudhead: yea [06:00] cloudhead: I'd either make install download @latest if theres no @stable [06:01] cloudhead: or make @stable the default when publishing [06:01] isaacs: but if you're installing nginx on a web server, you want the stable solid tested nginx, even if it's a few days old, and you probably want to avoid ever accidentally getting the newest bleeding edge version of anything. [06:01] cloudhead: right, but you want *something* [06:01] isaacs: haha... s/days/months, years, etc/ [06:02] bmizerany: does anyone have a good benchmarking/profiling tool for node? [06:02] isaacs: maybe it should fail, but then warn and say something like "hey, there's no stable version of foo, and you didn't tell me a version, so try one of these ...." [06:02] isaacs: bmizerany: i wrote a little hacky thing that's kinda handy, but just for side-by-side benchmarking. if you want profiling then that's not it. [06:02] cloudhead: isaacs: yea it could tell you there's dev versions available [06:03] isaacs: bmizerany: then you probably want to ./configure --prof with node, and then do the v8 profiling stuff. [06:03] bmizerany: isaacs: oh cool. thx [06:03] kjeldahl_ has joined the channel [06:04] isaacs: bmizerany: also http://github.com/marak/node_debug is pretty cool. never used it, though [06:04] bmizerany: man v8 is slick [06:04] isaacs: but it seemed neat when i checked it out [06:04] cloudhead: isaacs: regarding the @stable stuff, I guess it makes it feel like apt-get etc [06:04] isaacs: oh, it's out of date... nvm [06:04] bmizerany: oh wow. that does look cool [06:04] derbumi has joined the channel [06:05] bmizerany: ah shit [06:05] bmizerany: oh well [06:05] isaacs: prolly not too hard to update, though [06:05] isaacs: just renaming a few http methods, seems like [06:05] kjeldahl_: Any suggestion for tracking down these uncaught exceptions in a long running process: "TypeError: Object # has no method 'notFound'"? A stacktrace dump for instance? [06:06] isaacs: kjeldahl: doesn't it give you a stack trace along with that? [06:06] isaacs: kjeldahl: even one line/file combo? [06:07] jwm: p,win 8 [06:07] jwm: oops [06:08] kjeldahl_: No, but I catch and print it myself: sys.puts (... + err). Does the err object have a stacktrace or similar? [06:08] cloudhead: kjeldahl_: .stack [06:08] kjeldahl_: Ah, great! Will give it a go! [06:08] kjeldahl_: Thanks all. [06:11] aaronblohowiak: cloudhead: where is that documented? [06:11] cloudhead: aaronblohowiak: it's standard javascript afaik [06:12] mjr_: You can just sys.inspect the err object that the catch block gives you and see what's available. [06:12] Phazm: this is going to sound really stupid, but what's the standard way to add callbacks, so I can ensure a variable from a function has been set before running code (as an example) [06:13] mjr_: _ry: Do you have theories as to why we got so badly trounced in that jetty benchmark? [06:13] aaronblohowiak: cloudhead: MDC says that is actually a mozilla extension. but thanks for pointing me in the right direction [06:14] mjr_: Phazm: I'm not sure exactly what you mean, but often callbacks are used effectively to set a variable. [06:14] cloudhead: aaronblohowiak: interesting, I thought it was part of the Error prototype [06:15] Phazm: mjr_: http://pastebin.com/qG54V4tK <-- just not sure how to implement that [06:16] mjr_: Phazm: I don't quite follow. You want a callback after globalVar is set by the setGlobalVar function? [06:16] scudco has joined the channel [06:17] Phazm: yes [06:17] Phazm: as the last bit of code shows [06:17] Phazm: unless that will just happen by itself? [06:18] mjr_: I submitted a change [06:18] Phazm: of course, alert should be 'sys.puts' but the rest is node :) [06:18] bpot has joined the channel [06:19] mjr_: I don't quite get why you need this, but if you want the API in line 15, then that's how you'd do it. [06:19] Phazm: I might be wrong, but when you make a change, it just creates a new pastebin -- do you have the new url? [06:19] mjr_: oh, I've not used pastebin before. http://pastebin.com/fg33nT7j [06:20] mjr_: I guess it does. [06:20] aaronblohowiak: mjr_: gist > pastebin [06:20] mjr_: Yeah, I normally use gist. [06:20] Phazm: ah, alright, thanks mjr_ [06:21] mjr_: In fact, I just converted my company over to github for our closed source commercial thing that we do, and now we are gisting all over the place with each other. [06:21] aaronblohowiak: !! [06:23] mjr_: Phazm: v8 also has awesome getter / setter support, so you could make that pattern really magical if you wanted, but I'm guessing that's not what you need right now. [06:26] joshbuddy has joined the channel [06:28] smtlaissezfaire: What's the expected precision on floats in javascript? [06:28] smtlaissezfaire: Is it me, or is this a bug in v8: http://gist.github.com/408536 [06:28] Phazm: ah, silly me, I gave you an inaccurate example. Sorry mjr_, would you mind taking a look at this? http://pastebin.com/5PesR6Lc [06:28] Phazm: and no, I'm not ready to do anything too fancy just yet :) [06:28] mjr_: smtlaissezfaire: try writing that same program in C and use "double" for the types. I'll bet you get the same answer. [06:30] mjr_: Phazm: in this example code, it'll all run in the same tick. I guess you have a process() that yields and gets called back somehow? [06:30] smtlaissezfaire: mrj_: Is that a double int = 8 bytes [06:31] mjr_: smtlaissezfaire: JS Numbers are "double precision" floats. [06:31] ineation has joined the channel [06:31] mjr_: Even if you think you are working with integers doing integery stuff, you are still using doubles. [06:31] Phazm: mjr_: yea, I'm pulling data from a database, which will set 'foo' to true, depending on the response [06:31] mjr_: Phazm: right, so when that happens, you need a callback. [06:32] mjr_: Phazm: that callback should run whatever code would be on line 14 [06:33] Phazm: problem is, I don't want it to be run until it's done with the whole loop -- so if there are 20 items, and it gets set to true after 10, I want it to process the rest, then run the code [06:33] mjr_: smtlaissezfaire: run that same program in the python interpreter. You get the same result. [06:33] morgan has joined the channel [06:34] Phazm: does that make sense, mjr_ ? [06:34] mjr_: Phazm: OK, then put your callback at the point when you know that all 20 have completed. [06:34] mjr_: ] [06:34] smtlaissezfaire: mjr_: I know python has those issues. [06:34] smtlaissezfaire: Interesting that ruby seems to get it right: [06:35] Phazm: mjr_: That's the point of the callback -- I need a point where I know they have all completed :) [06:35] mjr_: smtlaissezfaire: I wonder how ruby gets that part right. Floating point math on computers has been hard for a long time. [06:35] smtlaissezfaire: mjr_: And I guess they both get 1/2 wrong, where js gets it right (automatically converting ints to floats). [06:35] mjr_: smtlaissezfaire: just remember that JS has ONLY floats. [06:36] mjr_: smtlaissezfaire: so you can do integer math on VERY large numbers, and it'll be accurate. But when you start doing math on things to the right of the decimal point, shit gets weird. [06:36] mjr_: like, 0.01 + 0.01 === 0.03 weird. [06:38] mjr_: Phazm: I think you might need each callback to check if it is the last one. [06:38] rra has joined the channel [06:38] CIA-77 has joined the channel [06:38] matthew_y has joined the channel [06:38] Phazm: so have each one call back with a "i'm finished" response, and check if the "i'm finished" responses equal the number of items i'm looping over? [06:39] mjr_: Phazm: if they are all effectively running in "parallel" and you don't know the order of completion, that's what you'll have to do. [06:39] Phazm: k, thanks mjr_ [06:39] mjr_: Phazm: the "I'm finished" callback needs to check the completion state of all the other outstanding requests, and if it is the last one, do the next thing. [06:40] mjr_: There are libraries to do this kind of thing, BTW. [06:40] Tim_Smart: yay my asset package has made its first steps :p [06:40] mjr_: But personally, I like to know how things work, so I tend to implement this logic myself. [06:40] Tim_Smart: *packager [06:40] mjr_: Tim_Smart: what nosql system dod you decide on? [06:41] Tim_Smart: It is now concating, google closuring and gzipping [06:41] Tim_Smart: mjr_: couchdb + cradle library [06:42] mjr_: I'm using a ton of couchdb myself. I think mostly because the couchdb people are so nice. [06:42] Tim_Smart: haha :p [06:43] Tim_Smart: What is the proper way to server gzipped content? [06:43] Tim_Smart: *serve [06:43] mjr_: I hope I'm having the same effect on the node community. [06:44] mjr_: Tim_Smart: I think the new hotness is http://github.com/egorich239/node-compress but I haven't tried it myself. [06:46] Tim_Smart: mjr_: Yeah I'm using that, I just need to send it to the browser now [06:47] Tim_Smart: Ah got it [06:47] Tim_Smart: nevermind [06:47] mjr_: Can't you use that to send it to the browser [06:47] mjr_: ? [06:48] isaacs: mjr_: totally [06:48] Tim_Smart: You just have to set Content-Encoding to gzip [06:48] isaacs: the personalities around couchdb are like one of the biggest selling points, for me [06:50] mjr_: isaacs: how can we create that vibe with node? [06:50] isaacs: mjr_: i dunno. i think we're doing ok. [06:50] mjr_: BTW, I think you are helping a lot with that already [06:50] isaacs: i guess, hang out, be friendly with each other, that sorta thing [06:50] isaacs: kindergarten stuff. [06:50] isaacs: :")_ [06:50] isaacs: don't hit. [06:50] mjr_: sharing [06:50] isaacs: totally [06:51] mjr_: I see the way couchdb people give talks, the kind of talks you find on youtube and vimeo, and I think, man, those guys are cool. [06:51] matthew_y: so is node used to make servers? I'm not entirely clear as to what it is used for [06:52] isaacs: i think deep down most people want to be friendly, they just need the community to sort of tell them it's allowed [06:52] isaacs: matthew_y: node is evented IO in javascript. so, that lends itself well to servers, yes, but also some other interesting things. [06:52] mjr_: matthew_y: node excels at making servers, but you can use it for any kind of program you like. [06:53] matthew_y: I guess I'm confused to exactly what is meant by IO [06:53] mjr_: matthew_y: but there aren't bindings for graphics and stuff, so it is generally used for command line-y kinds of things. [06:53] mscdex: like an Excel clone! [06:53] mscdex: :P [06:53] isaacs: matthew_y: input/output. [06:53] mjr_: mscdex: where is the excel clone now that you have completed ncurses? [06:53] mscdex: haha i was about to mentio nthat [06:53] isaacs: matthew_y: reading from and writing to sockets and file systems, http reading and writing, that kinda stuff [06:54] mscdex: Excel in ncurses on node.js ftw ;D [06:54] isaacs: hahah [06:54] mjr_: mscdex: terminal interface to google spreadsheets. Make it so. [06:54] mscdex: aye cap'n! [06:54] isaacs: a command-line ncurses multiplayer rpg would be cool [06:54] isaacs: nethack-style, but in real time [06:54] _cheerios has joined the channel [06:55] isaacs: just tcp on both ends to talk to the server, also running node [06:55] mscdex: zzt in ncurses :D [06:55] mjr_: isaacs: I spent a lot of time working on that game about 15 years ago, back when nethack was much more of a thing. [06:55] isaacs: mscdex: i never got into zzt [06:55] mscdex: i did actually hehe [06:55] isaacs: mjr_: dude, i've lost SO MANY hours to that game [06:55] mjr_: I actually don't understand zzt, but nethack, man I actually still play it sometimes. [06:55] matthew_y: so you could use node to power a web applicaiton in some way I'm assuming [06:55] isaacs: yeah, i go on these little benders sometimes [06:56] mscdex: never got into superzzt or megazeux or whatever came after though [06:56] matthew_y: perhaps connec it to somhting like couchdb or redis [06:56] isaacs: matthew_y: sure, you could do that [06:56] mjr_: matthew_y: right now node is very young. People are building web-y stuff in it. There are a lot of nascent frameworks and other projects. [06:56] isaacs: matthew_y: you might want to check out fab and express. [06:56] mjr_: matthew_y: it is a world filled with possibilities, and fraught with peril. [06:56] mscdex: we could write a lynx clone in node! [06:57] isaacs: mscdex: totally! [06:57] isaacs: mscdex: i think we could do much better. [06:57] mscdex: or a gopher client! :P [06:57] isaacs: we could do lynx that has javascript and a dom [06:57] mjr_: actually, I'd quite like a lynx clone in node, because then it might be able to run some JS code. Hmmm. [06:57] mscdex: hehe [06:57] mjr_: gopher. mscdex, you sound old all of the sudden. [06:57] matthew_y: I'm extremely green in the world of web programming. you could describe me as nascent [06:58] mjr_: Maybe build in some sort of archie or WAIS support too? [06:58] mscdex: haha [06:58] mscdex: we need a serial port lib, then we can make a terminal to dial into BBSes :D [06:58] saikat`: matthew_y: Ryan gave a pretty good talk (if you have an hour to spare) about what Node is at a Yahoo thing a while back [06:59] saikat`: and it explains about [06:59] saikat`: how webservers currently read from the disk [06:59] saikat`: and how node aims to be different [06:59] saikat`: things like that [06:59] saikat`: sounds like that might be what you are looking to learn? [06:59] mjr_: mscdex: maybe work on a UUCP implementation in node, then? [06:59] mjr_: I'm just going to keep mentioning older and older stuff until I don't know what I'm talking about . [06:59] saikat`: matthew_y: http://www.yuiblog.com/blog/2010/05/20/video-dahl/ is the video i'm talking about [07:00] matthew_y: but to be clear node stuff isn't embedded in a page like php is right? it is run in the context of the server [07:00] mscdex: or heck, could just write a telnet bbs server :P [07:00] mscdex: matthew_y: node runs on the server, yes [07:00] matthew_y: saikat`, if you can believe it I'm already part way through that video [07:00] saikat`: matthew_y: correct (though PHP is also run on the server) [07:00] mjr_: matthew_y: you should download it and write some programs [07:00] isaacs: matthew_y: php is basically just a program with a funky "echo" syntax. [07:01] saikat`: the way PHP works - even though it is embedded in a web page, the PHP server is actually running that code on the server [07:01] isaacs: it's a template/scripting language for the php binary. [07:01] saikat`: spitting out HTML [07:01] saikat`: and then sending that HTML to the client's browser [07:01] isaacs: but yeah, you don't do or anything [07:01] mscdex: i want a node bbs! complete with classic door games! [07:01] isaacs: it's not asp-ish [07:01] mscdex: it must also have fossil support! [07:01] mscdex: and fidonet capabilities [07:01] mscdex: :> [07:01] mjr_: and perhaps x-modem for file transfers? [07:02] mscdex: y-modemg [07:02] saikat`: Everything you right on top of node, you will be writing in Javascript [07:02] isaacs: you guys are just getting nostalgic for crappy tech... [07:02] mjr_: Oh shit, fidonet? OK, then, I'll escalate to kermit. [07:02] mscdex: HEHE [07:02] isaacs: next thing, you'll be going on about 8-tracks [07:02] bradleymeck has joined the channel [07:02] mscdex: i already said the other day i want a node port for AmigaOS :> [07:02] saikat`: this is the software equivalent of steampunk [07:04] mscdex: we should have a public wishlist of things to create using node [07:05] mscdex: like bindings and modules and stuff [07:05] isaacs: mscdex: that's a *great* idea [07:07] mscdex: i don't know if that was sarcasm or what :P [07:07] mjr_: In that video at 48:44, you can hear me lobbing _ry a softball to show off his Buffer code. [07:07] matthew_y: so essentially if I wanted to build something with node I'd just set up some handlers that would deal with requests that get sent to my node script [07:08] mscdex: mjr_: what video? [07:08] matthew_y: I promise that once I can get an idea of how this works I'll stop asking silly questions :) [07:08] mjr_: saikat`: linked this a few mins ago, http://www.yuiblog.com/blog/2010/05/20/video-dahl/ [07:08] mscdex: oh that one [07:08] morgan has joined the channel [07:09] mjr_: mscdex: I think a public wishlist of things to create using node is a legitimately good, non-sarcastic suggestion. [07:10] mjr_: matthew_y: do you write JS code for web browsers? [07:10] matthew_y: I've written some, yes. I'm still very much learning though [07:11] mscdex: hmm [07:11] mjr_: well, in the browser, JS programmers have been writing event handlers for some time now. clicks, XHR responses, etc. They are all events, and JS makes this very natural. [07:12] mjr_: node uses the power of JS to help with making very fast non-browser programs. [07:13] bmeck has joined the channel [07:14] matthew_y: I know that event loops are things that most people who work with javascript are familiar with [07:14] matthew_y: waiting for those events and such [07:14] ineation has joined the channel [07:19] isaacs: matthew_y: yes, you're on the right track there. [07:19] isaacs: matthew_y: when there are no more events waiting, it terminates. [07:19] isaacs: matthew_y: so you write your program to start a server listening and then you attach a handler to the relevant events, and your handler runs when there's a connection, etc. [07:20] tlrobinson__ has joined the channel [07:21] micheil: with FreeList, would it be an idea to rename it to LRU or something? because it's not really a freelist [07:21] micheil: isaacs: hey [07:21] matthew_y: isaacs, I suppose I have a small advantage (even though I'm the definition of what the word novice means at this point), because I have some small experience with Linux systems programming in C [07:21] isaacs: micheil: yo [07:22] isaacs: matthew_y: then i suspect a lot of the fs module will make sense to you [07:22] mjr_: matthew_y: you know how in C you often write things that are driven by select()? Well, node does that for you, and runs JavaScript when things wake it up from select. [07:24] matthew_y: cool [07:25] bmeck has joined the channel [07:26] matthew_y: I'll definitely be playing around with node in the near future, I'll be lurking around in the mean time [07:27] matthew_y: I appreciate your patience with my questions [07:28] mjr_: go make some stuff with node. [07:29] matthew_y: :) [07:35] micheil: _ry: I'm not sure I like what you said about websockets being 10 lines of code in that yahoo talk. [07:35] Ori_P has joined the channel [07:35] micheil: _ry: but, I guess I've shown that. [07:37] mjr_: websockets are clearly more than 10 lines of code, but still not a LOT of code, and probably worth having in node if all the browsers adopt ws. [07:37] smtlaissezfaire has joined the channel [07:39] micheil: mjr_: they're getting bigger [07:39] micheil: mjr_: currently draft 75 is about 500 lines [07:39] micheil: (to be fully spec compliant, and do good event emittance) [07:39] mjr_: wow, that's more than I'd expect. [07:40] micheil: or, as fully spec compliant as you can be without writing the socket parser [07:40] micheil: for draft 76+, then it'll probably be about 1000-2000 lines, because you need to calculate various checksums and stuff [07:41] aaronblohowiak: jwm: you *can* have node-websocket-server play nice with other services [07:41] mjr_: even simple things seems to spiral out into a sea of complexity. [07:41] micheil: also, for speed and memory efficiency, I'd be implementing a custom linked-list store [07:41] kjeldahl has joined the channel [07:41] micheil: aaronblohowiak: hey. [07:42] micheil: aaronblohowiak: see the github message. [07:42] micheil: aaronblohowiak: that request event is actually stolen from node.js's http.js library [07:45] SamuraiJack has joined the channel [07:46] Tim_Smart: Woo my asset packager is now working as expected [07:46] Tim_Smart: Just need to add css support and I'll be happy [07:50] micheil: aaronblohowiak: let me know how node-websocket-server works out for you, one thing I'm currently aware of is the possible slowcase it may be causing (due to it having to using delete keyword to remove objects from a deeply nested array ) [08:04] margle has joined the channel [08:09] morgan has joined the channel [08:15] Tim_Smart has joined the channel [08:19] mitkok has joined the channel [08:19] Phazm: I am looping through a JSON object using for(key in json) -- I need to ensure that I do not have any duplicates. any ideas? Here's the relevant code: http://pastebin.com/ZJ72L1MA [08:19] zomgbie has joined the channel [08:19] Phazm: probably more of a javascript question than node [08:21] mjr_: Phazm: surely JSON.stringify will eliminate these duplicates for you, no? [08:22] mjr_: oh, nm, you mean duplicate "Users" values [08:22] CIA-77: node: 03Ryan Dahl 07master * r0de138a 10/ src/node_stdio.cc : improve test for stdio non-blockingness - [08:22] Phazm: yea -- I don't want both "0" and "2" to be sent, as they have the same name [08:22] mscdex: hmm [08:23] mjr_: Phazm: you need some sort of object to keep track of this as you work through the items. [08:23] Tim_Smart: eval: test [08:23] Tim_Smart: Hmm no eval bot here >.> [08:23] mscdex: :S [08:24] mjr_: There have been various eval bots here from time to time. [08:24] Tim_Smart: Phazm: You can use JSON.stringify to compare the strings [08:25] Tim_Smart: Which mjr_ pointed out [08:25] Phazm: Tim_Smart: This is a very dumbed down example, the real json has a lot more that is unique the the item, but I only care about the username [08:26] mscdex: we need a Set module like cakephp has :P [08:26] Phazm: so comparing '0' to '2' would show that they are different, but for my uses, they aren't [08:26] mjr_: Phazm: a simple way to approach this is to transform the results from JSON.stringify into some other object that will automatically resolve duplicates. [08:26] mscdex: like xpath for js objects [08:27] mjr_: You could loop through them in reverse if you want the first one in the JSON to win. [08:27] Phazm: don't care which ones wins [08:27] micheil: Phazm: checkin' [08:28] mscdex: maybe you can use Array.every [08:28] mscdex: i dunno [08:28] mscdex: or some [08:28] micheil: Phazm: you could possibly use a form of map/reduce, but if that's the exact data set, then you could be able to just cache the indexed / unique value [08:29] Tim_Smart: Phazm: http://pastie.org/970767 [08:29] mjr_: Then just do: var nodups = {}; jsonObj.forEach(function(v) { nodups[v.User.name] = true; }); [08:29] micheil: I'd recommend using Array.forEach over for(im) [08:29] micheil: or another form of iterator [08:29] mjr_: oh, but it's an object, not an array. [08:29] micheil: yeah, you know what I mean though [08:30] micheil: for(in) catches prototypes. [08:30] mjr_: Object.keys(jsonObj) [08:30] Phazm: Tim_Smart: giving it a shot, 1s [08:30] Tim_Smart: Object.keys(object).forEach(); [08:30] Tim_Smart: Is one other way [08:31] mjr_: yeah, that's what I'd do. [08:32] micheil: Tim_Smart: that. [08:38] micheil: mjr_: this should work: http://pastie.org/970773 [08:38] micheil: Phazm: rather ^ [08:38] Phazm: trying now :) [08:38] rra has joined the channel [08:39] mjr_: progressive new comma-first style! [08:39] micheil: yeah, slowly getting use to using comma-first style [08:39] TomY has joined the channel [08:39] Tim_Smart: Hmm, I prefer the more conventional comma suffixed [08:39] Phazm: i've been seeing that a lot lately -- what is the benefit? [08:40] micheil: Phazm: easier to spot when you miss a comma [08:40] micheil: plus it lines up nicely [08:40] mjr_: I was actually just reading this: http://inimino.org/~inimino/blog/javascript_whitespace [08:41] mjr_: And I'm still resisting it, but I find the ideas really interesting. [08:42] micheil: I still put it semi-colons everywhere, because I think it's safer to do that, should anything break, you don't get quite as big a cascade [08:42] micheil: theoretically, you can get away with no semi-colons, but yeah [08:44] mscdex: semicolons for life! [08:44] mAritz has joined the channel [08:45] micheil: I disagree with inimino on the curly braces, I think the traditional crockford way looks better. [08:45] micheil: (purely because I've had cases where I've accidentally not had a } meaning code breaks badly) [08:46] mAritz: the code style discussion? again? seriously? :( [08:46] micheil: mAritz: for sure. [08:47] mAritz: ok, i'll bite: why? [08:47] micheil: mAritz: It's a good general discussion topic, because everyone has their own way [08:47] micheil: plus it helps if you understand another persons coding style before forking their project to contribute a patch [08:48] mAritz: it's a good general discussion topic, if you don't want to come to any satisfactory conclusion and just need something to focus on, because everyone has their own way [08:48] mAritz: :P [08:48] Phazm: micheil: I must be using this wrong :) do I just: jsonObj = unique(jsonObj); ? [08:48] micheil: uhh.. Phazm you'd have to modify it. [08:48] Phazm: *gasp* [08:48] Phazm: ;) Alright, thanks [08:49] micheil: you want to be storing obj[key]["User"]["name"] [08:49] micheil: not obj[key] [08:49] micheil: Phazm: y'know, I _couldn't_ make it tooo easy for you. [08:49] micheil: ;P [08:50] Phazm: well, we'll have to agree to disagree on that point ;) [08:51] micheil: :P [08:53] Phazm: hrm :-/ [08:54] micheil: work or not work? [08:56] Phazm: seems to be reaaaaly close :-P [08:56] Phazm: I'm going to try for a couple more mins [08:56] micheil: heh, okay [08:56] micheil: (that was purely untested code.) [08:58] N` has joined the channel [08:58] Phazm: so I think the issue is the return result; -- result doesn't seem to be modified at all [08:59] Phazm: seems like only 'id' is modified [08:59] Phazm: via the push [09:00] derbumi has joined the channel [09:01] cataska has joined the channel [09:05] Phazm: result[key] = obj[key]; [09:05] Phazm: is that correct? [09:05] Phazm: after the push [09:07] Phazm: well, it is working, in any case :) [09:08] Phazm: thank you micheil, Tim_Smart, mjr_ and mscdex [09:09] mscdex: what did i do? lol [09:10] Phazm: you suggested array.every :) [09:10] mscdex: oh [09:10] mscdex: ha [09:14] botanicus has joined the channel [09:15] xla has joined the channel [09:22] Phazm: spoke too soon, not working quite right :) [09:23] Tim_Smart: I though watchFile worked on directories :/ [09:23] Tim_Smart: *thought [09:23] Phazm: it works on the test, due to the simple code -- but it's just rebuilding the object using only the name, which isn't all I need. Now I'm working on having it spit out the iterator (key) for the unique values, then I'll use those to loop through the original object [09:24] rnewson has joined the channel [09:25] Phazm: micheil: am I going about this the wrong way? Doesn't seem to be your intent [09:29] linusthiel has joined the channel [09:29] Phazm: wait, I think I got it :) [09:30] linusthiel: Hi, I have trouble getting utf-8 working correctly with node and express.js, and I wonder if anybody here have that working? [09:31] markwubben has joined the channel [09:33] bradleymeck has joined the channel [09:34] Phazm: it works! :) [09:34] Phazm: thanks again everyone [09:35] maushu has joined the channel [09:36] Tim_Smart: I need a equivalent of fs.watchDir that can pick up file changes >.> [09:36] Tim_Smart: And can pick up newly created files [09:36] micheil: Phazm: share the code. [09:37] _ry: Tim_Smart: watchFile should work [09:38] Tim_Smart: _ry: It doesn't pick up file changes >.< [09:38] micheil: _ry: how would watchDir work? [09:38] Tim_Smart: There is no watchDir atm [09:38] micheil: because on new file creation or change the timestamps wouldn't change on the directories [09:38] _ry: Tim_Smart: not in subdirs [09:38] Tim_Smart: It only triggered when I deleted the folder [09:39] Phazm: micheil: http://pastie.org/970832 [09:39] Phazm: probably don't need the obj[key] = [09:39] Tim_Smart: _ry: It is only one level deep: dir/files [09:39] micheil: Phazm: you shouldn't need line 14 [09:41] Phazm: yep. removed and all is still well [09:42] Tim_Smart: micheil: I guess you could poll fs.readdir [09:42] micheil: that'd be expensive. [09:42] Tim_Smart: yeah I second that [09:43] Tim_Smart: I might see if anything the stat changes after file creation [09:43] Tim_Smart: *in the stat [09:43] _ry: fs events = not easy [09:44] _ry: but i think you can be updated of new links in a dir form watchFile [09:45] Tim_Smart: Anyway, it is the last thing I need to add to a asset packager I'm working on [09:46] Tim_Smart: Just want to add the option to 'watch' for changes, and auto-update the packages [09:47] micheil: Tim_Smart: extra complexity that maybe [09:47] micheil: Tim_Smart: maybe just use a timeout cache? [09:48] Tim_Smart: Yeah I guess. The next best thing is just to install watchers on the files themselves, and not bother watching for new files [09:50] micheil: _ry: same strand, websockets = not easy ;P [09:50] rnewson: is there a way to suppress the Connection and Transfer-Encoding headers that writeHead always sends? I'm trying get expect/continue working but I can't emit the 100 header line on its own. [09:50] rnewson: and a means to flush the 100 header too. it appears the header isn't written to the client until some data is sent, which breaks expect/continue. [09:51] micheil: rnewson: probably not [09:56] rnewson: hm, agreed. sendHeaderLines seems to always send them. shame. [09:56] maushu: var port = parseInt('800' + n) [09:56] maushu: O_o [10:02] bradleymeck has joined the channel [10:07] CIA-77: node: 03Ryan Dahl 07master * r9514a4d 10/ (AUTHORS ChangeLog doc/api_header.html doc/index.html wscript): bump version - http://bit.ly/ckNq8w [10:16] ineation has joined the channel [10:19] Tim_Smart: http://github.com/Tim-Smart/node-asset http://github.com/Tim-Smart/node-yui-compressor http://github.com/Tim-Smart/node-closure [10:19] Tim_Smart: all in a days work [10:20] Ori_P has joined the channel [10:20] bradleymeck has joined the channel [10:26] mAritz: Tim_Smart: It watches and compiles/compresses/gzips .js/.css, is that correct? if so: good job. :) [10:27] Tim_Smart: Yeah. A few bugs I just found though :p [10:27] Tim_Smart: mAritz: It also does coffeescript :p [10:28] mAritz: yeah, i intentionally left that out. i'm not a fan of coffeescript :P [10:29] fermion has joined the channel [10:37] micheil: maushu: just do: 8000+n [10:37] micheil: that way you know you'll almost certainly get in the 800* range [10:38] micheil: also means you won't get things like 800999 [10:39] jan____ has joined the channel [10:40] mertimor has joined the channel [10:41] mAritz: wtf happened @github? what are all those tags? :D [10:41] jan____ has joined the channel [10:41] mscdex has joined the channel [10:42] jan____ has joined the channel [10:42] jan____ has joined the channel [10:47] jan____ has joined the channel [10:47] MattJ has joined the channel [10:48] micheil: mAritz: what tags? [10:57] bradleymeck has joined the channel [10:58] jan____ has joined the channel [11:02] maushu: micheil: http://github.com/visionmedia/monit.js [11:03] micheil: lost me there. [11:03] micheil: what's the thing with that? [11:03] Tim_Smart: I would prefer to use the normal monit [11:04] maushu: See the example. [11:06] micheil: maushu: are you monitoring a monitor? [11:06] MattJ: But who would monitor the monitor monitors? [11:07] mscdex: a monitor would monitor the monitor monitors [11:08] bmeck has joined the channel [11:09] maushu: Easy to fix that. [11:09] maushu: You have 3 monitors. [11:09] maushu: Monitor 1 monitors Monitor 2. [11:09] maushu: Monitor 2 monitors Monitor 3. [11:09] maushu: Monitor 3 monitors Monitor 1. [11:10] mscdex: CYCLE [11:11] mscdex: ahhh nothing like a fresh node install that's hot off the press ;-) [11:13] maushu: Until to explode 6 seconds later. [11:13] maushu: !so-last [11:13] StackNode: Latest Question: "how do i create a non-blocking asynchronous function in node.js?" by Richard. http://stackoverflow.com/questions/2878008 [11:13] maushu: !so-next [11:13] StackNode: Time left for the next fetch: 00:29:22 [11:14] mscdex: isn't that question old? [11:14] jan____ has joined the channel [11:17] jan____ has joined the channel [11:25] margle has joined the channel [11:26] margle: do some of you guys run node.js directly on port 80? Or is it always behind nginx or some other load balancer? [11:27] Tim_Smart: margle: Now that buffers have arrived, I guess you could run it on port 80 [11:27] Tim_Smart: it serves static content pretty wuick [11:27] Tim_Smart: quick [11:27] maushu: mscdex: It's the latest question. There aren't any new ones. [11:28] mscdex: maushu: which tags are you checking? [11:28] maushu: nodejs [11:28] margle: Tim_Smart: Does it buffer static content in memory? [11:28] Tim_Smart: totally up to you [11:28] margle: Tim_Smart: Oh, misunderstood that. [11:29] maushu: !so-next [11:29] StackNode: Time left for the next fetch: 00:14:01 [11:29] maushu: Drat! I'm going for lunch and I want to see if it shows anything new. [11:29] margle: maushu: what is that? [11:29] maushu: ...maybe I shoul've coded a !so-check or something. *sigh* [11:29] margle: Tim_Smart: can you think of a reason why you wouldn't want to run node.js on port 80? [11:30] maushu: margle, I noticed that many questions about node.js in stackoverflow aren't being answered. So I made a SO announcer. [11:30] margle: Tim_Smart: Even if you didn't use it to serve static media; say you had a cdn static files. [11:30] Tim_Smart: You would have to run as root? Nginx is probably a little more reliable at serving static content? [11:30] margle: maushu: that's rad. [11:31] maushu: I know, right! xD [11:31] margle: Tim_Smart: so - node.js on port 80; only dealing with serving html and nginx running on another server or domain serving static files... [11:32] margle: I suppose nginx can load balance? [11:32] margle: if you ever really needed that. [11:32] Tim_Smart: Yup [11:32] Tim_Smart: When web workers for node arrive and are stable, load balancing in node would be easy too [11:32] margle: Tim_Smart: incredible. [11:32] maushu: ...load balancing is already easy. [11:33] maushu: Just have multiple node http servers and a load balancer that redirects the connection to each one in turn. [11:33] Tim_Smart: Well, it would be easier [11:33] maushu: Specially now that you can have stream pumps. [11:34] maushu: Heck, you don't need to even parse the protocol, just redirect the stream. [11:35] margle: Busy watching Ryan Dahl's talk at Yahoo. [11:35] margle: maushu: I like how our nickname's are the same length. :P [11:40] phiggins has joined the channel [11:40] mscdex: oh neat, there's a json api for stackoverflow [11:44] jedschmidt has joined the channel [11:49] mAritz: maushu: why not just check http://stackoverflow.com/questions/tagged/node.js manually when you want to go to lunch? :D [11:51] bmeck has joined the channel [11:57] mAritz: wow... why does firefox allow this? window.onblur = function() {window.focus();}; [11:58] mscdex: hehe [11:58] mAritz: (allow as in you can't use any textboxes in that tab anymore like the location bar, the search bar and even text fields in firebug) [12:04] jan____ has joined the channel [12:06] jan____ has joined the channel [12:07] jan____ has joined the channel [12:15] ineation has joined the channel [12:19] N` has joined the channel [12:22] Dennus has joined the channel [12:24] kriszyp has joined the channel [12:24] micheil: hiya kriszyp [12:29] kriszyp: hi micheil [12:29] micheil: how's yourself ? [12:30] kriszyp: good, and how are you? [12:32] unomi has joined the channel [12:34] ineation has joined the channel [12:35] ncampbell has joined the channel [12:35] bradleymeck has joined the channel [12:39] micheil: kriszyp: not too bad [12:40] maushu: “Talking to strangers was really hard for me,” Lamo says. “I had to script it all in my head and act out normal behaviors in a very conscious way. Essentially, I had to learn how human beings act.” [12:40] maushu: Oh dear, this is not normal? [12:41] hellp has joined the channel [12:42] mscdex: what is that from? [12:43] KungFuHamster: http://www.wired.com/threatlevel/2010/05/lamo/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+wired27b+%28Blog+-+27B+Stroke+6+%28Threat+Level%29%29 [12:43] KungFuHamster: I had to google it [12:43] KungFuHamster: some dude with Asperger's [12:43] maushu: I thought I was shy but after reading this... [12:43] ncampbell: maushu: lol [12:43] mscdex: never heard of the guy [12:43] maushu: I do script my interactions. [12:43] ncampbell: aha [12:44] KungFuHamster: I have social anxiety but nothing like that guy [12:44] maushu: After said interaction I go back and try to see what I need to perfect and make it better. [12:44] ncampbell: maushu: everyone reflects on their interactions, and def. does so differently [12:45] maushu: Do they create a script tree based on conversation flow? [12:45] ncampbell: however, feeling like you should be scripting out 1 on 1 conversations and such that aren't interviews or special social type engagements is not what I would think is the norm [12:46] maushu: Drat. I know it! [12:46] ncampbell: maushu: I don't [12:46] maushu: *knew [12:46] ncampbell: I can't imagine that most people do [12:46] maushu: I script conversations while leaving lots of space for improvisation. [12:47] maushu: Like asking for a bus ticket. [12:47] gwoo has joined the channel [12:47] maushu: It's the way I am. [12:47] ncampbell: The act of scripting it out is probably not unique but it's also probably not what most people do. [12:47] KungFuHamster: there are some interactions like making a purchase that it's normal to try to prepare for [12:47] ncampbell: Whatever works best for you is what you should do [12:47] ncampbell: and TBH nobody should tell you otherwise [12:48] maushu: Doesn't work that well. [12:48] ncampbell: KungFuHamster: depends on the purchase...candybar-no, house-yes [12:48] KungFuHamster: hehe [12:48] KungFuHamster: any complex or important purchase [12:48] mscdex: a server to run node.js [12:49] maushu: See a hot girl, calculate probability of getting a date ... 0,2%. Result: Do not engage conversation. [12:49] maushu: Yeah, I'm also a pessimistic. [12:49] KungFuHamster: maushu: the hot girl calculation is something almost everyone does, heh [12:49] mscdex: chicks dig ssjs [12:49] maushu: mscdex: Good to know! [12:50] mscdex: and lolcats [12:50] KungFuHamster: you should feel comfortable enough with friends and family not to script it, though [12:50] maushu: *sigh* At least I have plenty of time to start my empire. [12:50] ncampbell: maushu: Why would you only talk to a girl if you had the probability of getting a date? [12:50] ncampbell: lol [12:50] ncampbell: empire eh? [12:50] maushu: ncampbell: It's the only result I have at the start. [12:51] KungFuHamster: ncampbell: because men and hot women can't just be friends [12:51] ncampbell: how about talking with? becoming friends with? [12:51] maushu: There isn't enough information to get more results. [12:51] ncampbell: KungFuHamster: wrong [12:51] ncampbell: o.0 [12:51] mscdex: i can look at a girl and tell if she's a RoR junky or not [12:51] ncampbell: my point is that it shouldn't come down to a calculation [12:51] maushu: Well, it does for my case. I'm a freak. Sue me. [12:52] ncampbell: do you calculate whether you should converse on irc? [12:52] maushu: Wait a second, while a calculate the tree for that question. [12:52] ncampbell: hahaha [12:52] mscdex: #hotbabes4tehlulz [12:53] ncampbell: mscdex: wait, is that actually a channel? [12:53] ncampbell: <.< [12:53] maushu: ncampbell: It is now. [12:53] mscdex: ftw! [12:53] ncampbell: rock [12:54] KungFuHamster: the trick is to find hot chicks that are into stuff you like so you can blow them away with your l33t sk1llz [12:54] maushu: ^ [12:54] maushu: Can't find any. [12:54] maushu: That would increase the result to at least 30%. [12:55] KungFuHamster: lukewarm chicks? [12:55] ncampbell: maushu: my point was only that you might miss out on meeting people or doing things if you only base your decisions on a calculation of risk...that said maybe we all have those calculations and the degrees of risk are what are different. [12:55] mscdex: who is luke warm? [12:55] felixge has joined the channel [12:55] felixge has joined the channel [12:56] maushu: felixge: I saw what you did there. [12:56] mscdex: heh [12:56] felixge: maushu: ? [12:56] KungFuHamster: I think most people use the equivalent of a Magic 8 Ball where maushu uses a calculator [12:56] maushu: user-11214q2.dsl.mindspring.com => user-11214q2.dsl.mindspring.com [12:56] felixge: maushu: ? [12:56] maushu: Drat it. [12:56] mscdex: heh [12:57] mAritz: he meant to say that we see that you switched to miranda :D [12:57] maushu: This web client thingy is not like the shell! [12:57] mAritz: or could've [12:57] ncb000gt: heh [12:57] maushu: SELECT IS COPY! [12:57] KungFuHamster: heh [12:57] ncb000gt: ~felixgeis@user-11214q2.dsl.mindspring.com => ~felixgeis@miranda/donor/theundefined [12:57] mAritz: i just today was happy that my tomcat server started in just 600000ms, so i copied the line from my terminal with ctrl+c... :( [12:58] ncb000gt: mAritz: hah [12:58] maushu: Thats 600 seconds. [12:58] KungFuHamster: 600 seconds? blazing [12:58] mAritz: yep, indeed [12:58] maushu: Like, 10 minutes. [12:58] felixge: I had that cloak for a long time [12:58] KungFuHamster: like, exactly 10 minutes [12:58] maushu: WHY ARE YOU USING IT?! [12:58] felixge: I'm not using miranda [12:58] KungFuHamster: tomcat and java can diaf [12:58] blowery: mAritz: i have a feeling you're using spring :) [12:58] mAritz: well, it wasn't exactly 600kms... more like 602k [12:58] ncb000gt: so that he can sword fight his other co-workers [12:59] maushu: == felixge [~felixgeis@miranda/donor/theundefined] has joined #Node.js [12:59] blowery: hah [12:59] mAritz: i don't know... i'm just the frontend guy *duck* [12:59] mscdex: chair jousting! [12:59] blowery: why arn't you working? "tomcat is starting" oh ok [12:59] maushu: !so-next [12:59] StackNode: Time left for the next fetch: 00:43:49 [12:59] mscdex: !so-last [12:59] StackNode: Latest Question: "node.js database" by Justin. http://stackoverflow.com/questions/2750673 [12:59] mscdex: woot [12:59] maushu: WHAT. [12:59] maushu: When did it change?! [12:59] mscdex: huhuhu [12:59] mscdex: get with the times [12:59] maushu: Oh wtf. [12:59] maushu: ACTION checks the logs. [13:00] mscdex: that's an old question actually, but with a new answer [13:00] mAritz: blowery: yeah, that's how i spend my mornings... and i was happy about the 600k because i just got more ram yesterday... before that i had to close everything else, just to start tomcat so it wouldn't start swapping everything and clog on disk IO :D [13:00] maushu: mscdex: Ah. [13:00] maushu: Wait! That's bad! [13:00] ncb000gt: mAritz: ouch [13:00] KungFuHamster: was this on a Commodore 64, pray tell? [13:01] maushu: mAritz: Don't you just love using Java? [13:01] KungFuHamster: ACTION puts a pillow over Java's face while it's sleeping. Shhh, just go to sleep.. [13:01] maushu: It doesn't matter that it's slow. It doesn't matter that it clogs everything... [13:01] mAritz: maushu: AOSIFPIAUGBDPIABUSDPIAUBSFBAUBSd [13:01] maushu: ...It's cross platform! [13:02] mscdex: maushu: are you using the json api to get the latest question? [13:02] mAritz: cross platform makes a whole lot of an argument for webserver development [13:02] ncb000gt: well, it is... [13:02] mAritz: :D [13:02] maushu: JAVA IS CROSS PLATFORM! That is all that matters. [13:02] maushu: mAritz: NIEN. [13:02] mAritz: NEIN? [13:02] maushu: mscdex: No. [13:02] mAritz: doch [13:02] KungFuHamster: ganou [13:03] maushu: zoot zoot [13:03] maushu: Reading about freemium and premium here: http://blog.yo.lk/en/2010/03/08/facts-and-figures-the-first-20-months-of-our-small-saas-start-up-going-for-premium-only-instead-of-freemium [13:04] ncb000gt: riot [13:04] maushu: I really wanted to do free(mium) hosting but why make some half a dozen users pay for all the others? [13:05] mscdex: maushu: latest with no upvoted answers: http://api.stackoverflow.com/0.8/questions/unanswered/?tagged=node.js&page=1&pagesize=1&comments=false&sort=newest [13:05] maushu: Besides, support for a large number of free user is madness. [13:05] jherdman has joined the channel [13:05] maushu: Unless I give support only to the paying users, that could work. [13:05] mscdex: maushu: latest, disregarding last answer time: http://api.stackoverflow.com/0.8/questions/tagged/node.js?page=1&pagesize=1&comments=false&sort=newest [13:05] ncb000gt: maushu: people will def pay for support [13:05] maushu: mscdex: Where did you get those? [13:06] mscdex: maushu: api.stackoverflow.com ;-) [13:06] maushu: mscdex: I mean documentation. [13:06] maushu: :p [13:06] mscdex: there's other GET parameters too [13:07] mscdex: oh hmmm [13:07] mscdex: here: http://api.stackoverflow.com/0.8/help [13:07] maushu: Now I find this. Great. [13:07] mscdex: heh [13:08] maushu: It's this one I want: http://api.stackoverflow.com/0.8/help/method?method=questions/tagged/{tags} [13:08] ncb000gt: Has anyone yet written a CMS for one of the web frameworks yet? [13:09] ncb000gt: with node of course. [13:09] maushu: fromdata is great. [13:09] maushu: *date [13:09] maushu: mscdex: All that work with XML ruined... because of you! [13:09] mscdex: :-D [13:10] N` has joined the channel [13:11] gabe_hollombe has joined the channel [13:11] ditesh|cassini has joined the channel [13:12] gabe_hollombe: I just asked this in #coffeescript but really this question belongs here. are any of you using anything to auto-run js unit tests when your source or spec files change? I was going to use a ruby Watchr script but I figure could go all js and use fs.watch, etc. [13:13] virtuo has joined the channel [13:16] maushu: gabe_hollombe: Well, there should be some file watchers somewhere... I've seen one for when you change stuff on a website... [13:21] quirkey has joined the channel [13:23] mnutt has joined the channel [13:24] airportyh has joined the channel [13:26] tmpvar has joined the channel [13:29] maushu: The unix timestamp is in seconds, correct? [13:29] bradleymeck has joined the channel [13:29] tmpvar: morning [13:30] gabe_hollombe: yep [13:30] gabe_hollombe: number of seconds since Jan 1 1970 UTC [13:31] felixge has joined the channel [13:32] mscdex: yep, what he said [13:35] texodus has joined the channel [13:38] maushu: Parsing response... ï¿ï¿½ï¿½`I�%&/m�J�J��tï¿ï¿½`$Ø@�������iG#)�*��eVe]f@�í [13:38] maushu: Somehow my bot just tapped into an alien connection. [13:42] ncb000gt: maushu: that's awesome! [13:42] ncb000gt: Tell them i said hi [13:42] maushu: Huh, does httpClient parse gzip responses? [13:42] maushu: ncb000gt: Just did. They replied something about anal probes. [13:43] maushu: I think we just got trolled. [13:43] ncb000gt: sexy time! [13:43] ncb000gt: err wait, what? [13:43] ncb000gt: o.0 [13:44] maushu: They also mentioned that 4chan was their creation to raise us the galactic level of trollness. [13:44] ncb000gt: heh [13:45] mscdex: i for one welcome our gzipping alien overlords [13:46] mnutt has joined the channel [13:47] ncb000gt: maushu: per a readme on the http_parser- "It does not decode the content-encoding (gzip)" [13:47] maushu: EPIC DRAT. [13:48] maushu: Urban dict: drat - 7 definitions - What cute people say when they are pissed off. [13:48] maushu: I'm so cuuute! :3 [13:49] ncb000gt: yea, in the deps/http_parser/http_parser.c file there are no references to gzip/inflate/deflate [13:50] ncb000gt: the only references to gzip i found were in the readme and in a couple tests [13:50] ncb000gt: but those were just "Accept-Encoding" headers for test cases [13:52] Ori_P_ has joined the channel [13:52] maushu: So, should I use something like http://github.com/egorich239/node-compress ? [13:54] airportyh has joined the channel [13:55] mjijackson has joined the channel [13:58] pgriess has joined the channel [13:59] ncb000gt: maushu: probably not a bad idea, though I haven't used it so I can't say how well it works. [14:00] Tim_Smart: maushu: I have been using gzip lately [14:00] Tim_Smart: I also made a asset packager [14:00] Tim_Smart: For javascript, css and coffeescript files [14:01] ac94 has joined the channel [14:02] maushu: I can't find a decompress example. [14:02] ditesh|cassini has joined the channel [14:02] ncb000gt: maushu: there is one at the bottom of the readme [14:02] maushu: GunzipStream? [14:03] ncb000gt: aye [14:03] maushu: ...what if I want to use Gzip()? :p [14:04] ncb000gt: scandle. [14:05] gf3 has joined the channel [14:06] pdelgallego has joined the channel [14:06] smtlaissezfaire has joined the channel [14:06] mAritz: http://www.kongregate.com/games/PleasingFungus/manufactoria [14:06] mAritz: can someone help me on the "put a green at the beginning and a yellow at the end"? i don't quite get how to do that :/ [14:07] mAritz: i somehow need a mechanism that puts a green and then somehow replicates the colors [14:08] mAritz: ohhh... maybe it's easier than i though [14:08] mAritz: t [14:09] mAritz: should've used a debugging duck from the start. would've helped :D [14:15] Ori_P has joined the channel [14:19] maushu: The cake is a lie is a lie. [14:19] Yuffster has joined the channel [14:22] KungFuHamster: mAritz: I'm confused by the Input operator... there's no instructions on these things [14:22] KungFuHamster: does it just let you create a test run? [14:24] kriszyp_ has joined the channel [14:27] siculars has joined the channel [14:27] maushu: Okay, the argument chunk from the event data is what? A string? A buffer? [14:28] maushu: I will try copy since typeof seems to return object which might mean it's a buffer. [14:29] mAritz: KungFuHamster: yes, you can create your own inputs, but the tests that are run when you press the play button are given by the level. [14:30] mAritz: i find the input creator not very useful, to be honest [14:31] KungFuHamster: it might save a little time if you want to test one specific set of inputs I guess [14:32] skampler has joined the channel [14:32] maushu: Holy drat! It worked! [14:32] maushu: ...guess what it says.. [14:32] maushu: "message": "A generic error has occurred on the server; developers have been notified." [14:32] Tim_Smart: Right 2.30am, night guys [14:32] maushu: ;_; [14:32] mAritz: Now I'm stuck on moving the last input to the first place and copying the rest [14:32] stepheneb has joined the channel [14:33] tmpvar has joined the channel [14:33] maushu: I think I broke stackoverflow api. [14:33] tmpvar: lol [14:34] maushu: IT WASN'T MEEEEEEE! [14:35] joshbuddy has joined the channel [14:39] batasrki has joined the channel [14:43] softdrink has joined the channel [14:44] bradleymeck has joined the channel [14:47] wilmoore has joined the channel [14:51] screen-x has joined the channel [14:52] smtlaissezfaire has joined the channel [14:54] Ori_P has joined the channel [14:56] thoolihan has joined the channel [14:58] cloudhead has joined the channel [14:58] maushu: http://9gag.com/photo/22165_540.jpg [14:59] botanicu_ has joined the channel [14:59] MattJ has joined the channel [14:59] felixge: ACTION hitting the road, going to lexington, ky [14:59] felixge: any node folks there? [15:00] gwoo: felixge: bourbon trail? [15:00] margle has joined the channel [15:00] felixge: gwoo: oh yeah [15:00] felixge: gwoo: wedding [15:00] KungFuHamster: maushu: I think that scenario would result in violent regurgitation [15:00] botanicus has joined the channel [15:00] gwoo: felixge: luckuy [15:00] felixge: gwoo: we start out with a tour of this: http://www.woodfordreserve.com/age.aspx?ReturnUrl=/Default.aspx [15:00] gwoo: i get to go to New Jersey for a wedding [15:00] felixge: the distillery [15:00] gwoo: felixge: grrrr [15:00] felixge: only gonna get blurry from that point on [15:00] felixge: :D [15:00] screen-x has joined the channel [15:01] felixge: gwoo: hah [15:01] felixge: gwoo: alright, I'm headed out, ttyl [15:01] gwoo: felixge: make sure you find the Bookers [15:01] gwoo: later! [15:01] unomi: http://www.google.com/ [15:01] unomi: awesome [15:02] unomi: obviously it should be powered by node.js and multiplayer [15:02] bradleymeck: anyone got slick running with jsdom on node somewhere? [15:03] tlrobinson_ has joined the channel [15:03] screen-x has joined the channel [15:04] TobiasFar has joined the channel [15:05] kevwil has joined the channel [15:06] xn-1L1a has joined the channel [15:06] kevwil has joined the channel [15:06] KungFuHamster: http://www.google.com/ pac man homage [15:07] KungFuHamster: playable [15:07] KungFuHamster: 2 player [15:09] bradleymeck: 2 player? [15:10] KungFuHamster: ASDF and cursors [15:10] KungFuHamster: hit Insert Coin [15:16] Ori_P has joined the channel [15:17] maushu: KungFuHamster: Where is the insert coin? [15:17] KungFuHamster: Feeling lucky? [15:18] batasrki: to the right of search [15:18] xn-1L1a_ has joined the channel [15:18] batasrki: you have to be on the classic home page [15:18] batasrki: not the personalized one [15:18] maushu: I didn't even read the button. xD [15:18] maushu: So used to it. [15:18] batasrki: for a minute, I thought insert coin WAS feeling lucky [15:19] batasrki: so I pressed fully expecting to perform a search [15:19] KungFuHamster: heh [15:19] batasrki: and then the "machine" lit up [15:21] maushu: Oh lolz. [15:23] KungFuHamster: yeah when I first went to the page I was like, oh nice, a pac man homage... and then I switched windows and was doing something else then... BLA BLOOP! WAKKA WAKKA WAKKA and I was like aahhhhH!! [15:23] KungFuHamster: ie, I was surprised [15:25] thoolihan has joined the channel [15:25] maushu: KungFuHamster: Oh double lolz. [15:26] KungFuHamster: my speakers were up a bit too [15:32] mikeal1 has joined the channel [15:34] softdrink: too dang cool. [15:40] xla has joined the channel [15:47] mertimor has joined the channel [15:51] sudoer has joined the channel [15:53] _announcer has joined the channel [15:54] maushu: !so-next [15:54] _announcer: Time left for the next fetch: 00:29:20 [15:54] maushu: !so-last [15:54] _announcer: I haven't yet received anything. Please try again later. [15:54] maushu: !so-check [15:54] _announcer: Sorry. Nothing new to announce. [15:54] maushu: Now lets see the twitter streaming api. [15:55] maushu: ...I should be working though. xD [15:56] botanicus has joined the channel [15:59] Aria has joined the channel [15:59] phiggins has joined the channel [16:03] derekcollison has joined the channel [16:03] derekcollison: anyone know how to force httpClient to 1.0? [16:03] fernmicro has joined the channel [16:04] derekcollison: I am using node v 0.195.. [16:04] kriszyp: can you use a buffer with http's response.write() ? [16:04] charlesjolley has joined the channel [16:22] phiggins has joined the channel [16:23] bpot has joined the channel [16:26] ncb000gt: kriszyp: you can write a buffer to a stream [16:26] ncb000gt: ServerResponse is a writable stream so you must be able to [16:26] ncb000gt: http://nodejs.org/api.html#writable-stream-32 [16:27] bpot_ has joined the channel [16:27] jedschmidt has joined the channel [16:28] bpot has joined the channel [16:29] richcollins has joined the channel [16:30] N` has joined the channel [16:34] maushu_ has joined the channel [16:34] maushu_: Note to self: Don't open twitter streaming in the browser. [16:34] steadicat has joined the channel [16:34] TomY has joined the channel [16:37] mitkok has joined the channel [16:37] gf3 has joined the channel [16:39] kennon has joined the channel [16:39] jedschmidt has left the channel [16:39] maushu_: !so-next [16:39] _announcer: Time left for the next fetch: 00:14:49 [16:39] maushu_: !so-last [16:39] _announcer: I haven't yet received anything. Please try again later. [16:40] rictic has joined the channel [16:43] scudco has joined the channel [16:44] unomi has joined the channel [16:44] voodootikigod has joined the channel [16:49] Phazm has joined the channel [16:59] samsonjs has joined the channel [17:05] dridge has joined the channel [17:08] derferman has joined the channel [17:09] V1 has joined the channel [17:10] jsj has joined the channel [17:12] mertimor has joined the channel [17:18] voodootikigod has joined the channel [17:20] JimBastard has joined the channel [17:21] qFox has joined the channel [17:27] ajpiano has joined the channel [17:27] isaacs has joined the channel [17:30] Ori_P has joined the channel [17:32] mikeal has joined the channel [17:35] SubtleGradient has joined the channel [17:46] aho has joined the channel [17:49] jan____ has joined the channel [17:54] jan____ has joined the channel [17:55] statim has joined the channel [17:55] devinus has joined the channel [17:56] voodoo2 has joined the channel [17:56] devinus: somebody help me name my JS linked list impl! [17:56] JimBastard: sup devinus [17:56] voodoo2: is there a reason fs.sendfile() does not show up in the api doc? [17:56] jan____ has joined the channel [17:57] devinus: JimBastard: hola [17:57] blowery: devinus: LinkedList ? [17:57] blowery: devinus: or George [17:57] devinus: blowery: ooo, why george ? [17:57] blowery: first thing that popped into my head [17:57] devinus: i like george [17:57] jan____ has joined the channel [17:58] statim: something thats interesting as far as scheduling/queues to me is setTimeout. the only problem is if you need to take the process down all timers would be lost. anyone know if there is a way or if it would even be possible to "marshal" somehow all/certain timers before shutdown so they could be put back in place when the process comes back? just a thought [18:00] JimBastard: timers are evil [18:01] WALoeIII has joined the channel [18:01] voodoo2: is there a reason fs.sendfile() does not show up in the api doc? [18:01] devinus: hrm [18:02] devinus: what's the most permissive software license out there while still providing just enough protection ? [18:02] blowery: define just enough [18:03] kkaefer: protection from what? [18:03] devinus: kkaefer: being sued for breaking your shit [18:03] devinus: blowery: like im not responsible for anything, just keep my copyright notice and this statement in here [18:03] blowery: MIT [18:03] kkaefer: or bsd [18:03] blowery: ya [18:03] blowery: either [18:04] jan____ has joined the channel [18:04] blowery: here's the MIT http://en.wikipedia.org/wiki/MIT_License [18:04] aconbere: I find the BSD wording a little more confusing than MIT [18:05] aconbere: so I generally go with MIT [18:05] stevendavie has joined the channel [18:05] aconbere: http://en.wikipedia.org/wiki/Permissive_free_software_licence [18:05] kkaefer: http://opensource.org/licenses/category has an extensive list [18:08] voodootikigod has joined the channel [18:12] JimBastard: sup voodootikigod [18:12] JimBastard: i actually work like a block away from pace >.< [18:14] JimBastard: k bye! [18:20] matthew_y has joined the channel [18:20] botanicus has joined the channel [18:20] voodootikigod has joined the channel [18:22] maushu has joined the channel [18:24] eyzn: from openbsd-misc: GPL is about the end user's freedom. BSD is about thedeveloper's freedom. [18:26] bradleymeck: is there a way to check if a file is the currently executing script ie. __filename == __main or somesuch? [18:30] JimBastard: bradleymeck: __dirname doesnt contain that does it? [18:30] JimBastard: i think i've seen the file name before in my debuggins [18:31] JimBastard: or maybe all my files are just index.js and i got the parent dir :-\ [18:31] bradleymeck: dirname is the directory of the main script filename is the filename of the main script, but i cant get the filename of the file the code is executing from, so if I require("a") how do i get the filename of "a" inside of a [18:33] matthew_y has joined the channel [18:34] JimBastard: it would be in process.env would it? [18:34] JimBastard: it wouldnt* [18:34] JimBastard: im not sure bradleymeck [18:34] JimBastard: maybe mailing list [18:34] gtoast has joined the channel [18:35] JimBastard: woah awesome tech video, http://video.about.com/wordprocessing/Word-Bullets-and-Numbers.htm [18:35] JimBastard: i learned something new today! [18:35] JimBastard: >.< [18:35] JimBastard: lol [18:36] DracoBlue has joined the channel [18:43] voxpelli-laptop has joined the channel [18:55] mjijackson has joined the channel [18:55] tmpvar has joined the channel [18:58] derferman has joined the channel [18:59] V1 has left the channel [19:05] vnguyen has joined the channel [19:05] pgriess: hey, anyone have recommendations for a javascript struct packing library? something that supports ntohl and friends would be ideal [19:05] mjr_ has joined the channel [19:05] pgriess: i've found 2 on the web, one of which is old and unmaintained, and the other of which has no documentation [19:06] vnguyen has joined the channel [19:07] stephenlb has joined the channel [19:10] saikat has joined the channel [19:11] icebox has joined the channel [19:11] JimBastard: whats up pgriess [19:11] JimBastard: can you link? [19:11] JimBastard: im working on a JS formatting / helper lib [19:11] JimBastard: i could add [19:11] JimBastard: if it made sense [19:12] pgriess: http://code.google.com/p/jspack/ [19:12] pgriess: (still looking for the other one, gimme a sec) [19:13] pgriess: http://github.com/kvz/phpjs/raw/master/functions/misc/pack.js [19:13] pgriess: i'm having a hard time believing that the latter works, as the codepaths for treating unsigned long in host-byte-order is the same as the code for packing into network byte order [19:14] pgriess: interestingly, there is some nascent support for unpacking in node's very own Buffer class [19:14] pgriess: but nobody seems to use it [19:14] pgriess: and there is no packing support [19:16] DracoBlue has joined the channel [19:16] ryan[WIN] has joined the channel [19:17] mies has joined the channel [19:17] kevwil has joined the channel [19:18] aconbere: ACTION grumbles [19:18] aconbere: isaacs: I posted a follow up to your email on package managers [19:19] aconbere: I'm interested in defining... a standard lib module for installing packages. Not package management [19:19] aconbere: ist there a place to abstract the kind of work you've already done on taking packages with a package.json file [19:19] derferman has joined the channel [19:19] aconbere: and standardizing that? [19:19] aconbere: leaving off the arguments about whose package manager is best etc. [19:20] aconbere: basically just saying... "node can at the /least/ install packages this way" [19:20] gtoast: Does anyone know where I can find the documentation for a function named halt()? I'm discovering express and node and I don't know where to look for it. [19:21] kriszyp: aconbere: have you looked at nodules? [19:21] kriszyp: not sure if that fits what you are after... [19:21] maushu: Woot! I think I'm handling the twitter streaming well! [19:22] maushu: !so-last [19:22] _announcer: I haven't yet received anything. Please try again later. [19:22] JimBastard: lol +1 for the mailing list [19:22] maushu: Damn you! Node.js needs to get more famous so that I might enjoy the results of my work! [19:22] aconbere: kriszyp: I read a little bit about it today after the email thread [19:22] JimBastard: thanks pgriess , bookmarked [19:23] aconbere: kriszyp: but yeah... I mean I think that's the gist.. I mentioned it in my emails :) [19:23] kriszyp: aconbere: sorry, just looking at the thread [19:23] kriszyp: I see that was already covered :) [19:24] kriszyp: I am on daily digest, so someimtes a little bit behind on things [19:24] aconbere: ahhh [19:24] aconbere: yeah I always have a hard time following what's actually happening in daily digests [19:24] aconbere: I just filter everything to a label and check irregularly :) [19:25] kriszyp: heh, yeah, irregularity does have its advantages :) [19:25] aconbere: so ... I mean we have two basic approaches right? [19:25] aconbere: we have the kiwi (like gems) style [19:25] aconbere: where you overwrite the module loader [19:25] aconbere: to provide functionality [19:26] aconbere: and we have NPM / Nodule style [19:26] aconbere: which attempt to install given a package.js file [19:26] aconbere: I don't know what Nodule does with a package once it has it :) [19:27] aconbere: I know NPM puts the contents in nice little Node specific spots so that it's on the require path [19:27] aconbere: I think targeting a bare minimum to install packages out of the box is the right idea, and making that api accessible and programable is a laudable goal [19:28] kriszyp: I think isaacs was saying that Nodules and NPM are actually on the opposite end of the spectrum [19:28] mAritz: can someone help me in lvl 17? :D (http://www.kongregate.com/games/PleasingFungus/manufactoria) [19:28] aconbere: but he's talking about Managers [19:28] kriszyp: and actually isaacs stated the situation very well [19:28] aconbere: I don't think that's the right thing to argue about [19:29] aconbere: if all of our managers install packages the same way, then we don't care about which manager you use [19:29] kriszyp: yeah, and I think he correctly identified nodules as not-really-a-package-manager [19:29] kriszyp: but something that bypasses package installation together [19:30] kjeldahl_: What's the preferred way to suggest patches to node or one of it's libraries? Fork on github and point to it? [19:30] aconbere: ACTION nods [19:30] aconbere: <- not really familiar with nodule [19:30] keeto has joined the channel [19:30] aconbere: I just think we should abstract the common patterns, codify them in the stdlib, and make it so that nobody cares what package manager you use [19:31] aconbere: they all work on top of [19:31] aconbere: the package module :) [19:31] aconbere: or whatever [19:32] keeto_ has joined the channel [19:33] Aria: aconbere, in your mind, would the stdlib be a package? Or a set of them? [19:34] aconbere: I wouldn't care so much, if Node natively could install a package, and the package tools were included in Node. Then the rest of the stdlib might as well be a package. [19:36] Aria: (It could be a package that the node install process includes) [19:36] aconbere: right [19:36] brapse has joined the channel [19:37] Aria: The problem I see with a native installation method is that it tends to supersede system-specific ones -- and yet will never have the coverage of those systems. So you end up with a fight if you don't do it right. [19:39] Aria: (though if package installs are "untar here", they play nice) [19:40] Aria: (But if you're dealing with metadata databases and downloads and other stuff as part of the core set of features, you fail.) [19:40] bmizerany has joined the channel [19:41] aconbere: either way I think the arguements you're making [19:41] aconbere: are the ones we should be having [19:41] aconbere: we should be asking... "how can we abstract a method of installing packages generally" [19:41] JimBastard: json.package [19:42] Aria: Is abstraction the right answer? [19:42] aconbere: JimBastard: right, so if that's the answer, then I think that we should be working on the bare minimum necessary to install a package.json package. [19:42] Aria: (That leads down a long road to complicated APIs taht the next thing someone's package manager brings to the table breaks) [19:42] Aria: What makes a package.json file a package? [19:42] aconbere: in a module that NPM, or Kiwi, or whatever can leverage [19:42] JimBastard: i think that marak guy made the best point on the mailing list [19:42] JimBastard: we should listen to him [19:43] JimBastard: he seems to know whats up [19:43] isaacs: aconbere: just got back from lunch. [19:43] aconbere: :) [19:43] aconbere: sounds like pacific time [19:43] isaacs: aconbere: indeed. so, re: having a "standard" way of installing things with package.json, i think node already has that. it's called "put your program in the path" [19:43] isaacs: aconbere: you can use cp or ln for that. [19:44] rtomayko has joined the channel [19:44] isaacs: aconbere: i'd really like to see node remain completely agnostic as to package.json or any of the other stuff, just as the linux kernel doesn't care whether you use rpm or apt [19:45] technoweenie has joined the channel [19:45] isaacs: aconbere: node's stdlib is closer to c's stdlib.h than Java's JVM libraries. [19:45] aconbere: I think what your argueing for will make Node much more difficult to adopt [19:45] isaacs: right, but i mean, the same could be said for linux. only uber haxx0rz actually monkey around with the kernel directly or build their own distros. [19:45] aconbere: why not compromise [19:45] aconbere: and have a bare Node [19:45] aconbere: and a Node that knows a little bit [19:46] isaacs: well, one is node, and the other is some other thing that uses node as a component. [19:46] tlrobinson__ has joined the channel [19:46] aconbere: sure [19:46] isaacs: i think nave and nvm are good first steps in that direction. [19:46] aconbere: I buy that, but who are we imaging is going to be going around distributing Nodes? [19:46] aconbere: where is the demand for ... 15 different flavours of Node vms? [19:47] isaacs: i dunno about 15. [19:47] aconbere: :) [19:47] aconbere: I'm just asking [19:47] aconbere: who is doing the packaging? [19:47] isaacs: sure [19:47] isaacs: well, i actually explored building a node opensuse appliance that could be plopped on virtualbox or xen [19:47] isaacs: it worked alright, but node was changing too fast, and this was back in the 0.0.x days [19:48] isaacs: also, you don't have to have a whole vm, necessarily. you could probably extend nave or nvm to include a package manager and a startup program, or something. [19:48] isaacs: i mean, really, it's a blank canvas. [19:49] aconbere: I just think that for the ease of adoption [19:49] aconbere: your best bet is doing a little of both right now [19:49] aconbere: I think that... keeping a kernel [19:49] aconbere: that is easy to maintain and work on [19:49] aconbere: buko awesome [19:49] maushu: I can't seem to find a directly link for a tweet. [19:49] isaacs: right now, i think having a somewhat high barrier to entry isn't so bad. it's not stable or very friendly to newbies yet. [19:49] derferman has joined the channel [19:49] aconbere: but that the reality of our current users is they expect some features [19:50] aconbere: :) [19:50] aconbere: so if we want to go the distribution route [19:50] aconbere: then we should be the first distribution [19:50] isaacs: it'd be cool to have something that took you from zero to running a site on fab or express with a few config files and a shell script. [19:50] aconbere: which brings us /back/ to the question of installing packages :) [19:50] isaacs: with a known version of node and a packager already set up and ready to go [19:51] isaacs: for that thing, you'd install it with apt or whatever. [19:51] isaacs: sudo apt-get install easy-node-site [19:52] polo has joined the channel [19:52] isaacs: micheil: (way scrollback) i disagree with inimino on that point as well. relevant tokens should be on the left. putting } on the right of a line is dangerously easy to overlook when it's missing. [19:52] JimBastard: [15:48] when github goes down at 4am i automatically blame JimBastard [19:52] JimBastard: :-D [19:53] devinus: HAI EVERYBODY [19:53] devinus: http://github.com/devinus/winked/blob/master/lib/winked.js [19:53] devinus: ^.^ [19:53] JimBastard: sup [19:53] technoweenie: ha [19:53] MattJ: You are mad [19:53] JimBastard: how is a LL different from an associative array? devinus [19:53] JimBastard: im a bit slow [19:55] voodootikigod has joined the channel [19:55] aconbere: JimBastard: well.. JS arrays are sparse [19:55] JimBastard: is this like a lazy versus eager thing? [19:56] aconbere: a JS array maps relatively closely to a C array (someone correct me if I'm wrong). It's related to a chunk of memory. [19:56] aconbere: if you for instance do [19:56] aconbere: var a = []; [19:56] isaacs: aconbere: yeah, it's not quite like that. [19:56] aconbere: hah [19:56] aconbere: damn [19:56] devinus: JimBastard: you can impl assoc array with a few diff algos [19:56] isaacs: aconbere: a js array is an object with numeric keys, a few helper methods, and a "length" getter. [19:57] isaacs: aconbere: most interpreters do optimize arrays somewhat, since they're a known class that's used a lot. [19:57] aconbere: ACTION bowes out [19:57] devinus: JimBastard: so it could be diff in a variety of ways depending on underlying impl [19:57] JimBastard: whats the value add? [19:57] isaacs: there is no such thing as an "associative array" in javascript. there are objects, and there are arrays, which are a specific sort of object. [19:58] isaacs: for instance: a = []; a["foo"] = "bar"; a.length // 0, not 1 [19:58] JimBastard: isaacs: is an array of objects not an associative array? [19:58] JimBastard: [{},{},{},{}] [19:58] devinus: JimBastard: assoc is foo['bar'] = 'baz' [19:58] isaacs: JimBastard: an associative array is like this sort of thing in php: array("foo" => "bar") [19:58] maushu: Anyone knows how do I translate the -u option in curl to node.js http client? [19:58] JimBastard: ohhh [19:58] isaacs: maushu: what's -u? [19:58] maushu: username and password [19:58] tlrobinson_ has joined the channel [19:59] maushu: No idea how that works though. Not enough info. [19:59] mde: A JS Object essentially is an associative array. [19:59] maushu: http://curl.haxx.se/docs/manpage.html#-u--user [19:59] isaacs: maushu: you need to base64 encode and then attach it to the "Authorization" header. [19:59] aconbere: doesn't mikeal's request do a nice easy basic auth? [19:59] maushu: isaacs, ah. That might be it. [19:59] isaacs: maushu: yeah, use mikeal's "request" util [19:59] maushu: ...I will do it myself! [19:59] maushu: xD [19:59] mde: An associative array is just a collection of values where each value has a key. [20:00] DracoBlue: isaacs: kudos for the package managers post on the mailinglist [20:00] maushu: Let's see mikeal's request. [20:00] aconbere: how are associative arrays implimented, in my head that's just an array of two tupples [20:00] TobiasFar has joined the channel [20:00] inimino: isaacs: (re syntax) the tradeoff is between readability (of the flow of the code) and catching syntax errors [20:00] aconbere: [(Key, Value)] [20:01] inimino: aconbere: you mean objects, or Arrays? [20:01] mde: Another word for associative array is dictionary. [20:01] isaacs: aconbere: dig through v8. it's not terribly far off from that. but don't say "associative array". in js, they're called "objects" [20:01] mde: Right, exactly. :) [20:01] inimino: "associative array" is PHP-speak :) [20:02] isaacs: and in php, there's a difference between array("foo"=>"bar") and $f = new stdObject; $f->foo = "bar"; [20:02] mikeal: this is one of those funny javascript things [20:02] mikeal: a ton of languages don't have hashes [20:02] aconbere: so I mean [20:02] mikeal: javascript only has hashes [20:02] mikeal: it doesn't have arrays :) [20:02] mde: mikeal: Objects. :) [20:02] isaacs: mikeal: well, actually, arrays ARE special. [20:02] inimino: well, it has arrays [20:02] isaacs: they have truly numeric keys. [20:02] mikeal: barely [20:02] aconbere: These are actually different' data structures, for instance in Haskell you would have a Map which is a hash, and an sort of associative array [(Key, Value)] [20:02] aconbere: they have different properties [20:03] inimino: in terms of implementation, they are "real" arrays, in terms of specification, they are just objects [20:03] mikeal: still, removing an item doesn't change the length unless you use a special method [20:03] aconbere: it's not everyone elses fault that all dictonaries are the same in most dynamic languages :) [20:03] broofa has joined the channel [20:03] inimino: aconbere: I'd call that an associative list [20:03] aconbere: inimino: fair enough :) [20:03] aconbere: (especially since it's a list and not an array) [20:03] mikeal: var x = ['asdf','asdf'] ; delete x[0]; x.length === 2 [20:03] isaacs: mikeal: oh, yeah, huh [20:03] isaacs: interestign [20:03] isaacs: even if you delete the last item [20:03] mikeal: actually [20:04] mikeal: i think the last item will change it [20:04] aconbere: while we're talking implimentations [20:04] mikeal: i think .length is just the highest key + 1 [20:04] isaacs: mikeal: node> f = [1,2]; delete f[1]; f.length [20:04] isaacs: 2 [20:04] inimino: js> a=[0,1]; delete(a[1]; a.length [20:04] gbot2: inimino: Error: SyntaxError: missing ) in parenthetical: a=[0,1]; delete(a[1]; a.length ....................^ [20:04] inimino: gah [20:04] aconbere: ACTION wonders ahout the performance of array slices [20:04] inimino: js> a=[0,1]; delete a[1]; a.length [20:04] gbot2: inimino: 2 [20:04] isaacs: js> f = [1,2]; delete f[1]; f.length [20:04] gbot2: isaacs: 2 [20:04] mikeal: wow [20:04] tmpvar has joined the channel [20:05] isaacs: ACTION is owed a beer by inimino [20:05] mikeal: isaacs: f.push('a') [20:05] mde: mikeal: No, the slot remains even if ... yeah. :) [20:05] broofa: Hey anyone, Is there a way to display the current stack trace? E.g. something like, "sys.debug(sys.stacktrace())" [20:05] inimino: isaacs: noted :) [20:05] aconbere: yay for sparse arrays! [20:05] mikeal: does it go in to slot [1] or [2] [20:05] isaacs: mikeal: it goes to slot 2 [20:05] aconbere: you folks need to slice more [20:05] mde: Haha [20:05] isaacs: yeah, splice, slice, push, pop, shift, unshift [20:05] JimBastard: aye [20:05] mikeal: i slice plenty [20:05] isaacs: you shoudl'nt have to delete from an array. [20:05] mikeal: because i suck at regex [20:06] aconbere: ^ the tools to treat arrays like lists [20:06] mde: isaacs: Unless you're working with an on-purpose sparse array. [20:06] broofa: I have a function that's getting called more times than it should, and I need to figure out where it's getting called from. [20:06] aconbere: so wait... if I'm using an array [20:06] aconbere: and it's kind of like an object [20:07] aconbere: are my indexes hashed before access? [20:07] broofa: So looking for something "sys.stacktrace()"-ish. [20:07] inimino: aconbere: no [20:07] aconbere: phew [20:07] mikeal: i have a real use case for them [20:07] mikeal: keeping a by-sequence index for a key-value store :) [20:07] inimino: aconbere: but from the perspective of the spec, it is an object... so keys are treated as strings [20:08] mikeal: when you update a key you need to remove the previous sequence index and push a new on to the end of the array, but the length should stay the same [20:08] inimino: js> a=[0,1]; a['0'] [20:08] gbot2: inimino: 0 [20:09] mde: And if you do (for p in myArray), the key will be a string. [20:09] inimino: indeed [20:09] mikeal: js> function () {return "crockford"}() [20:09] gbot2: mikeal: Error: SyntaxError: syntax error: function () {return "crockford"}() .................................^ [20:09] inimino: keys can only be strings (except in practice) [20:09] mikeal: var x = function () {return "crockford"}; x(); [20:09] charlesjolley has joined the channel [20:09] inimino: Crockford disapproves of your syntax [20:09] mikeal: js>var x = function () {return "crockford"}; x(); [20:09] mde: Nicely said. [20:09] mikeal: is crockbot down? [20:10] inimino: I haven't seen it in ... a long time [20:10] mikeal: JimBastard: crockbot? [20:10] inimino: JimBastard: ↑ [20:10] JimBastard: yeah [20:10] JimBastard: i can get him back up [20:10] JimBastard: i kinda forgot [20:10] JimBastard: i think Jerk needed an update [20:10] JimBastard: let me ssh in now.... [20:11] inimino: js> 0, function(){return "Crockford"}() [20:11] gbot2: inimino: "Crockford" [20:12] stephenlb: heh [20:12] blowery: js> function() { return "; drop table students;" }(); [20:12] gbot2: blowery: Error: SyntaxError: syntax error: function() { return "; drop table students;" }(); ...............................................^ [20:12] stephenlb: js> var f=[1,2,3];f[100]=1;({'f.length' : f.length, 'f[50]' : f[50] }) // unexpected /-: [20:13] blowery: js> 0, function() { return "; drop table students;" }(); [20:13] gbot2: blowery: "; drop table students;" [20:13] KungFuHamster: little Tommy Tables [20:13] _ry: js> while(true) {;} [20:13] gbot2: _ry: Timeout. [20:13] stephenlb: _ry: heh [20:13] inimino: ^.^ [20:14] JimBastard: hrmm [20:14] blowery: js> setInterval(function() { while(true) {;} }) [20:14] gbot2: blowery: Error: ReferenceError: setInterval is not defined [20:14] isaacs: _ry: js programmers are jerks. welcome to the club. [20:14] _ry: is gbot2 a node bot? [20:15] voxpelli-laptop has joined the channel [20:15] _ry: gbot2: help [20:16] inimino: _ry: no, spidermonkey [20:16] blowery: js> __dirname [20:16] gbot2: blowery: Error: ReferenceError: __dirname is not defined [20:16] _ry: :/ [20:16] inimino: `source [20:16] gbot2: My source code is available at http://github.com/JosephPecoraro/jsircbot [20:16] _ry: why not node? [20:16] inimino: I didn't write it, I just host it [20:17] JimBastard: ugh wtf crockbot source [20:17] inimino: if somebody writes a node one that's easy to set up and reasonably secure I'll host it [20:17] JimBastard: update already [20:17] JimBastard: there is a v8 one inimino [20:18] inimino: this one would actually support jsc, v8, and rhino, if I had standalone binaries installed [20:20] gamerx has joined the channel [20:20] gamerx: hey, how can i do a ajax request form in the server? [20:20] JimBastard: ugh mikeal [20:20] gamerx: eg, make the server request and return the html of an external page [20:20] JimBastard: can you fix crockbot [20:21] JimBastard: lolwut gamerx [20:21] gamerx: ? [20:21] gamerx: read? [20:21] mikeal: what is broken? [20:21] JimBastard: mikeal: jerk doesnt seem to be packaged correctly [20:21] JimBastard: and submodule update is clueless [20:21] JimBastard: gamerx: i only speak english and bad english, you wanna try again in either of those [20:22] JimBastard: :-) [20:22] gamerx: ahh, i want the server to request a page from another site [20:22] maushu: _ry, should I also show tweet responses? [20:22] JimBastard: use the http.client module [20:22] JimBastard: its in the docs [20:22] gamerx: hmm [20:22] JimBastard: also, thats not ajax [20:22] gamerx: ill lookie [20:22] JimBastard: its just http [20:22] gamerx: i know, i was just wanting to know what method to use [20:23] JimBastard: if you knew, you wouldnt have asked about AJAX [20:23] mikeal: Jerk is really out of date [20:23] JimBastard: mikeal: i thought i saw some updates [20:23] _ry: maushu: yes [20:23] JimBastard: i just cleared my local, but it looked like i attempted to patch it and gave up [20:23] JimBastard: i think process.mixin is the only thing missing? [20:23] mikeal: i just did a fresh pull and it's not 0.1.9x compat yet [20:24] mikeal: uses tcp and mixin [20:24] JimBastard: well, i cant even get Jerk packaged with crock [20:24] JimBastard: the submodule is borked, or its not packaged in there [20:24] joshbuddy has joined the channel [20:24] JimBastard: tcp and mixin are easy fixes [20:25] joshbuddy_ has joined the channel [20:25] mikeal: how do i fix mixin uses? [20:26] mikeal: i never use mixin [20:27] JimBastard: mikeal: i use proto [20:27] JimBastard: its really easy [20:27] JimBastard: one sec [20:27] _ry: mikeal: just copy it into your code http://github.com/ry/node-amqp/blob/1427813514944c8d235245f931d176d707d86b17/amqp.js#L8-63 [20:27] JimBastard: http://github.com/creationix/proto [20:27] _ry: mikeal: :%s/\/net/g [20:28] _ry: should work, probably [20:28] JimBastard: ACTION bows before our non-blocking metal lord [20:28] voodootikigod_ has joined the channel [20:28] mikeal: ok [20:29] mikeal: now it's just straight up broken [20:29] _ry: i hope i can get 0.2 out before 0.1.100 [20:29] inimino: ^.^ [20:29] _ry: multiple digits in versions really confuse people [20:30] mikeal: i'm giving up on Jerk [20:30] inimino: you could always jump ahead again to 0.1.990 ... [20:30] mikeal: it wants a dep that isn't even there [20:30] JimBastard: ? [20:30] JimBastard: is it really that bad mikeal [20:30] mikeal: i just have no idea what the hell is going on [20:30] JimBastard: i remember giving up, but it didnt seem too bad [20:30] JimBastard: whats the error [20:31] joshbuddy_ has joined the channel [20:31] mikeal: because it wants a module that isn't checked in [20:31] mikeal: Error: Cannot find module '../vendor/utools/lib/utools'' [20:31] DracoBlue: _ry: you could try 0.1.100, 0.1.101, 0.1.110, 0.1.111 for the binary fuzz :D [20:31] mikeal: there is no utools in vendor [20:31] JimBastard: is that in the repo? [20:31] JimBastard: did you update? [20:31] mikeal: whoever was working on it last forgot to check in that dep [20:31] JimBastard: git submodule update --init [20:31] mikeal: yes [20:31] JimBastard: file an issue [20:32] mikeal: utools is still just an empty dir [20:32] devinus: gai guyz [20:32] devinus: http://devintorres.com/post/619964483/a-javascript-lru-least-recently-used-cache [20:32] devinus: LRU cache 4 u [20:32] charlesjolley has joined the channel [20:32] mikeal: ah, FINALLY [20:34] Aria has left the channel [20:39] mikeal: JimBastard: this is way out of date [20:39] mikeal: Jerk is out of date with it's own deps [20:39] JimBastard: ugh [20:40] JimBastard: that sucks [20:40] JimBastard: just open up an issue and if its not resolved in the next day i'll send a nasty message [20:40] JimBastard: or a friendly one with homophobic overtones [20:40] JimBastard: either one usually works [20:42] mikeal: i'm way too lazy to do that [20:42] JimBastard: dude [20:42] JimBastard: just copy paste the message [20:42] JimBastard: you said here [20:44] mikeal: i don't even know where the Jerk repo is [20:44] JimBastard: how you gonna be too lazy to open a support issues on a project your project deps on [20:44] JimBastard: http://github.com/gf3/Jerk [20:44] mikeal: also, i don't know how helpful a bug is that says [20:44] JimBastard: watch this [20:44] mikeal: "you are noticably out of date with node and most of your own deps" [20:44] gf3: yo [20:44] mikeal: werd [20:44] JimBastard: http://github.com/gf3/Jerk/issues/issue/2 [20:44] JimBastard: see [20:44] mikeal: Jerk is broke? [20:45] JimBastard: easy as pie [20:45] JimBastard: lol [20:45] JimBastard: best issue ever gf3 [20:45] JimBastard: :-) [20:45] CIA-77: node: 03Mikeal Rogers 07master * rfe3d8f2 10/ (doc/api.markdown lib/assert.js test/simple/test-assert.js): Add assert.ifError - http://bit.ly/ahVCvO [20:45] TobiasFar has joined the channel [20:45] devinus: wtf is this [20:45] devinus: https://gist.github.com/3b575228ad17744de529 [20:46] mikeal: sweet [20:46] gf3: mikeal: are you sure you did your submodule init/update? [20:46] mikeal: yes [20:46] gf3: I'm going to hardcode the dependencies, maybe tonight [20:46] mikeal: the IRC module changed a lot [20:46] gf3: submodules are a PITA [20:46] _ry: devinus: not catching the 'error' function [20:46] JimBastard: gf3: use fake submodules [20:46] mikeal: and node changed quite a bit [20:46] broofa has left the channel [20:47] JimBastard: gf3 http://debuggable.com/posts/git-fake-submodules:4b563ee4-f3cc-4061-967e-0e48cbdd56cb [20:47] _ry: devinus: er, event [20:47] JimBastard: submodules are a huge PITA [20:47] gf3: mikeal: they've all been tested with the latest node [20:47] mikeal: Jerk wasn't working with latest node [20:47] sechrist has joined the channel [20:47] aurynn has joined the channel [20:48] JimBastard: i tried cloning the crockbot repo mikeal and Jerk wasn't packaged correctly with your project [20:48] JimBastard: i havent tried getting Jerk directly [20:48] JimBastard: so im assuming you found that issue on your own [20:48] mikeal: it's a submodule [20:48] aurynn: hi, all - is there a node console like the python console? [20:48] JimBastard: yeah, its not setup [20:48] JimBastard: i told you [20:48] mikeal: what is the issue? [20:48] mikeal: i didn't actually package it [20:48] JimBastard: it wont update [20:48] JimBastard: i told you this >.< [20:48] gf3: uh ohhhh [20:49] mikeal: i just watched it update [20:49] JimBastard: you gonna make me clone again [20:49] JimBastard: ugh [20:49] mikeal: forget it [20:49] mikeal: i need to do other stuff today [20:49] mikeal: i'm not going to get around to fixing the rest of this [20:49] mikeal: when i do fix it I won't be using this submodule crap [20:50] mikeal: gf3: can you use npm and push Jerk to the package registry [20:50] mikeal: then i can just depend on a released version [20:50] gf3: mikeal: I'll check out npm, haven't played with it yet [20:50] mikeal: cool, i'm gonna run [20:50] JimBastard: LOL AWESOME [20:50] JimBastard: github.com[0: 207.97.227.239]: errno=Connection timed out fatal: unable to connect a socket (Connection timed out) [20:50] JimBastard: github down [20:50] icebox has joined the channel [20:51] aconbere: aurynn: node-repl [20:51] aurynn: ah-hah. Awesome, thank you. [20:51] aconbere: np :) [20:51] aconbere: aurynn: you almost got lost in the sea of chatter :) [20:52] aurynn: :) It happens. [20:52] JimBastard: back to work [20:52] rra has joined the channel [20:52] aurynn: IS there a lib to do conversion from C datatypes easily, as well? [20:53] maushu: Does the http client close the connection after a while? [20:54] temp02 has joined the channel [20:54] maushu: Or does it keep going if it receives data from time to time? [20:57] icebox: Hello... When I export a variable in a module (foo.js) I write, for instance, at the end of the module, "exports.var = myvar". Is it possible defining the export outside the module (foo.js)? [20:58] sechrist: my god the pacman on google is so annoying [21:00] isaacs: icebox: not sure what you mean.... [21:01] markwubben has joined the channel [21:01] _ry: maushu: i think it has a 2 second timeout [21:01] maushu: Huh, thats impossible. [21:01] _ry: idle timeout [21:01] maushu: I've been running tests and they last much more than 2 seconds. [21:01] tlrobinson_ has joined the channel [21:01] maushu: Even when not receiving anything. [21:01] _ry: maybe not, acutally [21:02] _ry: client.setTimeout(2000) <-- that would do it [21:02] _ry: oh 2 minute i meant [21:02] maushu: Oh, thats fine. Twitter sends newlines "keep-alives" (as they call them) in less than 2 minutes. [21:02] jwm: the pacman on google is awesome [21:02] icebox: isaacs: I have a module foo.js; inside this module I have a var I want to export: I shoud use exports.var = myvar... ok. My goal is doing the export without touching foo.js [21:02] jwm: wtf you talking about heh [21:03] isaacs: icebox: sorry. no can do [21:03] isaacs: icebox: you'd need to get into its scope to do that. [21:03] isaacs: icebox: you could read the file, parse it yourself, eval it locally, etc. but that sucks. [21:03] maushu: _ry, setTimeout is in ms? [21:03] sechrist: jwm: it makes noise [21:03] sechrist: annoying noise [21:03] icebox: isaacs: thanks for the reply [21:04] jwm: noise? [21:04] sechrist: yes [21:04] jwm: how long do you look at it anyway [21:04] sechrist: go to google and let it sit [21:04] _ry: maushu: yes [21:04] jwm: besides who goes to google.com anymore [21:04] sechrist: ..bing? [21:04] sechrist: or do you mean igoggles [21:04] jwm: they all use search bars or chrome bar [21:04] sechrist: google is my home page [21:04] jwm: I never see the front page except when I am testing stuff [21:04] jwm: hehe [21:05] jwm: ahh, I have the nifty last tabs/sites in chrome set as my "home page" [21:05] sechrist: I should set up igoogle, but RSS feeds are so 2006 [21:05] jwm: which will have google app launchers [21:05] sechrist: I want news pushed into my cerebral cortex via long poll [21:06] jwm: poll is inefficient :) [21:06] jwm: that'd give you headaches [21:06] sechrist: I never said http [21:06] maushu: !so-ast [21:06] maushu: !so-last [21:06] _announcer: I haven't yet received anything. Please try again later. [21:06] sechrist: could be a longstanding tcp connection [21:06] sechrist: or udp for less overhead [21:06] sechrist: some news doesn't need to be known [21:06] sechrist: it can drop [21:07] gamerx: hey, im having a issue with http.request, it just returns a 400 error form any pages it fetched [21:08] maushu: That means "Bad request". [21:08] kjeldahl_: Yay! First site up running with node and related libraries! [21:08] gamerx: yea.. [21:08] gamerx: Bad Request [21:08] gamerx: i just copied the code form the dodco [21:08] maushu: Which one. [21:09] kjeldahl_: http://streamtu.be/ [21:09] gamerx: err, http://nodejs.org/api.html#http-client-177 [21:09] maushu: Without changing the code it returns 404? [21:10] maushu: Or did you change it someway? [21:10] temp01 has joined the channel [21:10] gamerx: hang on iill just try something [21:11] maushu: You need to put the path where the / is. and the server where www.google.com is. [21:11] gamerx: basicly, i need to send "chunk" to the clinet as in, res.end(chunk); [21:11] ryan[WIN] has joined the channel [21:12] maushu: Huh... [21:12] gamerx: aww fk it, its 5am... im going to bed.. [21:12] gamerx: xD [21:12] maushu: ...are you coding a http server _or_ a http client? [21:12] gamerx: im trying to make a proxy-like server, [21:13] maushu: res.end(chunk) is for the server me thinks... you just linked me to the client example. I'm really confused here and you need to sleep. [21:13] lucas- has joined the channel [21:13] maushu has joined the channel [21:13] gamerx: http://pastebin.com/iLNmrgmT [21:13] gamerx: its my server script [21:14] gamerx: http.Clinet is server-sided to request a page [21:14] joshr has joined the channel [21:15] technoweenie has joined the channel [21:15] maushu: Huh, I don't think you can just res.end(chunk). [21:15] gamerx: anhow... Sleep time [21:15] gamerx: ACTION snores [21:16] maushu: Besides, it's just a chunk, you might need to send multiple chunks. [21:16] charlesjolley_ has joined the channel [21:16] gamerx: hmm.... i not know how, i must read through the docos [21:16] airportyh has joined the channel [21:16] mitkok has joined the channel [21:16] mikeal has joined the channel [21:16] gamerx: ttyl guys [21:16] maushu: Anyways, where was I... oh yeah. [21:17] gamerx: im out, l8r [21:18] admc has joined the channel [21:18] maushu: Ok, ready. Let's fire this up! [21:19] maushu: No code survives the contact with real world anyway. [21:19] maushu: Shutting down for great justice. [21:20] maushu: Starting up for greater justice. [21:20] _announcer has joined the channel [21:21] maushu: Hmmm. [21:21] halorgium: ACTION prods _announcer  [21:22] maushu: ...I'm going to check the logs. [21:27] Dennus has joined the channel [21:28] mikeal: awe shit [21:28] mikeal: github is down [21:28] mikeal: open source is on pause! [21:28] tlrobinson_ has joined the channel [21:28] stephenlb: heh [21:32] _announcer has joined the channel [21:33] maushu: Okay. [21:35] _announcer has joined the channel [21:35] sveisvei has joined the channel [21:36] saikat has joined the channel [21:37] _announcer: Twitter: "Battle station fully operational! (aka node.js announcer should work right now, sweet! :D)" by Graphnode. http://twitter.com/graphnode/status/14453964973 [21:37] _announcer: Twitter: "Battle station fully operational! (aka node.js announcer should work right now, sweet! :D)" by Graphnode. http://twitter.com/graphnode/status/14453964973 [21:37] maushu: ... [21:38] maushu: At least it should work perfectly right now. [21:38] maushu: Right? [21:38] _announcer: Twitter: "Right. node.js" by Graphnode. http://twitter.com/graphnode/status/14454024083 [21:38] _announcer: Twitter: "Right. node.js" by Graphnode. http://twitter.com/graphnode/status/14454024083 [21:39] maushu: If it didn't repeat twice! DAMMIT. [21:39] isaacs: oh, no [21:39] maushu: Go away announcer, you are making me sad. [21:39] aconbere: isaacs: I'm a little confused about the behavior of main and lib in package.json [21:40] aconbere: they aren't in the package.json spec as far as I can tell [21:40] aconbere: otherwise I would be reading documentation [21:40] isaacs: aconbere: main is to do require("foo"). directories.lib is for require("foo/bar") [21:40] isaacs: aconbere: check man npm-json [21:40] isaacs: ACTION should really just merge the package.json spec into one npm doc... [21:41] aconbere: I'm fighting the good fight [21:42] aconbere: just forked the repositories of node libs I'm using that don't install nicely or don't provide package.json files [21:42] isaacs: aconbere: nice! i though i was the only one doing that. [21:42] isaacs: aconbere: just please don't actually publish them, because otherwise you'll be the owner. [21:43] aconbere: right [21:44] aconbere: I'm just local installing [21:44] _announcer has joined the channel [21:44] pquerna: hey, anyone around who uses the Socket.IO-node stuff? Was wondering about ssl/https on it? [21:44] aconbere: and doing a pull request on my repo [21:44] maushu: Power engines! [21:44] maushu: Full power! [21:45] Ori_P has joined the channel [21:47] gamerx has joined the channel [21:49] aconbere: isaacs: so in the npm package.json main = ./npm [21:49] aconbere: does that mean that main is ./npm.js ? [21:49] aconbere: and thus... require("npm") will load ./npm.js? [21:51] mikeal: correct [21:52] mitkok has joined the channel [21:54] rictic has joined the channel [21:56] isaacs: aconbere: yes. check out the npm.js file sitting in your .node_libraries [21:56] isaacs: all it does is require("the/path/to/npm") [21:57] linuxsable has joined the channel [21:59] isaacs: mikeal: regarding your standard library project, i've been thinking about some ways to use nave and npm [22:00] isaacs: mikeal: maybe even something like downloading and installing nave, using nave to install node, and then dropping npm run in that node's lib folder. [22:00] isaacs: mikeal: so you'd just do "nave use 0.1.94" and then you'd have npm and node and everything all working [22:00] _announcer has joined the channel [22:01] maushu: Okay. That's it. [22:01] maushu: If it doesn't work now yet it works on experimental I'm going nuts. [22:01] maushu: As nuts with a gun. [22:01] maushu: !so-next [22:01] _announcer: Time left for the next fetch: 00:29:05 [22:02] _announcer: Twitter: "Playing around with node.js." by Graphnode. http://twitter.com/graphnode/status/14455094364 [22:02] maushu: ...it worked. It worked! IT WORKED! YAY! [22:02] maushu: It didn't explode. [22:02] maushu: Feel free to tweet. [22:03] kkaefer: just want to make sure: there's no way to redefine an operator in javascript, right? [22:03] maushu: I'm going to drink something strong. [22:03] maushu: kkaefer, yes. [22:03] tlrobinson_ has joined the channel [22:03] mikeal: i just made a rum and root beer [22:03] mikeal: need to calm down form all this code, play some street fighter [22:04] maushu: mikeal, make a tweet. [22:04] mikeal: make a tweet? [22:04] mattly has joined the channel [22:04] matthew_y: how do you calm down with street fighter [22:04] maushu: make a tweet. [22:04] isaacs: maushu: is that announcer thing watching all the tweets about node.js or something? [22:04] isaacs: maushu: that could get annoying really fast. [22:04] maushu: matthew_y, by redirecting all our anger into virtual characters? [22:05] maushu: isaacs, yes and no. [22:05] matthew_y: maushu, maybe I'm just really bad at the game :) [22:05] maushu: Not annoying since someone only tweets about node.js like... every 2 hours. [22:05] mikeal: i wrote some node code yesterday that sits on the twitter search feed and pushes docs to couchdb [22:05] mikeal: no, wait, i wrote that wednesday [22:05] mikeal: a co-worked wanted all the google io tweets [22:05] mikeal: co-worker [22:06] mikeal: http://mikeal.couchone.com/_utils/database.html?googletweets [22:06] mikeal: works pretty well [22:06] matthew_y: mikeal, that's cool [22:06] maushu: mikeal, this one uses the realtime streaming. [22:06] mjr_: mikeal: I've done that before as well. I believe it contravenes the Twitter API ToS though for "resyndication". [22:06] mikeal: yeah, that's what I'm hitting too [22:06] mikeal: mjr_: that's debatable [22:07] mikeal: cause you're allowed to stick it in a database [22:07] mikeal: it's a matter of contention whether an open database that you can replicate is "resyndication" [22:08] mikeal: i should modularize this code and put it up [22:08] matthew_y: mikeal, I'd be interested in seeing it [22:08] mikeal: it's only like 30 lines right now, it uses my request module [22:09] mikeal: ok, let me get it off my iMac at work [22:09] _announcer: Twitter: "RT @ryanschenk: We just wrote a web service wrapper for TaxonFinder in Node.js in about an hour. Pretty awesome." by Anthony Goddard. http://twitter.com/anthonygoddard/status/14455407469 [22:09] maushu: ...why wont people use the retweet feature of twitter?! [22:09] KungFuHamster: twitter sucks [22:10] maushu: KungFuHamster, actually it's pretty decent for some stuff. Like project status. [22:10] KungFuHamster: if there's no project page to subscribe to (rss) yeah I can see that [22:11] matthew_y: my mother heard about it on Oprah [22:13] matthew_y: now she's way over 1000 tweets [22:13] mikeal: projects should be on github [22:14] mikeal: then i can see updates in my dashboard [22:14] mikeal: twitter is for posting music videos about your project :) [22:18] richcollins has joined the channel [22:20] maushu: Man, I'm freaking tired. [22:20] maushu: Curse you twitter! [22:20] maushu: This isn't over! [22:23] devinus has joined the channel [22:24] sechrist has joined the channel [22:27] Tim_Smart has joined the channel [22:30] darkf has joined the channel [22:31] aconbere: ACTION wonders if visionmedia will accept his patches [22:31] mikeal: i'm making this twitter thing way more awesome [22:32] isaacs: mikeal: i know, becuase without your tweets, there'd be no reason to even care about twitter. [22:33] mikeal: pfft [22:33] mikeal: it's code [22:36] _announcer: Twitter: "wondering if there's something like pytz or joda date/time zones for #javascript #nodejs" by Patrick Rodriguez. http://twitter.com/stratospark/status/14456665286 [22:40] airportyh has joined the channel [22:43] micheil: isaacs: ah, okay [22:43] micheil: (via scrollback) [22:44] isaacs: micheil: sorry, lost it, what was the ctx? [22:44] micheil: the } thing [22:45] isaacs: oh, yeah [22:45] isaacs: the iniminimized coding style [22:45] micheil: haa [22:45] micheil: *haha. [22:47] micheil: isaacs: btw, I will eventually be writing a different store to npm, could you make sure the http interface is standardised? [22:47] _announcer: Twitter: "If web servers were Starcraft races and making buildings is a blocking process, #nodejs would be Protoss." by Saikat Chakrabarti. http://twitter.com/saikatc/status/14457168979 [22:47] micheil: (like not doing anything which is super couchdb specific) [22:47] saikat: whoa [22:48] micheil: oh, haha [22:48] saikat: is that IRC bot something custom? [22:48] micheil: saikat: I think so, it's new though [22:48] micheil: saikat: nice way to put what node.js is though [22:48] _ry: maushu: very nice [22:48] gtoast: lol [22:49] micheil: I'm guessing maybe it's watching the firehouse [22:50] maushu: saikat, it's made in node.js. That is all. [22:50] saikat: cool [22:50] halorgium: maushu: is the source somewhere? is it bi-directional? [22:50] maushu: So, node.js is protoss. lolz. [22:50] isaacs: anyone try out Ned_'s irc lib? [22:51] maushu: halorgium, it's not anywhere not because it's not open source but because I'm a very lazy person. [22:51] isaacs: he snagged the "irc" name on the npm registry [22:51] _announcer: Twitter: "So #nodejs has a new custom bot that pipes tweets into the irc channel. Nice!" by Micheil Smith. http://twitter.com/miksago/status/14457355688 [22:51] micheil: boom. [22:51] micheil: that is quick. [22:51] halorgium: lolz [22:51] halorgium: maushu: you've played with the streaming api eh? [22:51] halorgium: err [22:51] maushu: Yeap. [22:51] halorgium: micheil: [22:51] micheil: yeah [22:52] micheil: I wonder if it's possible to implement the stream in node.js [22:52] maushu: Yeap. [22:52] micheil: like how twitter's firehouse works [22:52] maushu: Double yeap. [22:52] micheil: admittedly, it's not the best way [22:52] micheil: but cool either way [22:52] maushu: Triple yeap. [22:53] micheil: Let's just go for a Quad yeap. yeap? [22:53] maushu: Nope. [22:53] micheil: &*^% [22:53] micheil: :P [22:53] Tim_Smart: Lolwut [22:54] micheil: ACTION is off. [22:54] micheil: bye chaps & ladies. [22:54] maushu: I'm putting the file somewhere. [22:54] Tim_Smart: Does that twitter thing have a limiter on it? [22:55] Tim_Smart: I can see it spamming us when #nodejs gets talked about a lot [22:57] micheil: maushu: might be an idea to setup that bot to filter out RT's and (vai @...)'s [22:57] _announcer: Twitter: "http://streamtu.be/ - powered by node.js, node-router, haml.js, sass. Serverside backend still some Perl+POE, but should be replaceable." by kjeldahl. http://twitter.com/kjeldahl/status/14457640476 [22:57] kjeldahl_: ACTION grins [22:57] halorgium: maushu: did you impl your own twitter lib? [22:57] maushu: micheil, technically it does. IF PEOPLE USE TWITTER'S RT. [22:58] micheil: maushu: yeah, and how many twitter clients support that? [22:58] halorgium: maushu: twitter is actually smart about 'RT @fooo' as well [22:58] isaacs: maushu: twitter's RT doesn't always work. [22:58] halorgium: they add the in_reply_to_id [22:58] maushu: halorgium, thats for replying not retweeting. [22:58] isaacs: maushu: but the in_reply_to_id should be set properly [22:58] micheil: maushu: so best just to do a simple .test(/RT @[a-zA-Z0-9_]+)/ [22:59] isaacs: maushu: i'm saying, even when you RT from the twitter site, i've seen that not set the retweet settings properly on the data. [22:59] halorgium: maushu: nah, in_reply_to_status_id [22:59] maushu: isaacs, what if someone creates a library called "RT"? [22:59] maushu: :p [22:59] isaacs: (we're all saying the same thing... poor maushu...) [22:59] _announcer: Twitter: "RT @saikatc: If web servers were Starcraft races and making buildings is a blocking process, #nodejs would be Protoss." by Derek Hammer. http://twitter.com/hammerdr/status/14457746178 [22:59] maushu: HALP. I'm too cute to be overrun. [22:59] maushu: God dammit. [23:00] maushu: isaacs, does RT only appear at the beginning? [23:00] maushu: I really don't want to RT the whole text. [23:00] mjr_: Do you ever want RT? [23:02] isaacs: maushu: the standard seems to be that /^RT @([^\s]+)/ is repeating exactly what $1 said, where as /\/via @(.*)$/ or /\(via @[^\)])$/ is a rephrasing [23:02] rramsden_ has joined the channel [23:02] isaacs: er, /\(via @[^\)]*)$/ rather [23:02] maushu: ...shouldn't we leave the rephrasings? Sometimes people leave comments about said phrases. [23:02] isaacs: right [23:02] isaacs: but filter out the RTs [23:03] isaacs: but, sometimes, people repeat exactly, and say "via" instead of RT [23:03] maushu: ... [23:03] maushu: Not my fault. [23:04] maushu: If I make chainsaws it's not fault people use them to recreate horror movies. [23:04] maushu: *my fault [23:04] mjr_: If people do manual (via) at the end, I guess whatever. But we should really try to avoid dups if there's an obvious way to do it. [23:04] rramsden_: anyone know how to kill an http socket by setting a timeout? net.Stream.setTimeout doesn't seem to do the trick... http://pastie.org/971867 [23:04] maushu: (Use chainsaws on trees, please.) [23:04] maushu: (Not that I agree with cutting trees, but better them than the poor people.) [23:05] mjr_: maushu: are you suggesting we use chainsaws on poor people? [23:05] maushu: No. On trees. [23:05] mjr_: That's a bit out of left field. [23:05] freshtonic has joined the channel [23:05] isaacs: when did this get about demographic levels? [23:06] mjr_: I know, and mass murder? [23:06] mjr_: crazy [23:11] halorgium: maushu: did you find a firehose lib cause i'd like to see it cause i wrote my own [23:11] maushu: Nope. [23:11] bradleymeck: can anyone confirm making a getter with the propertyname of "documentElement" silently fails? [23:11] aconbere: full of questions! [23:12] aconbere: node-discount has a build script [23:12] aconbere: it builds a .node file [23:12] aconbere: with regards to npm [23:12] aconbere: do I just list that .node file as the main? [23:12] maushu: halorgium, didn't find any firehose (streaming?) lib. I just used their api. [23:12] isaacs: aconbere: exactly. but without the .node [23:12] Tim_Smart: Google has pacman :oi [23:12] aconbere: awesome! [23:12] isaacs: aconbere: whatever you'd require() if you were in the package root dir to bring in the module. that's the main [23:13] _announcer has joined the channel [23:13] halorgium: maushu: oh, you poll? [23:13] maushu: Ok, that should work. [23:13] maushu: Nah, I use their streaming api. [23:13] halorgium: ah, ok (phew) [23:13] maushu: I keep a http connection, etc etc [23:13] halorgium: maushu: yer [23:15] _announcer: Twitter: "saw this live RT @davglass: Video — Ryan Dahl (@ryah): “Introduction to NodeJS”: http://bit.ly/a6cGRO #yuitheater (via @yuilibrary)" by Yahoo Eng Recruiter. http://twitter.com/YahooEngRecruit/status/14458478969 [23:15] maushu: GOD DAMMIT. [23:15] halorgium: maushu: mine is https://gist.github.com/76835f50fb6386a3be47 [23:15] maushu: THIS MEANS WAR! [23:15] halorgium: maushu: retweets have "item.retweeted_status" [23:15] halorgium: ACTION is testing now ;) [23:16] maushu: halorgium... I thought it filtered RTs! [23:16] maushu: I read it in their api. [23:16] halorgium: nah, it doesn't [23:16] mjr_: Sad that nobody uses the native RT [23:16] maushu: ...well, that is not a twitter RT, since he added "saw this live RT @davglass:". [23:16] halorgium: maushu: yer, i believe twitter is skilled [23:16] halorgium: ACTION is finding out though [23:17] maushu: Depends on _ry's choice. [23:17] maushu: Lets see if I remove them. [23:18] tekky has joined the channel [23:20] _announcer has joined the channel [23:20] maushu: Ok, it should filter more RTs. [23:21] aconbere: w00t [23:21] aconbere: okay node-discount, minitest, and yaml-js all have package.json files [23:21] aconbere: that makes my life nicer [23:21] sudoer has joined the channel [23:22] maushu: http://graphnode.com/stuff/ircbot.js [23:22] maushu: Here knock yourselves out. [23:23] _ry: i think we should have a package.json party [23:24] _ry: we'll get together and submit patches to people [23:24] maushu: ACTION runs away. [23:24] mape: That is a nice idea [23:25] elliottcable: ACTION hides [23:25] _announcer: Twitter: "learn more, and get things done in quality. #nodejs" by Amr Numan Tamimi. http://twitter.com/amrnt/status/14458962460 [23:25] aconbere: heh [23:25] halorgium: _ry: another meetup? [23:25] aconbere: _ry: feel free to join in ;-) [23:26] _ry: my problem with package.json is that i don't get it [23:26] _ry: ) [23:26] _ry: :) [23:26] aconbere: I'm gonna fix the mustache package.json and then I'm going to do some real work :) [23:26] _ry: i don't know how to specify the main file [23:26] aconbere: yeah [23:26] aconbere: it's weird [23:27] aconbere: main, libs, and all that stuff are weird [23:27] halorgium: i'd prefer it to be a JS file [23:27] aconbere: and poorly documented [23:27] halorgium: then i could do globbing [23:27] mape: Just make a worst case scenario package.json for people to use as a reference? As well as a best case one [23:29] Tim_Smart: What the heck is 'beam.smp' service from erlang do? [23:29] Tim_Smart: Either way, it is taking a lot of cpus [23:29] halorgium: Tim_Smart: not epm? [23:29] Tim_Smart: Ah maybe. Either way I killed it [23:30] Tim_Smart: https://bugs.launchpad.net/ubuntu/+source/erlang/+bug/458453 [23:30] Tim_Smart: Got it [23:31] halorgium: i do believe require-time output is the devil :( [23:32] wilmoore has joined the channel [23:34] maushu: http://github.com/isaacs/npm/blob/master/package.json [23:35] aconbere: hmpf [23:35] isaacs: _ry: you specify which module to require when you do require("your-thing") [23:35] isaacs: _ry: on the "main" field. [23:36] _ry: isaacs: so in my node-amqp module (http://github.com/ry/node-amqp) i'd just do "main": "amqp.js" ? [23:36] isaacs: _ry: that's not in the Packages/1.1 spec, that's an npm enhancememnt. the Packages/1.1 spec assumes that you'll either dump everything into the same path, or dump all the paths into your NODE_PATHS [23:36] _ry: isaacs: what do you think about package.json party? [23:36] isaacs: _ry: it's the argument to require. so, it should be "./amqp" [23:37] isaacs: _ry: a party for package.json? [23:37] _ry: isaacs: we get together and spend an afternoon going through the catalog and submitting patches [23:37] isaacs: that'd be fun [23:37] isaacs: oh, you know what, i think i strip .js and .node off of the shims i create, and resolve it against the absolute package dir anyway, so main:"amqp.js" should work. [23:38] isaacs: but it's not "correct" [23:38] mape: Wouldn't it be fairly easy to automate something like that? [23:38] mape: At least boiler plate stuff that needs to be verified [23:38] isaacs: mape: i think ashb had a vim plugin to do that [23:39] isaacs: name, author, description are pretty easy to get from the github page. [23:39] mape: yeah [23:39] _ry: isaacs: npm make-package-json would be nice [23:39] _ry: :) [23:39] isaacs: _ry: you're right. you should add that. [23:39] _ry: ;) [23:39] halorgium: npm init ;) [23:39] isaacs: or, at least, add an issue [23:39] isaacs: yeah, npm init might be a better name for the cmd [23:39] _ry: yeah [23:39] _ry: npm init ./amqp.js [23:40] isaacs: npm write-json --main ./amqp.js --lib ./lib and then pull the other info out of git or something [23:40] isaacs: or parse the README.* [23:40] isaacs: eh. it gets hard quick. that's kind of why we have package.json [23:40] halorgium: yer, a bootstrap is all you need IMO [23:41] halorgium: with example structure [23:41] halorgium: once people understand how it is constructed a CLI becomes more work than gain [23:46] Tim_Smart: What is the best way to 'merge' buffers [23:47] mape: http://www.usenix.org/events/hotos03/tech/full_papers/vonbehren/vonbehren_html/index.html [23:47] Tim_Smart: E.g. A HTTP response returns multiple chunks [23:48] aconbere: ugh... and another [23:48] aconbere: ACTION writes a package.json for optparse [23:50] linusthiel has joined the channel [23:53] atmos: halorgium: are you still sick ? [23:54] halorgium: atmos: yer, failing :( [23:54] atmos: suck, gonna take it easy this weekend ? [23:54] halorgium: i'm considering going to the doc now ... [23:54] halorgium: yer, last weekend didn't help ;) [23:54] atmos: i'm still nursing the poison oak i got from camping [23:54] halorgium: haha, mine dissappeared [23:56] halorgium: atmos: heading down to santa cruz again? [23:56] atmos: maybe sunday [23:56] atmos: i need to do laundry and stuff [23:56] halorgium: atmos: you know wave is no longer just appengine right? [23:56] atmos: yup [23:57] atmos: still not completely sold on its usefulness [23:57] halorgium: atmos: having less of the "how to talk to people" part solved allows for tackling the "what to send to people" part to be easier [23:58] halorgium: i'm thinking about hooking up github or something into wave [23:58] _announcer: Twitter: "node.js got me in the habit of cooperative yields. Lifesaver when crunching tons of data in a browser; it avoids the beachball of DOOM." by Ian Schenck. http://twitter.com/ianschenck/status/14460518606 [23:58] halorgium: now that the appengine part is gone [23:58] atmos: halorgium: interesting [23:58] atmos: gonna be hackin' that this weekend ? [23:59] halorgium: yer, probably fixing rave or making a new lib [23:59] halorgium: raw rack == fail :( [23:59] halorgium: or just use node [23:59] atmos: can't do it in node? [23:59] atmos: yeah :) [23:59] halorgium: well, need an oauth lib [23:59] halorgium: ACTION searchs [23:59] halorgium: isaacs: impl a npm search bot [23:59] atmos: they exist [23:59] atmos: halorgium: it's definitely in kiwi