[00:00] bradleymeck1: addListener('data',...) doesnt give you what you want (should just eat up the childs stdout)? [00:01] Tim_Smart: derRichard: I'll show you an example with a writeStream [00:01] steadicat has joined the channel [00:02] kersny: joemccann: that username:password is just http basic auth which can be done in node if you don't want to do a child process [00:02] derRichard: Tim_Smart: yeah. but why does my program not work? (in case the fs.write()? fs.writeSync() works) [00:02] kersny: ex) restler can do it http://github.com/danwrong/restler [00:03] joemccann: kersny: thx! but how? [00:03] joemccann: if the request to node is "/auth" [00:03] joemccann: and i need to auth against that API [00:03] Tim_Smart: derRichard: It is probably closing mid-write or something [00:03] joemccann: what is the technique? [00:04] mscdex: if you want to download a file... use http.cat [00:04] technoweenie: joemccann: look up http basic authentication [00:05] technoweenie: it's a simple header that you set [00:05] joemccann: thx [00:05] technoweenie: you'll need to encode the user/pass pair as base64 [00:05] derRichard: mscdex: http.cat? [00:05] TS_: Tim_Smart: Im having trouble get external connections to my websocket server working? With miksago node-websocket-server. I thought I saw you or someone speaking about it thanks! [00:06] joemccann: awesome, thank u...I'm using Express now and didn't find an HTTP Client lib so will probably just create one [00:06] mscdex: derRichard: http.cat("http://example.com/foo.txt", function (err, content) {}); [00:06] technoweenie: joemccann: there IS one in node [00:06] technoweenie: httpClient [00:06] mscdex: derRichard: where http is: require('http') [00:06] Tim_Smart: TS_: Got all the port numbers etc lined up? Firewall blocking port? [00:06] joemccann: oh [00:06] joemccann: cool! [00:07] TS_: Tim_Smart: yeah all that is in line, tested [00:07] derRichard: mscdex: where is it on http://nodejs.org/api.html? seems i'm blind [00:07] bmease has joined the channel [00:07] technoweenie: it's a little low level though, theres restler which is an abstraction over it [00:07] mscdex: derRichard: it's not in the public api, but it exists [00:07] technoweenie: and i wrote http://github.com/technoweenie/node-scoped-http-client [00:07] joemccann: this one: http://github.com/billywhizz/node-httpclient [00:07] tmedema: What does this mean? Error: EADDRNOTAVAIL [00:07] mscdex: derRichard: you can also specify an encoding as the second parameter [00:07] TS_: Tim_Smart: yeah all thats working and tested the ports [00:08] mscdex: derRichard: for more info: http://github.com/ry/node/blob/master/lib/http.js#L1012 [00:08] tmedema: anyone familiar with this error? EADRNOTAVAIL, http://safs.pastebin.com/1WndMJg0 [00:09] joemccann: technoweenie: you're in Portland, Oregon? [00:09] technoweenie: joemccann: yea [00:09] joemccann: i used to live there for 7 years [00:09] technoweenie: tmedema: what's the port you're trying to assign [00:09] tmedema: technoweenie: 5500, but it seems to whine about the address not the port [00:09] technoweenie: oh [00:10] bmizerany: technoweenie: when are you moving here? [00:10] technoweenie: bmizerany: this weekene [00:10] derRichard: mscdex: thx [00:10] SteveDekorte has joined the channel [00:11] tmedema: technoweenie: no idea then? [00:11] bmizerany: technoweenie: no shit. awesome. I was going to detox for a few weeks, guess I'll have to make an exception for a night. :) [00:11] technoweenie: tmedema: no [00:11] bradleymeck1: do you have permission to bind the address or is the address already taken? [00:11] Tim_Smart: TS_: I don't have any immediate concerns then (without look at your code that is) [00:11] Tim_Smart: derRichard: https://gist.github.com/cd80ecd4fbdb23a24bc4 [00:11] technoweenie: bmizerany: i'll have my son, so i wont be doing much drinking [00:11] tmedema: bradleymeck1: it's just localhost.. how can it be taken ? [00:11] bmizerany: technoweenie: awesome! I can't wait to meet him! [00:11] bmizerany: technoweenie: you have to bring him over for XBox. [00:11] Tim_Smart: derRichard: That is how I usually stream data to a file without sync calls. [00:12] technoweenie: yea def [00:12] tmedema: actually wait a sec. [00:12] TS_: Tim_Smart: i thought i read logs from few days back having issues with outside connects to your test no issues with node =) thanks anyway [00:13] tmedema: I got it working technoweenie , bradleymeck1 : I forgot I changed the address... probably because I have been coding 12 hours straight [00:13] Tim_Smart: TS_: I was using socket.io, and it worked fine :) [00:13] technoweenie: tmedema: time for a break :) [00:13] technoweenie: socket.io rocks [00:13] tmedema: yes going to sleep soon [00:14] Tim_Smart: technoweenie: Its need a little work. JSON for every message adds too much overhead :p [00:14] Tim_Smart: *needs [00:14] technoweenie: what else would you send? [00:14] Tim_Smart: separated values [00:15] Tim_Smart: If you are sending hundreds of messages a second that is. [00:15] technoweenie: ah [00:15] bradleymeck1: mmm good ole binary data [00:15] TS_: Tim_Smart: technoweenie cool thanks [00:15] technoweenie: what are you sending back and forth [00:15] technoweenie: or are you talking about cases where you have lots of users connected [00:16] Tim_Smart: technoweenie: mrdoob used it for multiuser sketch thing. He sends a command for every mouse move. [00:16] technoweenie: cool [00:16] Tim_Smart: Imagine parsing JSON for every message :p [00:17] technoweenie: is on() part of a released version of node [00:17] technoweenie: i saw 1.100 was just put out [00:17] kersny: no, not yet [00:18] technoweenie: ah just after it was released [00:18] technoweenie: man, my patch wasnt accepted [00:18] derRichard: Tim_Smart: thanks. i've solved my problem i've to to response.pause bevor the fs.write() and then a response.resume [00:18] technoweenie: its a bona fide mem leak [00:18] Tim_Smart: derRichard: You should try get rid of your sync calls as well. [00:19] technoweenie: i wonder if this version of node leaks memory like crazy [00:19] Tim_Smart: technoweenie: Which patch? [00:19] technoweenie: something for addListener [00:19] technoweenie: no, removeListener [00:20] technoweenie: it sets the events to nil when you remove the last one [00:20] marienz has joined the channel [00:20] technoweenie: instead of deleting them [00:20] technoweenie: so in the case you have like a trillion events in there that are added and removed, it'll take up a shitload of memory [00:21] technoweenie: i was going to have something emit filenames as events, but i cant do that now [00:21] zomgbie has joined the channel [00:21] mscdex: nil? this isn't ruby! :-P [00:21] tmedema: Hmm.. I'm running a server on a VirtualBox (VM) and I want to connect to it on my host (normal system).. what hostname should I use? The VM doesn't have a public hostname [00:22] satori: I use machinename.local [00:23] satori: on my centos vm [00:23] satori: but I'm using vmware [00:24] Tim_Smart: tmedema: Not setting the hostname will make it listen to every host. [00:24] tmedema: :o [00:24] shimondoodkin_ has joined the channel [00:24] Tim_Smart: s/host/hostname/ [00:24] Tim_Smart: / or setting it to null [00:24] technoweenie: it seems odd that running a 200MB file through the read stream would use up 50MB [00:25] Tim_Smart: Must use 50mb chunks heh [00:25] tmedema: Tim_Smart: I know how to get it listening, but I dont know what hostname to give in the host to connect to the vm server [00:25] tmedema: satori is that something VMWare specific? [00:25] Tim_Smart: I wonder if you can specify the chunk size.. [00:25] satori: not sure. [00:25] mscdex: tmedema: how is the VM's network card connected? NAT or? [00:26] technoweenie: it uses 4k chunks [00:26] satori: I use one NAT virt adapter and one bridged one [00:26] tmedema: not sure mscdex , it's centos.. how do I check? [00:26] Tim_Smart: technoweenie: Yeah, just saw that. [00:26] technoweenie: on node 1.99 it just eats up all your memory [00:26] shimondoodkin_: try type ifconfig [00:26] technoweenie: this is why i have to restart node all the time [00:27] technoweenie: child processes seem to leak too. its weird [00:27] Tim_Smart: technoweenie: Is this createReadStream? [00:27] satori: Isnt there some sort of profiler that can find mem leaks automatically for c++? [00:27] mscdex: tmedema: something like: VBox Manage list vms [00:28] technoweenie: Tim_Smart: https://gist.github.com/raw/b922126a11aa0b1ed78b/9a10acfe07b34b5c3fae5e85a38ece57fb820d2d/leaky.js [00:28] technoweenie: ah no not createReadStream [00:28] mscdex: tmedema: look for the "Attachment:" line for your vm [00:29] Tim_Smart: technoweenie: Same deal. [00:29] technoweenie: oh well at least it doesnt keep going up [00:29] mscdex: tmedema: wait, that's not the right command. one sec [00:29] tmedema: mscdex: it's NAT [00:30] tmedema: I just checked [00:30] mscdex: ok [00:30] tmedema: what does that mean? :p [00:31] shimondoodkin_: valgrind is amemory profiler [00:31] mscdex: tmedema: it's probably going to be easiest if you changed it from NAT to Bridged Adapter or similar [00:31] tmedema: alright [00:31] mscdex: tmedema: that way the VM can have its own IP address [00:31] mscdex: on the LAN [00:32] satori: bridged is just easier in general. Your router can assign an address via dhcp and everything can see everything [00:32] shimondoodkin_: tmedema:you might try type: ifconfig [00:32] shimondoodkin_: and see the address [00:33] satori: Speaking of routers...I made a simple UPNP module last night. Would anyone else find that useful? [00:33] satori: can forward ports and get the ext address [00:33] ezmobius has joined the channel [00:33] shimondoodkin_: i want to see the output just reading http://valgrind.org/docs/manual/quick-start.html , and just before done aptitude install valgrind [00:35] ezmobius_ has joined the channel [00:40] tmedema: not having much luck mscdex, it tells me the ip is 10.0.0.158 but when I connect nothing happens [00:40] tmedema: shimondoodkin_: you mean ipconfig ? [00:41] liucougar has joined the channel [00:41] shimondoodkin_: it is similar [00:41] shimondoodkin_: in linux to see the thernet interfaces [00:41] shimondoodkin_: youtype ifconfig [00:42] tmedema: hmm yeah the ip is 10.0.0.158 [00:42] tmedema: but when I connect the server does not detect it [00:42] shimondoodkin_: s/thernet/ the ethernet/ [00:43] satori: 10.0.0.x is a non routable address [00:43] tmedema: hmm so how should I connect to my vm then ? [00:44] satori: Easiest way is to use a bridged net adapter instead of a NAT one [00:44] tmedema: I did that satori [00:44] tmedema: but what now? [00:44] satori: is your host also on a 10.0.0.x ip? [00:44] shimondoodkin_: is ther open ssh on that vm? [00:44] tmedema: yes [00:44] satori: ping work? [00:45] tmedema: yes shimondoodkin_ though I am not using a ssh port [00:45] tmedema: port is 5500 [00:45] tmedema: satori: where and what should I ping? [00:45] satori: from host to vn [00:45] satori: vm [00:45] satori: but if your ssh is working then its ok [00:45] tyfighter has joined the channel [00:45] marienz has joined the channel [00:46] shimondoodkin_: from windows run execute: cmd . then type ping 10.0.0.157?? [00:46] bmizerany: man. I'm stumped. does anyone see why this change is causing broken parsing? the data is going-out or getting chewed up on the way in when I use the BufferSlide class I created. [00:46] bmizerany: http://github.com/bmizerany/borg/commit/da6d7e86f0dbf2b33aabb80eddc59b09389bc805 [00:46] shimondoodkin_: *158 [00:46] tmedema: shimondoodkin_: ping 10.0.0.158 yes that works [00:46] bmizerany: it's gotta be an async thing I'm overlooking [00:46] softdrink has joined the channel [00:47] bmizerany: here is the BufferSlide class: http://github.com/bmizerany/borg/blob/broken/lib/borg.js#L9-30 [00:47] bmizerany: there is a test in test/ too [00:47] satori: do you have any sw firewall? I had a problem with centos once before that I fixed by changing settings with 'setup' cmd [00:48] tmedema: when I connect it doesn't give me an error on the host at first, then 10 secs later putty tells me connection timed out... but on the server side (vm) it never detects a new client [00:48] tmedema: what is a sw firewall satori ? :P [00:48] satori: is your vm centos? [00:49] bmizerany: oh. I think I may know. [00:49] tmedema: yes satori [00:49] satori: try running 'setup' [00:50] satori: then -> Firewall Configuration [00:50] satori: then -> Customize [00:50] satori: then make sure youe eth devices are ticked for 'trusted devices' [00:51] satori: you may also have to add the ports you want to allow to 'Other Ports; [00:51] tmedema: how do I tick a box? I press enter but nothing happens satori [00:51] satori: space [00:51] tmedema: ok satori [00:51] tmedema: should I allow incoming from anything else but ssh? [00:51] tmedema: telnet? [00:51] satori: http will be useful [00:51] satori: whatever you need really [00:52] satori: can run this again anytime [00:52] satori: I think the trusted devices thing was what fixed my connection problems a while agao [00:53] shimondoodkin_: tmedema: you might want to install ubuntu [00:53] tmedema: yes it works satori ! [00:53] satori: cool :) [00:53] shimondoodkin_: ubuntu is more newbe friendly [00:53] tmedema: alright now I can sleep :p [00:53] tmedema: shimondoodkin_: I have centOs because my real server has CentOS [00:53] tmedema: when my application is finished I will buy my own server [00:54] tmedema: real server is actually a shared host with ssh access :d [00:54] tmedema: it works though [00:54] joemccann: technoweenie: I tried Dan Webb's lib and it is throwing errors (not compatible with my current version of node) and am trying your's out [00:54] tmedema: ok off to sleep, thanks for the help [00:54] joemccann: do you have an example of basica http auth? [00:54] technoweenie: cool, his is older. mines pretty recent but i dont use it much [00:55] joemccann: i checked the tests and didn't see one [00:55] technoweenie: i'd suggest using the raw lib if you have issues. its kinda experimetnal [00:55] technoweenie: no, its just a header to set [00:55] shimondoodkin_: bmizerany: have you found the problem? [00:55] technoweenie: joemccann: did you try using auth() [00:56] joemccann: i haven't tried your lib at all [00:56] technoweenie: there are tests for auth [00:56] joemccann: didn't see an auth example [00:56] joemccann: oh really? [00:56] technoweenie: yea [00:56] technoweenie: actually just use the raw lib [00:56] joemccann: this: http://github.com/technoweenie/node-scoped-http-client/blob/master/test/scoped_url_test.js [00:56] bmizerany: shimondoodkin_: I think so, adding a test case for it. I'm pretty sure it's in BufferSlice#write. I'm not checking to see if only a partial string was written so the rest of the string is getting discarded [00:56] joemccann: ? [00:56] technoweenie: mine is an experiment, i'm not even sure if it works [00:57] technoweenie: joemccann: yea [00:57] bmizerany: I just need to talk it out in here. heh [00:57] technoweenie: yea there are no live tests of it [00:58] joemccann: so the raw lib you mean this: http://github.com/billywhizz/node-httpclient [00:58] joemccann: ? [00:58] joemccann: its a module [00:58] technoweenie: no, i mean the built in one: http://nodejs.org/api.html#http-client-179 [00:59] joemccann: ahh gotcha [00:59] joemccann: ok cool thx [00:59] joemccann: will give it a shot [00:59] shimondoodkin_: found a cool command: sync; echo 3 > /proc/sys/vm/drop_caches [00:59] joemccann: and hopefully make an Express plugin [00:59] mikeal has joined the channel [00:59] technoweenie: why? [01:00] technoweenie: its *built in* [01:00] technoweenie: if you're going to make yet another http client lib, no reason to limit it to express, that's sill [01:00] technoweenie: y [01:02] bmizerany: shimondoodkin_: yeah. be careful with that. we've had to use it in prod at Heroku. doing it at the wrong time with the wrong # can cause all hell to break loose. [01:03] joemccann: well the way Express handles requests "looks" different than the raw version [01:03] joemccann: to keep code cleaner it may make sense to simply abstract to Express [01:03] technoweenie: oh, awesome [01:03] joemccann: or not [01:03] joemccann: make sense? [01:04] shimondoodkin_: thanks i'll do safe... ive did one to my first linux rm * [01:07] hober has joined the channel [01:08] voodootikigod_ has joined the channel [01:11] bmizerany: shimondoodkin_: fixed! http://github.com/bmizerany/borg/commit/fe64240c8a5a96d5e6085a6b9156f4ec3a9288f7 [01:12] bmizerany: boom. BufferSlide === 550% speed increase on client/server tcp with no-delay set to true. [01:12] bmizerany: http://github.com/bmizerany/borg/commit/1fd43946e26aabaca350f69879be574c941c59a3 [01:13] shimondoodkin_: wow cool [01:14] khug has joined the channel [01:16] bmizerany: shimondoodkin_: https://gist.github.com/304e84f1103e808d3c84 [01:16] jashkenas: bmizerany: what's borg? [01:16] shimondoodkin_: what a difference, [01:18] bmizerany: shimondoodkin_: yeah. huge. when I saw a 2x speed increase in reqs/s just by changing the code to combine 2 writes in to one with `buffer.write(part1 + part2)`.. I was like, whoa, I should probably be buffering the buffer. :) [01:18] bmizerany: jashkenas: it's a little something I working on for distributed process management [01:18] bmizerany: for Heroku [01:19] jashkenas: distributed process management huh? like a message bus? [01:19] maushu: _announcer seems too silent. [01:20] bmizerany: jashkenas: eh. kind of. yes. at heroku, we manage TONS of live processes across TONS of EC2 instances. I'm working on a better system than what we have currently. What we have now is super slick, but I've got a hunch we can do it even better. :) It's pet project right now. [01:20] _announcer: Twitter: "Poke'ing announcer in the node.js channel." -- Diogo Gomes. http://twitter.com/graphnode/status/17831000771 [01:20] maushu: Nevermind. [01:20] jashkenas: bmizerany: fun. [01:21] Tim_Smart: bmizerany: Wouldn't it be better to flush the Buffer by just creating a new one? [01:22] Tim_Smart: Instead of adding a extra copy operation in there. [01:22] jashkenas: anyone ever heard of a bot that watches Github Issues, and when they get updated posts summaries to an IRC room? [01:22] Tim_Smart: jashkenas: Ooo. Sounds like fun. [01:23] Tim_Smart: technoweenie: Make the streaming API already :p [01:23] technoweenie: heh [01:23] technoweenie: i need to get this other thing launched first [01:23] voodootikigod_ has joined the channel [01:23] technoweenie: i'm still not sure how we're going to store all the event data [01:24] bmizerany: Tim_Smart: can you show me an example of what you mean. If I understand you correctly, I was trying to do just that but couldn't find a clean/right way. [01:24] bmizerany: technoweenie: what are you working on? [01:24] technoweenie: bmizerany: git wiki [01:25] khug: technoweenie: you guys planning webhooks for the api? [01:25] technoweenie: khug: yea [01:25] jashkenas: technoweenie: that'll be wonderful to have. good luck to you. [01:25] khug: awesomesauce [01:25] maushu: I wonder if I need to make an API for the javascript in my dashboard. [01:25] maushu: I don't know how other people do it. [01:26] Tim_Smart: bmizerany: this.buffer = null; this.buffer = new buffer.Buffer(this.length); [01:26] maushu: Posterous seems to just get pieces of html. [01:26] bmizerany: technoweenie: you're redoing the wiki's with git and node.js, eh? I like seeing you creeping node into the codebase. :) [01:26] maushu: Wordpress doesn't seem to use ajax at all. [01:26] technoweenie: no node, it'll be integrated right into the rails app [01:26] bmizerany: Tim_Smart: that just does a copy though, doesn't it. [01:26] technoweenie: bmizerany: the git archive download server is node now :) [01:27] bmizerany: technoweenie: I heard. [01:27] bmizerany: congrats [01:27] bmizerany: how is it working out? [01:27] jashkenas: technoweenie: how's the memory going on that these days? [01:27] technoweenie: jashkenas: it eventually goes up to 200MB and god kills it [01:27] jashkenas: ugh. [01:27] technoweenie: it dies several times a day it looks like [01:27] jashkenas: I guess you lose a couple downloads when that happens. [01:28] Tim_Smart: technoweenie: You might want to have a deep and meaningful with ryah on that one. :) [01:28] technoweenie: yea, i'm hoping it'll be more stable on 1.100 [01:28] bmizerany: Tim_Smart: oh. I needed to create a new buffer that was the length of the "remaining" data. [01:28] jbr has joined the channel [01:28] jashkenas: I double the suggestion to pester ryah about it. Sounds like the sort of production thing that it would be good for him to hear about. [01:28] bmizerany: Tim_Smart: the "main" buffer gets reused. flush is simply to force the "data" into the callback [01:29] Tim_Smart: bmizerany: OK, nevermind :p [01:29] Tim_Smart: I was reading it wrong. [01:29] technoweenie: jashkenas: i've mentioned it to him [01:29] Tim_Smart: bmizerany: Otherwise you could have done a buffer.slice() [01:29] bmizerany: ah. ok. np. I was assuming myself wrong. you guys know this better than I do. I was hoping you were saying that you had a way to do that without the copy. that would be sick. [01:29] _announcer: Twitter: "As a EventEmitter.on of node.js EventEmitter.addListener changed. That's kkalkkeumhaebo win. Extjs he did was write on where? http://bit.ly/9q4cQL" [ko] -- Outsider. http://twitter.com/Outsider__/status/17831539467 [01:29] technoweenie: jashkenas: i came up with a small test that showed the mem leak in child process and file read streams. both are ok on 1.100 though. [01:29] bmizerany: Tim_Smart: oh yeah. I can do that. that doesn't copy, right? [01:30] technoweenie: still, it shouldnt load up 50MB to open a read stream on a big file [01:30] Tim_Smart: bmizerany: It references the original memory [01:30] Tim_Smart: this.buffer.slice(0, this.pos); [01:30] jashkenas: lookie here: http://github.com/jbr/sibilant [01:31] jashkenas: (defvar sys (require 'sys)) [01:31] devtime has joined the channel [01:31] jbr: jashkenas: :) [01:32] jbr: It's still rough around the edges, without a doubt [01:32] jashkenas: jbr: digging in... [01:33] jbr: I probably should have written docs before announcing, but I was too excited and wanted to share [01:33] mscdex: node.js rules! [01:33] bmizerany: Tim_Smart: sick. I'm doing it. [01:34] jashkenas: jbr: how do you do your pretty-printing of the JS? it looks nice. [01:35] Tim_Smart: bmizerany: So what is the objective of BufferSlice? [01:35] jbr: jashkenas: you mean the indentation? [01:35] jashkenas: nah, I meant where you decide to put whitespace between the statements. [01:35] Tim_Smart: *BufferSlide [01:35] technoweenie: jbr: check out wheat for a blog [01:35] technoweenie: its node.js based on a git backend [01:36] technoweenie: favors caching over building static files [01:36] bmizerany: Tim_Smart: I needed an appendable buffer that "wrapped" when it was full. It's a common problem, so I created a wrapper. It just tracks a position and wraps at the end. [01:36] mscdex: github has the whole wheat? ;-) [01:36] bmizerany: a.k.a. Slide. :) [01:36] Tim_Smart: bmizerany: Don't you end up overwriting data though? [01:36] bmizerany: Tim_Smart: yes. that's the point. [01:37] bmizerany: to reuse the buffer [01:37] jashkenas: jbr: are you ready to write sibilant in sibilant at this point? [01:37] Tim_Smart: OK, as long as everything you need doesn't get overwritten :p [01:37] bmizerany: Tim_Smart: it's more of a way to throttle data being written to a stream [01:37] jbr: jashkenas: some of the macros are written in sibilant. http://github.com/jbr/sibilant/blob/master/lib/macros.lisp [01:38] bmizerany: Tim_Smart: http://github.com/bmizerany/borg/blob/master/lib/borg.js#L41-43 [01:38] jbr: I don't think it's fully expressive yet, but that would be a good way to find out [01:38] jashkenas: jbr: it's amazing how simple it is... no nasty parsing to muck you up. [01:38] mjr_: bmizerany: you have a dynamic Buffer grower? [01:38] Tim_Smart: mjr_: Not grower. [01:38] bmizerany: Tim_Smart: I "flush" it to the stream when it's full or when forced [01:39] Tim_Smart: bmizerany: Why not just flush it whenever possible? [01:39] Tim_Smart: s/flush/write [01:39] mjr_: I keep running in to the inconveniently fixed size of buffers. [01:39] jashkenas: jbr: what's the relationship of sibilant to parenscript? [01:39] jbr: just parens, literals, string, and comments. the only nasty parsing is the "reader macro," which i call a special. '(a b c) ==> ['a', 'b', 'c'] and 'a ==> "a" [01:40] bmizerany: Tim_Smart: I was. It was 7x slower http://github.com/bmizerany/borg/compare/broken [01:40] jbr: jashkenas: parenscript is written in lisp, i think [01:40] bmizerany: Tim_Smart: the stream is TCP with setNoDelay(true) [01:41] bmizerany: Tim_Smart: NoDelay is because I don't want the kernel holding bytes waiting for an "ack", when it may not get one for quite awhile [01:42] Tim_Smart: OK. [01:43] bmizerany: Tim_Smart: does that make sense, or am I wacked? Me being wacked is common. I'm all ears for a better solution and a little schooling. [01:43] Tim_Smart: bmizerany: I'm not very familiar with nodelay, so no comment. [01:44] bmizerany: Tim_Smart: I had to read up on it a few weeks ago. It basicly tells the kernel to not use the Nagel Algorithm when sending packets. Nagel holds/buffers buytes to send until the remote connection "acks". [01:45] bmizerany: Tim_Smart: http://en.wikipedia.org/wiki/Nagle's_algorithm [01:45] _announcer: Twitter: "LESS BDD framework for the Alexis Selier've built a node.js. Vows http://vowsjs.org/" [ko] -- Outsider. http://twitter.com/Outsider__/status/17832506202 [01:46] jbr: jashkenas: I'm not sure if you could compile parenscript with parenscript, but I kinda expect not, since http://github.com/fitzgen/parenscript-narwhal requires sbcl [01:48] bmizerany: To think outloud: BufferSlide enables me to send small packets when needed, without Nagel holding them back, and throttle when it's convenient for my app. [01:49] Tim_Smart: Right. Does using a pump affect anything? [01:49] Tim_Smart: Or is this another ball in the park? [01:50] bmizerany: Tim_Smart: not that I'm aware of. what might it affect? [01:50] Tim_Smart: bmizerany: Basically it sends data from one stream to another, throttling where needed. [01:50] bmizerany: Tim_Smart: I designed the scanner to implement the Stream interface. So I can attach the incoming noDelay stream to the scanner. :) [01:51] bmizerany: Tim_Smart: ah, right. That's a good point. maybe I can leverage pump instead [01:51] bmizerany: hrm [01:51] bmizerany: Slide was for outgoing data, but maybe I can try using pump. I'll have to check [01:52] khug: was process.mixin removed or just renamed? [01:52] Tim_Smart: bmizerany: I'm still reading about Nagle's algorithm, so I'm not sure if it is relevant. [01:52] Tim_Smart: khug: It was removed a while ago now. [01:52] bmizerany: khug: removed, many moons ago [01:52] khug: in favour of your own mixin? [01:53] Tim_Smart: khug: Correct. [01:53] bmizerany: khug: I guess. [01:53] khug: thanks!@ [01:53] bmizerany: np [01:53] khug: btw, I assume using pump would defer to the socket's TCP, which will likely use nagle [01:54] bmizerany: I would like to see node have something like mixin. I don't like the whole Foo.prototype.blah = function.... and it would be nice to have a standard on some kind of mixin so every lib doesn't try to do their own or do things differently. (that's another talk for another time) [01:55] bmizerany: khug: correct, unless you stream.setNoDelay(true) [01:55] bmizerany: khug: http://github.com/bmizerany/borg/blob/master/client.js#L7 [01:56] Tim_Smart: Oh right. bmizerany how does that affect things in terms of the API? [01:56] bmizerany: Tim_Smart: how does what affect the API? [01:56] bobby_ has joined the channel [01:56] bmizerany: noDelay? [01:56] Tim_Smart: bmizerany: Does it mean you have to write differently or anything? [01:58] Tim_Smart: OK I get it now. [01:58] bmizerany: Tim_Smart: well, I mean, I did create a class to give me better control of throttling. Other than that, no. [01:58] bmizerany: the throttling I'm doing, it for outbound packets [01:58] bmizerany: pump helps throttle for inbound [01:58] bmizerany: but, I may be able to use pump to throttle outbound too [01:59] bmizerany: I'm tinkering now [01:59] Tim_Smart: bmizerany: I use pump in a static file server... [01:59] khug: ah - missed net.Stream [02:00] Tim_Smart: It's relevant in any stream to stream operation. [02:00] bobby_: hi all, can someone help me with a quick testing question? I'm using expresso to run this test (http://gist.github.com/464909) against this code (http://gist.github.com/464908), and assert.throws is not catching the error [02:00] bmizerany: khug: oh. I seems you can use `module.exports = { ... }` in place of mixin [02:00] bmizerany: Tim_Smart: for sure. I'm glad you pointed that out. [02:01] shimondoodkin_: i have found that open ssl is leaking in nodejs 1.100 [02:01] Tim_Smart: bobby_: You can't catch errors that are generated in a async function. [02:01] shimondoodkin_: http://rt.openssl.org/Ticket/Display.html?user=guest&pass=guest&id=1802 [02:02] bmizerany: Tim_Smart: you can't? what about process.on('uncaughtException', ..) ? or do you mean with try/catch? [02:02] Tim_Smart: bobby_: The error will be thrown at a different place in the execution stack, meaning you will have to catch it in the callback. [02:02] bmizerany: Tim_Smart: ah. got it [02:02] satori: in v8 when you wrap a c++ class instance, does v8 GC take care of deleting it? [02:02] Tim_Smart: bmizerany: Yes that works, but the is a last resort. [02:03] bmizerany: satori: yes [02:03] satori: cheers [02:03] Tim_Smart: s/the/that [02:03] bmizerany: satori: it will delete the internal-fields which will execute the destructor. [02:03] bobby_: Tim_Smart: ah, thank you. I had suspected that, but I wasn't sure, thank you very much for the clarification [02:03] lucas- has joined the channel [02:04] satori: bmizerany: thanks. [02:04] bmizerany: satori: you'll have to manage any memory you allocate in the custom class though [02:04] satori: is it safe to dealloc in the destructor though? [02:04] bmizerany: satori: i.e. http://github.com/bmizerany/borg/blob/master/src/scanner.rl#L177 [02:04] Tim_Smart: bobby_: ryah is working at ways around this issue. It is one of the things that has given async Javascript a bad name for years. [02:05] Tim_Smart: Error handling. [02:05] bmizerany: satori: you also need to `Dispose` any persistent handles. [02:05] bmizerany: that you no longer need. [02:05] satori: even persistent symbols? [02:05] bmizerany: that will mark them for GC [02:05] satori: strings? [02:05] bmizerany: satori: if they may be used throughout the lifetime of the lib, then no. [02:06] satori: ah k. [02:06] bmizerany: satori: there are never `Dispose`d http://github.com/bmizerany/borg/blob/master/src/scanner.rl#L6 [02:06] satori: am looking at ur code now. I needed to see an example [02:06] bobby_: Tim_Smart: yeah, i've gone through the gauntlet of debugging client-side async scripts, but i'm a newbie on the server side [02:06] bmizerany: satori: yeah. this one is decent. it's got ragel in it though. it's not a "strait [02:06] bmizerany: " example [02:06] satori: I think I don't have any persisent handles really. using Local ones with scope.Close mostly [02:07] satori: they should be fine right? [02:07] bmizerany: satori: if they are created in the scope, yes. [02:07] satori: yeah [02:08] bmizerany: satori: I'm using the Persitant because it's use across method calls, and if I used a Handle then GC would reap it from time to time and give me nasty debugging headaches. [02:08] bmizerany: true story. :0 [02:08] bmizerany: ;) [02:08] satori: heh [02:09] bmizerany: took me awhile to get my head around what the diff between Handle, Local, and Persistant were. [02:09] shimondoodkin_: http://gist.github.com/464912 - my guess about open ssl memory leaks [02:09] satori: I am learning node/linux/git/c++ at once so I know all about headaches [02:10] bobby_: Tim_Smart: how would I go about catching the error in the callback using assert.throws? [02:10] bmizerany: satori: correction: node's ObjectWrap will handle the delete for you http://github.com/guille/node/blob/master/src/node_object_wrap.h#L15-20 [02:10] bmizerany: satori: that's valiant. :) [02:11] Tim_Smart: bobby_: Depends where the async function is defined. It will need to be modified to pass a error argument to the callback or something. [02:11] bmizerany: satori: I had to brush up on C++, JS, and learn v8. You're a hackers hacker. :) [02:11] satori: bmizerany: It's difficult to one without the others :P [02:11] isaacs has joined the channel [02:12] aheckmann has joined the channel [02:12] satori: I have stacks of windows exp, but node.js has been the thing to make me jump headfirst into linux and open sw [02:12] Tim_Smart: Heh. I need to write more C / C++ [02:12] bobby_: Tim_Smart: oh, so I shouldn't have my client throw errors directly upon getting a bad response from the server, but rather should pass an error as an argument to the callback? [02:13] shimondoodkin_: satori: i also liked how you solved the ptoblem of firewall, its like you had the right feeling [02:13] Tim_Smart: bobby_: Yeah. Look the the 'fs' callback convection and follow that. [02:13] isaacs: satori: see, hearing that makes me even more sure that windows support is an ill-conceived idea ;P [02:13] satori: shimondoodkin_: I had a similar prob months ago. [02:14] bobby_: Tim_Smart: where could i find that? I mean what is the 'fs' callback, is that the file system api? [02:14] Tim_Smart: bobby_: Yeah, the filesystem api [02:14] khug: http://github.com/ry/node/blob/master/lib/fs.js [02:15] isaacs: bobby_: the pattern is that your functions look like this: function doSomething (arg, arg2, someOtherArg, cb) [02:15] isaacs: then, at some point, you either do this: return cb(new Error("something broke")) [02:15] isaacs: or: return cb(null, some, kindof, data) [02:16] bmizerany: satori: I'm always glad to hear about windows hacker coming to the greener grass here in nix land. :) [02:16] khug: lines 78-83 [02:16] bobby_: isaacs: thanks! I got the pattern for successful callbacks, but hadn't picked up the pattern for errors [02:16] bmizerany: satori: I did windows dev for a looong time. I've not looked back in 5 years. it's been great. [02:16] isaacs: bobby_: it's important to use an actual Error object, too, so that it has a handy stack trace. [02:17] Tim_Smart: bmizerany: If it helps with your buffer things, here is a one-way TCP proxy in 10 LOC http://gist.github.com/458121 [02:17] bobby_: isaacs: right, that makes sense. Does that also mean that I should be checking the first argument to make sure it's not an Error? [02:17] isaacs: bobby_: yes, always [02:18] mtodd has joined the channel [02:18] isaacs: the callback functions should look like: function cb (er, whatever) { if (er) throw er (or pass it up stream or whatever) [02:18] quirkey_ has joined the channel [02:18] bobby_: isaacs: ah, that makes a lot of sense. isaacs, Tim_Smart,thank you for taking time to help someone very new to Node.js! [02:19] isaacs: bobby_: no problem! [02:19] Tim_Smart: bobby_: Now go tell your friends, [02:20] isaacs: yes.. tell your friends that Tim_Smart and isaacs are AWESOME. [02:20] Tim_Smart: Oh [02:20] isaacs: wut? [02:20] bobby_: i will do my best to send you a flood of similarly naive coders for you to assist! [02:21] freshtonic: does anyone know if fs.writeSync is supposed to flush writes to disk? If not, is there a way to force a flush? [02:21] SteveDekorte has joined the channel [02:21] Tim_Smart: In all my file systems things I have written, I have never needed to use writeSync [02:22] Tim_Smart: s/my/the/ [02:22] bmizerany: Tim_Smart: yeah. one more line and you have a 2 way. :) node is pretty damn cool. [02:22] mjr_: bmizerany: reading the scrollback, I'm not sure that's quite how nagle works. If you do a single byte send and there's nothing outstanding, then that single byte segment goes out right away. [02:22] freshtonic: I don't need to use it in production, but I have an integration test that needs to check some stuff has been written to disk when a request hits the front end [02:23] mjr_: bmizerany: but once it goes out, the kernel holds on to any future data until either it gets the ack from the previous segment, or if it could fill up a full packet. [02:23] mjr_: So it won't get "stuck" waiting for a small write. [02:23] bmizerany: mjr_: yeah. but if there is an outstanding ack, nothing will get sent. I'm build a distributed locking system among other things, and those lock requests need to get there quickly. [02:24] mjr_: For sure. But just so you know, it won't sit there forever waiting to send something small, which is why it's on by default. [02:25] Tim_Smart: mjr_: But it seems for small messages, setNoDelay(true) will help [02:25] bmizerany: mjr_: I was pretty sure of that too. The protocol I'm using is redis's proto. And most redis clients use no-delay for that reason. [02:25] mjr_: In protocols that have a request/response pattern, it ends up not mattering, because you can't send the next request until you hear the response from the last. [02:26] mjr_: But if you can queue up multiple requests without waiting for the response, then it starts to matter. [02:26] mjr_: Or if your request is larger than a packet. [02:26] bmizerany: mjr_: right. I need to send many requests without waiting for a response, I want them to get there right away. [02:26] mjr_: Yeah, awesome. [02:26] shimondoodkin_: sound like udp [02:26] mjr_: Anyway, guess who has been reading the Stevens book last week? [02:26] mjr_: me! [02:26] bmizerany: mjr_: true. that's why HTTP clients benefit from Nagel. [02:27] mjr_: Do HTTP clients benefit from nagle? [02:27] shimondoodkin_: what is Nagel [02:27] mjr_: I guess if they are posting and the request spans a packet. [02:27] mtodd has joined the channel [02:27] bmizerany: shimondoodkin_: udp doesn't guarantee order and can loose packets in tranmission [02:27] mjr_: But don't most GET requests fit in a packet? [02:28] bmizerany: and has a limit to packet size [02:28] mjr_: Anyway, who cares. Turn off nagle just in case. [02:28] mjr_: Time to eat. [02:30] hammerdr has joined the channel [02:30] bmizerany: is `on` vs. `addListener` to experimental to switch to `on` in the node libs? [02:31] Tim_Smart: bmizerany: I think ryah has given it the stamp of approval. [02:31] bmizerany: awesome. [02:31] Tim_Smart: For now it will just be an alias. [02:34] mscdex: [07:43] ryah: I think 'on()' is going to stay [02:34] mscdex: [07:43] ryah: it looks awesome. [02:34] voodootikigod_ has joined the channel [02:35] isaacs: mjr_: GET requests might not fit in a packet, if you have too many cookies [02:36] isaacs: mjr_: when GET requests eat too many cookies, they get too fat, and have to go in separate packets. [02:36] isaacs: jbrantly1: hey, you the sibilant author? [02:36] mscdex: sweet delicious cookies [02:40] tilgovi has joined the channel [02:40] jbr has joined the channel [02:41] bradleymeck1 has joined the channel [02:41] bpot has joined the channel [02:44] shimondoodkin_: ill go drink some woter and eat few cookies [02:44] jakehow has joined the channel [02:45] shimondoodkin_: s/woter/water/ [02:45] rodrigo3n has joined the channel [02:49] bradleymeck1: mmm anyone know how to listen on any open port for tcp (doesnt matter the number, just cannot currently be in use) [02:49] Tim_Smart: bradleymeck1: Without running as root, right? [02:51] _announcer: Twitter: "@ GilenoFilho face, it looks http://wargamez.mape.me/ - made with Node.js. It's amazing this project!" [pt] -- Rodrigo Alves Vieira. http://twitter.com/rodrigo3n/status/17836561291 [02:51] bradleymeck1: pref w/o root [02:51] rodrigo3n: w00t! [02:51] bradleymeck1: i can do a try catch loop but :/ [02:51] jbr: isaacs: were you asking about sibilant? [02:51] rodrigo3n: I just tweeted and it's already here [02:52] rodrigo3n: and I tweeted in Portuguese [02:52] rodrigo3n: wow [02:52] Tim_Smart: bradleymeck1: You need root to bind to port <1024, but then you can drop privileges by process.setuid(user_id); [02:52] bradleymeck1: !translate-tweet pt @rodrigo3n thats nice :D love mape [02:52] bradleymeck1: woops misordered the action [02:52] rodrigo3n: mape is a genious [02:53] bradleymeck1: !tweet-translate pt @rodrigo3n thats nice :D love mape [02:53] mape: hehe [02:53] bradleymeck1: grrr broke translate apparently [02:53] maushu: ACTION pokes mape. [02:54] bradleymeck1: ACTION stalks off to #node.js.bots [02:54] mape: ACTION! [02:54] mape: ok so I spent the last 5h watching http://www.wimp.com/ [02:54] mape: vacation is such a waste [02:55] chilts: heh, cool, if I type something in, it should appear on the wargamez.mape.me [02:55] chilts: heh, just saw my 'marker' appear on the screen [02:55] chilts: that's awesome :) [02:55] Tim_Smart: chilts: Maybe... but I just assassinated you. [02:55] chilts: lol [02:55] mape: chilts: pew [02:55] Tim_Smart: NZ fights back, mape dies. [02:56] chilts: mape: fire! [02:56] chilts: lol [02:57] mape: good spread of nationalities [02:57] Tim_Smart: bmizerany: Long range shot is long range. [02:57] Tekerson: ACTION represents :) [02:58] JJ_ has joined the channel [02:59] bmizerany: Tim_Smart: hehe. are we still bombing each other? [02:59] Tim_Smart: US never bombed NZ. [02:59] Tim_Smart: NEVA [03:01] bradleymeck1: oh, seem to have broken the shorthand translates... how odd [03:03] chilts: mape: was just showing a friend of mine (he wrote gource) - http://www.youtube.com/results?search_query=gource [03:03] chilts: said it's very nice :) [03:04] mape: hehe yeah, Im sure he could do something better ;) [03:05] _announcer: Twitter: "thinking of creating a blog, it is clear again from scratch with my code, if I will be with Node.js! http://github.com/visionmedia/express" [pt] -- Rodrigo Alves Vieira. http://twitter.com/rodrigo3n/status/17837428675 [03:05] chilts: naw, I mainly showed him 'coz of the technologies you're using, but the visualisation is nice too :) [03:06] kodisha: ACTION is putting him self on the wargamez map :) [03:06] bradleymeck1: ok lets try again ... [03:07] kodisha: i glowz [03:07] bradleymeck1: !translate Portuguese Woot tell us if you need any help w/ the blog [03:07] _utility: Woot dizer-nos se você precisar de alguma ajuda w / blog [03:07] _announcer: Twitter: "YUI Theater with the creator of node.js - http://developer.yahoo.com/yui/theater/video.php?v=dahl-node" -- Matthew Irish. http://twitter.com/meirish/status/17837599285 [03:08] Aria has joined the channel [03:08] kodisha: im at the center of the map [03:08] shimondoodkin_: (unrelated, but maybe i can ask) maybe anyone here knows facebook's javascript? i cant get it to work.(privmsg me) [03:08] rodrigo3n: bradleymeck, thanks! [03:09] mtodd_ has joined the channel [03:09] bradleymeck1: wish wargames could swap into star-map mode and show where your ip is pointing to on the stars [03:10] kodisha: hey mape, you know what other mega cool feature is? day/night border :) [03:10] mape: yeah someone mentioned that [03:10] kodisha: but it would ruin this dark ui [03:10] kodisha: :/ [03:10] mape: not sure how that works on a projected map though, might be easy as pie [03:11] mape: on/off [03:11] bradleymeck1: or maybe just something so that we could provide a map :/ [03:11] rodrigo3n: hey guys, I am using the latest node version from github and npm doesn't work on it [03:11] JJ_: mape did you ever use node-websocket-server by miksago for wargamez [03:11] rodrigo3n: apparently [03:12] mape: JJ_: it is running that from the start [03:12] _announcer: Twitter: "@mabster Or what if the BCL was evented like Node.js or EventMachine in Ruby? Imagine the possibilities." -- Mike Moore. http://twitter.com/blowmage/status/17837888053 [03:12] JJ_: mape cannot connect on portforwarded port of websocket server from anything but localhost [03:13] JJ_: ECONNREFUSED [03:14] mscdex: JJ_: leave out the hostname or use null for the hostname [03:14] mscdex: that'll force it to listen on all interfaces [03:14] bradleymeck1: the 100 release does fail w/ npm :/ isaacs is working on it, the stream api and a couple other things got jumbled [03:15] JJ_: porra [03:15] JJ_: thank you [03:15] JJ_: mape [03:16] mape: :) [03:18] JJ_: i think it makes sense [03:18] aheckmann has joined the channel [03:19] JJ_: ahhh ;) [03:22] isaacs: bradleymeck: it seems to work if you re-install npm entirely on a fresh node. [03:23] isaacs: oh, rodrigo3n left... [03:23] isaacs: jbr: yeah [03:23] isaacs: jbr: i was gonna message you about it [03:23] isaacs: jbr: so, two things: [03:23] isaacs: 1. http://twitter.com/izs/status/17835515459 [03:24] isaacs: 2. [ what's with the braces in commit messages ] [03:24] jbr: braces in commit messages, couldn't tell ya. i thought they looked good on github, and it's a clear way of delimiting the "title" from the "body" of commit messages [03:25] jbr: particularly for work, i tend to write long commit messages (essays, even), so the bracketed part is the "quick summary" [03:25] isaacs: i see [03:25] isaacs: i think the convention in most projects is having a short line, \n\n, long essay. but whatever works for your project. it does look interesting :) [03:25] mape: essays? [03:25] isaacs: what about TCO? any thoughts? [03:26] mape: that must be annoying to scim? [03:26] itodd has joined the channel [03:26] isaacs: mape: that's why the first line should be less than 80 chars (some say 50) [03:26] jbr: maybe annoying to skim, but very useful when trying to figure out what the heck i was thinking [03:26] mape: hehe isn't that what code and comments are for? [03:27] isaacs: mape: well, commit logs are the biography of the code. comments are the current state. [03:27] mape: ACTION throws the ole code is docs enough idea into the mix [03:27] isaacs: jbr: so, tco [03:28] jashkenas has joined the channel [03:28] isaacs: i'm thinking, it should be possible, at least in theory [03:28] jbr: isaacs: thinking about it. should be possible [03:28] isaacs: like, detect if the last statement of a function is another function call, and then nextTick it or something [03:28] isaacs: but, you'd have to do some juggling [03:28] concernedcitizen has joined the channel [03:28] isaacs: like, freeze the state, come back to it later, etc. [03:29] isaacs: it's just that one thing that makes lisp languages so incredibly awesome is that they have TCO, so recursion turns into iteration when possible. [03:29] isaacs: without it, it's just parens. [03:30] isaacs: anyway, that's my request for sibilant. but if you go that route, you must be very OK with having JS output that looks *nothing* like the lisp input, i think. [03:31] jashkenas: isaacs: what about the argument that TCO destroys your stack? [03:31] hammerdr: mape: It also depends on your workflow. For example, on one project I would make several commits to a single feature on a local branch, merge it to trunk and then rebase all of them to one commit before pushing. Two to three hours of code is a lot. Long commit messages were common in that process. [03:31] isaacs: jashkenas: languages with TCO seem to be ok with not having a valid stack. [03:31] _announcer: Twitter: "Tried to make node.js work for me over the weekend. It was not pretty - the project sorely needs better documentation" -- Alex Bosworth. http://twitter.com/alexbosworth/status/17839165356 [03:32] jbr: isaacs: I'm going to take a stab at it and see what that would look like. I may need theoretical help at some point, since this is a new sort of project for me [03:32] jashkenas: isaacs: I guess my question is: would you like it if JavaScript already did it? Transformed a recursive tail call into a loop ... and you didn't see any of the stack frames that *should* have been there, when an exception goes? [03:32] hammerdr: The twitter announce thing is evil, by the way. If someone complains about Node.js all 200 some Node.js junkies see it then all of them can simultaneously pounce on the offender :P [03:33] isaacs: jashkenas: so, here's another idea.. what if you keep the stack trace, but drop the stack frames? [03:33] jashkenas: isaacs: ah, but that would be beyond my domain. [03:33] jashkenas: isaacs: jbr: here's the coffeescript ticket where we talked about it: [03:34] jashkenas: http://github.com/jashkenas/coffee-script/issues/issue/147 [03:34] _announcer: Twitter: "Set up environment to for the #nodejs pastebin tutorial. I plan on using #fabjs instead of nerve. Work on imementation tomorrow." -- A'braham Barakhyahu. http://twitter.com/BlessYahu/status/17839319070 [03:35] isaacs: jashkenas: ie, implement TCO, but whenever you inline a tail call, make a note of where you were when you did that. if something throws, catch it, and append your fake-stack to the front of it. [03:35] jashkenas: here's Guido's take on it: http://neopythonic.blogspot.com/2009/04/final-words-on-tail-calls.html [03:35] isaacs: yeah, i find guido's arguments ill-conceived and short-sighted. [03:35] isaacs: guido is why i don't like python. i'm sure he's a great guy, and has the best of intentions. [03:35] isaacs: but personally, i prefer anarchy to monarchy [03:36] isaacs: i think it leads to a broader bell curve of ideas. more bad ideas, yes, but also more good ones. [03:36] isaacs: TCO doesn't really break debugging as much as it breaks call-time introspection. [03:36] mtodd has joined the channel [03:36] isaacs: arguments.callee.caller.arguments.omgkillmenow [03:37] jashkenas: ha. [03:37] isaacs: platforms and projects should have BDFLs. languages should be more distributed than that, imo. [03:37] bradleymeck1: arguments.callee should be able to survive, but if you need caller @_@ [03:37] isaacs: bradleymeck: rigt, exactly [03:38] isaacs: to have caller, you need to not have TCO. the whole point of tco is to obliterate .caller [03:39] shimondoodkin_ has left the channel [03:39] isaacs: you know, you can even do someFunction.caller at run time [03:39] isaacs: and that'll be undefined if it's not part of the call stack [03:39] isaacs: so that whole part of the API would go bye bye [03:39] bradleymeck1: yes, but i do wonder if you could simulate it since a TCO is a loop over all the things, just need to hold the original.caller andthen find a way to make the .caller point to a linked list of sorts [03:40] SubtleGradient has joined the channel [03:40] bradleymeck1: wonder if that would ruin what you get out of the optimize though :/ [03:40] isaacs: yeah, who knows [03:40] isaacs: it's certainly an area worthy of further study, imo. [03:41] isaacs: but maybe it's something that should happen in the interpreter level, rather than in the even-higher-level-language layer [03:41] bradleymeck1: need more time to finish me parser generator , that thing has been on the back burner for a bit, needs some love [03:41] isaacs: ie, if JS could do TCO without losing the Error.stack reference, then that'd be pretty badass. [03:42] isaacs: almost *nobody* uses Function#caller [03:42] isaacs: i think it might not even be in ES5 strict [03:42] bradleymeck1: v8 can keep the stack ref in similair fashion to above using the stacktrace api lol [03:42] bradleymeck1: callee and caller are both depr [03:43] bradleymeck1: and i use .caller... only once but i use it! [03:43] isaacs: ok, gotta run. have a good evening, folks. [03:43] bradleymeck1: ACTION tips hat [03:47] bmelo has joined the channel [03:48] JimBastard has joined the channel [03:54] unomi has joined the channel [03:57] bpot has joined the channel [04:02] hassox has joined the channel [04:15] bmizerany: Tim_Smart: I got a _slight_ performance increase with slice() http://github.com/bmizerany/borg/commit/01b7af55a446d376c436bbe34b2c964c48a4d82a [04:15] bmizerany: about 0.010s shaved off [04:18] creationix has joined the channel [04:18] mtodd has joined the channel [04:20] bmizerany: ok. shave another 100ms off the bench by defaulting BufferSlide to 1K. boom. [04:20] Dmitry1 has joined the channel [04:27] nefD has joined the channel [04:28] Aria has joined the channel [04:35] _announcer: Twitter: "The senior took over from machine to that server node.js" [ja] -- 天沢(痛風). http://twitter.com/amasawa/status/17842995805 [04:41] JimBastard: lol [04:44] bmizerany: what? [04:51] Tim_Smart: bmizerany: Shouldn't you make it the same size as a TCP packet? [04:52] bmizerany: Tim_Smart: I can try. let me see. [04:54] bmizerany: Tim_Smart: is there a good way to determine what that should be depending for the type/speed of the connection and environment? [04:54] Tim_Smart: By default it is 4k [04:54] bmizerany: Tim_Smart: I tried 2K and didn't make a difference [04:54] Tim_Smart: OK. [04:55] bmizerany: the speed peaked at 1K [04:55] quirkey has joined the channel [04:56] hassox has joined the channel [05:00] royi has joined the channel [05:01] bmizerany: quirkey: welcome to the Bay, baby! [05:01] quirkey: bmizerany: hey hey! [05:01] quirkey: its great to be here [05:01] bmizerany: great to have ya [05:01] quirkey: how was your weekend [05:01] bmizerany: great. yours? [05:02] quirkey: good! mostly spent shopping and building IKEA furniture [05:02] Clooth has joined the channel [05:02] quirkey: I'm working out of the GH office starting tomorrow [05:02] quirkey: so we should meet up sometime this week [05:03] mjr_: bmizerany: depending on IP/TCP options, most people can fit about 1450 bytes in a TCP segment. [05:04] mjr_: Slightly less if they are on PPPoE or something less than an ethernet 1500 byte link layer [05:04] bmizerany: quirkey: for sure. feel free to work from the Heroku office anytime this week too. [05:05] quirkey: sweet, ill ping you, maybe I'll stop by some afternoon [05:06] bmizerany: mjr_: cool. thx. I guess 1024 is is fine then [05:06] bmizerany: that should be safe, right? [05:06] mjr_: IP will fragment it for you otherwise [05:07] mjr_: Actually, at the TCP layer, it'll just magically work. [05:07] mjr_: No matter what size you send. [05:07] mjr_: You don't really get to pick what goes in a packet. [05:18] pquerna: well [05:19] pquerna: it doesn't mean you can ignore it [05:19] pquerna: if you want it to be fast :) [05:19] pquerna: tcp corking etc are all means to make sure you don't send 10 byte packets [05:20] mjr_: But bmizerany wants 10 byte packets sometimes [05:20] pquerna: well, most tcp stacks are working against you then :)_ [05:21] mjr_: I'm sure they are the default settings for a reson. [05:21] SteveDekorte has joined the channel [05:21] mjr_: So pquerna, I'm looking for at this socket options thing, and it sucks. [05:21] pquerna: because someone picked them in '92 [05:21] pquerna: yeah? [05:21] mjr_: They are all different on different platforms. [05:21] mjr_: Like, way different. [05:21] pquerna: yes [05:21] pquerna: APR wraps a decent portion of them [05:21] mjr_: bah [05:22] pquerna: https://svn.apache.org/repos/asf/apr/apr/trunk/network_io/unix/sockopt.c [05:22] pquerna: you'll need something like half that file [05:22] pquerna: more or less [05:23] pquerna: though you can take out all the beos lines :) [05:23] mjr_: So in node_net.cc:1017, SetKeepAlive() has a special case for OSX/linux to do one of their unique socket timeout params. [05:23] mjr_: But not all of them. [05:23] pquerna: yeah, needs to be a generic set(key, value) thing [05:23] pquerna: then setkeepalive just calls that [05:23] mjr_: So do you expose TCP_KEEPALIVE and TCP_KEEPIDLE on all platforms, and just see if it works at runtime? [05:23] pquerna: yup [05:24] pquerna: return ENOTIMPL [05:24] pquerna: if it doesn't [05:24] mjr_: So then the JavaScript has to know about what platform it is on? [05:24] mjr_: Because that's awkward. [05:24] pquerna: well, not in that specific example [05:24] pquerna: those are idential [05:24] pquerna: the c code should wrap it up [05:24] mjr_: But if you want to allow the tuning of those individual keepalive params, they are different osx vs linux [05:25] mjr_: There are a few more rather useful ones that Linux supports that aren't used in node_net.cc at the moment. [05:25] pquerna: re: javascript knowing the platofmr, it woudln't, it just needs to handle ENOTIMPL'ed gracefully [05:25] pquerna: it jsut knows feature X isn't there [05:26] mjr_: So you think there should still be binding.setKeepAlive() even if there's a generic setOption(key, value) ? [05:27] pquerna: i'm not opposed to shortcuts that do what 90% of people want [05:27] mjr_: I guess the binding layer could make a friendly version of all the common ones at least. [05:27] liucougar has joined the channel [05:31] pquerna: i think node will just have to copy what apr/nspr/glib all have done for portability on the network layer; strive to keep the javascript side of the API similiar to what those C apis abstraced away: all the #ifdef __OS__ code, not that some things can fail with ENOTIMPL [05:35] mjr_: Yeah, I think the JS code should not have to think about what platform it is on. [05:35] bmizerany: mjr_: +1 [05:36] mjr_: But what if you want to set TCP_KEEPINTVL on Linux, which has no equivalent on OSX? [05:36] admc_ has joined the channel [05:36] admc has joined the channel [05:36] mjr_: or TCP_KEEPCNT [05:37] christkv has joined the channel [05:37] bmizerany: I do think it would be add great flexability if you could work with OS specific stuff with JS if you wanted to. i.e. the abstraction is just JS that makes calls to the underlying native methods (i.e. the way buffer.write works) [05:37] mjr_: I guess SetTimeout in the binding layer can accept values for those other two things, and just ignore them on OSX. [05:38] mjr_: I do want to expose some of these Linux-specific socket options for my own stuff, and I'm guessing other people would find it valuable as well, given what most people seem to be doing with node. [05:38] bmizerany: in this case, replace `encoding` with `os` [05:39] bmizerany: mjr_: yeah. EventMachine does that. You can choose to override the default polling method if you want and take advantage of something better equipped for the problem your solving. [05:56] rictic has joined the channel [05:59] sh1mmer: Maybe I'm an idiot, but can someone tell me how to install Docco. [05:59] sh1mmer: I installed all the dependancies, however I can't seem to find an install script/make file in the Docco source [05:59] sh1mmer: should I just drop bin/docco on /usr/local ? [06:00] tyfighter has joined the channel [06:05] cha0s has joined the channel [06:05] cha0s: Hey sexy beotches [06:08] bpot has joined the channel [06:08] sh1mmer: uhuh [06:14] statim has joined the channel [06:21] unomi has joined the channel [06:27] jetienne has joined the channel [06:31] sveimac has joined the channel [06:31] mikeal has joined the channel [06:31] wilmoore has joined the channel [06:48] sixbit has joined the channel [06:50] creationix: sh1mmer: what's Docco? [06:51] sh1mmer: creationix: neat documentation system. I figured it out. Missing dependancy causing a cryptic error deep in Coffe-Script [06:51] creationix: ahh [06:51] sh1mmer: creationix: Docco - http://jashkenas.github.com/docco/ [06:51] creationix: I thought I heard that name somewhere [06:51] creationix: ACTION used to work for jashkenas [06:51] sh1mmer: creationix: it's really cool [06:52] mtodd has joined the channel [06:52] sh1mmer: afaik the original idea was http://www.toolness.com/wp/?p=441 [06:52] creationix: that's way better than jsdoc [06:52] sh1mmer: which spawned http://code.google.com/p/code-illuminated/ [06:52] sh1mmer: but Docco seems the best implementation yet [06:53] creationix: so are people using coffee script in real stuff these days? [06:54] bmizerany: Tim_Smart: hrm. I looked into using sys.pump() for the outgoing data, it's pretty tied to stream objects. My scanner emits an Array, which would be send to the writeStream. [06:54] bmizerany: *sent [06:55] _announcer: Twitter: "Finally added online compaction to my nStore mini-couch clone in pure #node.js http://bit.ly/bb3Vtg (use with caution)" -- Tim Caswell. http://twitter.com/creationix/status/17850082812 [06:55] chandru_in has joined the channel [06:56] sh1mmer: creationix: nafaik. [06:56] chandru_in: Has anyone tried writing a multi-threaded C++ addon for node.js using pthread? [06:56] unomi: heresy [06:56] sh1mmer: creationix: I think it defeats one of the best reasons to use SSJS, which is code sharing. [06:56] hellp has joined the channel [06:57] creationix: chandru_in: you need to use libev's stuff [06:57] unomi: sh1mmer: not really, as it renders to javascript [06:57] creationix: chandru_in: look for the custom event, it provides a thread pool [06:57] sh1mmer: unomi: but it isn't designed to write code for browsers [06:57] unomi: sh1mmer: you could program your clientside js in coffee as well [06:58] sh1mmer: unomi: theoretically. why don't you call me when you do. [06:58] unomi: sh1mmer: its designed to translate something that looks like ruby into js [06:58] unomi: sh1mmer: what do you mean 'theoretically'? [06:58] creationix: sh1mmer: coffeescript runs fine in node, you just get weird stack traces when something goes wrong since it's the generated js that's actually run [06:59] chandru_in: creationix: Can u point me to some docs regarding its custom events?? [06:59] sh1mmer: unomi: cross browser issues have always been the biggest concern programming for browsers [06:59] unomi: sh1mmer: not really [06:59] creationix: chandru_in: I'm afraid I don't know much more than that, but ryah and micheil should be able to help more [06:59] chandru_in: I basically want to write an async wrapper around a blocing library [06:59] micheil: say what? [06:59] unomi: sh1mmer: not when it comes to javascript itself, when it comes to the DOM, yes. [06:59] sh1mmer: as such you'd have to strongly rely on a library even if you used coffeescript which would make it fairly redundant [06:59] micheil: actually. bbl. [06:59] creationix: micheil: do you remember how to use libev_custom stuff? [07:00] micheil: sure, but I'll be back in about 30mins. [07:00] sh1mmer: unomi: DOM programming is often the majority of client side word [07:00] unomi: sh1mmer: werd dawg [07:00] creationix: chandru_in: also you can look at the node modules page on the wiki and look for c modules [07:00] sh1mmer: ACTION is an old grump :) [07:00] creationix: many of them use the libev thread pool [07:00] unomi: sh1mmer: weren't you the one talking about codesharing? [07:01] chandru_in: thanks for the tip [07:01] sh1mmer: creationix: btw, I should send you some stuff for howtonode [07:01] sh1mmer: unomi: yep. That's why I'm all into YUI3 on the server [07:01] creationix: sh1mmer: yes, please [07:02] unomi: sh1mmer: if you want to argue that the majority of clientside js 'that you do' is against the dom, then what is there to share? [07:02] unomi: yui3 certainly is lovely ;) [07:02] sh1mmer: unomi: Dav Glass got YUI3 including the DOM libraries running on Node [07:02] sh1mmer: using jsdom [07:02] sh1mmer: and a few wrappers [07:02] unomi: yes I saw, its pretty sexy [07:02] sh1mmer: right, so I've been building on that a bunch [07:03] creationix has joined the channel [07:03] chandru_in: creationix: What's wrong with just Emit-ing events from the thread? Ingoring the fact that thread pooling is good [07:03] sh1mmer: I have a demo of YUI calendar using the yui3 yql plugin on both the client and the server [07:03] sh1mmer: so you write the calendar out on the server [07:03] unomi: not sure how many times you actually care about rendering js style widgets to non js users, but the idea itself is top dollar [07:03] sh1mmer: then on page load it re-loads it as ajax and uses the same gallery-yql code to do the ajaxing on the calendar on the client [07:03] sh1mmer: it's awesomesauce [07:04] unomi: yup [07:04] sh1mmer: unomi: well you start with "widgets" and if you call them "pagelets" you have facebook [07:04] sh1mmer: :) [07:04] chandru_in: creationix: Actually I'm trying to figure out a segfault (I'm very new to v8) [07:05] unomi: sh1mmer: sure, but I am not sure that I would really want my server to do all that heavy lifting, but its nice that it can [07:05] sh1mmer: unomi: there are a lot of performance benefits [07:05] unomi: still, you could likely program yui3 from coffee script, which is where we started [07:06] sh1mmer: unomi: right, but it would be ugly and not coffee-script like a lot of the time [07:06] unomi: depends.. [07:06] unomi: dont you be calling yui3 ugly [07:06] sh1mmer: unomi: I can call them ugly from my cube if I like [07:06] sh1mmer: ;) [07:07] unomi: I don't know that there are that many 'performance' benefits to it [07:07] unomi: I mean, sure, for a low load server you get faster initial loads [07:07] sh1mmer: unomi: rendering on the server has definate performance benefits [07:07] unomi: sh1mmer: it places a higher load on the server [07:07] sh1mmer: unomi: than what? [07:07] unomi: you will see that performance boost disappear real quick [07:08] unomi: erm, than not loading DOM + manip + render html? [07:08] sh1mmer: unomi: oh, yeah. It's all trade offs [07:08] sh1mmer: personally I believe that hardware in generally cheap [07:08] unomi: unless you are in a situation where you can render that to a static resource - but.. [07:08] sh1mmer: innovation and code complexity is hard [07:09] sh1mmer: unomi: you could probably take a bigpipe approach [07:09] unomi: sh1mmer: it all depends I guess [07:10] unomi: I think its nice that you can, should you need to, cater to the non-js browsers [07:10] unomi: besides that I don't believe it offers that many advantages [07:10] sh1mmer: unomi: that's part of it, but raw page load speed denotes not relying on JavaScript for rendering [07:11] sh1mmer: unomi: and we can massively increase code re-use if we have a server side DOM [07:11] unomi: I don't really see it [07:11] unomi: I mean, I like the IO reusability, thats pretty hot [07:11] unomi: but DOM in the server? really? [07:12] unomi: DOM is bad enough in the browser [07:12] sh1mmer: IO is awesome, rendering is awesome, validation [07:12] sh1mmer: unomi: DOM isn't my favourite API but if it's actually W3 spec it's ok [07:12] unomi: yeah, but you would validate against a jsonschema or yml anyway [07:12] sh1mmer: and again, using YUI3 means to code to YUI not to DOM [07:13] chandru_in: can't I create v8 handles in a new thread created within a C++ module? [07:13] sh1mmer: ok [07:13] sh1mmer: I'm going to actually write some code [07:13] unomi: enjoy [07:13] sh1mmer: instead of just talking about it [07:13] sh1mmer: ;) [07:14] jetienne: naive question, dom is mainly about rendering the page in the browser, which part would be usefull in a server ? [07:15] sh1mmer: jetienne: rendering the page on the server [07:15] sh1mmer: and then pushing out that HTML to the browser [07:15] unomi: jetienne: basically as sh1mmer was saying, you can decide to think that your one server will be faster than the 100s if not 100s of clients that are connecting to you, and render the initial view for them [07:16] sh1mmer: unomi: it's not about being "faster" than the client [07:16] sh1mmer: it's about the way that browsers work [07:16] sh1mmer: script loading is blocking [07:16] jetienne: sh1mmer: unomi: but this is want mvc model are about... how is that related to dom ? [07:16] sh1mmer: if you want to render pages optimally fast you don't have them using scripts to render [07:16] sh1mmer: because it blocks all other functionality [07:17] jetienne: sh1mmer: // loading is there or coming real soon. only execution is serial [07:18] sh1mmer: jetienne: either way the optimal way to load a page is to not do all your rendering using scripts [07:18] unomi: jetienne: not really sure what you mean by mvc [07:18] sh1mmer: so if you can use a DOM on the server you can reuse the same javascript code to render the DOM on the server as you want to use after onload to render your widgets into functionality [07:18] sh1mmer: etc [07:19] jetienne: unomi: stuff like rails in ruby, symfony in php, or django in python. all are based on mvc model. aka server code to generate pages on the server. http://en.wikipedia.org/wiki/Model–view–controller for a generic definition [07:19] unomi: jetienne: I know what mvc means, I just don't know why you bring it up. [07:19] sh1mmer: jetienne: I'm pretty sure people in this room know what MVC is [07:19] jetienne: oh i just understood [07:19] unomi: mvc doesn't state that the server must be the 'mc' with the browser being a lowly v recipient [07:20] unomi: you can do full mvc in the browser [07:20] sh1mmer: unomi: have you seen getify's cvc stuff? [07:20] jetienne: you want to build your page entirely in js via something like jquery ?* [07:20] unomi: nope [07:20] unomi: anything but jQuery :p [07:21] jetienne: well if speed is the matter, mvc is likely faster and likely easier than a pure js page building [07:21] sh1mmer: http://www.slideshare.net/shadedecho/dude-wheres-my-ui-architecture [07:21] jetienne: the template parser can be native and highly optimized. [07:22] unomi: I'll have a look [07:22] TS_ has joined the channel [07:24] unomi: sh1mmer: yeah, pretty much [07:24] jetienne: ok maybe it is because i dont have coffee [07:25] unomi: its a bit like.. why is everyone concerned about the initial load? [07:25] jetienne: the cvc doesnt have a model, how does it handle data ? [07:25] unomi: just put up a time consuming but light landing page [07:25] unomi: the initial load is only for people who have never been to your site before [07:26] unomi: otherwise they would have the js cached and ready to go [07:26] unomi: start off with a textual intro, or gimmicky and light [07:26] unomi: and precache for the main course [07:28] jetienne: http://www.slideshare.net/souders/web-20-expo-even-faster-web-sites <- on the caching + initial page load [07:28] unomi: jetienne: it has a model - json [07:29] jetienne: unomi: json is a format, not a model [07:29] unomi: jsonschema [07:30] viktors has joined the channel [07:32] olegp has joined the channel [07:33] jetienne: oh i missed it in the slides [07:33] virtuo has joined the channel [07:33] jetienne: trying to understand the advantages of cvc vs classic mvc [07:34] jetienne: cvc is able to do render the template in the server or in the browser [07:34] jetienne: and thus if the server got more rescources it may be better for the browser (if it is on a low phone for example) [07:35] dahankzter has left the channel [07:36] jetienne: ACTION notes not to irc before coffee [07:52] markwubben has joined the channel [07:52] markwubben has joined the channel [07:55] cloudhead has joined the channel [07:58] _announcer: Twitter: "What i would love to see a Node.js implementation of SPDY ( http://www.chromium.org/spdy )" -- Arnout Kazemier. http://twitter.com/3rdEden/status/17852582169 [07:58] dahankzter has joined the channel [08:09] freshtonic_ has joined the channel [08:10] MattJ has joined the channel [08:10] Dmitry1 has joined the channel [08:11] virtuo has joined the channel [08:16] ewdafa has joined the channel [08:16] SamuraiJack has joined the channel [08:25] ph^_ has joined the channel [08:26] TomY has joined the channel [08:27] tomc has joined the channel [08:30] xla has joined the channel [08:41] hansek has joined the channel [08:46] jetienne: that would be nice indeed. but i think only google got spdy [08:47] _announcer: Twitter: "Boardie - Online fully collaborative electronic whiteboard based upon node.js http://github.com/ciaranj/boardie" -- Steven Holdsworth. http://twitter.com/holsee/status/17854433473 [08:47] hassox has joined the channel [08:51] _announcer: Twitter: "@silverSpoon Nope.. wont be long until I do thou (probably at the weekend), needa set up a wee VM w/ node.js." -- Steven Holdsworth. http://twitter.com/holsee/status/17854574387 [08:57] markwubben_ has joined the channel [09:00] caolanm has joined the channel [09:03] jblanche has joined the channel [09:08] royi has joined the channel [09:09] _announcer: Twitter: "found out that node.js http parser parses the http body even if you don't listen for 'data' events..." -- Pedro Teixeira. http://twitter.com/pedrogteixeira/status/17855245092 [09:12] aubergine has joined the channel [09:13] PyroPeter has joined the channel [09:13] bmizerany: what's the take on naming "private" methods "foo_" vs. "_foo"? I see it used interchangeably throughout nodes' source [09:16] zomgbie has joined the channel [09:19] aliem has joined the channel [09:19] jetienne: python is using _foo [09:20] bmizerany: I prefer _foo as well. [09:21] pandark_ has joined the channel [09:27] MattJ: +1 to _foo [09:28] royi has left the channel [09:32] _announcer: Twitter: "Fun fact: you can’t have the string “.js” in your @Twitter. bio. Anywhere. It gets removed. Having to use hackery to get “Node.js” in mine." -- elliottcable. http://twitter.com/elliottcable/status/17856117514 [09:32] derferman has joined the channel [09:32] sh1mmer: _foo is nice [09:32] sanchothefat has joined the channel [09:36] hellp has joined the channel [09:37] mitkok has joined the channel [09:37] Ori_P_ has joined the channel [09:38] mscdex: i think ryah uses foo_ in the C sources [09:39] mertimor has joined the channel [09:39] _announcer: Twitter: "Hello World benchmark on MBP: node.js 5000 r/s and tornado 1800 r/s. #nodejs #python #tornado #webdev" -- Christian Scholz. http://twitter.com/mrtopf/status/17856385596 [09:41] teemow has joined the channel [09:46] virtuo has joined the channel [09:49] Dmitry1 has joined the channel [09:57] _announcer: Twitter: "How to Install Node.JS on Windows - http://www.dzone.com/links/r/how_to_install_nodejs_on_windows.html" -- Abrdev Blog. http://twitter.com/abrdev/status/17857021544 [09:57] lianj_ has joined the channel [10:04] hojberg has joined the channel [10:05] sixbit_ has joined the channel [10:08] maritz has joined the channel [10:08] mitkok has joined the channel [10:12] Lazesharp has joined the channel [10:12] Lazesharp: hi guys [10:12] Lazesharp: in HttpServer, is there an event that's called when a client closes an open connection? [10:13] Lazesharp: HttpServerRequest.end seems to get called at the end of the request, not when the client connection closes [10:13] Lazesharp: and HttpServerResponse doesn't appear to have any events [10:15] aubergine has joined the channel [10:15] mscdex: !api events in server [10:15] _api: mscdex: http.Server events: request(request, response), connection(stream), close(errno), upgrade(request, socket, head), clientError(exception) [10:16] mscdex: !api events in serverrequest [10:16] _api: mscdex: http.ServerRequest events: data(chunk), end() [10:16] crohr has joined the channel [10:16] mscdex: end maybe? [10:16] rolfb has joined the channel [10:17] mscdex: unless... [10:17] mscdex: !api properties in serverrequest [10:17] _api: mscdex: http.ServerRequest properties: method, url, headers, httpVersion, connection [10:17] mscdex: you could listen on the underlying net.Stream's events for the serverrequest [10:17] mscdex: !api events in net.stream [10:17] _api: mscdex: net.Stream events: connect(), secure(), data(data), end(), timeout(), drain(), error(exception), close() [10:18] mscdex: so, request.connection's end or close events looks like what you may need [10:18] mscdex: Lazesharp: ^ [10:18] Lazesharp: mscdex: I've tried using http.ServerResponse.close [10:18] mscdex: not response [10:18] Lazesharp: I'll give ServerRequest.close a go... [10:19] mscdex: it's ServerRequest.connection [10:19] mscdex: that's the underlying net.Stream object [10:19] Lazesharp: ahh right [10:19] Lazesharp: cheers [10:22] Lazesharp: awesome, thanks mscdex :) [10:22] mscdex: iirc ServerRequest.connection's end event fires for non-IE browsers (on receipt of the TCP FIN packet) and it seems that ServerRequest.connection's close event fires for IE (on receipt of the TCP RST packet) [10:22] Lazesharp: for reference: http.ServerRequest.connection.end is what you want [10:22] Lazesharp: that's a little weird :\ [10:22] Lazesharp: how does the browser affect that? [10:23] mscdex: IE sends RST instead of FIN [10:23] mscdex: for some dumb reason [10:23] mscdex: someone was in here the other week with that problem [10:23] Lazesharp: heh, I didn't realise it's taint reached as far as the underlying TCP implementation [10:23] Lazesharp: s/it's/its [10:24] mscdex: so just a little heads up there so you don't get surprised ;-) [10:26] javajunky has joined the channel [10:29] _announcer: Twitter: "@Kwwika what about http://nodejs.org/ ? Do you think that would be possible?" -- Aaron Bassett. http://twitter.com/aaronbassett/status/17858271721 [10:29] Ori_P has joined the channel [10:41] sechrist: hmm [10:41] sechrist: client.setSecure() on http doesn't work without providing credentials? [10:41] sechrist: getting the certs is a major pain in the ass [10:44] ryan[WIN]: DERP [10:45] sixthgear: hi ryan[WIN] [10:45] ryan[WIN]: hay [10:46] aubergine has joined the channel [10:46] tmedema has joined the channel [10:46] Tinned_Tuna has joined the channel [10:46] Lazesharp: mscdex: cheers dude, thankfully I don't need to care about IE as this is an API comet server - also I imagine upstream load-balancers will likely sort out the TCP connection properly [10:46] Lazesharp: anyone got any good advice on load testing a comet application? [10:47] mscdex: sechrist: you should just be able to pass in nothing or null and it'll use the default list of certificates that comes with node [10:47] Tinned_Tuna: ryan[WIN]: Heya [10:47] ryan[WIN]: hay Tinned_Tuna [10:47] ryan[WIN]: is everyone following me in here now lool [10:47] ryan[WIN]: holy crap i just realized there's 220 people in here now [10:47] ryan[WIN]: when did that happen [10:47] mscdex: right when you got here [10:47] sechrist: mscdex: crypto.createCredentials({})? I did that and it's throwing for "cannot call method finish" [10:48] ryan[WIN]: mscdex, i've beencoming here for a while though [10:48] mscdex: sechrist: no. net.Stream.setSecure(); [10:48] mscdex: sechrist: or client.setSecure(); [10:49] sechrist: var client = http.createClient [10:49] sechrist: client.setSecure() did nothing [10:49] sechrist: the request just vanished [10:49] _announcer: Twitter: "too bad that npm seems not to install any packages.. #nodejs #npm" -- Christian Scholz. http://twitter.com/mrtopf/status/17859098607 [10:49] mscdex: vanished? [10:50] sechrist: yeah nothing happened [10:51] mscdex: oh... what does your createClient line look like? [10:52] sechrist: haha whoops [10:52] sechrist: port was off, that's all [10:52] mscdex: :o [10:52] sechrist: you have to explicitly verify right? [10:52] sechrist: not happening by default? [10:52] mscdex: no [10:53] sechrist: getpeer whatever and validate creds [10:53] mscdex: it does it automatically from my experience [10:53] sechrist: the shit I always disable in curl [10:53] sechrist: ah k [10:54] ryan[WIN]: i seem to remember there only being like 60 people when i first came here [10:54] syaramak has joined the channel [10:54] mscdex: ryan[WIN]: then wargamez was released [10:54] ryan[WIN]: ohhhhh [10:54] syaramak: mscdex: do you ever sleep :D [10:54] mscdex: and everyone joined to go pew pew pew [10:55] ryan[WIN]: how come i was the last person on the planet to knw what wargames is [10:55] ryan[WIN]: (not the movie) [10:55] mscdex: syaramak: nevar! sleep is for the weak! [10:55] ryan[WIN]: (but the js demo) [10:55] ryan[WIN]: i found out literally 10 minutes ago [10:55] syaramak: what is wargames? [10:55] mscdex: ryan[WIN]: the node community moves fast ;-) [10:55] mscdex: syaramak: http://wargamez.mape.me [10:55] ryan[WIN]: apparently! [10:57] mscdex: syaramak: pew pew pew! [10:57] syaramak: nice! [10:57] ryan[WIN]: i made a nodejs demo a while back [10:57] ryan[WIN]: but i host it on my own computer [10:57] ryan[WIN]: so i'm afraid to release it anywhere [10:57] syaramak: why is that arc going thru tinned_tuna? [10:57] ryan[WIN]: i posted it as a comment reply on reddit and got 10k hits on my own dumb cable modem in an hour and a half [10:58] ryan[WIN]: if i put it as a real submission [10:58] ryan[WIN]: i'd never recover [10:58] ryan[WIN]: does anyone have nginx/node hosting [10:58] mscdex: syaramak: no reason, think of it as an isometric "shot" from point a to point b [10:58] mscdex: not crossing through tinned_tuna [10:59] MrTopf has joined the channel [10:59] MrTopf: Hi [10:59] mscdex: ryan[WIN]: there's quite a few people here that have use node on a VPS or whatnot, but there are some actual node hosting places out there [11:00] syaramak: mscdex: cool stuff [11:00] mscdex: ryan[WIN]: i just run it from my own home server [11:00] ryan[WIN]: http://pilot.ryanbroomfield.com:8030/pilot.html [11:00] ryan[WIN]: that's my demo diddy [11:00] tmedema: I'm running node on a shared webhost :p but you probably don't want to do that ^^ [11:01] sechrist: mape needs to add flash ws support [11:02] ryan[WIN]: you click on anyone's name on the score list [11:02] mscdex: flash = teh evil [11:02] ryan[WIN]: and it serves you a replay that you watch of that person's game [11:02] sechrist: mscdex: but it doesn't work in firefox _at all_ [11:02] mscdex: ryan[WIN]: neat [11:02] sechrist: unless nightlies have websockets [11:03] ryan[WIN]: the nodejs side validates the score and keeps an in-memory db [11:03] mscdex: sechrist: why the need for websockets? [11:03] sechrist: mscdex: did you even go to wargamez.mape.me? [11:03] mscdex: sechrist: yes? [11:03] sechrist: it requires websockets [11:03] mscdex: requires or uses? [11:03] sechrist: "This page requires Websocket support. Please use Chrome or Safari." [11:03] sechrist: _requires_ [11:04] mscdex: probably because that's all he implemented for now [11:04] sechrist: all you have to do is literally upload a swf and include some js [11:04] mscdex: i doubt there's a reason to require it [11:04] sechrist: it interfaces with the browser identically as the built in websockets [11:04] sechrist: window.websocket [11:04] mape: Because I wanted to play with websockets [11:04] tmedema: mscdex: how do I show my location on the map? [11:04] mape: tmedema: geoip [11:05] tmedema: oh it just added me [11:05] tmedema: becauseI talked to mscdex [11:05] mscdex: man, this is going to take forever.... ugh. i wish there was like a good special compression software for audio files [11:06] tmedema: one problem is if someone lives on antartica [11:06] mscdex: that's really fast [11:06] tmedema: Anyway -- since you were talking about hosting, are there any free private repository hosts for subversion or git? [11:07] ryan[WIN]: github [11:07] tmedema: There is beanstalk but it only allows 1 repository [11:07] _announcer: Twitter: "@heroku Any ETA on node.js support? Also missing a reply to my beta request (mail), even if it's denied…" -- Peter Haza. http://twitter.com/phaza/status/17859836265 [11:07] ryan[WIN]: oh private [11:07] ryan[WIN]: not public [11:07] tmedema: yeah, private [11:07] mscdex: what about whatsitsname.... [11:07] ryan[WIN]: yeah that thing that has the things [11:07] ryan[WIN]: that's a good one [11:07] tmedema: Oh nice! [11:08] mscdex: repo.or.cz [11:08] mscdex: does that have private hosting? or just public? [11:08] keyvan has joined the channel [11:09] tmedema: "repo.or.cz is a public Git hosting site" [11:09] _announcer: Twitter: "@robertbrook I suspect you'll like node.js too" -- Stef Lewandowski. http://twitter.com/stef/status/17859930261 [11:10] sechrist: I buy too much shit off of the internet [11:11] sechrist: I buy something off of amazon at least once a week [11:11] sechrist: usually more [11:11] ryan[WIN]: what [11:11] ryan[WIN]: why [11:11] sechrist: I buy shit [11:11] ryan[WIN]: i have a book i'm using as a mousepad right [11:11] ryan[WIN]: now [11:11] ryan[WIN]: THE HISTORIES OF HERODOTUS [11:11] ryan[WIN]: VOLUME 1 [11:11] sechrist: like, a few hours ago, I bought an EMF detector and an air purifier [11:12] ryan[WIN]: i got it for free because my local library was throwing it away [11:12] sechrist: ima hunt for ghosts in my house [11:12] ryan[WIN]: here is one of the most important books ever written [11:12] ryan[WIN]: histories was as important as wikipedia is now [11:12] ryan[WIN]: they probably got the same book [11:13] ryan[WIN]: just with a newer binding [11:13] mscdex: that's like those people that buy stuff off woot just for the low price [11:13] mscdex: heh [11:13] ryan[WIN]: and i hopped in my cab and i said [11:13] ryan[WIN]: yo homes to belair [11:13] ryan[WIN]: i have an idea [11:13] ryan[WIN]: just don't buy the stuff [11:14] ryan[WIN]: save up your money [11:14] ryan[WIN]: then one day you can do something meaningful [11:14] tmedema: Anyone knows this? http://www.projectlocker.com/ [11:14] mscdex: like a woot bag o' crap :P [11:14] tmedema: It seems rather.. unprofessional.. [11:14] ryan[WIN]: like start a business idea or go on a trip you'll never forget [11:14] ryan[WIN]: don't piss it away on amazon where it will never do anything for you even though it feels really good [11:14] mscdex: tmedema: it looks more professional than a geocities site [11:15] mscdex: ryan[WIN]: amazon bought woot [11:15] ryan[WIN]: and i do not judge you in any way [11:15] ryan[WIN]: for buying stuff off amazon willy nilly [11:15] tmedema: mscdex: its the only one I found that offers free private repositories (and allow more than 1 project) [11:15] ryan[WIN]: just sayin' [11:15] ryan[WIN]: every day's a gift [11:16] phiggins has joined the channel [11:16] manveru: does anyone know how i could stream files from couchdb through node to act as a proxy with express? [11:16] mscdex: pump? [11:17] mscdex: guessing... [11:17] manveru: hmm, good idea :) [11:18] demolithion has joined the channel [11:18] _announcer: Twitter: "@stef oh / express / yes! ( have you had a go at heroku node.js hosting? )" -- Robert Brook. http://twitter.com/robertbrook/status/17860312167 [11:22] tmedema: The second one I found is http://gitfarm.appspot.com/ - I do not think I trust my code to these sites. [11:22] mscdex: heh [11:27] tmedema: Oh, looks like beanstalk.com allows you to create multiple accounts on the same name and e-mail address. Will do that for each project then I guess. [11:29] tmedema: So now I need to decide: subversion or git [11:30] cloudhead has joined the channel [11:35] _announcer: Twitter: "@aaronbassett Hmm, doesn't Node.js act as the server component? The Kwwika service is the server component. Let me know if I'm wrong." -- Kwwika. http://twitter.com/Kwwika/status/17861063660 [11:36] mape: Anyone else here just got Forrst invites? [11:40] _announcer: Twitter: "Node.js lets you run Javascript code server-side. So @Kwwika pushes to server, and server gets realtime updates." -- Aaron Bassett. http://twitter.com/aaronbassett/status/17861298775 [11:45] Astro has joined the channel [11:45] ryah: yes [11:46] ryah: oops [11:46] mape: hehe [11:46] ryah: foo_ <-- c++ members [11:46] ryah: _foo <-- js private members [11:54] syaramak: testing wargamez [11:55] syaramak: mape: testing wargamez [11:55] mape: syaramak: :) [11:55] micheil: mape: maybe not sure. [11:55] syaramak: mape: awesome! [11:56] syaramak: thank you [11:56] Dmitry1: mape: when will you update map to the one I drew? [11:57] mape: Dmitry1: I tried it but ran into some issues, don't recall which. Mind pasting the link again and I'll add it in [11:57] micheil: mape: actually, I don't have any invites, sorry. [11:57] Dmitry1: mape: http://raphaeljs.com/map.html [11:57] mape: Dmitry1: thanks [11:57] micheil: Dmitry1: hmm.. howdy' [11:58] mape: micheil: Oh no I just got em, wondered if they were doing mass invites [11:58] mitkok has joined the channel [11:58] micheil: oh, right :) [11:58] Dmitry1: micheil: sleepy… [11:58] micheil: Dmitry1: are you still in australia or? [11:58] teemow has joined the channel [11:59] Dmitry1: micheil: Still in Sydney [11:59] micheil: ah, okay [11:59] Dmitry1: No plans to move… [12:00] micheil: I wasn't sure if you were, considering the job with sencha [12:01] chandru_in has joined the channel [12:02] chandru_in: Does libev do threadpooling on its own or does it just offer events to handle our own threads? [12:04] mape: Dmitry1: your map is cleaner/smaller? [12:04] Dmitry1: mape: yes [12:05] _announcer: Twitter: "It's framework playtime with http://github.com/mitsuhiko/flask (python, see http://flask.pocoo.org/) and http://github.com/jed/fab (node.js)" -- Gijs Nijholt. http://twitter.com/nyholt/status/17862512023 [12:05] femto has joined the channel [12:06] mape: There, now it's using yours [12:06] mape: Dmitry1: Thanks :) [12:07] keyvan has joined the channel [12:07] Dmitry1: mape: You are welcome. Looks much cleaner now :) [12:09] micheil: hmm... [12:09] _announcer: Twitter: "Web development node.js: Node.js is a Javascript framework that runs server side, it is built ... http://bit.ly/atltbu" [fr] -- Vincent RABAH. http://twitter.com/itwars/status/17862701918 [12:09] jetienne has joined the channel [12:10] mape: Dmitry1: So how did you create the map? Something automated or manually? [12:10] mape: Guess Illustrator live trace isn't the best way to do it.. [12:14] _announcer: Twitter: "@ Rodrigo3n very same mass, will make your blog using Node.js?" [pt] -- Gileno Filho. http://twitter.com/GilenoFilho/status/17862994221 [12:14] Dmitry1: mape: I grabbed your SVG, edit it in Illustrator and export in SVG [12:15] SvenDowideit has joined the channel [12:15] mape: Ah k [12:21] jetienne has joined the channel [12:24] chandru_in has left the channel [12:25] itodd has joined the channel [12:26] chandru_in has joined the channel [12:29] _announcer: Twitter: "new project requires near real time notification of clients, i assume i should be looking at #nodejs, #comet and ..?" -- Lukas Kahwe Smith. http://twitter.com/dybvandal/status/17863780523 [12:31] chandru_in has joined the channel [12:31] mw has joined the channel [12:32] kevm_ has joined the channel [12:33] rolfb has joined the channel [12:37] saikat has joined the channel [12:39] javajunky has joined the channel [12:39] markwubben has joined the channel [12:44] Tim_Smart has joined the channel [12:51] mklappstuhl has joined the channel [12:54] bpot has joined the channel [12:55] stride has joined the channel [12:55] zapnap has joined the channel [12:55] keeto has joined the channel [13:00] kriszyp has joined the channel [13:01] kersny has joined the channel [13:02] unomi has joined the channel [13:04] mklappstuhl has joined the channel [13:06] WarBot has joined the channel [13:06] paul____ has joined the channel [13:06] mape: hmm [13:06] wao: :) [13:12] _announcer: Twitter: "Finished installing node.js on cygwin, node is awesome, cygwin otoh made me do terrible things - why do I need tetex again?" -- Ant Tears. http://twitter.com/anttears/status/17866194795 [13:13] teemow has joined the channel [13:14] bradleymeck1 has joined the channel [13:14] [[zz]] has joined the channel [13:16] pgriess has joined the channel [13:18] micheil: pgriess: howdy [13:18] pgriess: micheil: hey man. how'd the show go? [13:18] micheil: quite good [13:18] micheil: got some really good feedback on it [13:19] micheil: pgriess: odd. you're not on wargamez.mape.me [13:19] TheEnd2012 has joined the channel [13:19] jherdman has joined the channel [13:19] micheil: mape: ^^ [13:19] mape: micheil: Can't geolocate him [13:19] micheil: ah [13:19] micheil: okay [13:20] pgriess: mape: that's really slick [13:20] mape: Thanks :) [13:21] pgriess: interestingly, my messages aren't showing up in wargamez.mape.me either (in addition to mylocation) [13:21] mape: Yeah right now it doesn't add for users who aren't located. [13:21] pgriess: ah [13:21] pgriess: what are you using for geolocation? [13:21] mape: http://www.geoiptool.com/ [13:22] davidsklar has joined the channel [13:22] pgriess: heh [13:23] _announcer: Twitter: "asciimo - create awesome ascii art with javascript! works in the browser or node.js http://www.easylinkr.com/url/8143" -- EasyLinkr. http://twitter.com/EasyLinkr/status/17866824546 [13:23] pgriess: yeah multiple services dont know where i am [13:23] pgriess: strange, since my isp is at&t [13:23] mape: hmm [13:23] pgriess: you'd think they would be on the ball w/ that [13:23] mape: yeah [13:23] [[zz]] has joined the channel [13:24] kjeldahl has joined the channel [13:25] pgriess: just added myself to http://www.hostip.info/ [13:25] pgriess: maybe that'll propagate [13:25] pgriess: (magic) [13:25] mape: Hmm yeah if they share data [13:26] pgriess: lame that geoiptool doesn't have an update form [13:26] _announcer: Twitter: "What's the best MVC framework for Node.js?" -- Kenneth Falck. http://twitter.com/kennu/status/17867024687 [13:27] pgriess: this has me correct [13:27] pgriess: http://www.maxmind.com/app/locate_demo_ip?ips=99.88.34.85 [13:29] pgriess: anyway, so micheil: think you're going to spin a new version of node-websocket-server? [13:29] tzmartin has joined the channel [13:30] cloudhead has joined the channel [13:33] micheil: pgriess: should I be? [13:34] pgriess: micheil: i was hoping to get the unix sockets related stuff in an official npm-avialable build so that webworkers can depend on it [13:34] pgriess: and install cleanly via npm [13:34] micheil: oh, yeah, right, forgot I merged that in, didn't I? [13:37] pgriess: yeah :) [13:38] zaach has joined the channel [13:43] aubergine has joined the channel [13:44] camilo has joined the channel [13:44] aubergine has joined the channel [13:45] _announcer: Twitter: "html5 canvas gmaps websocket node.js socket.io gpsd ais aivdm. Teaching an old dog new tricks. reviving old shiptracking project - in html5." -- Stian Berger. http://twitter.com/stiberger/status/17868204718 [13:48] ben_alman has joined the channel [13:55] jetienne_ has joined the channel [13:55] khug has joined the channel [13:57] jetienne has joined the channel [13:57] figital has joined the channel [13:58] gf3 has joined the channel [14:00] pgriess: damnit. there goes productivity for the rest of the day; new iphone just arrived [14:00] siculars has joined the channel [14:01] davidwalsh has joined the channel [14:03] micheil: pgriess: lol. [14:09] _announcer: Twitter: "Connect, Express, & JSGI: 3 popular "middleware" frameworks for Node.js. In other words, targeting the "middle-end" as I define it" -- Kyle Simpson. http://twitter.com/getify/status/17869738845 [14:10] mscdex: pgriess: so you you mean going to port node to the iphone now? :-P [14:10] pgriess: mscdex: lol. actually if i could figure out a way to do so w/o jailbreaking i'm sure yahoo would pay me to do it [14:19] maritz has joined the channel [14:21] softdrink has joined the channel [14:21] blackdog has joined the channel [14:26] davidsklar has joined the channel [14:28] bradleymeck_ has joined the channel [14:28] peburrows has joined the channel [14:30] jakehow has joined the channel [14:32] javajunky has joined the channel [14:33] javajunky has joined the channel [14:36] saikat` has joined the channel [14:40] DozyPieman has joined the channel [14:43] JimBastard has joined the channel [14:43] JimBastard: todos los neptune rey granizo y respiradores su agua! [14:44] _announcer: Twitter: "Cool! Node.js author Ryan Dahl at Coworking Cologne tonight! http://tinyurl.com/3x7okeo (thanks @mtopf)" -- Vidar Andersen. http://twitter.com/blacktar/status/17872011581 [14:47] Yuffster has joined the channel [14:47] joshbuddy has joined the channel [14:48] camilo: JimBastard: what does it mean ? [14:53] b_erb has joined the channel [14:57] ajpiano has joined the channel [14:58] quirkey has joined the channel [15:00] matt_c has joined the channel [15:01] JimBastard: camilo: http://maraksquires.com/translate.js/ [15:03] mikeal has joined the channel [15:03] tmpvar has joined the channel [15:04] gwoo: JimBastard: there is a problem displying some characters [15:04] gwoo: "Je veux tacos s'il vous plaît." [15:06] JimBastard: gwoo: what browser [15:07] gwoo: camino [15:07] JimBastard: ? [15:11] chrischris has joined the channel [15:13] aurynn has joined the channel [15:14] camilo: JimBastard: ohh, but that sentence doesn't make sense in spanish :) [15:18] kodisha has joined the channel [15:22] JimBastard: camilo: blame google [15:23] bradleymeck_: !translate todos los neptune rey granizo y respiradores su agua! [15:23] _utility: hail the king neptune and respirators your water! [15:25] tjholowaychuk has joined the channel [15:25] JimBastard: bradleymeck_: i get diffirent results [15:26] bradleymeck_: using translate.js? [15:26] JimBastard: all hail king neptune and its water breathers [15:26] JimBastard: yep [15:26] JimBastard: i think its your language detection [15:26] bradleymeck_: !translate Spanish:English todos los neptune rey granizo y respiradores su agua! [15:26] _utility: all hail king neptune and respirators your water! [15:27] indexzero has joined the channel [15:27] bradleymeck_: imma go into node.js.bots to try and sort that out then [15:31] bmizerany has joined the channel [15:34] JimBastard: back sorry bradleymeck_ [15:34] JimBastard: yeah bradleymeck_ i get [15:34] JimBastard: all hail king neptune and its water breathers [15:34] JimBastard: http://maraksquires.com/translate.js/ [15:34] bradleymeck_: spanish to english? [15:34] JimBastard: i bet it has to do with the language detection feature you messed with [15:34] JimBastard: yeah [15:34] bradleymeck_: raw spanish to english still doesnt give me that [15:35] JimBastard: todos los neptune rey granizo y respiradores su agua [15:35] keyvan has joined the channel [15:35] JimBastard: turn into [15:35] JimBastard: all hail king neptune and its water breathers [15:36] JimBastard: who knows though... [15:38] bradleymeck_: get that locally, wonder why the bot doesnt get that [15:38] viktors has joined the channel [15:38] JimBastard: no clue [15:39] steadicat has joined the channel [15:39] JimBastard: maybe running a diffirent version [15:39] JimBastard: maybe the default languages arent being set / are being set wrong [15:39] JimBastard: ive seen the translator act strange with the language autodetection stuff [15:39] Astro: !translate Spanish:German todos los neptune rey granizo y respiradores su agua! [15:39] _utility: Alle Hagel König Neptun und Atemschutzmasken dein Wasser! [15:39] Astro: lol [15:39] JimBastard: :p [15:40] JimBastard: !translate English:German ninety nine balloons [15:40] _utility: neunundneunzig Luftballons [15:40] Astro: that's the other “hail” [15:40] JimBastard: !translate English:German ninety-nine balloons [15:40] _utility: neunundneunzig Luftballons [15:40] bradleymeck_: if you use the x:y syntax it wont use detection [15:41] JimBastard: yeah... [15:41] JimBastard: !translate Spanish:English todos los neptune rey granizo y respiradores su agua! [15:41] _utility: all hail king neptune and respirators your water! [15:41] JimBastard: !translate todos los neptune rey granizo y respiradores su agua! [15:41] _utility: hail the king neptune and respirators your water! [15:41] keyvan: !translate German:English Alle Hagel König Neptun und Atemschutzmasken dein Wasser! [15:41] _utility: All hail King Neptune and respirators your water! [15:41] keyvan: lol. [15:42] JimBastard: hey indexzero , this is what i do all day when you are at work [15:42] keyvan: !translate Alle Hagel König Neptun und Atemschutzmasken dein Wasser! [15:42] _utility: Hail King Neptune and respirators your water! [15:42] keyvan: !translate help [15:42] _utility: help [15:42] keyvan: !translate [15:42] keyvan: oops..... :( [15:42] bradleymeck_: lol [15:42] JimBastard: !translate ayudame [15:42] keyvan: ACTION slowly backs away.... [15:42] JimBastard: lol [15:43] JimBastard: you killed it [15:43] bradleymeck_: sshing in, itll be back in a sec [15:43] keyvan: i wonder why that happened. i dont think freenode kills you for flooding, they throttle your messages into a queue [15:44] bradleymeck_: it broke w/ no args, looking at the source forgot to validate args [15:44] _utility has joined the channel [15:44] bradleymeck_: odd [15:46] JimBastard: !translate [15:46] _frankie has joined the channel [15:46] JimBastard: !translate [15:46] camilo: !translate [15:46] bradleymeck_: no man pages for you! [15:46] JimBastard: !translate ayudame [15:46] _utility: help me [15:46] JimBastard: !translate ayudame [15:46] _utility: help me [15:46] camilo: !translate por favor [15:46] _utility: favor [15:47] camilo: ahahah [15:47] JimBastard: !translate porfavor [15:47] _utility: please [15:47] jbr has joined the channel [15:47] JimBastard: !translate Spanish:English "por favor" [15:47] _utility: please [15:47] JimBastard: !translate Spanish:English "por que" [15:47] _utility: that [15:47] bradleymeck_: !translate "por favor" [15:47] _utility: please [15:47] JimBastard: !translate Spanish:English "porque" [15:47] _utility: because [15:47] camilo: por que is why [15:47] camilo: no that [15:48] JimBastard: !translate "porque" [15:48] _utility: because [15:48] JimBastard: !translate "por que" [15:48] _utility: that [15:48] JimBastard: yeah thats strange [15:48] rauchg_ has joined the channel [15:49] camilo: may be it needs the accent [15:50] texodus has joined the channel [15:51] bradleymeck_: !translate '¿Por qué?' [15:51] _utility: Why? [15:52] camilo: hehe, yeap [15:52] Astro: !translate pourquoi [15:52] _utility: why [15:52] Astro: !translate pourquoi ? [15:52] _utility: ? [15:52] Astro: ._. [15:52] Astro: but french people always put space in front of interpunctuation [15:55] bradleymeck_: it looks like pourquoi is the language to the bot [15:55] bradleymeck_: use quotes if you want detection on multiple words [15:55] keyvan has joined the channel [15:55] Astro: !translate "pourquoi ?" [15:55] _utility: Why? [15:55] Astro: right :) [15:55] mape: !translate google [15:55] _utility: google [15:56] Astro: !translate googlen [15:56] _utility: google [15:56] Astro: actually, it would be "to google" [15:56] Astro: !translate german:english googlen [15:56] _utility: google [15:57] sh1mmer has joined the channel [15:57] JimBastard: !translate Scheisse [15:57] _utility: Shit [15:58] kjeldahl has joined the channel [16:00] fermion has joined the channel [16:00] mape: !translate Det verkar som om du har grus i underredet. [16:00] _utility: looks like you have gravel in the base. [16:00] Astro: !translate streichholzschächtelchen [16:00] _utility: streichholzschächtelchen [16:01] bradleymeck_: eww detection on streichholzschächtelchen was English... [16:05] jbr has joined the channel [16:05] indexzero has joined the channel [16:08] Astro: !translate german:english streichholzschächtelchen [16:08] _utility: streichholzschächtelchen [16:09] Lazesharp: !api methods in http.ClientRequest [16:09] _api: Lazesharp: http.ClientRequest methods: write(chunk, encoding='ascii'), end() [16:10] Lazesharp: !api methods in http.ClientResponse [16:10] _api: Lazesharp: http.ClientResponse methods: setEncoding(encoding), pause(), resume() [16:10] Lazesharp: hmm [16:10] Lazesharp: how do you close an open ClientRequest? [16:10] Lazesharp: s/ClientRequest/http.Client/ [16:13] bradleymeck_: request.end() should do it [16:14] dmcquay has joined the channel [16:14] dmcquay: pign [16:14] dmcquay: ping [16:14] dmcquay: just catching up on email [16:14] dmcquay: what can I be most helpful with? [16:16] keyvan has joined the channel [16:17] bradleymeck_: fix my c++? [16:19] jakehow has joined the channel [16:20] JimBastard: dmcquay: getting me a fucking solid audio pipe out of node [16:21] sveimac has joined the channel [16:21] dmcquay: hi JimBastard :) [16:22] jbr has joined the channel [16:22] JimBastard: sup [16:23] dmcquay: just inquiring about your solid audio pipe... [16:23] dmcquay: not sure what you were trying to tell me... [16:24] mjr_: dmcquay: are you looking to make something with node or improve node itself? [16:24] Lazesharp: bradleymeck_: I'm talking about disconnecting the connection [16:24] dmcquay: mjr_ : i'm really not talking about anything [16:24] dmcquay: just joined the channel [16:25] dmcquay: and JimBastard sent me a message [16:25] dmcquay: and i didn't know why nor what he was talking about [16:25] Lazesharp: if the server never closes the connection while streaming a response, how can the client disconnect while receiving the response? [16:25] bradleymeck_: end should do it, but for overkilling it, request.connection.end() then request.connection.destroy() [16:25] mjr_: dmcquay: If you want to learn more about node and help out some, we could always use help keeping the documentation in sync with the code. [16:26] mjr_: There are often new things that come out in the code that aren't documented. [16:26] JimBastard_ has joined the channel [16:26] JimBastard_: stupid computer [16:26] dmcquay: mjr_ - I'm very interested in node generally and would love to help. [16:26] mjr_: api.markdown is supposed to be the authoritative source, but it is wrong about a number of things. [16:26] mjr_: Or just doesn't know about new stuff. [16:27] dmcquay: i'm certainly not much of a node expert though [16:27] dmcquay: but i could probably contribute a bit [16:27] mjr_: Better get going then. :) [16:27] mjr_: Node is awesome, and there isn't that much code to go through if you need to crack it open. [16:27] dmcquay: I'm at work right now [16:28] dmcquay: but i'll check into where to help tonight [16:28] mjr_: Thanks to V8 being so great, a lot of the utility stuff in node is written in JS. [16:28] dmcquay: who are you by the way? [16:28] dmcquay: (name, involvement in project, ...) [16:28] tmpvar has joined the channel [16:28] JimBastard_: who is who [16:28] JimBastard_: me? [16:28] dmcquay: nm, got your name [16:29] JimBastard_: im marak [16:29] dmcquay: JimBastard_, sorry, talking to mjr_ [16:29] tmpvar: hola [16:29] JimBastard_: fuck you tmpvar [16:29] JimBastard_: i mean, HI! [16:29] dmcquay: but happy to hear your name too :) [16:29] JimBastard_: ;-) [16:29] mjr_: I work on node somewhat for my job, so I can do a lot of it during the day. [16:29] JimBastard_: tmpvar i just bought a theremin and an analog audio to midi convertor [16:29] JimBastard_: a few micro midi controllers [16:29] JimBastard_: a new m-audio compact asio device [16:29] mjr_: Woah, speaking of job, I need to go to it. [16:30] JimBastard_: you hear that shit tmpvar , theremin => midi [16:30] tmpvar: theremin? [16:30] tmpvar: googles [16:30] JimBastard_: im gonna try to use it to control my computer [16:30] JimBastard_: ohh dude, they are bad ass [16:30] JimBastard_: ive never actually had the chance to use one [16:30] JimBastard_: but im gonna try to do swipe based Djing [16:30] JimBastard_: where i use my hands to control midi [16:31] tmpvar: ah [16:31] tmpvar: sounds fun [16:31] JimBastard_: yeah for sure, ill have all these extra controllers too [16:31] JimBastard_: my production partner is in town until aug 1 [16:31] JimBastard_: i think we are gonna try to lay down an EP this month [16:36] benburkert has joined the channel [16:38] zapnap has joined the channel [16:43] saikat has joined the channel [16:44] sechrist has joined the channel [16:46] creationix has joined the channel [16:46] siculars has joined the channel [16:51] zomgbie has joined the channel [16:53] kodisha_ has joined the channel [16:54] mikeal has joined the channel [16:58] _announcer: Twitter: "en route to @CowoCo for @ryah's node.js talk" -- David Zuelke. http://twitter.com/dzuelke/status/17881130593 [16:59] _announcer: Twitter: "lisp for node.js http://github.com/jbr/sibilant #nodejs" -- Francisco T. http://twitter.com/frank06/status/17881155226 [16:59] JimBastard_: lol wtf github http://github.com/cache/participation_graph/Marak/translate.js [16:59] JimBastard_: thats not JSON [16:59] mklappstuhl has joined the channel [17:00] saikat` has joined the channel [17:00] zomgbie has joined the channel [17:01] sh1mmer has joined the channel [17:01] ewdafa has joined the channel [17:07] ph^_ has joined the channel [17:07] gwoo has joined the channel [17:07] romainhuet has joined the channel [17:12] zaach has joined the channel [17:13] zapnap_ has joined the channel [17:13] wattz has joined the channel [17:13] gf3 has joined the channel [17:13] wattz: Afternoon [17:14] dmcquay|work: Good Afternoon wattz ! [17:14] wattz: hey hey hey [17:15] rtl has joined the channel [17:16] Sembiance: Hiya everyone :) [17:17] wattz: hi [17:17] wattz: back to code, node/mongo modeling anyone!? :D [17:18] mikeal: huh? [17:18] wattz: im writing little modal class for node (in memory or mongo) [17:19] mikeal: class? [17:19] Ori_P: seen gerad1? [17:19] mikeal: :) [17:19] wattz: mikeal: SEE-MAN-TECHS [17:19] wattz: lol [17:19] mikeal: i use couchdb [17:19] mikeal: and node and other js [17:19] mikeal: and i just store shit [17:19] mikeal: i don't model anything [17:19] wattz: mikeal: lol [17:19] mikeal: i convert it to JSON and i'm like "hey, store this!" [17:19] liucougar has joined the channel [17:19] mikeal: HTTP POST, done [17:20] wattz: im just so excited that i can write good js server side now [17:20] wattz: 1 language for web, then objc for native mobile/desktop [17:20] mikeal: node is awesome :) [17:20] wattz: yah [17:20] wattz: im learning still, but enjoying the transition [17:20] mikeal: actually, the phonegap stuff has me realizing you don't need objc for mobile either [17:20] wattz: i <3 objc though [17:21] wattz: and have for a long time [17:21] wattz: way before iphone [17:21] mikeal: if you like it then it's not a problem :) [17:21] wattz: PowerPC dze [17:21] wattz: daze [17:21] wattz: and Mikeal, I like you too [17:21] wattz: lol [17:21] mikeal: hehe [17:21] creationix: mikeal: my company believes that JS is plenty for mobile http://www.endofnative.com/ [17:21] mklappstuhl has joined the channel [17:21] Sembiance: As much as I love JavaScript, and as familiar as I am with it's uses client side, it's taking some getting used to using Node.JS as a persistent websocket server and writing all my server side code in JavaScript :) [17:21] mikeal: i'm actually working on a blog post about mongodb durability [17:21] mikeal: it's long [17:22] wattz: Sembiance: same here [17:22] creationix: mikeal: ohh, a proper rant, this will be fun [17:22] micheil: Sembiance: which websocket server are you using? [17:22] wattz: im writting little things to help me [17:22] mikeal: Sembiance: we played around with a lot of the sencha mobile stuff [17:22] mikeal: it's pretty cool [17:22] wattz: which will prolly end up in my own little private framework [17:22] mikeal: some of the widgets seem to default to iPhone tho [17:22] Sembiance: micheil: Socket.IO + Socket.IO-node [17:22] mikeal: like the whole "back" UI and how it ports to WebOS, Android, iPhone [17:23] mikeal: it's totally different on each and it's hard to abstract [17:23] micheil: Sembiance: oh, I was hoping you'd be using mine ;P [17:23] mikeal: creationix: actually, it's very not-ranty [17:23] mikeal: totally unlike me :) [17:23] Sembiance: micheil: which is yours? [17:23] mikeal: it's about durability in the entire world of databases [17:23] zomgbie has joined the channel [17:23] mikeal: and how mongodb is kind of alone [17:23] micheil: node-websocket-server (npm: websocket-server) [17:24] micheil: Sembiance: it does only the websocket protocol though, doesn't do the extra protocols that sockets.io does [17:24] isaacs has joined the channel [17:25] Sembiance: micheil: With Socket.IO I get native websocket support when it exists... emulated websocket with flash when the browser has flash, and if both are missing it falls back to various comet techniques. This allows me to support a vast number of browsers :) [17:25] micheil: yeah, I know that, but it does add overhead to your server [17:25] [[zz]] has joined the channel [17:26] mostlygeek has joined the channel [17:26] Sembiance: micheil: if at such a point I notice the overhead and measure it to be a problem, I'll seek alternate solutions :) [17:26] micheil: okay then ;P [17:26] Sembiance: micheil: so far it's worked out great, although I haven't launched yet [17:26] Sembiance: it'll be a few more months [17:27] wattz: can't wait till websockets are everywhere [17:27] micheil: I'm also not sure if sockets.io does draft76 [17:27] wattz: that will change everything [17:27] micheil: wattz: websockets already are everywhere, in a way. [17:27] Sembiance: micheil: it doesn't yet. I am running a slightly older version of web-socket-js (the flash emulation of websocket) because the later version switches to the new protocol [17:28] micheil: oh, damn. In which case connections from chromium will be dropped [17:28] micheil: chromium uses draft76 [17:28] micheil: *chromium 6 [17:28] maritz has joined the channel [17:28] mcarter has joined the channel [17:29] Sembiance: mcarter: yo :) [17:29] mcarter: Sembiance, how's it going? [17:30] Sembiance: micheil: I worry about websocket's protocol changing in each draft breaking backwards compatability. although I guess I shouldn't since chrome auto updates itself in the field [17:30] Sembiance: mcarter: good :) we were just talking about how awesome websocket is and how using node.js as a server for it is pretty nice :) [17:31] mcarter: Sembiance, I've been working on something to make it better. Check out http://orbited.org/orbited2 [17:31] micheil: Sembiance: hmm.. not really, I'm considering it fairly stable [17:31] derferman has joined the channel [17:31] mcarter: Sembiance, it basically lets you run WebSocket in any browser so you can not worry about the other comet b.s. [17:31] micheil: and if one change does come up that both myself and Ian Hickson are against, then hopefully it will be vetoed. [17:32] micheil: Sembiance: there's a worry in the ietf that the websocket protocol isn't "secure enough" [17:32] derferman has joined the channel [17:32] Sembiance: mcarter: I was using orbited + js.io as websocket emulation a few months ago in a project, but abandoned the project. Now I use Socket.IO which uses WebSocket, falls back to flash websocket, which falls back to various comet techniques. All handled by a single Node.JS server [17:33] mcarter: Sembiance, yeah, the js.io websocket emulation was always poorly maintained. orbited2 does this a far and away better as its built in [17:33] mcarter: Sembiance, in particular, it will normalize the websocket protocol for you [17:34] micheil: Sembiance: I guess it'd actually be possible to write a subscriber to the node-websocket-server library's events that effectively echos the events to comet and other protocols [17:34] _announcer: Twitter: "And @ ryah's nodejs talk and @ cowoco." [fil] -- Simon Thulbourn. http://twitter.com/sthulbourn/status/17883413506 [17:35] mcarter: Sembiance, In general its not a good idea to depend on flash, as it will 1) fail in all forward proxy situations, 2) fail on non-flash supporting devices [17:35] Sembiance: mcarter: Have you seen Socket.IO and Socket.IO-node ? [17:35] mcarter: Sembiance, i have [17:35] mcarter: Sembiance, It is very good, but I don't like how it hides the WebSocket apis from you [17:35] Sembiance: mcarter: I don't depend on it. Socket.IO falls back to various comet techniques when it's absent [17:35] mcarter: Sembiance, ah, right. good point =) [17:36] mcarter: Sembiance, anyway, socket.io seems reasonable enough for a node.js project I suppose. I'm trying to solve the problem for *everyone else* as well [17:36] aconran_ has joined the channel [17:36] Sembiance: mcarter: aye. If my back end server code was still java, I'd almost certainly be interested in using orbited2 [17:37] mjijackson has joined the channel [17:37] Sembiance: mcarter: I'm basically doing what your doing in orbited right now on a live production server, only I'm using APE as the proxy/websocket normalizer and Jetty7 as the websocket server [17:38] Sembiance: mcarter: not a big fan of APE on the server side, seems very heavy when all I needed was websocket normalization. Wish orbited2 was around when I chose it (a few months ago) [17:38] Sembiance: mcarter: although the site doesn't get much traffic and I don't really have any plans on developing it further. my current project is all node.js on the server [17:39] stevendavie has joined the channel [17:39] JimBastard_: damn i should check my spam filter more often, it seems a lot of people have been trying to send me money [17:39] Sembiance: JimBastard_: rofl [17:40] wattz: hahaha [17:40] micheil: Sembiance: does socket.io-node still require you to patch node? [17:40] Sembiance: micheil: nope [17:40] micheil: oh? [17:40] wattz: this African prince is going to send me like 20mil to hold for him, and when he gets here he said i could have like 5mil of it [17:41] wattz: sent him my account info. I will guy you all Priuses [17:41] wattz: s/guy/buy [17:41] _announcer: Twitter: "Listening to @ryah talking about node.js at @cowoco. (@ Coworking Cologne) http://4sq.com/9nJqrb" -- Sebastian Kippe. http://twitter.com/skddc/status/17883828379 [17:42] wattz: mikeal: you're first [17:43] _announcer: Twitter: "http://chessriot.com/ is very cool - use of node.js, jquery and more for fast, online chess play." -- Stuart Carnie. http://twitter.com/stuartcarnie/status/17883961274 [17:44] monchopena has joined the channel [17:44] _announcer: Twitter: "Ryan Dahl, creator of Node.js is, for a week in Cologne and in the evening @ cowoco http://yfrog.com/28ep2zj" [de] -- phaus. http://twitter.com/phaus/status/17884004949 [17:44] creationix has joined the channel [17:44] monchopena: hellos [17:45] monchopena: can any help me? [17:45] blowery: hellos! [17:46] monchopena: hi blowery [17:46] blowery: what assistance do you require? [17:46] monchopena: i use chat node.js [17:46] monchopena: and i need more than one room [17:46] _announcer: Twitter: "epah ... Node.JS of this seems very simple ... cum shit: |" [pt] -- Luís Nabais. http://twitter.com/d3x7r0/status/17884143591 [17:47] micheil: monchopena: not possible directly from the chat app of node.js's examples [17:47] _announcer: Twitter: "node.js meetup @cowoco with @ryah. @blacktar is streaming: http://www.ustream.tv/channel/blacktar" -- Michael Bumann. http://twitter.com/Bumi/status/17884187936 [17:48] monchopena: micheil: any solution? [17:48] mcarter: Sembiance, you still working on multiplayer card games? [17:48] micheil: umm.. roll your own chat app? [17:48] monchopena: xD [17:48] _announcer: Twitter: "now wouldn't if be great if the node.js website didn't bring my firefox to halt..." -- Luís Nabais. http://twitter.com/d3x7r0/status/17884265076 [17:49] micheil: using examples is often like pastemonkeying [17:49] k3yvn has joined the channel [17:49] JimBastard_: !twitter @d3x7r0 try uninstalling one of the million outdated firefox plugins you have. [17:50] carllerche has joined the channel [17:50] _announcer: Twitter: "@ Majimenezp if I want to use with node.js apparently does not exist or can not find it .." [es] -- Joel Garcia Martinez. http://twitter.com/jgarciama/status/17884360170 [17:50] Ori_P_ has joined the channel [17:50] JimBastard_: !tweet @d3x7r0 try uninstalling one of the million outdated firefox plugins you have. [17:51] _announcer: Twitter: "Photo: listen respectfully to the lecture Ryah of @ # # about rocket science? # Nodejs - at Coworking Cologne http://gowal.la/r/pq5q" [de] -- Michael Stingl. http://twitter.com/michaelstingl/status/17884386665 [17:51] JimBastard_: !tweet @d3x7r0 try uninstalling one of the million outdated firefox plugins you have. [17:51] JimBastard_: i give up [17:51] wattz: i just uninstalled firefox :X [17:52] blowery: i uninstalled twitter [17:52] blowery: that fixed lots of problems [17:52] wattz: lol [17:52] Ori_P_ has joined the channel [17:53] mattly has joined the channel [17:53] mtodd has joined the channel [17:53] maushu has joined the channel [17:58] huyhong has joined the channel [17:58] TS_ has joined the channel [17:59] brianmario has joined the channel [18:01] zapnap has joined the channel [18:01] _announcer: Twitter: "So I've got CouchDB and Node.JS setup (it was easier to do than I imagined), now all I need is to think how to code the damn thing :P" -- Luís Nabais. http://twitter.com/d3x7r0/status/17885029729 [18:05] javajunky has joined the channel [18:05] _announcer: Twitter: "Some #nodejs niceties I found in and during @ryah's talk: sys.pump(), fs.watchFile() 'uncaughtException' and 'SIGINT' events on process." -- David Zuelke. http://twitter.com/dzuelke/status/17885265490 [18:06] tzmartin has joined the channel [18:07] mostlygeek has joined the channel [18:07] mjr_ has joined the channel [18:08] Kiba has joined the channel [18:09] Kiba: hello [18:09] Kiba: I am having problem [18:09] Kiba: with intitializing a new object [18:10] Kiba: http://gist.github.com/465720 [18:10] mikeal1 has joined the channel [18:11] Kiba: current and future's stuff are supposed to be an instance of the class Tetromino [18:11] Kiba: http://gist.github.com/465722 [18:11] Kiba: but something weird is happening that initializing a new Tetromino object doesn't work...and just refer to the tetromino object that's already initialized [18:12] jherdman: so basically you end up with a singleton? [18:13] Kiba: yeah..I think [18:13] jherdman: i.e. you can only ever create one instance of the object [18:14] jherdman: okay, well, i think it has to do with how you're defining your methods [18:14] Kiba: essentially, yes [18:14] jherdman: note that you're defining *all* of your methods on "this", which, in this case, is the Function object called Tetromino [18:14] blowery: Kiba: you're missing a var on the self variable [18:15] Kiba: ACTION faceplam at himself [18:15] blowery: Kiba: so self is being promoted to a global implicitly [18:15] jherdman: you might want to ditch the whole self thing whilst you're at it... [18:15] blowery: yeah [18:15] blowery: use the prototype, luke [18:15] jherdman: lol [18:15] JimBastard_: lol coolSTER [18:15] creationix: Has anybody seen an error where node will eat tons of cpu and refuse connections? [18:15] Kiba: well, it was a suggestion from some guy in node.js [18:15] JimBastard_: yo coolSTER , how did you get soo many github followers without any popular projects [18:16] blowery: i would ignore some guy [18:16] sveisvei: Does anyone know how to handle UTF-8 characters (e.g. øæå etc) via the url/querystring? I end up with "\ufff" *uffff* [18:16] blowery: you're missing lots of var's actually :) [18:16] Kiba: success! [18:16] blowery: all those loops with for(x=0; …), x is a global [18:16] _announcer: Twitter: "@dzuelke Ah forgot about node.js meetup tonight, hope you are having fun." -- Fabienne Serriere. http://twitter.com/fbz/status/17885916196 [18:16] jherdman: Kiba: blowery is right. you should go through, add your vars, and really get rid of that 'self' thing. it's all kinds of weird [18:17] jherdman: missing 'var', on the otherhand, is dangerous [18:17] JimBastard_: It should be noted you should only have ONE var statement per closure [18:17] JimBastard_: and use commas [18:17] blowery: JimBastard_: whatever [18:17] blowery: that's style. compiler doesn't care. [18:17] JimBastard_: not using "var" for a new variable inside a closure will make it go global [18:18] JimBastard_: blowery: it does care, it will compile and run slower [18:18] blowery: prove it [18:18] JimBastard_: you prove it [18:18] JimBastard_: doesnt [18:18] Kiba: premature optimization is the root of all evil [18:18] JimBastard_: bitch [18:18] Kiba: beside [18:18] blowery: you prove it does [18:18] blowery: not it, touches nose, etc [18:18] JimBastard_: I GOT A MAGIC ROCK THAT MAKES TIGERS GO AWAY F [18:18] Kiba: it can easily be replaced with some regular expression, right? [18:18] JimBastard_: MAGIC ROCK [18:18] sveisvei: ACTION takes cover [18:18] blowery: i see your magic rock and raise you a cargo cult [18:19] JimBastard_: thats it, im taking away my magic tiger rock [18:19] Kiba: damn [18:19] sveisvei: I raise you a vuvuzela [18:19] Kiba: somebody stole my sour and onions potato chips! [18:19] blowery: you win [18:19] JimBastard_: blowery: based on the little i know about computers and software, ive got to assume the compiler can handle one var statement way faster then multiple ones [18:19] JimBastard_: its a simple parse situation [18:19] JimBastard_: i mean, thats a general statement [18:19] blowery: JimBastard_: sure, but this is not the speedup you're looking for [18:19] JimBastard_: with no real fact behind it [18:19] JimBastard_: but its logical to me [18:20] JimBastard_: blowery: im looking for a speedup? [18:20] JimBastard_: i can crack 512 ssl in IE6 < 30 seconds [18:20] blowery: while else would you dictate a style choice then? [18:20] JimBastard_: they used me as the inspiration for that guy in Swordwish [18:20] JimBastard_: Swordfish [18:20] blowery: you can program in 3d? [18:20] JimBastard_: i get blowjobs will hacking the gibsen all the time [18:20] mikeal: someone pinged me [18:20] Kiba: what kind of benefits do you get from knowing how compilers work [18:20] mikeal: but i was gone [18:21] blowery: i hacked the gibson in 20s with no need for a blowjob [18:21] JimBastard_: yeah i program in vb6 3d [18:21] blowery: oooo oldskool [18:21] JimBastard_: Kiba: i dont know how compilers work [18:21] JimBastard_: magic [18:21] blowery: magic rock! [18:21] JimBastard_: well i mean i guess i do know a little something about parsing [18:21] Kiba: I am afraid that life will become easy that it become boring [18:21] JimBastard_: but not enough to do anything usfull [18:22] blowery: kiba: nah, we'll just move on to the new hard stuff [18:22] Sembiance: mcarter: turns out Socket.IO and Socket.IO-node DO support draft76 of the websocket spec [18:22] Sembiance: mcarter: the problem I saw with it was due to Socket.IO just not working quite right with the latest web-socket-js [18:23] Kiba: ACTION wonders if he can build an electronic factory in his room [18:23] Kiba: that can produce magnets, resistors, and other basic components [18:23] Lazesharp: does node.js/V8 have a minimum required libc6 version? [18:23] pquerna: mostly a minimum gcc [18:23] pquerna: but should run on anything with linux 2.6ish [18:24] jxson has joined the channel [18:24] Sembiance: mcarter: and yup, still doing multi-player card games. I took several months off, did a few smaller projects. Just started back up again on the card games a few weeks ago :) [18:25] Kiba: card games made with node.js? [18:25] Lazesharp: hmm, weird [18:25] Sembiance: Kiba: basically just like my http://worldofsolitaire.com but instead with multiplayer card games (hearts, go fish, spades, etc) node.js on the back end [18:25] Kiba: ah [18:25] Kiba: I am making multiplayer tetris [18:26] Lazesharp: getting this on CentOS: ../../node-v0.1.100/node: /lib64/libc.so.6: version `GLIBC_2.9' not found (required by ../../node-v0.1.100/node) [18:26] wattz: Lazesharp: yum install g++ [18:26] Lazesharp: cheers [18:26] mcarter: Sembiance, I've beeen doing work on all sorts of multiplayer games lately myself, card games among them [18:26] wattz: might not work [18:26] wattz: but it usually gets the latest GLIBC [18:26] wattz: man, people still use CentOS? [18:26] wattz: :D [18:26] mcarter: Sembiance, still trying to figure out reasonable latency correction models for actual real-time games though [18:27] wattz: WebGL looks cool [18:27] Sembiance: mcarter: yah, I'm only doing card games which for the most part are turn based, so I don't yet have to worry about that part :) [18:27] Sembiance: mcarter: sounds like your probably having a lot of fun though :) [18:28] Lazesharp: wattz: no dice, g++ is already installed, otherwise it wouldn't have compiled ;) [18:28] mcarter: Sembiance, heh, yeah totally. You should try playing me in this multiplayer pacman game (you get to play as the ghosts) [18:28] wattz: gcc --version [18:28] wattz: what version are you running? [18:28] Lazesharp: 4.1.2 [18:29] wattz: there is a glibc dev package you need to grab [18:29] wattz: not sure which with yum [18:29] Sembiance: mcarter: hehe, is it public anywhere? [18:29] wattz: i could tell you in debian [18:29] isaacs has joined the channel [18:29] mcarter: Sembiance, let me pm you [18:29] DTrejo__ has joined the channel [18:29] DTrejo__: hi everyone [18:29] Lazesharp: wattz: yeah, CentOS was not my choice [18:30] Lazesharp: my desktop is Ubuntu, which is safely in the familiar world of debian :) [18:30] wattz: aye [18:30] DTrejo__: I am using version .99 and wondering why process.stderr( function(err){ sys.print(err); } is not working [18:30] wattz: I like debian, but slack is still my fav [18:30] Kiba: I used archlinux [18:30] Kiba: with xmonad [18:30] DTrejo__: correction: process.stderr.addListener( function(err){ sys.print(err); } [18:31] DTrejo__: when I use that it does not print errors to the parent process [18:31] wattz: Lazesharp: Libc6 perhaps [18:31] wattz: ? [18:31] DTrejo__: the paren'ts console [18:31] wattz: yum install libc6 [18:31] mcarter: Sembiance, my pms going through? [18:31] Lazesharp: wattz: 2.5, doesn't appear to be a newer version available [18:31] Lazesharp: ACTION beats CentOS with a stick [18:32] mjr_ has joined the channel [18:32] tilgovi has joined the channel [18:33] _frankie has joined the channel [18:33] DTrejo__: anyone have experience with child processes that won't write to stderr? [18:34] wattz: Lazesharp: dunno man [18:34] wattz: sorry, wish i was more versed in the CentOS ways for ya [18:35] Lazesharp: wattz: no worries, I'll get our ops team to look at it tomorrow, I'm sure they'll figure it out [18:35] wattz: cool [18:36] _announcer: Twitter: "@samfosteriam I so like promises. Was gutted when they were pulled out of the nodejs codebase :(" -- Ciaran Jessup. http://twitter.com/ciaran_j/status/17887099641 [18:36] viktors has joined the channel [18:37] mscdex: DTrejo__: where's the code for the parent and child process to reproduce this? [18:38] _announcer: Twitter: "Developing with Node.js makes programming fun again. One language for server/client side is nice too ;)" -- Wess Cope. http://twitter.com/wattzilla/status/17887235868 [18:38] wattz: haha [18:38] wattz: damn, that shit was quick [18:39] wattz: ACTION is Wess Cope and didn't think the bot was going to be that fast :O [18:41] mjr_: I'll bet you can guess what the bot is written in. [18:41] mscdex: i dare you to guess! [18:41] kodisha has joined the channel [18:41] mscdex: erlang [18:41] mscdex: :P [18:41] mjr_: nailed it [18:41] mjr_: first time [18:42] DTrejo__: mscdex: hi again :) let me send you the code in a few moments [18:43] javajunky has joined the channel [18:44] mjr_: I've been out of the office for a month, and I've downloaded 1GB of software updates, and still going strong. [18:45] wattz: mjr_: sounds like windows? :P [18:45] mjr_: OSX + node + homebrew [18:45] wattz: mjr_: ahh [18:45] wattz: same here [18:45] wattz: ahh, forgot about new itunes shit [18:45] jherdman: homebrew = <3 [18:46] wattz: and the bot MUST be written in php :D [18:46] mscdex: wii homebrew [18:46] mscdex: :-D [18:46] mscdex: that's the next platform for node, the wii [18:46] mscdex: huhu [18:46] mjr_: I have a growing love for homebrew now that they've got couchdb + tracemonkey. [18:46] wattz: people still have wiis? [18:46] wattz: :D [18:47] DTrejo__: mscdex: here is the code: http://gist.github.com/465766 [18:47] wattz: building this model stuff, trying to figure out why/if i need to do: [18:48] wattz: var user = new Model('users', {name: fields.StringField({..])}); [18:48] wattz: or just [18:48] wattz: name: {type: 'string', maxLength:5} [18:48] DTrejo__: mscdex: I just updated it cause I had forgotten to name run.js [18:49] wattz: wondering what the benefits could be of a wrapper function [18:49] _announcer: Twitter: "The current available node.js modules for mysql leave something to be desired" -- Jeremy Stephens. http://twitter.com/kindlyviking/status/17887982793 [18:50] wattz: ahh [18:51] DTrejo__: mscdex: I copied the api docs example, maybe that is wrong? [18:52] isaacs: new version of npm [18:56] jakehow has joined the channel [19:00] _announcer: Twitter: "Been mucking around with Node.js and WebSockets for the last couple hours. Some seriously interesting technology!" -- Rob Hawkes. http://twitter.com/robhawkes/status/17888672516 [19:01] mscdex: oh i see it now [19:02] mscdex: DTrejo__: you are listening on the "error" event for stderr, when it should be "data" as well [19:02] DTrejo__: oh [19:02] DTrejo__: mscdex: awesome that fixed it! [19:02] kodisha has joined the channel [19:02] DTrejo__: mscdex: thank you! [19:02] mscdex: np [19:03] mscdex: if you're just checking to see if the execution was successful, you can check the exit code of the process [19:03] DTrejo__: mscdex: I use run.js to run my server [19:03] DTrejo__: mscdex: so then I can see errors during runtime if I use the listeners [19:03] mscdex: ok [19:04] DTrejo__: it auto restarts when I change something other than the database :) [19:05] kersny has joined the channel [19:06] huyhong has joined the channel [19:07] khug has joined the channel [19:09] joshbuddy has joined the channel [19:09] joshbuddy has joined the channel [19:09] _announcer: Twitter: "I just streamed a highly interesting and entertaining talk on node.js by @ryah at @cowoco http://bit.ly/9KwQPh" -- Vidar Andersen. http://twitter.com/blacktar/status/17889198336 [19:10] _announcer: Twitter: "npm version 0.1.19 http://j.mp/a1hbmD #npmjs #nodejs" -- Ⓘⓢⓐⓐⓒ. http://twitter.com/izs/status/17889284162 [19:12] charlesjolley- has joined the channel [19:12] DTrejo__: isaacs: glad you like my side project ;) [19:13] aheckmann has joined the channel [19:14] _announcer: Twitter: "@francoislaberge A guy at the #node.js channel (a socket.io maintainer I think) was already working on it." -- Mr.doob. http://twitter.com/mrdoob/status/17889605528 [19:16] tmpvar has joined the channel [19:16] ben_alman has joined the channel [19:18] tmpvar: mikeal, hey you were doing some couchdb + nntp + nodejs experiements, right? [19:18] kodisha_ has joined the channel [19:18] _announcer: Twitter: "Lot of ppl @cowoco for @ryah's node.js talk. Thanks so much for coming! http://twitpic.com/22zws7" -- Michael Bumann. http://twitter.com/Bumi/status/17889895041 [19:19] spot|2 has joined the channel [19:23] kpx has joined the channel [19:23] lianj has joined the channel [19:26] teemow has joined the channel [19:27] _announcer: Twitter: "Gonna have to switch from MySQL in this node.js app, I think." -- Jeremy Stephens. http://twitter.com/kindlyviking/status/17890393025 [19:27] JimBastard has joined the channel [19:27] kpx: Hi I am trying to do some JSON message passing over websockets(Basically passing JSON objects by stringyfying them then destringifying them)... I am worried about how to handle the problem where this stringed JSON object will be passed in chunks.... How do I design for something like this.... And I dont want to use HTTP cause its too heavy... [19:27] JimBastard: use socket.io ? [19:28] kpx: JimBastard: Using websockets in Node js... [19:28] mape: kpx: you want the client to start using the data before all is sent? [19:28] JimBastard: does socket.io not use websockets and nodejs? [19:28] kpx: mape: No I want it to wait.... [19:28] mape: JimBastard: doesn't pass it in chunks [19:28] mape: kpx: Then what is the need for chunks? [19:29] JimBastard: why is http too heavy? [19:29] JimBastard: are you sending gigantic JSON messages? is that why you want to chunk? [19:30] kpx: mape: No I dont want to pass in chunks... I am assuming that when we pass data over websockets the data is passed in chunks.... A JSON can be large... [19:30] kpx: JSON string* [19:30] mape: Hmm now from what I know it isn't passed in chunks [19:30] mape: *no, [19:31] mape: Is that your experience or just something you assume? [19:31] kpx: mape: I am assuming.. [19:31] aglemann has joined the channel [19:31] kpx: mape: Is this documented somewhere? [19:31] mape: Then I wouldn't worry about it [19:31] aglemann has left the channel [19:31] mape: micheil: There? [19:31] micheil: yup [19:32] mape: Would you happen to have the answer? :) [19:32] micheil: to? [19:32] mape: kpx assumes websockets send stuff in chunks, I don't think they do. [19:32] mape: But not sure so figured you would know [19:32] micheil: no [19:32] JimBastard: http://en.wikipedia.org/wiki/WebSockets [19:33] micheil: it may be sent on wire as several packets, but the protocol is designed in a way to stitch those together [19:33] kpx: micheil: So in the listener I get it as one string [19:33] kpx: ? [19:33] micheil: just like a massive html page may be sent on wire as multiple packets, the browser know's how to get the data [19:33] micheil: in websockets, all data is treated as a string. [19:34] _announcer: Twitter: "What's with sudden modern Lisp boom? Clojure on Java, Nu on Objective-C, Lisphp on PHP, now Sibilant on node.js..." -- Jeff Tucker. http://twitter.com/trydionel/status/17890802695 [19:34] micheil: hence the need for json encoding if you wish to send data other then strings [19:35] kpx: micheil: Hmm that is ok I just want to be sure that I dont have to handle for a json string like '{a:"adcbjadc" , b: "sadhvdshv"}' coming in two separate parts... [19:35] ryan_gahl has joined the channel [19:35] micheil: kpx: the client should buffer the data, until it recieves the end indicator of a packet [19:35] micheil: \xf iirc. [19:36] kpx: micheil: How about the websocket Node JS server... ? [19:36] micheil: rather, \xff [19:36] micheil: kpx: which one? [19:36] micheil: mine will, not sure about others. [19:37] micheil: (I'm also known as miksago) [19:37] tjholowaychuk has joined the channel [19:37] micheil: tjholowaychuk: howdy' [19:38] tjholowaychuk: micheil: eyyy [19:38] micheil: tjholowaychuk: question: tim's or your haml implementation in js? [19:38] javajunky: not jade ? [19:39] tjholowaychuk: micheil: mine is more haml-like, his is has less strict whitespace (i think), both have bugs lol [19:39] gf3: micheil: http://github.com/visionmedia/haml.js/graphs/languages [19:39] tjholowaychuk: jade is a much better implementation [19:39] gf3: micheil: http://github.com/creationix/haml-js/graphs/languages [19:39] tjholowaychuk: of a haml-like thing [19:39] micheil: gf3: huh? [19:39] javajunky: tjholowaychuk: still not played with it, been distracted :( how goes the express port ? [19:39] micheil: tjholowaychuk: is jade production ready? [19:39] tjholowaychuk: javajunky: worked on it a bit last night, pretty close [19:40] gf3: micheil: there's your answer [19:40] tjholowaychuk: micheil: more so than haml.js and haml-js IMO [19:40] micheil: gf3: no, it was a question as to which was better [19:40] kpx: micheil: http://github.com/creationix/websocket.git [19:40] javajunky: tjholowaychuk: awesome, how much rework do you think I'll need for the existing plugins ? [19:40] underdev has joined the channel [19:40] tjholowaychuk: javajunky: hopefully not tons, I will have a migration guide :D [19:40] gf3: micheil: ARE U SURE!? [19:40] micheil: kpx: in that case, possibly no; but it is quite outdated [19:41] javajunky: tjholowaychuk: good times ;) whats the rps hit do we know ? [19:41] tjholowaychuk: javajunky: not yet but should be very comparable to a regular Connect app, so depends on the machine though [19:41] tjholowaychuk: but Connect showed really small overhead [19:42] javajunky: tjholowaychuk: I mean in relation to pre-connect express :) but yeah i guess can bench, post port :) [19:42] micheil: tjholowaychuk: so.. jade is sorta haml without the %'s? [19:42] tzmartin has joined the channel [19:43] underdev: hi! I'm trying to compile node.js on lubuntu. I have installed gcc, but when i ./con [19:43] tjholowaychuk: javajunky: yup! will be lots of that before I port it over well after but before it is public [19:43] Sembiance: ACTION smiles. [19:43] Ori_P has joined the channel [19:43] tjholowaychuk: micheil: pretty much, gave me an excuse to re-write my haml.js implementation, better error reporting etc [19:43] tjholowaychuk: and get rid of some stuff I did not like with haml [19:43] underdev: hi! I'm trying to compile node.js on lubuntu. I have installed gcc, but when i "./configure", it says it couldn't configure a compiler [19:43] micheil: tjholowaychuk: okay, and can that work directly in the browser? [19:43] kersny_ has joined the channel [19:44] micheil: (I'm needing this for clientside processing in a sammy.js app) [19:44] kpx: micheil: Actually I am making an application that does JSON message passing from peer to peer so I am assuming that websockets are the way to go here... But the server in between does some processing now how to make this robust to handle chunking ? [19:44] tjholowaychuk: micheil: nope, it is optimized for node. haml-js or jquery-haml or something does client side I think [19:44] JimBastard: kpx: giving up seems like a viable option [19:44] JimBastard: :-) [19:44] micheil: kpx: I'm not sure I get you. [19:45] micheil: kpx: by websocket protocol specification, the data received on a socket *must be* buffered until a \xff character / byte is detected [19:46] micheil: so, that applies to both servers and clients [19:46] micheil: if a client or server isn't spec compliant, then there's bound to be errors in communication [19:47] kpx: micheil: Hmm so most GIT implementations should obviously follow this.... Hmmm... thanks [19:47] micheil: most GIT implementations?! sorry, you've really lost me. [19:47] _announcer: Twitter: "@NithinSR sse this http://nodejs.org/" -- Vinu. http://twitter.com/jangomaster/status/17891555967 [19:48] kpx: micheil: as in all the projects on GIT that i am using... Sorry [19:48] micheil: well, the websocket implementation you're currently using doesn't support draft76 (which is in chrome 6 and chromium 6) [19:49] kpx: micheil: If its in teh standard then the GIT projects like the one I am using for my app would be kidding itself if it dint meet a requirement like that which is on the specs.... [19:49] micheil: kpx: a lot of websocket servers are only "kidding themselves", as people were (are?) under the assumption that writing a websocket server is an easy task [19:50] kpx: micheil: i think this http://github.com/guille/node.websocket.js/ is a good implementations [19:50] JimBastard: guille (author) April 30, 2010 [19:50] kpx: micheil: People are telling me to use this is a better option.... [19:50] JimBastard: uhh huh [19:50] micheil: i think this is a good implementation: http://github.com/miksago/node-websocket-server [19:51] JimBastard: go for it kpx [19:51] micheil: but I'm biased because I wrote it [19:51] blowery: has anyone written a gopher server in node yet? [19:51] JimBastard: http://goodluckwiththatdude.com/ [19:51] JimBastard: blowery: maybe on the modules page...i dunno [19:51] JimBastard: i thought i heard something [19:51] micheil: blowery: someone wrote a bittorrent client, so.. possibly [19:52] kpx: micheil: Does your implementation follow that basic thing then? [19:52] micheil: kpx: mine is spec compliant. [19:52] micheil: to about 90% compliance. [19:53] mscdex: the 10% got lost in teh internets [19:53] mscdex: :P [19:53] kpx: micheil: Whats the 10% then? [19:53] kpx: :) [19:53] micheil: mscdex: not really, the other 10% is the stuff that's still fuzzy in the spec. [19:53] micheil: like highbit packets and stuff [19:53] mscdex: like what? [19:53] micheil: or high order packets [19:53] micheil: most data sent on websockets is currently low-order [19:54] micheil: and as to how to handle a high order packet, it's extremely confusing [19:54] kpx: micheil: teh byte order....Hmm [19:54] kpx: that is hard [19:54] werner_ has joined the channel [19:54] micheil: kpx: not really something that you need to worry about if you're sending json, which will be a utf8 type stream [19:55] carllerche has joined the channel [19:55] kpx: micheil: yeah i know... [19:55] micheil: mine also supports draft76 and draft75 [19:55] kpx: micheil: thanks [19:55] micheil: and can automatically upgrade or downgrade to either protocol [19:56] _announcer: Twitter: "Node.js translate Cygwin is falling ... something only a Pytonnal-2.5.5 works under Cygwin W7 ... at least for me." [hu] -- Peter Galiba. http://twitter.com/Poetro/status/17892045712 [19:58] JimBastard: hey kpx , if you dont mind me asking what is your dev background? [19:58] rob____ has joined the channel [19:59] kpx: JimBastard: Not a lot, am a masters CS student, but i like JS programming.... [19:59] kpx: JimBastard: Why do you ask? [20:00] JimBastard_ has joined the channel [20:00] aubergine_ has joined the channel [20:00] micheil: kpx: Jim's like that. [20:00] tmpvar: lol [20:00] tmpvar: he's just trying to figure out if you're trollable [20:01] isaacs: DTrejo__: what's your side project again? [20:01] JimBastard_: no [20:01] JimBastard_: im just trying to judge how seriously i should take him [20:01] DTrejo__: isaacs: mixest [20:01] JimBastard_: understanding peoples backgrounds is pretty important to understanding social interactions between peope [20:02] JimBastard_: gives context [20:02] tjholowaychuk has left the channel [20:02] tmpvar: JimBastard_, what is your technical background? [20:02] tjholowaychuk has joined the channel [20:02] JimBastard_: tmpvar: technically, i dont have one :-) [20:02] isaacs: oh, nice! [20:02] JimBastard_: THAT AND COLDFUSION [20:02] isaacs: DTrejo__: yeah, i had it playing all day yesterday [20:02] JimBastard_: you know how i roll [20:02] isaacs: DTrejo__: very minimal and nice. [20:02] JimBastard_: custom software for the goverment [20:02] DTrejo__: isaacs: :) [20:03] micheil: mixest? [20:03] JimBastard_: a few application service providers [20:03] JimBastard_: lots of pimped out interfaces [20:03] micheil: DTrejo__: is there a url for that? [20:03] JimBastard_: lots of getting banned from places [20:03] DTrejo__: isaacs: question: what do you use to build your minified js files? right now mixest has a ton of scripts that we *manually* minify. it's bad and it makes development horrible [20:04] DTrejo__: micheil: mixest.com [20:04] femtoo has joined the channel [20:04] JimBastard_: ohh nice thats your DTrejo__ ? [20:04] isaacs: DTrejo__: yuicompressor [20:04] bradleymeck_: id suggest yui or closure [20:04] isaacs: closure is also quite nic. [20:04] DTrejo__: and just a script to concat the scripts? [20:04] isaacs: DTrejo__: yeah, use cat for that ;) [20:04] DTrejo__: for closure for example [20:05] micheil: DTrejo__: if you want something totally different that does that, try using dojo + dojo build tools ;P [20:05] DTrejo__: JimBastard_: ye [20:05] JimBastard_: nice, people keep telling me to join [20:05] DTrejo__: micheil: ok thanks [20:05] JimBastard_: whats the value add over pandora? [20:05] micheil: JimBastard_: it's got more obscure music? [20:05] micheil: :P [20:06] JimBastard_: rgr [20:07] jakehow has joined the channel [20:08] wattz: huh [20:08] wattz: Class is weird [20:08] bradleymeck_: fin hate rotation about a point, always messes me up [20:08] wattz: might have to use my own [20:09] wattz: var X = new Class({ constructor: function() {} }); [20:09] wattz: var Y = new X('argument for constructor'); [20:09] wattz: X keeps saying "undefined" [20:09] wattz: that X is undefined [20:09] JimBastard_: LOL [20:09] JimBastard_: WTF IS A CLASS [20:09] wattz: am I WAY off? [20:09] JimBastard_: EVERYTIME [20:10] wattz: an object. [20:10] wattz: well. [20:10] bradleymeck_: but where is that thing defined [20:10] JimBastard_: http://eloquentjavascript.net/chapter1.html [20:10] pgriess: isaacs: install.sh doesn't seem to be working; 'stable' tag not found [20:10] wattz: it's the class mod from the express guys [20:10] JimBastard_: wattz: you just gave me an aneurism [20:10] isaacs: pgriess: whoops, try again [20:10] isaacs: ACTION had to do some unpublish/republish shenanigans [20:11] pgriess: isaacs: that got it. thx. [20:11] bradleymeck_: ignore jim, dont know the class mod personally [20:11] isaacs: np, sorry bout that [20:11] bradleymeck_: isaacs you let me log in on multiple comps easy yet? [20:11] wattz: i usually just use function and extend function prototype [20:11] wattz: but i thought i would try something new, heh [20:11] isaacs: bradleymeck: yeah, just run "npm adduser", no args. [20:11] isaacs: bradleymeck: don't forget your password [20:12] pgriess: isaacs: seeing on* errors w/ node-v0.1.100 [20:13] isaacs: pgriess: that's really weird [20:13] pgriess: i can submit a ticket w/ the log if you wish [20:13] pgriess: of we can just debug live [20:13] isaacs: pgriess: can oyu go into the repl, and check process.EventEmitter.prototype.on? [20:14] pgriess: node> 'on' in process.EventEmitter.prototype [20:14] pgriess: false [20:14] isaacs: oh, ok... [20:14] _announcer: Twitter: "Node.js drawing anarchy: http://bit.ly/b1GH4E" -- Sean O. http://twitter.com/seanodotcom/status/17893272119 [20:14] isaacs: but still, npm.js puts that there... [20:14] isaacs: ohh... derp. needs to be in cli.js [20:14] micheil: night chaps. [20:14] pgriess: micheil: l8 [20:14] micheil: ugh.. 6am :D [20:14] isaacs: oh, no, nvm [20:14] isaacs: it should still work, because it requires npm before that.. [20:14] isaacs: pgriess: gist? [20:15] nofxx has joined the channel [20:15] isaacs: ah, nvm, i see it [20:15] isaacs: grrr [20:19] joshbuddy has joined the channel [20:19] joshbuddy has joined the channel [20:20] pgriess: yeah, once 0.1.19 is installed, i cannot use 'npm activate npm 0.1.18' to get back to the old world [20:20] pgriess: (i think that's the right way to downgrade?) [20:20] SubtleGradient has joined the channel [20:21] isaacs: pgriess: yeah [20:21] brianmario has joined the channel [20:23] rtl has joined the channel [20:24] derferman has joined the channel [20:25] nofxx: Trying to install NPM, should I report I bug? process.execPath = path.join(process.installPrefix, "bin", "node") TypeError: Cannot call method 'join' of undefined npm/npm.js:6:27 [20:26] isaacs: nofxx: i'm on it [20:26] mw has joined the channel [20:27] nofxx: isaacs: cool man, thank you! [20:28] isaacs: nofxx, pgriess: please try again: curl http://npmjs.org/install.sh | sh [20:28] brianmario has joined the channel [20:28] aubergine has joined the channel [20:29] nofxx: isaacs: nope, same error [20:29] pgriess: npm install Nothing to install [20:32] JimBastard has joined the channel [20:34] javajunky has left the channel [20:36] charlesjolley- has joined the channel [20:37] mjr_ has joined the channel [20:39] tzmartin has joined the channel [20:43] stevendavie has left the channel [20:47] ph^ has joined the channel [20:50] isaacs: pgriess, nofxx: try again [20:50] isaacs: should work in 0.1.99 and 0.1.100 [20:51] isaacs: ACTION needs better tests [20:51] DracoBlue has joined the channel [20:53] isaacs: you may need to "make uninstall" or "npm uninstall npm" first [20:53] huyhong has left the channel [20:54] mjr_: isaacs: do you update homebrew with npm releases? [20:54] isaacs: mjr_: nope [20:54] mjr_: Somebody is keeping the node recipe pretty current. [20:55] isaacs: yeah [20:55] mjr_: Which is great. I'd love to be able to say "brew install npm" and have it figure everything out. [20:55] mjr_: Which it most does, actually. [20:55] isaacs: neato [20:55] isaacs: yeah, that'd be good [20:55] isaacs: i'll probably take over the npm homebrew recipe at some point [20:55] isaacs: just too busy for that right now [20:57] isaacs: plus, i feel like npm is still so flaky and releasing new versions pretty quickly, so putting it in homebrew is disingenuous [21:07] pgriess: isaacs: after 'npm uninstall npm', i get this [21:07] tilgovi has joined the channel [21:08] technoweenie has joined the channel [21:08] isaacs: pgriess: gist? [21:08] pgriess: http://gist.github.com/465914 [21:08] isaacs: wow, that's... unhelpful [21:08] pgriess: i had to downgrade to 0.1.18 by hand to uninstall. it's possible that i screwed that up. [21:08] isaacs: pgriess: what about when you curl install it? [21:09] pgriess: that is from the curl install (i just clipped the xfer lines) [21:09] isaacs: oh, ok [21:09] isaacs: node version? [21:09] sechrist has joined the channel [21:10] pgriess: 0.1.100 [21:10] mikeal has joined the channel [21:12] isaacs: just a second... [21:13] isaacs: pgriess: can you do "npm uninstall npm"? [21:13] isaacs: pgriess: then try the curl? [21:13] WALoeIII has joined the channel [21:14] aurynn: does npm resolve deps? [21:14] isaacs: aurynn: yes [21:14] aurynn: Neat :) [21:15] isaacs: pgriess: works for me on 0.1.100 and 0.1.99 (using nave) [21:15] pgriess: isaacs: npm isn't installed (afaict) [21:15] pgriess: ah [21:15] pgriess: there is still an .npm dir in /opt/local/lib/node [21:15] pgriess: fixing [21:15] isaacs: interesting [21:16] isaacs: so, the cache, that's it. should've thought of that. that's why unpublish is Bad Juju [21:16] pgriess: ok that install worked [21:16] isaacs: sweet [21:16] pgriess: well, it installed ;) let me see if it actually works [21:17] pgriess: great [21:17] pgriess: and the new npm works too [21:17] isaacs: pgriess: oddly enough, installing itself is one of the trickiest things that npm does :) [21:17] pgriess: (cache add + publish tarball) [21:17] pgriess: isaacs: i'm not surprised; bootstrapping is hard [21:18] DTrejo__: JimBastard: the value add is newer music, and less work needed to get it playing, and no flash so it works easy on iphone etc [21:19] JimBastard: DTrejo__: rgr [21:19] DTrejo__: (technicallythere's a flash fallback since it's jplayer, but anyway) [21:19] JimBastard: ive been using pandora for over a year [21:19] JimBastard: and im pretty happy with it [21:19] DTrejo__: what's rgr? [21:19] JimBastard: i have like 5-6 pretty well trained stations [21:19] JimBastard: (roger) [21:19] JimBastard: but the selection on pandora is limited [21:19] tmpvar has joined the channel [21:19] JimBastard: the repeats are getting kinda brutal [21:19] DTrejo__: it's not really meant to replace pandora, or anything else that's out there, so yeah [21:20] DTrejo__: JimBastard: soon we'll be adding a no repeats to mixest [21:20] DTrejo__: I dunno how soon, but it's up there on the list [21:20] bmizerany has joined the channel [21:20] teemow has joined the channel [21:20] markwubben has joined the channel [21:21] JimBastard: DTrejo__: where are you guys based out of? [21:21] pgriess has left the channel [21:21] DTrejo__: JimBastard: during the summer mostly out of berkeley, during school year out of providence, berkeley,UCLA [21:21] pgriess has joined the channel [21:21] mostlygeek_ has joined the channel [21:22] markwubben has joined the channel [21:22] indiefan has joined the channel [21:24] creationix: I have found the true use for the *Sync functions in fs [21:24] creationix: DEBUGGING! [21:24] tmpvar: yay [21:24] creationix: I can take a snapshot of a file at any given time and I know that all other processing will block while it works [21:24] JimBastard: lol creationix [21:26] cloudhead has joined the channel [21:26] paul____ has joined the channel [21:26] rauchg_: i got one too, laziness [21:27] khug has joined the channel [21:28] zomgbie has joined the channel [21:31] _announcer: Twitter: "@aaronbassett Yeah, most probably. But should be able to either dummy out things like navigator or update the code for Node.js." -- Phil Leggetter. http://twitter.com/leggetter/status/17897676568 [21:44] waldemarq has joined the channel [21:46] waldemarq: Hello everyone [21:46] grahamalot has joined the channel [21:46] freshtonic has joined the channel [21:47] nofxx1 has joined the channel [21:48] _announcer: Twitter: ""JsBehaviour 1.0 released" #mootools http://bit.ly/9iAncP - Demo/Intro including server side with #nodejs at http://bit.ly/aQFlWo" -- DracoBlue. http://twitter.com/DracoBlue/status/17898607910 [21:53] Blackguard has joined the channel [21:56] mscdex: waldemarq: greetings noder [21:56] DracoBlue has left the channel [21:56] sechrist has joined the channel [21:59] tzmartin has joined the channel [21:59] Ori_P has joined the channel [22:01] _announcer: Twitter: "@zedshaw Javascript is surprisingly pleasant when doing backend stuff (very much enjoy doing node.js projects)." -- Andrey Petrov. http://twitter.com/shazow/status/17899273446 [22:04] Aikar has joined the channel [22:06] mostlygeek has joined the channel [22:07] _announcer: Twitter: "Node.js + websockets + Harmony = multiuserpad: submitted by settimeout [link] [comment] Read a... http://bit.ly/b0nxiq #AJAX #JavaScript" -- AJAX.bz. http://twitter.com/AJAX_bz/status/17899626857 [22:08] creationix: how do I implement a setInterval that fires events at an interval, but doesn't hold the event loop running [22:09] creationix: so a script that runs in finite time can fire an event every 100ms, but stop after all other events finish [22:12] zomgbie has joined the channel [22:14] EyePulp has joined the channel [22:14] EyePulp: yo ho ho [22:14] mscdex: ho ho yo [22:14] EyePulp: .reverse() [22:14] mscdex: depends on your implementation [22:15] EyePulp: =)\ [22:16] admc has joined the channel [22:16] admc_ has joined the channel [22:18] tjholowaychuk: creationix: i dont think you really can without having some other event fire / destroying the timer [22:18] tjholowaychuk: would be good to know if thereis some other way though I run into that with testing quite a bit [22:18] creationix: tjholowaychuk: yeah, I'm just removing the timer for now [22:19] Tim_Smart has joined the channel [22:25] gf3 has joined the channel [22:25] nofxx1: isaacs: npm ok. It worked ;) [22:26] nofxx1: install vows worked too [22:27] isaacs: nofxx1: sweet :) [22:28] nofxx1: isaacs: ty [22:28] DarthShrine has joined the channel [22:28] isaacs: nofxx1: np. sorry about the hiccups this morning. :) [22:30] nofxx1: nah.. that's nothing. Thank you for npm. [22:30] bradleymeck1 has joined the channel [22:35] skampler: micheil: someone wrote a bittorrent client in node? [22:39] carllerche has joined the channel [22:42] captain_morgan has joined the channel [22:42] aliem has joined the channel [22:42] ajpiano has joined the channel [22:44] Dmitry1 has joined the channel [22:44] [[zz]] has joined the channel [22:44] _announcer: Twitter: "node.js meetup today was great, thanks @bumi and @cowoco for hosting and @ryah for the presentation and great discussions" -- Jörn Zaefferer. http://twitter.com/bassistance/status/17901716307 [22:47] DTrejo__: where was the meetup? [22:47] mape: Europe [22:47] DTrejo__: ah ok [22:48] Astro: mape: you're from europe yourself, you could be more precise :) [22:49] mape: Astro: hehe, Germany I believe [22:49] Astro: cologne I think [22:50] WarBot has joined the channel [22:52] hassox has joined the channel [22:55] stride: yeah, I read something about a meetup in cologne, too [22:55] Astro: anybody here who can report? [22:55] mape: Hopefully they are out having a beer or something [22:57] _announcer: Twitter: "Had a nice evening at the node.js meetup :-) Thanks @cowoko for location and @ryah for funniest tech talk so far. THE NODE IS STRONG!" -- Stephan Seidt. http://twitter.com/evilhackerdude/status/17902421923 [22:58] dmcquay has joined the channel [22:59] isaacs: DTrejo__: at least 10% of the reason that I like mixest so much is that i got in early enough to snag the "i" username [23:00] MrTopf has joined the channel [23:01] DTrejo__: isaacs: hehe :) [23:01] DTrejo__: isaacs: today we had our first password reset. and we haven't even build that yet hehe [23:01] isaacs: d'oh! [23:01] DTrejo__: isaacs: it worked out somehow [23:02] isaacs: huh. that's weird [23:02] isaacs: how'd it work? [23:02] DTrejo__: isaacs: my friend deleted the guy's account, and when he remade it his favorites where still there, so things turned out well [23:02] DTrejo__: since they are different tables I beleive [23:02] isaacs: DTrejo__: neat [23:03] isaacs: DTrejo__: it'd be awesome if there was a way to link to the amazon/itunes page for an artist. [23:03] isaacs: i'm sure the artists would <3 it. [23:03] DTrejo__: yes, we plan to do that for artist uploads [23:03] isaacs: and sometimes one song is not enough, if you hear something good [23:03] jxson has joined the channel [23:04] DTrejo__: but since we gather the other songs from random sites, it might be bad to take a referral fee. [23:04] DTrejo__: I don't know the situation [23:04] isaacs: sure [23:04] dmcquay_ has joined the channel [23:05] isaacs: what does last.fm do? [23:05] isaacs: they have a "purchase" link, right? [23:05] DTrejo__: isaacs: ideally we will do that, and might just do it anyway and wait for the lawyers haha [23:05] isaacs: haha [23:05] DTrejo__: yeah that's a good point, I should look into that [23:05] isaacs: permission is more expensive than forgiveness [23:05] DTrejo__: exactlyhehe [23:05] dmcquay has joined the channel [23:06] isaacs: yeah, they have affiliate links for jsut about every song in their db [23:06] satori has joined the channel [23:07] DTrejo__: isaacs: meaning itunes/amazon/cdbaby/etc ? [23:07] DTrejo__: all of those? [23:07] isaacs: DTrejo__: amazon and itunes, at least [23:07] DTrejo__: yeah [23:08] DTrejo__: isaacs: we have to see the demand for this, but we'd like to sell extra high quality versions of the songs. so you hear the low quality streamed version, but if we'd allow you to DL the HQ version and give a big percentage to the artist [23:08] isaacs: yeah, that'd be rad [23:09] isaacs: like, let the artist upload the song, and then if someone buys the HQ version for 99¢, you give 75¢ to the artist directly [23:09] DTrejo__: do you buy high quality versions of songs? or seek them out? [23:09] DTrejo__: exactlyyy [23:09] DTrejo__: cause artists need to make money off their songs [23:09] isaacs: DTrejo__: CD quality is usually enough for me, but i prefer higher quality if i can find it. [23:09] isaacs: DTrejo__: right. cut out the MAFIAA [23:09] DTrejo__: ok [23:09] DTrejo__: hehe yeah [23:09] DTrejo__: if you have any other thoughts on how they could be cut out, let me know [23:10] isaacs: usually it's not hard to find 320 whatevers on the torrents [23:10] isaacs: thing is, that's also cutting out the artist, which is not great. [23:10] isaacs: sometimes i torrent the albums and then donate to the artist if they have a paypal link, and i feel like i'm doing the world a favor. [23:11] DTrejo__: torrents are annoying to find and DL, which is our advantage :) and we might make buyers/listeners feel better [23:11] isaacs: yes. [23:11] isaacs: i buy from amazon a LOT for exactly that reason [23:11] isaacs: i know the metadata is good, not broken files, album art, etc. [23:11] DTrejo__: yeah [23:12] Tim_Smart has joined the channel [23:13] phiggins has joined the channel [23:13] maushu has joined the channel [23:13] pquerna: hey, didn't someone have a half dozen lines to make a one-time subscribe to an event? [23:14] rauchg_: i believe it was ryan gahl ? [23:14] DTrejo__: isaacs: but yeah, if you or your friends have any other ideas on how to help artists make money from their songs using a platform like mixest, by all means let me know :) [23:15] isaacs: DTrejo__: i'll keep it in mind :) [23:16] pquerna: http://github.com/ryedin/node/commit/d9e470ffc20cc99d7b962a97524560c084a58900 [23:16] pquerna: hmm yeah. more than i thought. [23:16] MrTopf has joined the channel [23:16] isaacs: DTrejo__: it'd be cool if marking something as a favorite made it somehow magically get more frequent plays on other peoples' streams. [23:16] isaacs: DTrejo__: like a user-generated favoriting radio station play frequency deal. [23:17] pquerna: ryan[WIN]: you are mr gahl right? [23:18] ryan[WIN]: pquerna, nay [23:18] pquerna: not ryanmcgrath then i thought [23:18] pquerna: hmm [23:23] _announcer: Twitter: "@ Majimenezp checate node.js making that more will come out with a cheap copy in a while" [es] -- Joel Garcia Martinez. http://twitter.com/jgarciama/status/17903837468 [23:23] cloudhead has joined the channel [23:24] isaacs: DTrejo__: hahaha, clicking "thoughts" on your site says "Sorry, none yet" [23:24] isaacs: DTrejo__: you have no thoughts. [23:24] DTrejo__: hehe [23:24] DTrejo__: well if you to the link yuo can see the nodejs on windows article [23:24] DTrejo__: *go to the link [23:25] DTrejo__: isaacs: we plan to added support for directed edge [23:25] DTrejo__: isaacs: the recommendation engine [23:25] DTrejo__: isaacs: we plan so much and yet there's so little time haha [23:25] isaacs: totally [23:25] DTrejo__: so don't expect anything haha [23:26] isaacs: gotta just do incrementally small things that will add value, and refactor along the way [23:26] isaacs: as you get closer to the mountain, it's just a steady uphill climb made up of very small stems. [23:26] isaacs: *steps [23:26] isaacs: can't just jump to the top. that never ever works. [23:27] DTrejo__: we need a helicopter haha [23:27] DTrejo__: though our press on HN and on ideaxidea have brought us a buncha users [23:27] DTrejo__: enough to start building stuff and know we aren't wasting out time [23:27] DTrejo__: *afk* [23:28] satori: Sounds like you are working on something interesting? [23:29] isaacs: satori: he's talking about http://www.mixest.com [23:29] creationix has joined the channel [23:30] satori: cool. All html5? [23:31] coolston_bro has joined the channel [23:32] satori: I'm hearing good music, so i think it may even replace JJJ for me today "P [23:33] hassox has joined the channel [23:34] Tekerson: I was thinking the same thing :) [23:37] hdon has joined the channel [23:37] _announcer: Twitter: "back from a great and very informative node.js meetup. thanks @ryah for the talk!" -- Michael Bumann. http://twitter.com/Bumi/status/17904698140 [23:39] sixbit has joined the channel [23:39] paul____ has joined the channel [23:39] sixbit has joined the channel [23:44] saikat has joined the channel [23:47] mikeal has joined the channel [23:48] satori: Are there any node user groups in Aus? [23:52] Tekerson: not that I've come across, and none listed on meetup.com [23:53] Tekerson: I think the brisbane javascript group had a session on it recently though (wasn't there) [23:53] chilts: ACTION wonders about NZ too :) [23:53] chilts: I could start one I guess [23:54] satori: I am not social enough to start one :P [23:57] pufuwozu has joined the channel [23:58] jashkenas has joined the channel [23:58] satori: mixest needs cross fading [23:59] Dmitry1: Sydney JavaScript group will have node as a next topic [23:59] aheckmann has joined the channel [23:59] satori: cool. Where do they meet?