[00:00] jacobolus has joined the channel [00:02] creationix: playing with ghraphviz to illustrate js concepts http://creationix.com:9000/object-graphs/variables.dot [00:04] dnolen has joined the channel [00:04] tjholowaychuk: creationix: my rapid project has some a methods to generate dot files for schemas [00:05] tjholowaychuk: from the model definitions [00:05] tjholowaychuk: kinda cool [00:05] creationix: neat [00:06] sechrist: tjholowaychuk: how do I use sendFile without function(file){} as the callback for a route? [00:07] sechrist: this.sendFile is coming up as invalid [00:07] tjholowaychuk: sechrist: :s that sounds like a reallly old version you are using [00:07] sechrist: more like example code [00:07] tjholowaychuk: this.sendFile() is gone [00:08] tjholowaychuk: reference expressjs.com [00:08] tjholowaychuk: for recent stuff [00:08] sechrist: res.sendfile now? [00:08] sechrist: k [00:08] sechrist: that's much more logical [00:08] tjholowaychuk: there is res.sendfile() but it is specialized [00:08] tjholowaychuk: and not a replacement for staticProvider. BUT will have Range support when the next version of node is out (with the bugfix) [00:08] creationix: hmm, graphviz on linux is very different than on osx [00:08] temp01 has joined the channel [00:14] tjholowaychuk: anyone know of a pretty cool canvas demo that does not use a massive 3rd party lib? trying something out [00:15] ekidd has joined the channel [00:18] SamuraiJack_ has joined the channel [00:18] mjr_: creationix: I don't know about any reverse proxy caches in node. Are you making one? [00:18] creationix: researching [00:18] creationix: tjholowaychuk: there is my sousaball game [00:18] tjholowaychuk: creationix: trying to find something like a simulation, something with very little interaction [00:19] creationix: hmm, maybe my clock app? [00:20] creationix: tjholowaychuk: http://github.com/creationix/com.creationix.canvasclock [00:20] creationix: runs in the browser too [00:20] tjholowaychuk: ya thaht might be good [00:21] tjholowaychuk: niiiice! it renders [00:21] creationix: ahh, updated graphviz version, much better now http://creationix.com:9000/object-graphs/variables.dot [00:22] slaskis: using gzip with connect/express fails sometimes giving me a message like "wrong content encoding" in my browser, any ideas why? [00:22] jshaw has joined the channel [00:23] konobi: varnish++ [00:23] v8bot: konobi has given a beer to varnish. varnish now has 1 beers. [00:23] jshaw: created a tcp server(used example on docs), and am trying to connect with php, but i'm getting: Error: EPIPE, Broken pipe [00:25] jshaw: i'm not sure where to start debugging that, or what the cause is [00:25] mjr_: creationix: So what's the current state of the art for a non-caching reverse proxy for vhosts? [00:25] jpld: telnet? [00:25] tjholowaychuk: creationix: cool yeah that works out as a good non-huge example [00:25] creationix: tjholowaychuk: awesome [00:25] mjr_: jshaw: are you sure you need a TCP server and not an HTTP server? [00:26] jshaw: i'd prefer tcp, i could make http work [00:26] jpld: try to telnet to it, that may help to isolate [00:27] mjr_: Yeah, telnet is the first thing to try [00:27] jshaw: ok [00:28] threeve has joined the channel [00:28] jpld: usual question i ask every few days, can anyone think up a good way i could simulate a network transfer latency in node running locally? i've used ip_relay but am not really happy with that. [00:29] jshaw: jpld: telnet worked so i guess it's a way i'm creating the socket in PHP [00:29] jpld: jshaw: yep, it sounds like it [00:30] jshaw: more php socket research :) [00:30] jshaw: thanks for the debug tip [00:30] jpld: ahh i just found this, might lead me in the right direction http://github.com/toolness/throxode [00:30] level1_ has joined the channel [00:31] mjr_: jpld: it's a tricky thing, depending on which directions you want to make slower. [00:31] level1_: I get this when I try to do a HTTPClient request. Error: EPERM, Operation not permitted [00:31] level1_: at IOWatcher.callback (net:854:22) [00:31] level1_: at node.js:757:9 [00:31] mjr_: At the node level, you can pick the rate at which you write things somewhat accurately, but it's hard to read things slowly. [00:31] jpld: mjr_: ideally both, i just have some client side code to test loading behavior and its impossible with a fast local node server (0: [00:32] jpld: ahh, some maybe write-only throttling, i'd be ok with that [00:32] saikat has joined the channel [00:33] mjr_: jpld: the only real way to do this accurately though, is with the help of your kernel. If you are on linux, you can use netem, which is awesome. [00:33] mjr_: http://www.linuxfoundation.org/collaborate/workgroups/networking/netem [00:33] mjr_: OSX/BSD probably has something similar. [00:34] jpld: oh nice [00:34] mjr_: Then you can simulate all kinds of other, more realistic things like packet loss, jitter, etc. [00:34] jpld: would make quite an addon [00:35] jpld: mjr_: cheers for the help, lots to read about now [00:35] mjr_: good luck [00:35] ekidd has joined the channel [00:36] tjholowaychuk: dohh PixelArray is not public? :( [00:36] level1_: I can resolve a dns address but not a webpage. The moment I try to access, say, google, it says EPERM, operation not permitted. [00:40] inimino: isaacs ⋱ Did nobody mention sharp references in that whole 'circular' thread? [00:40] isaacs: inimino: hah [00:40] isaacs: your pun is well received, sir. [00:41] inimino: Hehe. [00:41] mjr_: level1_: can you gist some code? [00:41] level1_: mjr_, I literally copied the code from the node.js website [00:42] ben_alman has joined the channel [00:42] banjiewen_ has joined the channel [00:42] mjr_: the google.com one? [00:42] level1_: yes [00:43] mw_ has joined the channel [00:43] dannycoates has joined the channel [00:44] mjr_: level1_: that's really annoying. [00:44] mjr_: what version of node? [00:44] level1_: mjr_, 0.2.2 ... I should probably mention that I'm on cygwin [00:45] mjr_: ohhhh [00:45] kgf: was about to ask that. [00:45] mjr_: how interesting [00:45] kgf: I know nodules dies a horrible death for me on cygwin, seemingly at the dns step... [00:45] level1_: at first I thought it was a problem with dns, but theres a workaround for that problem and I know the dns resolves [00:45] mjr_: Yeah, this is really strange to me. But there's probably some kind of cygwin-related interaction. [00:45] level1_: you add dns servers to /etc/resolv.conf [00:46] kgf: ha, sure enough. [00:46] Akufen: cool http://jsterm.com/ [00:46] konobi: voodootikigod: ping [00:47] level1_: Akufen, doesnt work on latest firefox? [00:47] mape_ has joined the channel [00:47] kriszyp has joined the channel [00:47] Akufen: ah, no idea, works in chrome [00:50] level1_: mjr_, kgf so I hit a wall. I've been messing with this all day, looking at source code etc. What would you suggest my next step to narrowing down this problem be? [00:50] Aria has joined the channel [00:50] level1_: is there a way to see what happens? Like, whether a request is made or not? [00:50] mjr_: level1_: sorry, I can't imagine what would be going on, but I don't have cygwin, so it's hard to experiment. [00:50] Akufen: level1_ by latest do you mean stable or beta? [00:50] mjr_: If you are willing to dig through the source code and rebuild, I'm sure you can figure it out. [00:51] bmavity has joined the channel [00:51] level1_: Akufen, stable [00:51] level1_: mjr_, the thing is that where the error is reported is no where near where its produced [00:52] mjr_: level1_: if you look at where that error pops up, it's in connect, which is after DNS [00:52] mjr_: but if you can connect to IP's, then it sounds like dns.lookup() is leaving your node in a bad state somehow. [00:52] Akufen: level1_ I think websockets is in 4.0, but mine is too wonky to even load a page [00:52] level1_: mjr_, I cant connect to ips [00:53] mjr_: Oh, I thought you said you could. [00:53] level1_: I put in an ip for google as a test, doesnt work [00:53] level1_: sorry if I gave you that impression [00:53] mjr_: level1_: I can resolve a dns address but not a webpage. The moment I try to access, say, google, it says EPERM, operation not permitted. [00:54] mjr_: Oh, so even if you do the lookup manually, then put in one of those IPs for google.com, it still fails the same way? [00:54] level1_: mjr_, yes [00:54] mjr_: ahh [00:54] mjr_: OK then [00:54] level1_: mjr_, but I performed a dns request from node, and it worked fine [00:54] mjr_: OK, I'd dig into net.js, in doConnect() [00:55] mjr_: The very first part runs connect(socket.fd, port, host). I'd print those values and make sure those are sane. [00:55] mjr_: If you change any JS files in lib, you need to recompile node. [00:56] mjr_: If those values look like, small integer, 80, and IP address, then dig into src/node_net.cc [00:57] mjr_: And look for Connect(), and start printing things out in there. The actual connect system is call is made from there in C++. [00:58] level1_: mjr_, can I turn debug mode on? [00:58] mjr_: I don't see why not [00:58] mjr_: NODE_DEBUG=1 node_g example.js [00:58] reid has joined the channel [00:59] level1_: mjr_, I get: big, complicated object, 5984, "74.125.19.147" [00:59] level1_: oh wait, I might have output the whole socket handle, not just its fd [00:59] mjr_: so you wanted to talk to a couchdb? [00:59] level1_: the fd is 6 [00:59] mjr_: I thought you copied the google.com example [00:59] level1_: sorry, I ran a different script [01:00] mjr_: I'm all in favor of having node talk to a couchdb, BTW. [01:00] level1_: mjr_, oh lol [01:01] level1_: wow I feel stupid [01:01] level1_: I somehow got the port number mixed up [01:01] EyePulp has joined the channel [01:01] mjr_: oh, you swapped port and host? [01:01] trave: Im trying to install node on a friends server... I am getting: Checking for program cc : /usr/bin/cc /home/trave/node-v0.2.2/wscript:139: error: could not configure a c compiler! .... is there a "yum install" package that will get me past the cc dependency? [01:01] level1_: I tried it once with google, and again with couch, and then again with google but didn't change the port back to 80 [01:02] level1_: okay, so I can get a website now [01:03] gerred has joined the channel [01:03] mjr_: trave: on debian it's called "build-essential". I'll bet there's something similar with rpm. [01:04] mjr_: level1_: great! But WTF is "permission denied" all about? That's a terribly misleading error. [01:04] trave: thanks mjr_ :] [01:05] level1_: mjr_, yeah... so now I'm trying to access couch... getting a slightly different error: Error: ENOTFOUND, Domain name not found [01:05] level1_: mjr_, this is with "localhost" [01:06] level1_: mjr_, well, 127.0.0.1 works [01:10] Yuffster has joined the channel [01:11] overra has joined the channel [01:12] level1_: weird... 127.0.0.1:9864 accesses my couchdb; but localhost, my ip address, and my hostname all fail [01:13] level1_: to be clear, all of the except my hostname work from a web browser [01:15] bradleymeck has joined the channel [01:17] nathan has joined the channel [01:18] jacobolus has joined the channel [01:19] matt_c has joined the channel [01:19] bradleymeck: sencha has its own conference? [01:20] rcy has joined the channel [01:20] emerleite has joined the channel [01:27] TooTallNate has joined the channel [01:27] boboroshi_ has joined the channel [01:28] bradleymeck: one day im going to write a virus that makes all built in windows games impossible to win [01:30] banjiewen has joined the channel [01:31] c4milo has joined the channel [01:31] level1_: bradleymeck, is this some sort of gambit to drive linux adoption? [01:31] level1_: also, yeah, I got a little bit of couchdb working [01:31] bradleymeck: its to make my win % on solitaire seem reasonable. I have a terrible % [01:34] kgf: nowadays people kill time on crap like farmville instead of solitaire. and based on the insane amount of time they spend on it I have to reckon it IS impossible to win. ;) [01:34] mtodd_ has joined the channel [01:34] level1_: kgf, I don't think you win or lose farmville... Its kinda like simcity I think [01:35] level1_: although I guess you can lose simcity [01:35] kgf: sure, my point is people just don't quit :P [01:35] level1_: yeah [01:36] level1_: I like games where you can build, but sadly there arent very many. Most games involve destroying, and Im not very good at that [01:36] ryan[WIN]: level1_, have you played zzt or minecraft or one of those types of games [01:37] c4milo1 has joined the channel [01:37] level1_: ryan[WIN], nah [01:37] ryan[WIN]: you might like 'em [01:38] c4milo has joined the channel [01:38] nroot7 has joined the channel [01:39] kgf: I was gonna mention minecraft but I didn't bother biting on that one when it was free last weekend. [01:39] kgf: looks like it hooked a couple of people I know though... [01:39] kgf: as if they don't kill enough time on eve already [01:39] ThePub has joined the channel [01:39] _1marc has joined the channel [01:39] trave: im having problems getting the ./configure to work on this server, i was able to get node working just swell locally... it finds gcc, and cc, but not icc or ICL, then throws an error saying: "could not configure a c compiler!" ... any suggestions? [01:40] bradleymeck: g++/gcc installed? [01:40] unomi: is there a writeup for how to work with no.de somewhere? [01:41] unomi: looks like I managed to bork my server [01:41] trave: @ /usr/bin/g++ and /usr/bin/gcc [01:41] bradleymeck: unomi i would presume the node knockout blog is the place to check, if you need to force an update git push -f joyent master [01:42] unomi: bradleymeck: well, I am just wondering about basic things, like what should be in server.js [01:42] unomi: tried a copy of the hello world bound to 'the ip' and port 80 [01:43] bradleymeck: it needs to be a persistent nodejs program (generall it has to keep itself alive like a server) [01:43] unomi: and promptly set it out of commission it seems [01:43] bradleymeck: trave : ask why conf.check_tool('compiler_cc') would fail in #waf [01:43] satori_ has joined the channel [01:43] trave: thx [01:44] bradleymeck: for that in particular why it doesnt set conf.env.CC [01:45] bradleymeck: unomi did that make sense? [01:46] c4milo1 has left the channel [01:46] some1says has joined the channel [01:47] some1says: hello how can i set include path on node? [01:47] bradleymeck: require.paths.unshift(dir) [01:47] some1says: bradleymeck thanks [01:47] unomi: bradleymeck: I think so, the helloworld example should be sufficient it sounds like [01:48] bradleymeck: as long as the program doesnt end, ya [01:48] unomi: when I ssh in to it, where can I find the server.js? [01:48] bradleymeck: its rather hard to find actually, but you can check the logs i think its node-service-log [01:50] unomi: the path doesn't seem existant [01:50] bradleymeck: sec ill check mine i forget how i got it [01:50] unomi: [ Sep 30 01:22:53 Executing start method ("env `cat /home/node/node-service/profile` /opt/nodejs/v0.2.2/bin/node /home/node/node-service/releases/20100930012252/server.js"). ] [01:51] unomi: ls /home/node/node-service/releases/ comes back blank [01:55] bradleymeck: ~/node-service/current seems fine, same with /relaeses here unomi [01:55] unomi: I don't have a current there [01:55] unomi: only profile and releases [01:55] bradleymeck: did you not have any deploys succede? [01:56] MikhX has joined the channel [01:57] unomi: moving to #joyent [01:59] softdrink has joined the channel [02:06] unomi: bradleymeck: is there something I need to do besides push to the repo? [02:06] jashkenas has joined the channel [02:09] Arro has joined the channel [02:09] creationix has joined the channel [02:10] konobi: bradleymeck: sorted =0) [02:10] Yuffster_work has joined the channel [02:11] brianmario has joined the channel [02:11] nroot7: anyone here using joyend node.js machine ? I pushed my hello world server.js but its still running default server.js . [02:11] bartt has joined the channel [02:12] bpot has joined the channel [02:12] unomi: bradleymeck: it was all me [02:12] nroot7: ls [02:13] unomi: nroot7: what do you see when you pushed? [02:14] nroot7: unomi: http://pastebin.com/vPeQ87rb [02:14] nroot7: unomi: but when I cloned joyent's repo I see my server.js in it [02:15] unomi: what happens if you `git pull`? [02:18] nroot7: unomi: http://pastebin.com/6q0yDSue [02:18] bradleymeck: unomi no you just need to push master [02:18] unomi: `git push -f ..` to force it [02:18] agilandfast has joined the channel [02:18] jacobolus has joined the channel [02:19] jchris has joined the channel [02:21] nroot7: unomi: yeah! works [02:21] nroot7: unomi: thanks [02:21] richcollins has joined the channel [02:22] unomi: thank bradleymeck and konobi :) [02:25] mtodd has joined the channel [02:26] mikeal1 has joined the channel [02:26] Tim_Smart has joined the channel [02:28] richcollins has joined the channel [02:28] MikhX has joined the channel [02:28] Tim_Smart: So what have I missed when I was away? [02:29] Tim_Smart: :p [02:29] bradleymeck: you missed the lotto winnings pool [02:29] JimBastard: Tim_Smart: i launched 5 new projects [02:31] bradleymeck: jimbastard 5 in an hour? [02:31] Tim_Smart: JimBastard: While I was away: http://github.com/biggie/biggie-orm/compare/e15866833fcf94124f3bbfca9a580eabff385f1f...master [02:31] ben_alman has joined the channel [02:33] level1_: it was 113 in LA [02:33] level1_: today [02:33] isaacs_ has joined the channel [02:33] halfhalo: yup, because thats how high the thermometer goes! [02:34] halfhalo: Although it was a much nicer 88F in the SF valley today [02:35] bradleymeck: texas has been rather cool this year oddly [02:35] Tim_Smart: Hmm.. Its only 15 C here (59F) [02:36] bpadalino: same here [02:36] bpadalino: i like the fall weather here [02:37] bradleymeck: 89 in austin, but like always 90%+ humidity [02:39] kriszyp has joined the channel [02:40] level1_: It was pretty hot in the south bay [02:40] jpld has joined the channel [02:40] Tim_Smart: http://github.com/biggie/biggie-orm is starting to take good shape. [02:40] Tim_Smart: Just need to clean up in terms of performance etc. [02:41] level1_: Tim_Smart, what does that do? ORM? [02:41] Tim_Smart: Might have to send patches upstream to node_redis etc. [02:41] Tim_Smart: level1_: Yes. [02:41] Tim_Smart: level1_: "Redis powered ORM, which leverages Redis to implement associations, indexes, views and queries. Biggie ORM also has validations and type casting." [02:42] level1_: cool [02:42] Tim_Smart: It has a few tests you can get an idea from. [02:42] fcoury has joined the channel [02:44] unomi: Tim_Smart: you reckon you are going to add json-schema support to it? [02:44] Tim_Smart: unomi: As in JSON over http? [02:44] Tim_Smart: Maybe... [02:44] unomi: well, that and more really [02:45] Tim_Smart: Maybe as a extra library [02:45] Tim_Smart: I want to keep the core ORM light and flexible. [02:45] Tim_Smart: unomi: I'm going to build a browser library for it with socket.io [02:45] Tim_Smart: That keeps all models updated in real-time etc. [02:46] sonnym: have you used socket.io before? [02:46] Tim_Smart: Yeah. [02:46] sonnym: I've been running into issues with it and firefox [02:46] Tim_Smart: Firefox + flash is not cool [02:46] Tim_Smart: Make sure multipart is above flash. [02:46] sonnym: hmm, I'll give that a shot [02:47] Tim_Smart: (Well, from memory. Could be fixed by now) [02:47] unomi: Tim_Smart: check this out: http://neyric.github.com/inputex/tools/builder/index.html [02:47] unomi: http://neyric.github.com/inputex/examples/inputExToSchema.html [02:47] unomi: http://neyric.github.com/inputex/examples/json-schema.html [02:48] kriszyp: unomi: you be interested in perstore if you want json-schema support [02:48] unomi: this could give you an UI for managing objects, clientside (and serverside) validation and .to_form for free [02:49] mjr_: Tim_Smart: you have some things that you need in node_redis to make biggie work? [02:49] ngw has joined the channel [02:49] Tim_Smart: mjr_: Nope, but I just want to make sure performance is top notch. [02:49] mjr_: you and me both [02:49] unomi: nice kriszyp, I see you were the person recommending json-schema to neyric [02:50] Tim_Smart: mjr_: It is working fine for me at this stage, all tests are passing so far (not sure how good coverage is at this stage) [02:50] mjr_: Tim_Smart: I think there's another big speedup waiting in there for large lists of small responses. I'm not happy with how that works right now. [02:50] MikhX has joined the channel [02:50] Tim_Smart: mjr_: For sure. [02:50] sonnym: Tim_Smart: just tried getting rid of flashsocket to no avail. . . after socket.io.js is loaded, a few seconds pass and "this.socket is undefined" is logged in the console. definitely worked a few times [02:51] Tim_Smart: sonnym: Might have to get in touch with rauchg_ [02:51] mjr_: Tim_Smart: like the LRANGE 400 test from redis-benchmark is a lot slower in node_redis, but all of the other ones are as fast in node if not faster. [02:51] sonnym: yeah, I've been thinking about that. plenty of other stuff to work on at the moment, so not the most pressing thing :) [02:51] Tim_Smart: mjr_: Yeah, I can run this script in 20-ish seconds: http://github.com/biggie/biggie-orm/blob/master/extra/stress.js [02:52] Tim_Smart: mjr_: Which accounts for 30k model insertion and deletions. [02:52] mjr_: that seems respectable. [02:52] Tim_Smart: + adding the associations + validating the props. [02:53] mjr_: So is that 30K "ops" or 60K? [02:54] mjr_: Where an "operation" is at the higher level and might translate into multiple redis commands. [02:54] Arro: node.js noob here... does an html file have to be served with node to get all the node stuff? [02:54] Tim_Smart: mjr_: http://github.com/biggie/biggie-orm/blob/master/extra/stress.js#L63-65 [02:54] mjr_: Arro: nope, you can serve HTML however you want to. [02:54] Tim_Smart: mjr_: that collection contains 10k user's with 2 comments each. [02:54] mjr_: Arro: your HTML can have JavaScript that uses XHR/WebSocket to talk back to node if you like. [02:55] Arro: i was probably going to use socket.io [02:55] mjr_: Arro: that is a fine road down which many travel. [02:55] mAritz: i have 2 node servers running in named screen sessions. how can i end one of them via command (aka. i can't attach to it and do it manually because this will be done by a script) [02:55] Tim_Smart: mjr_: I profiled it, and it seems a lot of time is spent in forEach's. forEach is slower than for loops. [02:56] Arro: but in general, i'm trying to think of a way to use django for the webapp'y stuff and node for the 2-way stuff [02:56] Arro: like, i need to have registration, sessions, etc [02:56] mjr_: Tim_Smart: yeah, I was afraid of that. I'm not sure what the conditions are, but sometimes forEach is faster than for, and sometimes it's the other way around. V8 has some magic that I don't fully understand. [02:56] Tim_Smart: Arro: You will have to have some sort of session store they can both talk to. [02:57] Arro: ah [02:57] brianmario has joined the channel [02:57] Tim_Smart: Arro: I would recommend redis, but I'm bias. [02:57] Tim_Smart: mjr_: I'll play around and send patches your way. [02:57] mjr_: Arro: since Tim_Smart and I are talking about node_redis, perhaps you can understand our perspective. [02:58] Arro: at this point i'm just trying to put all the pieces together in my head as far as what fits where [02:58] Arro: if you know what i mean [02:58] devkorcvince has joined the channel [02:59] devkorcvince: what is the node version that is safe for production use? [02:59] Tim_Smart: devkorcvince: Probably none? [02:59] mjr_: Tim_Smart: sounds good. I hope to gain some insight into the nature of this forEach stuff. I love the syntax of forEach, but I love high performance even more. [02:59] devkorcvince: Tim_Smart how about near production use hehehe [03:00] Tim_Smart: mjr_: Meh I don't care about syntax, that is what snippets are for :p [03:00] mjr_: devkorcvince: your best bet is 0.2.2, which is the latest "stable" release. [03:00] Tim_Smart: mjr_: I use forEach when I need closure, and that is about it. [03:01] dipser_ has joined the channel [03:01] mjr_: Arro: if you haven't built your thing yet, you might find that it ends up being easier to do it all in JavaScript. [03:01] mjr_: Arro: switching your brain back and forth between python and JavaScript can be frustrating. [03:01] Arro: mjr_: haha, well i already kind of do that, but i see what you mean [03:02] mjr_: Arro: Since I've been doing fulltime JS for a few months now, when I go back and read some of my old python code, it just gets annoying. [03:03] Arro: mjr_: so if i go that route, i would use something like redis for data storage? [03:04] mjr_: Arro: you certainly could. There are lots of ways to conveniently store your data. I personally use redis for data that changes a lot and that I wouldn't mind losing some of, and couchdb for everything else. [03:05] Tim_Smart: mjr_: http://jsperf.com/foreach-vs-for [03:05] Tim_Smart: Just over 3x faster to use for, for large loops in chrome 7. [03:05] mjr_: Tim_Smart: yeah, I've seen that. It doesn't jive with this though: http://gist.github.com/602847 [03:06] nerdEd has joined the channel [03:07] mjr_: Run that test multiple times and you'll see what I mean. [03:10] abiraja has joined the channel [03:11] softdrink has joined the channel [03:11] mtodd has joined the channel [03:12] Tim_Smart: mjr_: Run this http://gist.github.com/603956 and you get weird output. [03:13] Tim_Smart: mjr_: The forEach isn't populating the array [03:14] _numbers has joined the channel [03:14] _numbers: anyone know why `kiwi install express` would fail these days? [03:14] _numbers: getting a 404 Not Found from kiwijs.com [03:15] Tim_Smart: mjr_: You bench was flawed... [03:15] Tim_Smart: *Your [03:15] mjr_: That came from somebody on the ml this morning. [03:16] Tim_Smart: mjr_: Yeah forEach is 5x slower. [03:16] bradleymeck: _numbers probably cause kiwi is no longer being maintained the server went down and hasnt been grought up again [03:16] Tim_Smart: mjr_: Run this: http://gist.github.com/603956 [03:17] _numbers: bradleymeck: oh :x [03:17] mjr_: oh man, gists are cool. You can just clone, then git pull on them [03:17] mjr_: I'd never tried that before. [03:17] bradleymeck: and changelog for edits hehe [03:18] mjr_: yeah, fantastic [03:18] mjr_: Tim_Smart: oh, so the initialization wasn't actually doing anything? [03:18] Tim_Smart: mjr_: Correct, and it was trying to increment undefined in the for loops, while forEach wasn't even running. [03:18] Tim_Smart: Rather, doing anything. [03:19] Tim_Smart: mjr_: I use length cached loops in my orm [03:20] Tim_Smart: Would be interesting to chuck in a primitive while() loop [03:20] boaz has joined the channel [03:20] saikat has joined the channel [03:21] bradleymeck: sane to keep jni integration to only public properties? [03:21] Tim_Smart: mjr_: for > while as well. [03:22] mjr_: Tim_Smart: I thought I'd tried that before and found no difference, but it's easy enough. [03:23] Tim_Smart: mjr_: I found a little difference, not much though. [03:23] Tim_Smart: Enough to make me change my bufferToString method though. [03:23] micheil: hmm.. [03:23] Tim_Smart: mjr_: If you want, I'll make a pass over node_redis, optimising where I can now. [03:24] Tim_Smart: Making sure tests pass... :p [03:24] mjr_: Yeah, that'd be great. I'm working on a more comprehensive benchmark that exercises several different patterns and then runs those patterns at varying levels of concurrency. [03:25] mjr_: I suspect the biggest win would be if there was some way to tell if we could use strings instead of buffers. Strings are super fast. [03:25] noahcampbell has joined the channel [03:26] micheil_mbp has joined the channel [03:27] mjr_: It might actually be faster for small replies to scan the entire reply, looking for non-ASCII, and if no non-ASCII, send back a string instead of a buffer. [03:28] jacobolus has joined the channel [03:31] rslifka has joined the channel [03:31] rslifka: hey guys [03:31] rslifka: noticed an http parsing difference in 0.3pre [03:31] rslifka: foo[]=1&foo[]=2 is now getting stored as "foo[]"={...} [03:31] devkorcvince has joined the channel [03:32] rslifka: the "[]" have been added since 0.2.2 [03:32] rslifka: broke our server today :( [03:32] rslifka: is that by design? [03:33] mjr_: rslifka: I saw that commit go by a while ago. I think it was called "PHP querystring munging" [03:34] rslifka: since 0.2.2? [03:34] AAA_awright has joined the channel [03:34] mjr_: rslifka: I'm not sure about the reasoning behind it. The code got a lot simpler without it though. [03:34] mjr_: I thought it was only in 0.3 [03:35] rslifka: I did see a thread on Google Groups a few weeks ago, wasn't sure what came of it [03:35] mjr_: rslifka: check github for the commit. I think there was some discussion there as well. [03:35] mjr_: Tim_Smart: do is only a tiny bit smaller than for with length cached. So tiny that it's not worth mentioning. [03:36] Tim_Smart: ;) [03:36] mjr_: Tim_Smart: interestingly, everything is slower if you go from the end of the array back to the beginning. [03:36] Tim_Smart: Yeah. [03:36] mjr_: I figured it wouldn't make a difference. [03:36] Tim_Smart: Each runtime does loops differently [03:37] bpot has joined the channel [03:38] reid has joined the channel [03:38] deepthawtz has joined the channel [03:39] unomi has joined the channel [03:40] cataska has joined the channel [03:45] [[zz]] has joined the channel [03:46] unomi has joined the channel [03:48] mjr_: Tim_Smart: sent a message to dev ml with your findings and props. Not sure if you are on that list. [03:48] Tim_Smart: Yeah. [03:52] boaz_ has joined the channel [03:52] _numbers: express vs. picard? [03:55] ThePub has joined the channel [03:57] aaronblohowiak has joined the channel [03:57] aaronblohowiak: what is the easiest way to shallow copy an obj? [03:58] AAA_awright has joined the channel [03:59] mjr_: Object.keys(obj).forEach(function (prop) { new[prop] = old[prop] }) [03:59] mjr_: ? [03:59] aaronblohowiak: mjr_: i assuned that was built in to ec5 [03:59] mjr_: Oh, I dunno. that's what I always do. [03:59] aaronblohowiak: ok [03:59] bradleymeck: what kinda shallow copy, with prototype properties, non-enumerable? [04:00] aaronblohowiak: bradleymeck: for this use case anything would actually be sufficient [04:01] aaronblohowiak: hehehe, my bare minimum are that the ownProperties of dest are not modified when the properties of src are [04:01] Me1000 has joined the channel [04:01] rslifka: is node going stable/dev for even/odd? [04:02] rslifka: e.g. 0.2.x stable, 0.3.x dev, 0.4.x stable? [04:02] Aria: Yeah, ish. [04:02] unomi has joined the channel [04:02] Arro has joined the channel [04:02] ajpia has joined the channel [04:03] rslifka: k thx :) [04:03] Aria: For some value of 'stable' where 'stable' means 'node is evolving rapidly and so is v8, but breakage is still surprisingly small' [04:04] rslifka: gotcha [04:04] rslifka: that's how i understood it :) [04:04] alexb_: Is this memory problem with node bs or a real issue? [04:05] mjr_: what memory problem is that? [04:05] aaronblohowiak: the GC timing distribution? [04:06] alexb_: Yes [04:07] alexb_: Http://is.gd/fBuz0 [04:07] rslifka: What are people using to daemonize node? [04:07] mtodd has joined the channel [04:07] rslifka: Having a bear of a time getting my init script to put it in the background [04:07] aaronblohowiak: rslifka: Upstart is the best thing ever [04:08] rslifka: I wrote a quick upstart script, couldn't get ubuntu to recognize it [04:08] aaronblohowiak: rslifka: was it +x ? [04:08] rslifka: drop in /etc/events.d/node, "start node" ? [04:08] rslifka: hmm... i'll have to check. I thought the other script in there wasn't, will have to give that a shot [04:09] aaronblohowiak: rslifka: what OS? i put mine in /etc/init.d/com.domain.whatever.conf [04:09] rslifka: ubuntu... 10.4? can't recall the version [04:10] rslifka: oh wow, so if i drop it in there and use 'start', it will assume it's an upstart script? [04:10] rslifka: that's very cool [04:11] aaronblohowiak: rslifka: yea. [04:11] cardona507 has joined the channel [04:11] aaronblohowiak: rslifka: and you can leave off .conf when you use start [04:11] mtodd has joined the channel [04:11] aaronblohowiak: rslifka: and you ahve respawn in there too, right? [04:11] rslifka: huge thanks man, init scripts are such a pita for linux newbies [04:11] bartt has joined the channel [04:12] rslifka: are there any node upstart scripts kicking around on pastie? [04:12] aaronblohowiak: rslifka: linux is such a pita for linux newbies [04:12] rslifka: LOL [04:12] rslifka: surprisingly, i can setup a fresh cloud instance with mongo, node, our app, etc. pretty darn fast [04:12] rslifka: it's the system config stuff that's a bear [04:14] _numbers: anyone have a modern facebook lib for node [04:14] aaronblohowiak: rslifka: one min, i'll pastie me [04:14] brianmario has joined the channel [04:14] rslifka: huge thanks man, much appreciated [04:14] bradleymeck: facebook login or complete api? [04:14] bradleymeck: connect-auth works fine for login [04:16] _numbers: facebook login [04:17] sprout has joined the channel [04:21] aaronblohowiak: connect-auth is sweet [04:21] marshall_law has joined the channel [04:22] ginader has joined the channel [04:22] Tim_Smart: mjr_: OK chucked a commit up there. [04:23] _numbers: bradleymeck: ah thx [04:24] mjr_: Tim_Smart: looks good. Did it improve the benchmarks? [04:25] Tim_Smart: mjr_: There is way to much variance to find out really :p [04:26] mjr_: So not a substantial gain then. [04:26] Tim_Smart: mjr_: 100-200 ms gain here and there. [04:26] mjr_: I need to finish my benchmark thingy. You need to run the tests many times to smooth over the variance from GC and everything else. [04:26] mjr_: cool [04:27] Tim_Smart: Yeah need some more accurate benches, [04:29] jchris has joined the channel [04:29] jchris has joined the channel [04:30] _numbers: Error: Cannot find module 'oauth' [04:30] codetonowhere has joined the channel [04:30] sanduz2 has joined the channel [04:30] muk_mb has joined the channel [04:31] _numbers: nvm git submodule update [04:32] byrus has joined the channel [04:33] byrus has joined the channel [04:34] mjr_: Tim_Smart: yeah, it does seem to be a wee bit faster with your patch. Nice. [04:34] deadlyicon has joined the channel [04:34] breccan has joined the channel [04:35] Tim_Smart: mjr_: Yeah, any major speed ups from now on will be from different parsing approaches. [04:36] deadlyicon has joined the channel [04:38] creationix has joined the channel [04:39] boaz_ has joined the channel [04:41] aaronblohowiak: link? [04:42] Tim_Smart: aaronblohowiak: http://www.google.com/ . Will that link do? [04:42] aaronblohowiak: hahahaha [04:42] Tim_Smart: aaronblohowiak: What link are you look for? [04:42] aaronblohowiak: is there a link to your patches result? [04:42] Tim_Smart: Ah. [04:42] Tim_Smart: http://github.com/Tim-Smart/node_redis/commit/4d70a8de4be2d62eefcf2571c9ce67cfa7354668 [04:43] aaronblohowiak: neat [04:43] Tim_Smart: aaronblohowiak: Have a play with http://github.com/biggie/biggie-orm if you wanna :p [04:43] Tim_Smart: You might just like it. [04:44] mjr_: Also in http://github.com/mranney/node_redis/commit/4d70a8de4be2d62eefcf2571c9ce67cfa7354668 :) [04:44] Tim_Smart: Unfortunately the docs are kinda lacking, but there is tests :) [04:44] webr3 has joined the channel [04:45] dgathright has joined the channel [04:46] deadlyicon has joined the channel [04:46] aaronblohowiak: Tim_Smart: reading through the validations now [04:47] aaronblohowiak: pretty neat! [04:47] Tim_Smart: aaronblohowiak: Ah nice. I made validations and property types pretty flexible. [04:47] aaronblohowiak: Tim_Smart: i dont see tests for custom validations [04:48] Tim_Smart: http://github.com/biggie/biggie-orm/blob/master/test/validations.test.js#L28-34 [04:48] mr_daniel has joined the channel [04:49] Tim_Smart: aaronblohowiak: These are both exposed on the orm. object. [04:49] Tim_Smart: (Or the module exports) [04:50] aaronblohowiak: Tim_Smart: that makes sense. Looking forward to reading the docs =) [04:50] Tim_Smart: Not looking forward to writing them >.> [05:02] mu-hannibal has joined the channel [05:02] aaronblohowiak: Tim_Smart: yea, docs are like tests.. a pain to write after the fact [05:02] Tim_Smart: I don't mind tests, they save me a lot of coding time. [05:02] Tim_Smart: I usually write them as I am coding... [05:03] emerleite has joined the channel [05:03] Tim_Smart: Nice to able to just go 'make test' and find any problems relatively quickly... [05:03] gorakhargosh has joined the channel [05:06] aaronblohowiak: who needs docs when there is code? [05:06] aaronblohowiak: ;) [05:07] aaronblohowiak: i think it is one of those things, like.. are you coding for yourself, or for an audience [05:07] Tim_Smart: Well with open source, you always have an audience :/ [05:13] siculars has joined the channel [05:13] kgf: even if you're coding for yourself, assuming you're coding potentially for yourself 6 months from now...you're still better off with comments. [05:13] kgf: I can't understand people that don't comment. (double meaning intended) [05:14] abiraja has joined the channel [05:14] Tim_Smart: kgf: Comments <3 You will find some pretty interesting ones in biggie-orm [05:15] kgf: it's actually funny. there've been times where I look at my code and I'm like "why'd I do that"....and then 5 minutes later I noticed I left a comment as to why I did it [05:15] kgf: I apparently suck worse at reading my own comments than at writing them [05:16] Tim_Smart: Heh "Wrap to prevents the likes of the BP oil spill." [05:16] mjr_: I enjoy leaving amusing little notes in comments for myself or whoever happens to read my code at some point in the future. [05:16] Tim_Smart: I think I have shared that one. [05:17] Tim_Smart: "For racist people, that want to be rid of all entries of a certain type. Yes, the tests are racist." [05:17] _1marc has joined the channel [05:17] Tim_Smart: Etc. [05:21] aaronblohowiak: Tim_Smart: then use dox to generate documentation =) [05:21] Tim_Smart: aaronblohowiak: It isn't really documentation.. But yeah, I might use docco. [05:21] aaronblohowiak: :-) [05:25] aaronblohowiak: i wish there was a good way to set a log-level per module [05:25] aaronblohowiak: =/ [05:31] sh1mmer has joined the channel [05:32] silence has joined the channel [05:33] matjas has joined the channel [05:37] sveimac has joined the channel [05:38] Tim_Smart: mjr_: Will be interesting to see how this compares to something like mongoose. [05:39] mjr_: For sure. Have you worked with mongoose much? [05:39] Tim_Smart: Not at all. [05:39] rauchg_ has joined the channel [05:40] mjr_: I've had a lot of bad experiences with ORMs in the past, so I'm pretty cautious about anything that claims to be an ORM or even ORM-like. [05:40] mjr_: I also don't get mongodb. [05:40] Tim_Smart: mjr_: mongoose model definitions seem a little verbose... [05:41] dohtem has joined the channel [05:44] mape has joined the channel [05:44] Tim_Smart: mjr_: ORM's seem to make sense for things like blogs, or other trivial systems. [05:45] Tim_Smart: For complex systems that need performance, I would rather write the queries myself. [05:46] halfhalo: I do like activerecord for rails, but always do it myself in php [05:46] satori_ has joined the channel [05:51] WALoeIII has joined the channel [05:53] jesusabdullah: I care more about how it feels to express a query than about how fast it executes [05:53] jesusabdullah: that said, some ORMs make it pretty awkward [05:54] amuck_ has joined the channel [05:54] halfhalo: yup [05:54] halfhalo: That said, activerecord is nice [05:59] galaxywatcher has joined the channel [06:00] amuck has joined the channel [06:04] deadlyicon has joined the channel [06:05] aurynn has joined the channel [06:05] konobi: activerecord always seemed like a pile o crap to me... wrong level of abstraction [06:06] Tim_Smart: konobi: What is your ideal ORM? Or are you against them? [06:06] konobi: one that actually treats a database like what it actually is... tuples and resultsets [06:06] _numbers: what if i want something to be blocking? [06:07] jchris has joined the channel [06:07] konobi: Tim_Smart: DBIx::Class tends to get that right [06:07] konobi: a table in dbic is just another resultset [06:07] konobi: a bunch of joins, is just a resultset [06:07] konobi: a union is just a resultset, etc. [06:08] EyePulp has joined the channel [06:08] Nohryb has joined the channel [06:09] overra has joined the channel [06:09] konobi: with activerecord, it seems that as soon as you want to go past a table and some relationships, you start having to really hack its internals [06:09] hannesw has joined the channel [06:10] noahcampbell has joined the channel [06:10] Anti-X has joined the channel [06:11] konobi: Tim_Smart: http://search.cpan.org/~frew/DBIx-Class-0.08123/lib/DBIx/Class/Manual/Cookbook.pod [06:11] Tim_Smart: konobi: I'm writing an ORM for redis, so things are slightly different. [06:12] konobi: Tim_Smart: See "Arbitrary SQL through a custom ResultSource" in there [06:13] amerine has joined the channel [06:14] konobi: Tim_Smart: I'd like to see something in javascript working with redis, similar to KiokuDB [06:16] kjeldahl has joined the channel [06:17] ivanfi has joined the channel [06:17] Tim_Smart: konobi: When I get biggie framework to a first release, I'll be using redis in production :) [06:18] konobi: DAG stores are fun [06:28] aaronblohowiak: konobi: this is changing with AR3 [06:30] necrodearia has joined the channel [06:32] creationix: mjr_: nice gravitar [06:32] creationix: http://howtonode.org/capturing-packets-in-javascript [06:41] silence has joined the channel [06:43] dgathright has joined the channel [06:44] byrus has joined the channel [06:44] micheil has joined the channel [06:46] abiraja has joined the channel [06:49] tobiassjosten has joined the channel [06:52] daglees has joined the channel [06:52] daglees has joined the channel [06:58] voxpelli has joined the channel [06:59] V1 has joined the channel [07:00] adambeynon has joined the channel [07:00] path[l] has joined the channel [07:00] ditesh|cassini has joined the channel [07:02] _numbers has left the channel [07:04] stephenjudkins_ has joined the channel [07:05] agnat has joined the channel [07:06] jameshome has joined the channel [07:10] prettyrobots has joined the channel [07:14] codetonowhere has joined the channel [07:19] nroot7 has joined the channel [07:23] delapouite has joined the channel [07:33] tekky has joined the channel [07:33] tekky: /nick tekky [07:33] virtuo has joined the channel [07:36] amuck has joined the channel [07:36] felixge has joined the channel [07:37] hellp has joined the channel [07:38] jetienne has joined the channel [07:39] mjr_: Tim_Smart: did you see Erik Corry's recent post to the dev ml about function declaration argument length vs function call site argument length? [07:39] Tim_Smart: Not yet. [07:39] mjr_: Sounds like bad news for varargs-style convenience. [07:39] mjr_: It'll be useful to benchmark though. [07:40] mjr_: Which will have to happen some other time, because now I must sleep. [07:40] path[l] has joined the channel [07:41] mape: Tim_Smart: Doing the ORM with redis, what is the escape plan when the RAM can't contain the DB? Or is redis smart enough to handle that and still keep the speed? [07:42] DoNaLd`: how is possible managing some parameters or settings value per user with nodejs ? .. I have logged user and on login action a need set some parameters per each logged user during working with my app .. which metode is fort his functionality in nodejs ?? [07:42] Tim_Smart: mape: redis has swapping support. [07:42] mape: How heavy impact does that have on performance? [07:42] mape: If you are doing random gets [07:42] Tim_Smart: mape: It keeps the most commonly used keys. [07:43] Tim_Smart: mape: I guess it depends how fast your disk is. [07:43] mape: k [07:43] mape: throw a ssd at it then [07:44] Tim_Smart: mape: exactly. [07:44] mape: How different is biggie from connect? Any chance the ORM will be modular enough to plugin into other frameworks? [07:44] Tim_Smart: mape: Every component of biggie will be agnostic [07:45] mape: Nice [07:45] Tim_Smart: mape: So the ORM can be used standalone etc. [07:45] Tim_Smart: mape: But biggie-router support connect middleware. [07:45] mape: What perks compared to connect? [07:46] Tim_Smart: mape: It performed slightly better last time I checked. It is just an alternate DSL I guess. [07:46] mape: k [07:46] Tim_Smart: Maybe not as much functionality at a core level. [07:46] mape: You probly already know this but some docs would be neat, hard to judge it at a quick glance otherwise [07:47] Tim_Smart: mape: Yeah I know. I don't like docs. [07:47] Tim_Smart: Well, I like them - not writing them. [07:47] mape: hehe [07:48] shockie has joined the channel [07:56] Tim_Smart: mape: Do you want to give the orm a go? [07:56] hzin has joined the channel [07:59] dgathright has joined the channel [08:01] badaxx has joined the channel [08:02] badaxx: hey, did anyone ever had the problem that redis-node-client leaves connections open which results in a too many files open error? [08:02] spetrea has joined the channel [08:05] badaxx: ah okay I think i see the problem. my fault. [08:06] mAritz: what's currently the best way to debug node.js apps without using eclipse? [08:07] Tim_Smart: mAritz: Tests + console.log imo. [08:07] Tim_Smart: :p [08:07] mAritz: :( [08:07] mAritz: you're not making me happy. [08:07] mAritz: and i need happy [08:08] badaxx: mAritz: but that's the right answer ;) [08:08] devkorcvince has joined the channel [08:08] javajunky has joined the channel [08:08] mAritz: it's also what i've been doing so far and it can get frustrating [08:12] DoNaLd`: mAritz: or you can try Clouds9 editor :) with debugger .. [08:13] zum: mAritz: I haven't tried it but check out http://stackoverflow.com/questions/1911015/how-to-debug-node-js-applications and http://github.com/ry/node/wiki/using-eclipse-as-node-applications-debugger [08:13] DoNaLd`: http://thechangelog.com/post/1186042992/cloud9-node-js-powered-ide-in-the-sky [08:13] zum: oh - the question was "without eclipse" :) [08:13] zum: well there you go [08:14] mAritz: DoNaLd`: tried that a few days ago and most things didn't work :( [08:14] mAritz: zum: yeah, if there was a netbeans way i'd jump of joy :D [08:14] mAritz: just tried node-inspector and got an instant segmentation fault :D [08:14] DoNaLd`: mAritz: i know .. this is early aplha version [08:15] mAritz: yep [08:15] mAritz: i have high hopes for it though. not sure whether the browser way is the right way though [08:15] mAritz: but having an ide dedicated to javascript is very important, especially after the fiasko that was aptana. [08:16] mape: Tim_Smart: Yeah sure, I'm at work now though, will probly fiddle with it later today. [08:16] mape: Any tips on what example code is the best to look at? [08:16] mikew3c has joined the channel [08:16] Tim_Smart: mape: OK. Just ping me if you run into trouble. [08:16] Tim_Smart: mape: Um, take a look at the tests. [08:16] mape: Will do [08:17] mape: Tim_Smart: Yup, already took a look at it, will continue to [08:17] hzin: mAritz: why not eclipse? [08:17] rnewson has joined the channel [08:17] rnewson has joined the channel [08:18] mAritz: hate it. too clumsy and big. [08:18] mAritz: started to hate netbeans too for the same reasons. but 6.10 is going in a good direction and now i like it more than komodo again :D [08:19] mape: mAritz: You just wait! When TM2 comes out (if ever) it will be the bomb [08:19] mape: ;) [08:19] mAritz: tm2? [08:20] mape: textmate2 [08:20] mAritz: osx? oh god :x [08:20] mAritz: ACTION runs away [08:20] DoNaLd`: yea .. right .. if ever [08:20] mtodd has joined the channel [08:20] DoNaLd`: mAritz: most of users from this chanel use osx :) [08:20] mAritz: (but to be honest i'd love trying a good linux clone of textmate) [08:21] mAritz: i know, it's awful, right? [08:21] jesusabdullah: I don't! [08:21] mAritz: oh wait [08:21] jesusabdullah: HARUMPH [08:21] jesusabdullah: gedit 4 lyfe [08:21] DoNaLd`: :) [08:21] mAritz: ACTION likes jesusabdullah [08:21] DoNaLd`: :)) [08:22] saimon_ has joined the channel [08:22] sideshowcoder has joined the channel [08:22] path[l] has joined the channel [08:22] satori_ has joined the channel [08:24] viktors has joined the channel [08:24] jesusabdullah: Awwww [08:24] jesusabdullah: vim's alright too ;) [08:25] jesusabdullah: Hah [08:25] jesusabdullah: I saw TM2 and I was thinking [08:25] jesusabdullah: BUT MAPE TEAM FORTRESS 2 CAME OUT YEARS AGO [08:26] mAritz: no no, TM2 is actually Razor Wind [08:27] mape: jesusabdullah: TM != TF [08:27] mape: and duke nukem forever is out soon [08:27] mape: so we are bound to get TM2 soon [08:28] felixge has joined the channel [08:28] felixge has joined the channel [08:28] jesusabdullah: Oh sorry mape I misread [08:28] jesusabdullah: mea culpa! D: [08:28] jesusabdullah: textfortress 2, I'm sure, will be a wonderful game [08:30] jesusabdullah: er, text editor [08:30] jesusabdullah: I wonder what something like that would look like? [08:30] jesusabdullah: TextFortress, or Text Editor Areana [08:31] niemeyer has joined the channel [08:35] felixge: ryah: I think I got this memory leak nailed with a test [08:35] felixge: ryah: still around to take a look? [08:35] gregerolsson has joined the channel [08:40] agnat has joined the channel [08:40] TomY has joined the channel [08:43] Nohryb has joined the channel [08:43] stephank has joined the channel [08:45] badaxx: https://gist.github.com/7a91260aff49166c436d << what do these ":hbci" things in the open redis connections mean? [08:45] davidc_ has joined the channel [08:47] kriszyp has joined the channel [08:47] mAritz: anyone here know how much faster node_redis actually is? (compared to redis-node-client) [08:48] mAritz: i don't particularly want to rewrite nohm just because it could theoretically get 1 req/s more. :D [08:51] V1: mAritz: For basic JS error debugging you can also use Dreamweaver ;) [08:52] mAritz: V1: even if I wouldn't despise that: it's neither free nor does it run under linux. :/ [08:53] V1: pff linux who uses that anyways ;) [08:54] jesusabdullah: DREAMWEAVER?! [08:54] mAritz: me and jesusabdullah! (at least i think so. you're not using bsd are you jesus?!) [08:54] jesusabdullah: Naw, Fedora [08:54] mAritz: :) [08:55] jesusabdullah: I actually always wondered what browser engine Dreamweaver uses [08:55] mAritz: i tried fedora 2 months ago. it doesn't like my projector so i can't use it :( [08:55] evanpro has joined the channel [08:55] aubergine has joined the channel [08:55] mAritz: (and i'm very happy with mint now) [08:56] jesusabdullah: Yeech [08:56] mAritz: what? it has gedit! ;D [08:56] jesusabdullah: Yeah, fedora's not the easiest when it comes to media-ish things [08:56] jesusabdullah: Hah [08:56] caolanm has joined the channel [08:56] jesusabdullah: Naw, I actually can't comment on mint [08:56] mAritz: yeah, it didn't help that i used kde which appears to still be horribly broken. [08:57] jesusabdullah: Like, I know it was touted as being more noob-friendly than ubuntu, but that was ages ago [08:57] jesusabdullah: and that's not really a bad thing, as long as you can get under the hood okay [08:57] mAritz: it is way more friendly (i'm going to install it on my moms netbook). and while i'm not a noob i really like the overall feel and ease of use. [08:58] jesusabdullah: SubStack uses Debian sid, I think [08:58] jesusabdullah: Yeah, sure [08:58] mAritz: hah, i used to be a gentoo guy. not having to resolve portage blocks every 2 days is awesome xD [08:58] jesusabdullah: ahahaha, yeeeah XD [08:58] jesusabdullah: I used slackware for a little while [08:59] jesusabdullah: NOT having to be a leet haxxor to gsd is, well [08:59] jesusabdullah: refreshing [08:59] mtodd has joined the channel [08:59] emerleite has joined the channel [08:59] jesusabdullah: Though, for what I started using it with (a really old crappy laptop) it was pretty good for a barebones setup [08:59] mAritz: but still... i'd rather go back to gentoo than use a mac [08:59] Kami__ has joined the channel [08:59] mAritz: ACTION runs from the rath of #node.js [08:59] silence has joined the channel [09:00] caolanm: I went through a phase of trying a few different distros, quite liked running openbox on arch linux for a while, but ultimately I always come back to ubuntu [09:00] devkorcvince has joined the channel [09:00] V1: jesusabdullah: Dreamweaver uses WebKit [09:00] caolanm: because its 'good enough' for me to mostly stop messing with it and actually write code ;) [09:00] mAritz: yeah, that's the thing though: mint works really well on my netbook. even with compiz and 5+ applications open. [09:00] jesusabdullah: Jesus, this webkit update is 4 gb! [09:01] jesusabdullah: V1: oh cool, thanks [09:01] jesusabdullah: Any idea what it used like 6 years ago? XD [09:01] caolanm: mAritz: I'm with you on the mac hate ;) [09:01] jesusabdullah: That's when I last used it [09:01] tek has joined the channel [09:01] V1: jesusabdullah: I think it was Opera [09:02] mAritz: caolanm: yeah! btw: i use nodeunit in nohm. but a very old version with some custom stuff (i think) is there anything groundbreaking in the last weeks worth of updates that i should know about? :D [09:02] mAritz: the only thing i remember about dreamweaver is that it created weird javascript that broke my websites... -.- [09:02] jesusabdullah: hmm! Interesting. [09:03] caolanm: mAritz: hmm, quite a few updates... you can now use all the asserts in the assert module [09:03] jesusabdullah: I figured they HAD to be using someone else's rendering code, since, I mean [09:03] jesusabdullah: that's a pretty big undertaking there [09:03] caolanm: mAritz: there is also a helper function for creating test cases with setup and teardown if you want (doesn't affect the normal exporting of tests) [09:03] mAritz: caolanm: okay, but nothing that was totally broken and will stop working tomorrow? (cause right now i'm happy with nohm and don't want to touch it for a while :D ) [09:04] xla has joined the channel [09:04] jesusabdullah: ahhh, fedora updates when you have ~200 mb to spare [09:04] jesusabdullah: >_< [09:04] caolanm: mAritz: no, I think the old version should work fine [09:04] mAritz: great :) [09:04] caolanm: mAritz: the good news is that your old test suites are 100% compatible [09:04] mAritz: btw: it's awesome to use once you figure out how testrunners work ^^ [09:05] caolanm: so what are your custom additions? [09:05] mAritz: uh, i seriously don't know anymore. i had some weird file-tree requirements (in my head) that forced me to fuck up something somewhere :D [09:05] rasputnik has joined the channel [09:05] caolanm: haha, ok [09:06] mAritz: yeah, all my code is like that. so don't use it! (does reverse psychology work like this?) [09:08] mAritz: does anyone here use express for a big project? because i'm kinda at a loss on how to organize things. i made a small app where i tried a few ideas but it mostly feels like hacks on hacks on hacks on hacks... :( [09:13] evanpro has joined the channel [09:14] ditesh|cassini has joined the channel [09:22] zomgbie has joined the channel [09:26] stagas has joined the channel [09:28] Throlkim has joined the channel [09:33] V1: \o/ 1 hour till my Node.js , Socket.io, MongoDB presentation \o/ [09:33] phiggins: where? [09:34] Nohryb has joined the channel [09:38] dgathright_ has joined the channel [09:38] devkorcvince has joined the channel [09:42] hassox has joined the channel [09:45] evanpro has joined the channel [09:46] stagas: node is the devil! 'install' finished successfully (0.666s) [09:46] stagas: :P [09:48] Nohryb has joined the channel [09:49] adambeynon has joined the channel [09:53] technoweenie has joined the channel [09:57] omarkj has joined the channel [09:58] silence has joined the channel [09:58] V1: phiggins: in the Netherland, Groningen [09:59] omarkj has joined the channel [10:00] matt_c has joined the channel [10:08] olegp has joined the channel [10:09] javajunky has joined the channel [10:12] daleharvey has joined the channel [10:13] daleharvey: trying to use a library I found on github, node is saying Error: Cannot find module 'request', is this a problem with my install or with node changing / lib outdated [10:22] slaskis has joined the channel [10:23] capndiesel has joined the channel [10:24] badaxx has joined the channel [10:25] badaxx has joined the channel [10:26] mAritz: daleharvey: where did you save the library? [10:27] d0k has joined the channel [10:27] daleharvey: it was http://github.com/mikeal/couchlog but already figured its using an old api, shouldnt take long to fix up [10:28] mAritz: that sounds weird, but good luck ;D [10:29] admc has joined the channel [10:30] path[l] has joined the channel [10:30] aliem has joined the channel [10:32] Nohryb has joined the channel [10:34] aubergine has joined the channel [10:36] kjeldahl has joined the channel [10:41] daleharvey: sounds weird? I thought it was pretty typical of node [10:42] mAritz: if it says "cannot find module" it pretty much always means that a module is missing/not where it's supposed to be. afaik that never changed in regards to api. [10:48] Akufen has joined the channel [10:48] Akufen has joined the channel [10:51] dquestions has joined the channel [10:51] mr_daniel: I want to understand Node.js by looking at the code, but browsing the source with with browser is not very efficient, for example here http://github.com/ry/node/blob/master/src/node_events.h I also need to find and open 'ObjectWrap' to understand the code [10:52] mr_daniel: So how should I proceed? which tools do you use? [10:52] mr_daniel: for example: in the source of nodejs there is no IDE-specific metadata like .project in Eclipse or other [10:54] slaskis: mr_daniel: i just open it in textmate myself [10:54] gormer has joined the channel [10:55] ekidd has joined the channel [10:55] mr_daniel: slaskis: does Texmate 'analyse' the complete source code and let you quickly find and open class definition? [11:00] slaskis: mr_daniel nope [11:00] kjy112 has joined the channel [11:00] ekidd has joined the channel [11:01] mr_daniel: slaskis: ok, then tell how you 'solve' the folloowing problem: [11:01] mr_daniel: http://github.com/ry/node/blob/master/src/node_events.h [11:01] mr_daniel: EventEmitter inherits from ObjectWrap, so to understand EventEmitter I also need to have a look on ObjectWrap, but I don't where I can the definition from ObjectWrap [11:01] mr_daniel: so how can I find the place where ObjectWrap is defined? [11:01] mr_daniel: I only know that both of them are in the same namaspace, thats it, but the same namaspace can be used in many files [11:04] slaskis: node_object_wrap.h ? i just havn't found it so hard to get around in the node source, it's so tiny (unless you go into the dependencies, but i'm not that hard code) [11:05] slaskis: *hard core [11:06] aubergine_ has joined the channel [11:09] karboh has joined the channel [11:09] d0k has joined the channel [11:12] mAritz: mr_daniel: there are a lot of ides that handle this kind of stuff [11:12] mAritz: eclipse, netbeans and kdevelop are some them. [11:12] zorzar_ has joined the channel [11:14] mape: is github broken? [11:14] mape: fatal: http://github.com/ry/node/info/refs not found: did you run git update-server-info on the server? [11:14] Tim_Smart: I has made extra fast redis protocol parser. [11:18] ooooPsss has joined the channel [11:19] daleharvey: anyone use restler? [11:19] stagas: mape: it has some issues the last couple of days. I use http://github.com/ry/node.git [11:19] stagas: on git clone i mean [11:20] industrial: So I heard node has a sprintf (seriously, js doesn't have it? :|) but can't find it in the node api docs [11:22] mtodd has joined the channel [11:23] Tim_Smart: mjr_: Asleep? [11:25] SamuraiJack has joined the channel [11:26] dnolen has joined the channel [11:29] mtodd has joined the channel [11:29] jashkenas has joined the channel [11:30] aubergine has joined the channel [11:40] c4milo has joined the channel [11:40] ysynopsis has joined the channel [11:40] mAritz: Tim_Smart: extra fast redis protocol parser? what will this do? (honest question) [11:41] Tim_Smart: mAritz: Speed up redis client libraries. [11:41] mAritz: all of them? :D [11:41] Tim_Smart: Actually I don't know how fast it is yet... [11:41] Tim_Smart: :p [11:42] rnewson has joined the channel [11:42] rnewson has joined the channel [11:42] mAritz: do you know how much the performance difference between redis-node-client and node_redis is? [11:43] agnat has joined the channel [11:43] mischievious has joined the channel [11:43] daleharvey: ok, restler is kinda ... green [11:44] mape: what causes this http://gist.github.com/604445 ? (ECONNREFUSED, Connection refused) [11:44] gorakhargosh has joined the channel [11:44] V1 has joined the channel [11:45] mAritz: amongst other things, redis-node-client causes that if the redis server is not running. [11:46] Tim_Smart: mAritz: Last time we checked, about 6x faster at parsing. [11:46] mAritz: GNA [11:46] mAritz: Tim_Smart: couldn't you have said something like "marginally, it's barely worth rewriting your libs/apps for it"? [11:47] mAritz: you don't like me, is that it? you didn't provide a happy-making answer with the debugging as well! [11:47] mAritz: :D [11:47] Tim_Smart: mAritz: In the real world, it doesn't make too much of a difference. [11:47] mAritz: yeah, that's how i like it! [11:47] mAritz: ACTION moans [11:48] mAritz: ^^ [11:48] Tim_Smart: Unless you are doing 1000's of ops per second. [11:49] Tim_Smart: Hmmm... My recent parser can handle 1,000,000 incoming buffers a second. [11:49] Tim_Smart: *every 1.8 seconds [11:49] mape: mAritz: jup, mongo was throwing the error [11:49] mAritz: so, ~6 000 000/second?! [11:49] mAritz: arg, -0 [11:50] Tim_Smart: No, less than 1 mil per second. [11:50] _1marc has joined the channel [11:50] Tim_Smart: But faster than redis it self. [11:50] _1marc has left the channel [11:50] mAritz: yeah, that's what the -0 was for... i'm awake for 24 hours now and it's starting to show :( [11:50] Tim_Smart: :p [11:51] mAritz: oh well, gotta go play some basketball. bye guys. :) [11:54] dpritchett has joined the channel [11:55] dpritchett: is anyone who's successfully published to no.de awake? [11:55] mape: anyone have any experiece using lighttpd as a proxy for websockets? [11:56] c4milo has joined the channel [11:56] okuryu has joined the channel [11:58] Tim_Smart: mape: I thought nginx and lighttpd failed for websockets? [11:58] Tim_Smart: Or is it just nginx? [11:58] mape: Yeah, that is what I'm thinking [11:59] Tim_Smart: Yup, it's official. I have created the fastest JS-only Redis reply parser. http://gist.github.com/604461 [12:05] ekidd: Is any working on an HTML 5 Canvas -> Node.js port? [12:08] xla has joined the channel [12:08] threeve has joined the channel [12:08] V1: I don't lighthttpd works with websockets yet [12:11] mirkok has joined the channel [12:14] mape: think? [12:15] stagas: have you experienced when writing in redis thousands of values / sec, when redis does the bg save, node might hang and leak mem. I thought it was the client I was using but it happens with mjr's too [12:15] atourino has left the channel [12:16] stagas: the workaround is I throttle the writes with a counter++ and counter-- on redis reply to about 500 but it might happen anyway also if the bg save takes too long [12:16] stagas: ok it happened again :/ [12:17] bentruyman has joined the channel [12:19] V1: mape: 90% sure, [12:21] bentruyman has joined the channel [12:23] mape: V1: k [12:27] dysinger has joined the channel [12:28] nerdEd has joined the channel [12:30] hassox has joined the channel [12:33] q_no has joined the channel [12:33] ironfroggy_: I am using the redis-client library, and I am finding that if I call select or flushdb, the exit event seems to never fire [12:34] ironfroggy_: which means my test runner hangs forever. [12:34] ironfroggy_: is there some explaination for this? [12:34] mu-hannibal has joined the channel [12:38] TomY has joined the channel [12:38] ironfroggy_: actually i guess it doesnt matter what commands i use, if any [12:39] ironfroggy_: just if i create the redis client, the process never exists [12:39] ironfroggy_: *never exits [12:46] ajsie has joined the channel [12:48] ysynopsis has joined the channel [12:52] unomi has joined the channel [12:54] paul___ has joined the channel [12:56] shimondoodkin has joined the channel [12:56] bradleymeck has joined the channel [12:56] bentruyman has joined the channel [12:57] sprout has joined the channel [12:57] malkomalko has joined the channel [12:58] teemow has joined the channel [12:59] xla has joined the channel [13:02] herbySk has joined the channel [13:03] hellp has joined the channel [13:07] ditesh|cassini has joined the channel [13:09] prettyrobots has joined the channel [13:09] prettyrobots: h [13:09] prettyrobots: Hello. [13:12] rasputnik has joined the channel [13:13] mbrochh has joined the channel [13:13] mbrochh has joined the channel [13:17] ironfroggy_: prettyrobots: hi. [13:19] ceej has joined the channel [13:21] codemanki has joined the channel [13:21] Anti-X has joined the channel [13:23] ysynopsis has joined the channel [13:24] JimBastard has joined the channel [13:25] emmanueloga has joined the channel [13:31] adambeynon has joined the channel [13:36] admc has joined the channel [13:39] ajsie has joined the channel [13:45] Blackguard has joined the channel [13:45] dpritchett has joined the channel [13:46] reid has joined the channel [13:46] virtuo has joined the channel [13:47] kjeldahl has joined the channel [13:49] davidsklar has joined the channel [13:49] karboh has joined the channel [13:49] industrial: What do you guys think about this routing? I'm putting the atom captures right as arguments in their handlers. I thought that because they are both defined at the same point in the code that would be easy to match :P [13:49] industrial: https://gist.github.com/656955bd3646ecc376df/d91b87cf1551e5066a326f309c27b46ec4bb31ef [13:50] JAAulde has joined the channel [13:50] karboh: mape: regarding proxy for websockets, I tried haproxy which seems to work [13:51] TomY has joined the channel [13:51] Blackguard has joined the channel [13:52] industrial: I wanna make it so I can have sub-arrays for values instead of functions so I can have a ['^/blog', ['/new$', function(){}, '/edit/([^/]+)/?$', function(id){}]] [13:53] industrial: and it just concatenates the regular expressions and then matches :) [13:53] emmanueloga has joined the channel [13:53] mtodd has joined the channel [13:55] mtodd has joined the channel [13:58] sveimac has joined the channel [13:58] matt_c has joined the channel [13:59] threeve has joined the channel [14:01] ajpi has joined the channel [14:02] path[l] has joined the channel [14:02] bentruyman has joined the channel [14:05] AAA_awright has joined the channel [14:06] jchris has joined the channel [14:07] lakin has joined the channel [14:09] hannesw_ has joined the channel [14:13] davidwalsh has joined the channel [14:16] charlenopires has joined the channel [14:16] nerdEd has joined the channel [14:16] davidwalsh has joined the channel [14:17] c4milo has joined the channel [14:17] mape: karboh: yup haproxy seems to be the one that works judging from some stackoverflow answers [14:19] mu-hannibal has joined the channel [14:21] boaz has joined the channel [14:21] JimBastard: mape: we got websocket proxy support now too, just gotta release it [14:21] JimBastard: http://github.com/nodejitsu/node-http-proxy/blob/0.3.1/test/node-http-proxy-websocket-test.js [14:22] JimBastard: :-D [14:22] codelotus has joined the channel [14:22] JimBastard: i fail so hard at regex dammit [14:23] mape: hehe [14:26] matt_c has joined the channel [14:27] omarkj: Mm regex, I eat that for breakfast. It doesn't taste good at all. [14:28] JimBastard: this.post(/\/(\w+)/).bind(function (response, id, data) { [14:28] JimBastard: how do i tell that to ignore anything past / [14:28] JimBastard: at the end [14:28] javajunky: .*$ ? [14:29] javajunky: (err that '?' shouldn't be part of the regex /\/(\w+).*$/ [14:30] JimBastard: didnt seem to help [14:30] JimBastard: hrmm [14:30] javajunky: no wait ;) … past which '/' ? [14:30] JimBastard: so right now [14:30] javajunky: bbias adium screwed [14:32] javajunky has joined the channel [14:32] javajunky: sry JimBastard what are you trying to achiev e? [14:32] cloudhead has joined the channel [14:32] trotter has joined the channel [14:32] JimBastard: /foo should trigger, /foo/bar should not [14:32] bradleymeck_ has joined the channel [14:32] javajunky: should not .. ok /foo^ [14:32] javajunky: arg ^/foo$ [14:33] javajunky: or do you want to allow params as well ? [14:33] JimBastard: foo is a param [14:33] c4milo: but foo can be anything [14:33] c4milo: ? [14:33] javajunky: so just one slash [14:33] javajunky: ^/[^/]+ [14:33] javajunky: the caret there has two meanings (just to mess with you ) [14:33] javajunky: the first one is a 'start of line anchor' [14:34] cferris has joined the channel [14:34] softdrink has joined the channel [14:34] javajunky: the second is a 'negated character class' ….roughly match everything *except what is oin these square brackets … any use? [14:34] hansek_ has joined the channel [14:34] JimBastard: hrmm [14:34] sideshowcoder has joined the channel [14:35] dannycoates has left the channel [14:35] konobi: /^\/([^\/]+?)/ [14:35] javajunky: if everything after the slash is optional ^/[^/]* might be better actually [14:35] konobi: to capture /^\/([^\/]+?)/ [14:35] javajunky: /^\/([^\/]*?)/ [14:36] javajunky: … why non-greedy though ? [14:36] JimBastard: hrmmm [14:36] JimBastard: i think there are other things at play here [14:36] javajunky: often the way ;) [14:36] JimBastard: some of the test suite is flailing around this section as well [14:36] EyePulp has joined the channel [14:36] konobi: javajunky: force of habit/practice [14:36] JimBastard: perhaps i should get coffee and wake up indexzero [14:36] c4milo: JimBastard: what is your test case ? [14:36] bradleymeck_: protip x*? without having an ending delimeter [14:37] javajunky: konobi: fair ;) [14:37] bradleymeck_: gives empty string [14:37] JimBastard: c4milo: im just working on some router stuff right now [14:37] JimBastard: testing against broodmother master api [14:37] Me1000 has joined the channel [14:37] JimBastard: in this case its [14:37] mif86 has joined the channel [14:37] JimBastard: /apps/myapp/restart, /apps/myapp/start, /apps/myapp/stop [14:38] JimBastard: thanks for the help guys im gonna see what i can do [14:39] konobi: of course .split('/') is always good [14:39] c4milo: JimBastard: so with those uris, what do you want the regexp do ? [14:39] c4milo: split is more efficent :) [14:39] JimBastard: i think its working [14:39] JimBastard: but there is another issue at play [14:39] stagas has joined the channel [14:40] bmavity has joined the channel [14:44] tj has joined the channel [14:45] TomY_ has joined the channel [14:48] ginader has joined the channel [14:49] Tim_Smart: tjholowaychuk: Yo. I got quite a bit of that ORM done. [14:50] tjholowaychuk: Tim_Smart: nice! I will check it out [14:50] voodootikigod_ has joined the channel [14:50] mape: So will there ever be a django/rails of node? [14:50] threeve has left the channel [14:51] mape: Btw was thinking, how bad of idea would it be to prefix errors thrown with the module name? [14:52] Tim_Smart: mape: Probably not. [14:52] EyePulp: mape: it would certainly be a nice option - not even the full framework [14:52] ajpiano_ has joined the channel [14:52] robinduckett has joined the channel [14:52] robinduckett: afternoon [14:52] mape: so throw new Error('mapeModule: shit just went wack') [14:52] Tim_Smart: mape: For validations? [14:53] robinduckett: Can anyone reccomend a good memcache module / something I can use as a replacement for caching data in a key/value store? [14:53] robinduckett: the current version of memcache just refuses to be stable for more than 10 requests [14:53] mape: Tim_Smart: no, just general. If I have a big app with 40 external modules, do a npm update, all modules are updated, run the app and I get a random "things broke" error.. [14:53] mape: If the stacktrace isn't good enough it is a pita to debug [14:54] ehaas has joined the channel [14:54] Tim_Smart: mape: Oh, I get it :p [14:54] mape: If the errors were prefixed I atleast know where to start [14:54] EyePulp: robinduckett: you mean the memcache backend itself or a node module you use to access it? [14:54] Tim_Smart: so blah/index.js: Error fool! [14:54] mape: yeah, something like that [14:54] robinduckett: EyePulp: the node module i use to access it [14:54] mape: Seems like ryah is working hard at making the stack trace better but yeah [14:54] ivanfi has left the channel [14:55] EyePulp: robinduckett: I see - sorry that I'm pretty ignorant of that =\ [14:55] robinduckett: *** glibc detected *** /usr/local/bin/node: corrupted double-linked list: 0x095b6510 *** [14:55] TomY_ has joined the channel [14:55] robinduckett: /home/robin/dev/node-memcache/build/default/memcache-impl.node(_ZN10Connection7EIO_GetEP7eio_req+0x5a)[0xb4f29c21] [14:55] robinduckett: get errors like that [14:55] robinduckett: which obviously aint cool :/ [14:55] mape: Tim_Smart: Would that be bloat/dumb? [14:56] robinduckett: sucks that so far the most stable storage system for node I've found has been that dbslayer module [14:56] robinduckett: for using with mysql [14:56] EyePulp: robinduckett: oosh [14:56] robinduckett: which was essentially just a REST interface to dbslayer [14:56] Tim_Smart: mape: Generally the stack traces already have the filename attached. [14:56] EyePulp: ACTION is working with mongoose/mongo [14:56] robinduckett: yeah I need something slightly less heavy duty than mongo [14:56] mape: Tim_Smart: http://gist.github.com/604445 that is the mongodb module failing to connect [14:56] EyePulp: is mongo considered heavy duty? [14:57] robinduckett: it is if all i want to do is cache like 20 objects [14:57] EyePulp: heh [14:57] EyePulp: gotcha [14:57] Tim_Smart: mape: Ah. IOWatchers are done in C++ land. [14:57] aconbere has joined the channel [14:58] Tim_Smart: And like nextTick, I think the async-ness means the stack gets wiped. [14:58] mape: Yeah, but that is being worked on [14:58] path[l] has joined the channel [14:58] aurynn has joined the channel [15:00] gerred has joined the channel [15:01] mape: Bah, why do people keep tweeting old jsconf.eu videos :( [15:01] JimBastard: http://rumpetroll.com/ [15:01] halfhalo: shits n giggles? [15:01] mape: Always think they finally released something new [15:01] JimBastard: i didnt know that was the swedish word for sperm [15:01] mape: JimBastard: asstrolls [15:01] JimBastard: lol [15:01] mape: JimBastard: and that is norwegian [15:02] robinduckett: it's built in ruby [15:02] mape: And that is literally ass trolls [15:02] JimBastard: its all fish people to me [15:02] JimBastard: :p [15:02] mape: JimBastard: You just wish you had our wimen [15:02] robinduckett: ruby, for fucks sake. [15:02] mape: And taxes [15:02] JimBastard: mape: agreed [15:02] JimBastard: ill take the health care too [15:02] robinduckett: lol isn't norwegian taxes like [15:02] robinduckett: fucking awful? [15:02] javajunky: what about the suicide rate ? and the taxes? [15:02] javajunky: ;) [15:02] mape: They are worse yeah [15:02] JimBastard: mape: whats the chiba legality up there [15:02] robinduckett: chiba? [15:02] JimBastard: TREES [15:03] JimBastard: ahaha [15:03] robinduckett: ah [15:03] robinduckett: trees [15:03] mape: JimBastard: Super not legal at all [15:03] robinduckett: :3 [15:03] mape: But we got snus [15:03] robinduckett: snus? [15:03] JimBastard: snus? [15:03] jpld has joined the channel [15:03] JimBastard: snuff [15:03] mape: If you google it you get the propaganda ;) [15:03] JimBastard: jesus [15:04] mape: JimBastard: nah snuff goes into the wrong holes [15:04] robinduckett: ew [15:04] robinduckett: snuff is horrible [15:04] mape: snus is like chew tobacco but we don't spit all over [15:04] JimBastard: yeah man [15:04] mape: Thought you finally got snus in the US? [15:04] JimBastard: chiba > way better [15:04] mape: At least Camel snus [15:04] JimBastard: chewing tobacco is for like red necks [15:04] JimBastard: here at least [15:05] bradleymeck: hehe splitting on a regexp is faster than on a string, v8 is kookie [15:05] mape: JimBastard: http://www.talkdelaware.com/attachments/f40/2335d1235678245-camel-snus-camelsnus.jpg [15:05] JimBastard: ewwwww [15:05] JimBastard: lol [15:05] robinduckett: i'm going back to the dam in april [15:05] JimBastard: i never smoke cigs [15:05] mape: It's like smoking but it doesn't taste shit, you don't smell like shit [15:06] JimBastard: let me show you now [15:06] JimBastard: mape: http://weedsmokersguide.com/pictures/2010/06/Blunt-Rolling2.jpg [15:06] robinduckett: cigs taste like virgin angel pussies. [15:06] robinduckett: don't know what brands you guys are smoking [15:06] mape: robinduckett: those must be some skancy [15:06] robinduckett: meat and potatoes [15:06] javajunky: bradleymeck: well you can optimise the regex to exit early so for a certain set of strings (long ones) you could easily craft a regex to be faster ? [15:06] mape: *skanky hoes [15:06] robinduckett: *puff* [15:07] robinduckett: lobster [15:07] robinduckett: :D [15:07] JimBastard: mape: then of course, http://i25.photobucket.com/albums/c94/wilabong/DutchMasters800Wallpaper.jpg [15:07] bradleymeck: javajunky its still 2x faster on a single character [15:07] JimBastard: the dutch masters [15:07] mape: JimBastard: Nah cannabis is illegal here, the propaganda machine has been on since forever [15:07] javajunky: splitting on a single character, or single character strings ? [15:07] bradleymeck: splitting on a single character [15:07] JimBastard: which is not to be confused with http://peckhamaudioclub.co.uk/site/wp-content/uploads/2009/10/blunt.jpg [15:08] mape: Young people are more liberal though, still not as wide spread as in the US youth though [15:08] bradleymeck: single character strings are generally not a use case [15:08] JimBastard: its decriminalized in new york state for small amounts [15:08] c4milo: TJ ??? [15:08] JimBastard: you get a ticket and a fine [15:08] c4milo: anybody knows if there are problems with post request in expressjs [15:08] c4milo: ? [15:08] JimBastard: c4milo: i would assume no? [15:08] c4milo: I can't get params [15:09] JimBastard: surely there are tests? [15:09] mape: JimBastard: In sweden it ruins your life, you have to take urin samples and the older crowd frowns upon it [15:09] mape: c4milo: using bodyDecoder? [15:09] tjholowaychuk: c4milo: hey [15:09] javajunky: c4milo: you got the body decoder? [15:09] c4milo: mape: just with the installation by default of express [15:09] javajunky: ah too late ;) [15:09] tjholowaychuk: there are many tests :s [15:10] mape: tjholowaychuk: When is the staticDecoder fix being landed? :) [15:10] mape: c4milo: http://github.com/mape/node-express-boilerplate/blob/master//server.js [15:10] javajunky: mape: which fix is that ? . [15:10] c4milo: tjholowaychuk: I can't run the examples neither [15:10] javajunky: (still hunting some weird static image problem) [15:10] tjholowaychuk: c4milo: 0.3.x of node? [15:10] mape: javajunky: that all constants are moved from process to require('consts') [15:10] JimBastard: mape: now i have to decide between boxom blondes and trees :-( [15:10] c4milo: tjholowaychuk: TypeError: Cannot set property 'version' of undefined [15:10] mape: JimBastard: you can still get it [15:10] c4milo: tjholowaychuk: yes [15:10] cardona507 has joined the channel [15:11] tjholowaychuk: c4milo: 0.3.x explodes [15:11] javajunky: mape: oh :( was hoping for some 'known issue' around images giving up half way through ;) [15:11] aurynn: and ads! [15:11] tjholowaychuk: w/ connect [15:11] mape: javajunky: ah now, this one just destroys the ability to use any template engine [15:11] tjholowaychuk: mape: make tim do it :D haha, he still works there :p he should be maintaining [15:11] tjholowaychuk: I have bigger things ATM [15:11] mape: tjholowaychuk: You don't work from Sencha anymore? [15:11] Tim_Smart: tjholowaychuk: http://gist.github.com/604461 <3 [15:12] tjholowaychuk: mape: nope [15:12] mape: Oh k, may one ask why? [15:12] mape: And I think there is already issues on it for connect [15:12] bradleymeck: though may not, no free speech on inets! [15:12] tjholowaychuk: Tim_Smart: howcome a new one? [15:13] rnewson has joined the channel [15:13] rnewson has joined the channel [15:13] Tim_Smart: tjholowaychuk: Will see if mjr_ will merge it... It is even faster. [15:13] Tim_Smart: lol [15:13] V1_ has joined the channel [15:13] mjr_: morning [15:13] Tim_Smart: mjr_: Oh hai [15:13] c4milo: tjholowaychuk: which version of nodejs works well with expressjs ? [15:13] tjholowaychuk: mape: hmm there might be. I would definitely prefer to wait until 0.3.0 is out to start supporting that branch [15:13] tjholowaychuk: c4milo: the stable release 0.2.2 [15:13] tjholowaychuk: Tim_Smart: nice :D [15:14] Tim_Smart: mjr_: I have been playing with the redis protocol. [15:14] severla has joined the channel [15:14] mape: tjholowaychuk: Booo, I thought you were cutting edge man ;) [15:14] codelotus has left the channel [15:14] c4milo: tjholowaychuk: what about 0.2.0 ? [15:14] tjholowaychuk: c4milo: should be fine id thing [15:14] tjholowaychuk: mape: haha certainly but it is hard to keep up when you are trying to work on other projects too [15:14] tjholowaychuk: and maintain production code [15:14] mape: tjholowaychuk: startup? :) [15:15] tjholowaychuk: I work with the LearnBoost guys [15:15] mape: But you will continue to support express for stable node? [15:15] mape: Ah neat [15:15] mjr_: Tim_Smart: have any numbers on how much faster your parser is? [15:15] aurynn: It's so frustrating to get your code almost working, except for that one huge glaring bug that was the entire reason you *wrote it* [15:15] tjholowaychuk: yup, I would totally support 0.3.x if I had the spare time [15:16] mape: So that is a no? ;) [15:16] bradleymeck: is there a default benchmark making module around somewhere? [15:16] mape: Someone should just make a standard format for benchmarks [15:17] bradleymeck: im about to go do that then [15:17] mape: And then someone should make a bot that surfs around the net and makes pretty graphs [15:17] tjholowaychuk: there was node-bench [15:17] mape: And then make a purty UI where you can bench air vs milk and get the version graphs [15:18] mjr_: Yeah, we need that. [15:18] mjr_: Well, time to head in to the city. [15:18] Tim_Smart: mjr_: Yeah. For a simple multi bulk, about 1.3 - 1.5 time faster. [15:18] JimBastard: mape: hell yeah [15:18] JimBastard: with R [15:18] voxpelli has left the channel [15:18] Tim_Smart: times* [15:19] mape: So how hard is it? point to bench files, calc it, must be on npm, fix trix, save, merge and present [15:19] bradleymeck: ooo node-bench [15:19] Tim_Smart: Anyway. I are sleep. [15:22] breccan_ has joined the channel [15:22] ajpiano has joined the channel [15:22] robinduckett: spark [15:22] robinduckett: oops [15:24] muk_mb has joined the channel [15:25] severla: tjholowaychuk: are you 100% sure express work a'right with node 0.2.2 ? [15:25] tjholowaychuk: severla: ive used it tons with 0.2.2 [15:25] boaz has joined the channel [15:25] c4milo: args, the new NODE_MODULE macro doesn't work for me :S [15:25] GriffenJBS_ has joined the channel [15:25] severla: cause posts are broken in 0.2.0 [15:26] severla: tjholowaychuk: even with posts? [15:26] mape: severla: post? [15:26] tjholowaychuk: severla: posts have always been fine for me :s [15:26] Nohryb has joined the channel [15:27] tjholowaychuk: its possible there may be issues with older versions though, things were changing pretty often in node. the rule is latest stable express [15:27] severla: app.post() [15:27] tjholowaychuk: will match latest stable node [15:27] severla: i'm 99% sure they're not working with node 0.2.0 [15:27] dpritchett: i have a tiny no.de app using paperboy and apparently my syntax is only good on 0.3.0-pre and it fails on 0.2.2. My joyent no.de machine is apparently running 0.2.2 and hence barfs on my app. Should I try to update node on my smartmachine or should i just rewrite my app? [15:27] severla: look [15:27] severla: http://gist.github.com/604699 [15:28] tjholowaychuk: 0.2.2 is the latest stable release of node.. so if you choose to use something older you may have to use an older release of express [15:28] tjholowaychuk: thats just the nature of software [15:28] Yuffster has joined the channel [15:28] severla: i can't get to receive params [15:28] severla: when i use req.param('my_param') i get undefined [15:28] severla: i've tried Ajax, RestClient and curl [15:29] tjholowaychuk: are you using the bodyDecoder() middleware? [15:29] tjholowaychuk: req.body [15:29] kuya: does anyone know if using envjs and node works together? or something similar that works on node? [15:29] rwaldron has joined the channel [15:29] severla: is also undefined [15:29] SamuraiJack has joined the channel [15:30] tjholowaychuk: put your middleware in that gist [15:30] GriffenJBS: kuya: sure, why not? [15:30] severla: tjholowaychuk: no i'm not using ... wouldn't it be supposed to work just like that? [15:30] tjholowaychuk: no [15:31] kuya: GriffenJBS: oh ok! :) [15:31] tjholowaychuk: severla: we dont assume everyone wants to buffer request bodies, there are many cases not to [15:31] tjholowaychuk: so bodyDecoder() will take care of a few cases when it is reasonable to do so [15:31] GriffenJBS: depends which version of envjs you use, but other wise yes [15:32] kuya: GriffenJBS: any hint regarding that? [15:32] severla: buffer request bodies? you're talking chinese to me ... i was expecting it to work like sinatra [15:32] JimBastard: ahahaa [15:32] tjholowaychuk: its not sinatra lol its just inspired by sinatra [15:32] tjholowaychuk: if someone POSTs you a massive file like a movie or something you may want to stream it to disk [15:33] tjholowaychuk: or some giant multipart form [15:33] JimBastard: so you can process the file in chucks....as it uploads! [15:33] JimBastard: a stream [15:33] JimBastard: just dont cross it [15:33] severla: i know, but isn't a POST request something natural to do when developing web apps? [15:33] JimBastard: yeah, it should work [15:33] tjholowaychuk: we cant just assume everything is safe to buffer into memory, but bodyDecoder() handles application/x-www-form-urlencoded and application/json bodies [15:33] mape: severla: are you using the bodyDecoder middleware? [15:33] tjholowaychuk: since they are generally small and make express a little more sane to work with [15:34] severla: i'm only POSTing simple params [15:34] mape: still need bodyDecoder, for any POST req [15:34] chrislloyd has joined the channel [15:34] tjholowaychuk: then that woudl be a good time to use bodyDecoder() [15:34] GriffenJBS: JimBastard: :-) nice 80's joke [15:34] kevwil has joined the channel [15:34] JimBastard: :p [15:34] bentruyman has joined the channel [15:34] JimBastard: everytime i hear the word stream i think ghost busters [15:34] GriffenJBS: yup [15:34] chrislloyd has left the channel [15:34] severla: ok ... where may I find instruction on how to use bodyDecoder? [15:35] JimBastard: i think its just .bodyDecoder() [15:35] c4milo: tjholowaychuk: why bodyDecoder doesn't come enable by default in expressjs ? [15:35] JimBastard: in the processing chain [15:35] tjholowaychuk: c4milo: because not everyone needs it [15:35] mape: c4milo: Worse performance? :) [15:35] tjholowaychuk: or wants it [15:35] severla: i'm not a geek ya know, just someone who likes playing [15:35] mape: c4milo: php vs node [15:35] GriffenJBS: kuya: sadly I've seen it used, but I don't know the details, I know there were some IO problems, but they were being worked on [15:35] mape: a lot vs what you need [15:35] tjholowaychuk: it depends on your app, perhaps your app is just an outgoing web service [15:35] ashleydev: tjholowaychuk: why does expresso/test/serial/http.test.js only work with --serial (as there is only one test in there)? [15:36] severla: tjholowaychuk: you're saying that it is not a pretty common scenario to use POST requests in a webapp? [15:36] c4milo: tjholowaychuk: how people can to know that they have to enable that module to use post requests ? [15:36] mape: severla: what middleware have you enabled? [15:36] tjholowaychuk: severla: yeah that is not always the case [15:36] c4milo: y think post and get are very common [15:37] c4milo: I [15:37] c4milo: s/y/I/ [15:37] mape: point being, most middleware in connect are pretty common things [15:37] tjholowaychuk: it is, but *what* you are posting is not [15:38] severla: tjholowaychuk: but just posting a querystring isn't really common scenario of 90% webapps? [15:38] tjholowaychuk: sure, but its also not hard to do app.use(express.bodyDecoder()) [15:39] JimBastard: tjholowaychuk: is it because of the content type of his form? [15:39] ajpiano_ has joined the channel [15:39] JimBastard: or does express just not parse form variables by default [15:39] tjholowaychuk: I would much rather have it optional, since ordering of middleware matters [15:39] bradleymeck: kuya its a small thing to port envjs to node ironically from what ive heard (i think its like 100 lines that need changing from rhino-specific code) but idk if anyone has actually done it [15:39] tjholowaychuk: JimBastard: nope you can use connect-form for multipart, or bodyDecoder() for json/urlencoded [15:39] severla: or even more [15:40] JimBastard: word [15:40] mu-hannibal has joined the channel [15:40] tjholowaychuk: I agree it should be documented better, but not manditory [15:42] kuya: thanks bradleymeck - googles not giving me any usefull info for it and i only need it for a quick thing so i guess ill use something else [15:42] steadicat has joined the channel [15:44] c4milo has left the channel [15:45] severla: so the idea of express is having the common user to sweat until he dies? [15:46] severla: because i'm about to die, i've spent ages trying to get a simple POST to work [15:46] Anti-X: then maybe you should tell express to go smack itself [15:46] ginader has joined the channel [15:46] Anti-X: and use something else [15:47] tjholowaychuk: severla: it takes one line lol the generated app shows it, most of the examples show it [15:47] tjholowaychuk: you just cant make assumptions based on other languages and their frameworks [15:48] mjr_ has joined the channel [15:49] tjholowaychuk: I can totally agree though that the connect/express relationship needs to be documented clearer, specially this use-case [15:50] shimondoodkin: severla < quit [15:50] sideshowcoder has joined the channel [15:50] reid has joined the channel [15:50] JimBastard: tjholowaychuk: expect blog post soon [15:50] JimBastard: about how bad express is from that guy [15:50] JimBastard: lol [15:51] djwm has joined the channel [15:51] bentruyman_ has joined the channel [15:51] tjholowaychuk: severla: one could argue that logging should be maditory, bodyDecoder(), static file serving etc [15:51] tjholowaychuk: haha [15:51] tjholowaychuk: pfft [15:51] c4milo has joined the channel [15:51] tjholowaychuk: I can see how people would assume it should be just like sinatra or something [15:52] JimBastard: i just thought it would work like magic [15:52] jetienne has joined the channel [15:52] JimBastard: real men parser their own form body [15:52] JimBastard: with jabascript [15:52] tjholowaychuk: haha jabascript [15:52] tjholowaychuk: awesome [15:52] JimBastard: jabascripts [15:52] shimondoodkin: it could be a new language [15:53] halfhalo: havascript ftw [15:53] JimBastard: its like a cross between coffeescript LOLscript [15:53] c4milo: I still don't understand why a post request is not common [15:53] JimBastard: lolcode? [15:53] shimondoodkin: you know i had to take to work a starting programmer, he said: i know javascript. but node js javascript is something different [15:53] JimBastard: i dunno, time to get back to real work [15:53] loincloth has joined the channel [15:53] JimBastard: shimondoodkin: yeah it is [15:54] shimondoodkin: jabascrpit [15:54] shimondoodkin: lol [15:54] c4milo: tjholowaychuk: ! [15:54] bradleymeck: c4milo it is common, but its also something that is not always parsed the same way [15:54] tjholowaychuk: yo [15:54] tjholowaychuk: even application/json is making a big assumption, what if it was a huggeee request body [15:54] tjholowaychuk: and someone wanted to stream it with yajl or whatever its called [15:54] halfhalo: sucks for them? [15:55] c4milo: bradleymeck: what is the common way to parsing it ? [15:55] tjholowaychuk: there is none, thats the point [15:55] bradleymeck: depends entirely on what you send? [15:55] c4milo: just a form [15:55] c4milo: I want to use post, that´s all [15:55] bradleymeck: we only send json here [15:55] shimondoodkin: i have post always integrated in my framework. (if it is a post then parse the post unless it is disabled by the controller) [15:55] bradleymeck: some ppl use protobufs [15:56] c4milo: yep, but most people use forms [15:56] c4milo: normal people [15:56] c4milo: hehe [15:56] c4milo: so express isn't for normal people _ [15:56] c4milo: ? [15:56] tjholowaychuk: it is if you add a single line lol [15:56] tjholowaychuk: it is just not opinionated [15:56] c4milo: ahaha [15:57] bradleymeck: mmmm, maybe then the question becomes did you enable a secondary encoding like base64. The fact of the matter is connect/express are frameworks that do not impose upon you [15:57] tjholowaychuk: it lets you craft what you need with minimal effort. for something opinionated you might look to geddy [15:57] tjholowaychuk: like ive said before I really think of express as a framework framework [15:57] shimondoodkin: i personally don't care to add single lol lines here and there but my begginer progrmmers just beg me to do automated staff and apis for them [15:57] tjholowaychuk: I have a cms backed by it, other people craft what they need blah blah [15:58] shimondoodkin: my begginer progrmmers say they are layzy [15:58] c4milo: but what is the fear to not adding post by default ? [15:58] c4milo: 1 ms ? [15:58] djwm has left the channel [15:58] c4milo: 2 ms ? [15:58] shimondoodkin: so from time to time i add staff like this to make them happy [15:58] herbySk has joined the channel [15:59] stagas has joined the channel [15:59] bradleymeck: c4milo on a large enough body as much time as it takes (ive seen couple meg bodies take some time) [15:59] tjholowaychuk: c4milo: its not about that, it takes away the opportunity to say stream a json request body [15:59] omarkj: Got a question with regards to garbage collection. Got a object I'm creating for each connection that handles subscriptions etc. When the user disconnects I set this object to null (I've also tried to delete it). It doesn't get garbage collected at all - the emitter from within continues to emit. [15:59] claudiu_ has joined the channel [15:59] bradleymeck: omarkj gist it [15:59] omarkj: http://pastie.org/1191570 <-here it is [16:00] omarkj: This is the object I'm creating. [16:00] ceej has joined the channel [16:01] omarkj: So basically "new SubscriptionHandler()" [16:01] c4milo: its not about that, it takes away the opportunity to say stream a json request body <— this makes sense for me :) but is more easy for an advance user to know how disable the module that for a beginner user how enable it [16:02] c4milo: s/advance/advanced/ [16:02] tjholowaychuk: thats what rails is for [16:02] tjholowaychuk: assuming annoying things [16:02] bradleymeck: omarkj im more interested where its being called from and deleted, the object isnt doing anything odd [16:02] c4milo: ahh that means that expressjs isn't for dummies ? [16:03] bradleymeck: yes [16:03] omarkj: bradleymeck: wait [16:03] vnguyen has joined the channel [16:03] deepthawtz has joined the channel [16:04] omarkj: bradleymeck: http://pastie.org/private/bpp4zkgro44rrn9tcrfqg [16:07] kjeldahl has joined the channel [16:07] noahcampbell has joined the channel [16:07] seanouimet has joined the channel [16:07] bradleymeck: omarkj handler.Delayed or handler.Realtime is not being collected for w/e reason and is firing those events so the object wouldnt be released [16:08] Gurpartap has joined the channel [16:08] amerine has joined the channel [16:08] Gurpartap: o shit [16:08] Gurpartap: this room is huge [16:08] Gurpartap: :p [16:08] shimondoodkin: http://github.com/shimondoodkin/node-inflow - added async while and async for each [16:09] JimBastard: welcome Gurpartap [16:09] mape: Gurpartap: not really, pretty close and personal [16:09] Gurpartap: someone set the /topic in #nodejs pointing ppl to #Node.js [16:09] seanouimet: the fake #nodejs room is a decoy [16:09] Gurpartap: thanks bastard [16:09] Gurpartap: JimBastard* [16:09] seanouimet: I had also been lingering in the wrong room until somebody said "is this the right room" [16:09] shimondoodkin: probably a bot is needed [16:09] Gurpartap: I'm going to stick here like a leech. [16:09] Gurpartap: :) [16:09] omarkj: bradleymeck: Hm, okay. That object (in the first file) is a singularity. I'm guessing RX might be causing some problems here. [16:09] omarkj: bradleymeck: Thanks for checking it out. [16:09] JimBastard: there are like 10 people in #nodejs [16:09] JimBastard: i yelled at them [16:10] mjr_: someone should send a nodejs bot over there that just tells people to come here [16:10] Gurpartap: JimBastard: if you have the rights to this channel, you could ask founder access to #nodejs from #freenode. [16:10] shimondoodkin: who has a bot to put , to greet each user in the nodejs room personaly [16:10] Gurpartap: And set a +f redirect to this channel. [16:10] JimBastard: Gurpartap: that would be a good idea [16:10] Gurpartap: So they're automatically redirected to this channel. [16:10] Gurpartap: And kick those who are already there. [16:11] wilmoore has joined the channel [16:11] Gurpartap: Let me know if you need any help with the irc commands. :D [16:11] halfhalo: dundunDUN [16:11] Gurpartap: i would want to write an irc bot in node.js [16:11] Gurpartap: lulz [16:11] stagas has joined the channel [16:11] Gurpartap: omg [16:11] Gurpartap: k [16:11] halfhalo: EVERYone wants to [16:11] Gurpartap: that goes to my this year's todo. [16:12] davidsklar has left the channel [16:12] Gurpartap: hah [16:12] Gurpartap: :D [16:12] reid has joined the channel [16:13] JimBastard: isaacs: ping [16:13] TheEmpath has joined the channel [16:13] halfhalo: yano, if I actually got around to adding non hacky support for different message types to my bot it could do that redirect thing [16:13] halfhalo: but... that waits till tomorrow at least, midterms today [16:13] JimBastard: anyone feel like filling this out [16:13] JimBastard: http://freenode.net/group_registration.shtml [16:14] JimBastard: ryah ^^ [16:14] halfhalo: (And the new plugin system will be much, much better with less tacked on options and simpler routes) [16:15] shimondoodkin: halfhalo: please give me alink to your project [16:15] shimondoodkin: i want to learn about plugins [16:15] halfhalo: AKA instead of doing this.plugins['core'].in(route,callback,messagetype,allowed) something like route.messagetype(route,callback,allowedtypes) [16:16] halfhalo: http://github.com/halfhalo/Node.js-IRC [16:17] dguttman has joined the channel [16:17] BRMatt has left the channel [16:17] halfhalo: that was my first attempt at plugins [16:17] dguttman has left the channel [16:17] halfhalo: Well, that project was also my first node project as well... :p [16:17] shimondoodkin: its quite good [16:17] halfhalo: and it shows [16:17] dguttman has joined the channel [16:18] coffeecup: is it possible to use express & sessions along with websockets and authenticate websocket connections with sessions somehow or won't that work out? [16:18] isaacs_ has joined the channel [16:19] halfhalo: my end goal for plugins is to have them sandboxed, but also provide a safe way to talk to each other so that if one goes down the rest are unaffected [16:19] omarkj: bradleymeck: It's solved. Thanks alot for pointing me in the right direction. [16:19] halfhalo: And to do that... I have to split them up into core, which are not sandboxed and all other plugins have access to, and vendor, which only talk to core plugins [16:20] bradleymeck: coffeecup most implementations of websockets dont send cookies still (excluding chrome 7+), so you have to do junk [16:21] stagas has joined the channel [16:22] codemanki has joined the channel [16:24] bradleymeck: coffeecup if it needs to be secure get a one use token injected into a script tag somewhere sent over ssl and check it against ip for login [16:25] banjiewen has joined the channel [16:25] AAA_awright: Gurpartap: Not that hard I wrote one in an hour [16:26] stephank has joined the channel [16:27] coffeecup: bradleymeck: thx ill try that [16:28] JimBastard: hey cloudhead you there? had a quick resourcer / cradle question. if you don't assign a value to a resource property it wont create it as empty in the database right? is there a way to make it required to it creates a null / empty value? [16:29] agnat has joined the channel [16:29] ph^ has joined the channel [16:30] gerred has joined the channel [16:30] reid: so, here's a weird bug in express and/or jade: http://pastie.textmate.org/private/qxagd1rnxob1guld9fstq [16:31] reid: i'm using both of those in my project, and require jade 0.5.0. however, express doesn't require jade. [16:31] galaxywatcher has joined the channel [16:31] reid: so the version it has may not be 0.5.0. it may not even exist. [16:31] reid: wtf. [16:32] tjholowaychuk: npm install jade ? [16:32] reid: (this is using npm, of course. so different versions can be installed— meaning that my package has 0.5.0 but the active one may be older) [16:32] stagas has joined the channel [16:32] reid: well, making jade 0.5.0 active didn't fix the bug. [16:32] aho has joined the channel [16:33] tjholowaychuk: thats not a bug, thats just a require() lookup path thinger with npm [16:33] reid: so what went wrong? [16:33] tjholowaychuk: of which I cant help very much lol isaacs is your man [16:33] reid: i'm trying to understand, since i never had this problem on my boxes. [16:33] reid: lol, isaacs is the man. [16:34] isaacs_: wait, what's this about jade express etc? [16:34] reid: isaacs: pop over to #yui [16:35] noahcampbell_ has joined the channel [16:36] tjholowaychuk: issue with require() resolution or something [16:36] pbh_ has joined the channel [16:36] fcoury has joined the channel [16:37] dnolen has joined the channel [16:37] mu-hannibal has joined the channel [16:37] bpot has joined the channel [16:37] reid: confirmed: isaacs is the man. [16:38] tjholowaychuk: figured it out? what was it? [16:38] sh1mmer has joined the channel [16:38] reid: isaacs can explain it better than i can [16:38] fcoury: Hi guys, Felipe here from Webbynode. I was wondering if you guys saw our approach to node.js deployment and if you guys have any feedback, just let me know. [16:39] isaacs_: tjholowaychuk: any particular reason why jade isn't a dep of express? [16:39] reid: but, it's because after i include express, jade is no longer in express' require.paths [16:39] herbySk has joined the channel [16:39] tjholowaychuk: isaacs_: just because its not a dep, you can mix and match any template engines [16:39] isaacs_: tjholowaychuk: i see. [16:39] isaacs_: tjholowaychuk: what about if there was a way to say express.useTemplateEngine(require("jade")) [16:39] isaacs_: tjholowaychuk: then express wouldn't be doing the require()ing [16:40] tjholowaychuk: id rather keep it transparent like it currently is [16:40] isaacs_: tjholowaychuk: i'm going to also solve this in npm, by adding an "addto" command [16:41] reid: interesting [16:41] isaacs_: tjholowaychuk: well, the issue is that your code is doing require("jade") at some point, but there is no "jade" in the require path [16:41] reid: btw, ebi says in #yui that activating jade didn't work. [16:41] tjholowaychuk: npm install jade / npm install express works for me [16:41] reid: tjholowaychuk: that's bugged when you need a specific version, for example [16:42] deadlyicon has joined the channel [16:42] rasputnik has joined the channel [16:42] tjholowaychuk: thats a PM issue, not express/jade [16:42] reid: agreed [16:42] tjholowaychuk: I allllways localize deps [16:42] isaacs_: tjholowaychuk: so, how exactly does express know to load jade? [16:43] tjholowaychuk: isaacs_: by default a template named *.jade will do require('jade') [16:43] isaacs_: i see. [16:43] tjholowaychuk: which is cached internally so no more require() hits [16:43] stagas has joined the channel [16:43] tjholowaychuk: but you can alter that with app.register() [16:43] bradleymeck: fcoury i saw it briefly but didnt look into it :/, was pretty happy to see at least 1 host for node haha [16:43] isaacs_: is there a way to say "use this for .jade files"? [16:43] tjholowaychuk: so *.html could be ejs [16:44] tjholowaychuk: yup [16:44] nerdEd has joined the channel [16:44] isaacs_: reid: why not just do in your app: jade = require("jade") ; app.register(whatever tj says goes here) [16:44] reid: isaacs_: definately, i just din't know what to put in register() [16:45] isaacs_: tjholowaychuk: ^? [16:45] tjholowaychuk: http://expressjs.com/guide.html#app-register-ext-exports- [16:45] tjholowaychuk: reid ^ [16:45] konobi: isaacs_: any idea who pengwynn is on IRC? [16:45] reid: ah, okay [16:45] isaacs_: konobi: nope [16:45] konobi: kk [16:45] reid: tjholowaychuk: it would be awesome if that was required [16:45] reid: so that this confusion would never happen. [16:45] tjholowaychuk: its never an issue for me :s [16:45] tjholowaychuk: not my fault npm makes it weird :p [16:46] reid: well, i'm not making a web app with express [16:46] isaacs_: tjholowaychuk: it's not npm making it weird. somehow the npm root config isn't in node's require.paths by default [16:46] reid: (kinda) [16:46] tjholowaychuk: isaacs_: ah gotcha [16:47] reid: i suppose it would be cleaner if express didn't use things that it didn't specify as dependencies [16:47] saimon_ has joined the channel [16:47] tjholowaychuk: it doesnt [16:47] tjholowaychuk: ./support is for testing [16:47] isaacs_: yep, ebi's node is borked. [16:47] reid: for testing? [16:48] isaacs_: tjholowaychuk: welcome to homebrew suckage. [16:48] TheEmpath has joined the channel [16:48] fcoury: bradleymeck: thanks for the feedback, in a nutshell what we do is create a temporary subdomain, add an entry to nginx with a vhost that servers as a proxy, and we make your node.js app run from upstart [16:48] saikat has joined the channel [16:48] fcoury: bradleymeck: and the deployment is done using git [16:48] jakehow has joined the channel [16:49] halfhalo: sounds like an automated cap system [16:49] reid: tjholowaychuk: agreed that the core of express doesn't— i just meant for view engines, it'd be cool if it didn't specify anything itself [16:49] tjholowaychuk: isaacs_: shit, that again? [16:49] halfhalo: (Havent played with it, but am moving from linode to webbynode) [16:49] isaacs_: SRSLY!! [16:49] isaacs_: yes [16:50] tjholowaychuk: reid: it doesnt :p it just automagically require()s things based on the extension [16:50] fcoury: halfhalo: welcome aboard, I'd love to get some feedback [16:50] reid: tjholowaychuk: oh, my bad. [16:50] reid: :( [16:50] marshall_law has joined the channel [16:50] reid: tjholowaychuk: that sounds pretty awesome then :) lol. [16:51] reid: it would probably work for most people, then. [16:51] reid: yay. [16:51] isaacs_: tjholowaychuk: the thing that almost sucks the most about the homebrew thing is cases like this, where npm makes your specific installation path irrelevant, and then people get most of the way to a working app, and then randomly something breaks. [16:51] halfhalo: fcoury: I will say this, random passenger/rails errors are pissing me off via the webbynode manager [16:51] fcoury: halfhalo: that must be solved now [16:51] tjholowaychuk: isaacs_: yeah thats not good :( [16:52] fcoury: If anyone is interested in trying Webbynode I can arrange some coupons, but I don't want to pollute this channel, hop into #webbynode and ping me [16:52] isaacs_: i should really just sniff for "Cellar" in the path, and crash. [16:52] reid: isaacs_: you should pull npm from there. it's super, super old. [16:52] isaacs_: but they'll probably just gsub that out anyway [16:52] isaacs_: reid: they're up to 0.2.1 [16:52] isaacs_: reid: brew update [16:52] reid: ah. that's new [16:53] reid: a week or so ago it was pretty ancient [16:53] emerleite has joined the channel [16:54] reid: isaacs_: black box warning that like sudo ;) [16:54] isaacs_: of course, nevermind that 0.2.1 has a few major bugs that have since been fixed. [16:54] isaacs_: like, seriously, npm should just not be in the homebrew index. [16:55] jameshome: agree [16:55] stagas has joined the channel [16:55] jameshome: also, mustache express yields hilarious search results [16:57] cardona507 has joined the channel [16:57] qFox has joined the channel [16:59] codemanki: isaacs_: are you here? [16:59] isaacs_: yeah, hey [16:59] isaacs_: multipart [16:59] isaacs_: what's up? [17:00] mu-hannibal_ has joined the channel [17:00] sonnym: hmm. . . var test = require(path.join(".", dir, file)); doesn't work. [17:00] codemanki: isaacs_: yep, should i tell here or in private? [17:00] sonnym: is that totally wtf worthy, or does it seem sensible? [17:01] codemanki: isaacs_: cos it is not really related to node js :) [17:01] isaacs_: sonnym: what version of node [17:01] isaacs_: codemanki: no, here's fine [17:01] sonnym: 0.2.0 [17:01] isaacs_: codemanki: it's as related to node as any other random lib :) [17:01] codemanki: ok :) [17:02] ditesh|cassini has joined the channel [17:02] deadlyicon has joined the channel [17:03] saikat has joined the channel [17:04] pengwynn has joined the channel [17:05] codemanki: isaacs_: okay, so basically i do not really like the error function in utils. why? it always will throw an error to node js, even if i declare onError function for emitter. Here is small example, why i think this is not a proper flow. i am using multipart for file uploading, and once i didn't sent a multipart header and got Expected multipart message error. and it was raised inside the "req.addListener("data", functio [17:05] codemanki: n(chunk) { parser.write(chunk); });" where parser is mutipart.parser [17:05] codemanki: and it means, that i should create parser.onError and both cover parser.write with a catch block [17:05] stagas has joined the channel [17:06] codemanki: maybe, if emitter onError is declared, there is no need to raise exception in error function ? [17:07] codemanki: isaacs_: i am not saying that it is wrong, i am just asking :) [17:07] jetienne has joined the channel [17:07] persson: ls [17:07] isaacs_: codemanki: yeah, there needs to be some work done on that. it's not great. [17:07] isaacs_: codemanki: fornow, parser.onError = function (er) { this.error = null } [17:08] isaacs_: codemanki: it only throws if you don't clear out the "error" state [17:08] codemanki: yes, yes i saw it. [17:08] codemanki: if (emitter.error) [17:08] sonnym: looks like I'm going for var test = require("." + path.join("/", dir, file)); . . . fugly that [17:08] technoweenie has joined the channel [17:08] codemanki: isaacs_: okay, tnx, sorry for bothering :) [17:09] isaacs_: codemanki: but it needs to be very different. [17:09] isaacs_: codemanki: like, completely rewritten [17:09] codemanki: the whole error function ? [17:09] isaacs_: codemanki: it should be node-specific, use an event emitter, do the readable/writable stream api thing [17:09] saikat has joined the channel [17:10] isaacs_: codemanki: p = new multipart.Parser ; sys.pump( input, p ) ; p.on("part", function (part) { sys.pump(part, output) }) [17:10] isaacs_: codemanki: all parsers should work that way ^ [17:10] kjeldahl has joined the channel [17:11] codemanki: oh..i found only one tutorial how to work with multipart, so i used it [17:11] codemanki: but thx for the tip [17:11] huyhong has joined the channel [17:11] isaacs_: codemanki: depending on what oyu're doing with it, felixge's formidable might be easier [17:11] isaacs_: and it's certainly faster [17:11] bentruyman has joined the channel [17:12] dguttman has joined the channel [17:12] MikhX has joined the channel [17:12] path[l] has joined the channel [17:12] jchris has joined the channel [17:13] huyhong has left the channel [17:14] codemanki: isaacs_: i am only uploading a file, so i don't think there is a need to rewrite the whole thing. or it is ? [17:14] isaacs_: codemanki: i mean, i need to rewrite it :) [17:14] isaacs_: codemanki: multipart-js is kinda dusty [17:15] codemanki: no, i mean do i need to rewrite my app to work with formidable in case i am only uploading files [17:16] benburkert has joined the channel [17:17] stagas has joined the channel [17:18] codemanki: isaacs_: can you recommend what to read, to improve javascript coding in the field of node js? this sounds silly, but there are so many new different stuff and techniques in projects based on node js [17:18] LowValueTarget has joined the channel [17:18] aheckmann has joined the channel [17:19] brianmario has joined the channel [17:19] josefrichter_ has joined the channel [17:19] isaacs_: codemanki: sure. i think howtonode.org is a great resource. also, just general javascript stuff. i recommend "The Good Parts" and "JavaScript: The Definitive Guide" [17:20] sveimac has joined the channel [17:22] codemanki: thanks! [17:24] ajpiano_ has joined the channel [17:24] saikat has joined the channel [17:27] benreesman has joined the channel [17:28] stagas has joined the channel [17:28] Nohryb has joined the channel [17:28] reid: homebrew should die in a fire. [17:28] reid: well, maybe just the node formula. [17:29] JimBastard: diaf [17:29] JimBastard: ouch [17:29] omarkj: reid: What's wrong with it ? [17:29] aurynn: The Good PArts is a good book. [17:29] JimBastard: why would you need homebrew to install node? [17:30] csullivan_ has joined the channel [17:30] reid: omarkj: http://gist.github.com/604961 /cc isaacs_ [17:31] isaacs_: reid, omarkj: HOMMMEEEEEBRRRREEEEWWWWWWW!!!! [17:31] reid: isaacs_: any reason why line 4 has the process.execPath in there? [17:31] reid: ew x 1000 [17:31] omarkj: mm homebrew [17:31] isaacs_: reid: /usr/local/Cellar/node/0.2.2/lib/node isn't the exec path [17:32] reid: isaacs_: line 4 [17:32] isaacs_: reid: yeah [17:32] isaacs_: oh, that... [17:32] isaacs_: weird, i dunno [17:32] reid: compare line 4 to line 11, which is correct [17:32] isaacs_: reid: get rid of npm on homebrew. [17:32] isaacs_: it's broken [17:33] reid: hmm, i'm using npmjs.org's installer [17:33] isaacs_: right, but your'e using node on homebrew [17:33] reid: but yeah, i'm about to get rid of node on homebrew [17:33] reid: yup. [17:33] isaacs_: yup. [17:37] bentruyman_ has joined the channel [17:37] saikat has joined the channel [17:38] norviller has joined the channel [17:39] stagas has joined the channel [17:40] isaacs_: i've never seen anyone get so excited about server-side templating: http://developer.yahoo.com/yui/theater/video.php?v=glass-node davglass++ [17:40] JimBastard: mape: is wargamez online anywhere? [17:40] JimBastard: someone wanted to see a demo [17:42] nerdEd has joined the channel [17:42] gorakhargosh has joined the channel [17:42] langworthy has joined the channel [17:44] ollie has joined the channel [17:44] cartab has joined the channel [17:44] tyfighter has joined the channel [17:45] tilgovi has joined the channel [17:45] cartab has left the channel [17:45] fcoury: isaacs_: wow, that's a cool presentation... all presentations should be like that! :) two slides! [17:45] xla has joined the channel [17:46] vmthehut has joined the channel [17:46] reid: isaacs_: you should have seen the look on crockford's face. [17:47] bartt has joined the channel [17:47] isaacs_: reid: about dav's preso? [17:47] halfhalo: if I could do anything with maps and jquery I would totally make a wargames plugin [17:47] reid: isaacs_: yes. http://www.flickr.com/photos/uberlife/4996807583/ [17:48] reid: you can see that smile in there. [17:48] isaacs_: ha [17:48] uvacav has joined the channel [17:48] isaacs_: yeah, seems like he's trying to figure out if this is awesome or retarded. [17:48] reid: lol! [17:48] reid: i'd bet the former. [17:49] reid: but yeah. :P [17:49] uvacav: anyone know of a node.js chat example that supports multiple chat rooms? (or where I should look to figure out how to do something similar) [17:49] JimBastard: uvacav: no, but it would be easy i think [17:49] JimBastard: chat rooms are easy [17:49] spetrea: I'm using Node.JS together with Qooxdoo and I wrote a chess multiplayer game with these :) Screenshot -> http://github.com/wsdookadr/Q-Chess/raw/rewrite/screenshots/sample1.png code -> http://github.com/wsdookadr/Q-Chess/tree/rewrite [17:50] JimBastard: i think some of the socket projects have channels built in [17:50] JimBastard: or something [17:50] JimBastard: for the pub/sub [17:50] halfhalo: interfacs are haaaard [17:50] sh1mmer has joined the channel [17:50] uvacav: JimBastard: oh, i'll look, thanks [17:50] JimBastard: socket.io maybe [17:51] JimBastard: http://chat.nodejitsu.com/ [17:51] JimBastard: that is only one channel atm [17:51] stagas has joined the channel [17:51] tobiassjosten has joined the channel [17:51] isaacs_: uvacav: http://github.com/ry/web_ircd/blob/master/ircd.js [17:51] isaacs_: uvacav: i mean, it's an ircd implementation, so i guess that's kinda cheating [17:52] halfhalo: cheating is good though [17:52] mischievious has joined the channel [17:52] spetrea: can someone host my Node.JS multiplayer chess server please ? [17:52] saikat_ has joined the channel [17:52] mischievious has joined the channel [17:53] aurynn: yes, you can, for the low price of $whatever_linode_charges [17:54] halfhalo: or webbynode for half od $whatever_linode_chargs [17:54] aurynn: there you go. [17:54] halfhalo: ok, cold fingers plus pre kb is fail [17:54] isaacs_: or no.de for $free_with_coupon_until_we_charge [17:55] halfhalo: orly [17:55] konobi: no! IS NOT FOR JOOS! [17:55] konobi: um... okay then [17:55] konobi: =0) [17:56] isaacs_: konobi: did you just say no.de is not for jews? [17:56] saikat has joined the channel [17:56] isaacs_: konobi: is that some kind of nazi joke since it's .de? [17:56] Gurpartap: damn i wish i could write iphone apps with node.js [17:56] halfhalo: webos ftw [17:56] Gurpartap: :@ [17:56] Gurpartap: :p [17:57] Gurpartap: D: [17:57] halfhalo: is nao midterm time for me... how fun! [17:57] konobi: isaacs_: lolcatz [17:57] konobi: =0P [17:57] isaacs_: yeah, i grok, just being silly [17:57] csullivan_ has joined the channel [17:57] konobi: isaacs_: surely you we're saying no to germans [17:58] isaacs_: konobi: didn't you know? node is a german national. [17:58] isaacs_: that's where it was born [17:59] konobi: so that's why it's been so touchy of late! [17:59] Gurpartap: who has no.de code? :0 [18:00] Gurpartap: :0 [18:00] Gurpartap: :) [18:00] Gurpartap: lol [18:01] stagas_ has joined the channel [18:01] matclayton has joined the channel [18:02] JimBastard has joined the channel [18:02] Gurpartap: O:-) [18:02] sudoer has joined the channel [18:03] uvacav: sorry, beginner question -- what is exporting an object? [18:03] JimBastard: exports.poop [18:03] JimBastard: require('theModule').poop [18:03] halfhalo: lol [18:03] JimBastard: sorry, i dont know what we were talking about [18:04] bradleymeck: module.exports = {x:1,y:2,z:3} does similar [18:06] isaacs_: module.exports = { poop : thePoop }, to stick to JimBastard's nomenclature [18:06] creationix has joined the channel [18:07] JimBastard: but then who was poop [18:07] JimBastard: var foo = exports; [18:07] JimBastard: foo.method = function(){} [18:08] JimBastard: thats fun too [18:10] hannesw has joined the channel [18:11] dgathright has joined the channel [18:11] stagas_ has joined the channel [18:12] rnewson has joined the channel [18:12] rnewson has joined the channel [18:13] dnolen has joined the channel [18:14] scnd has joined the channel [18:14] abiraja has joined the channel [18:15] GriffenJBS: anyone have the url for step handy? [18:15] stagas: I don't get it, why everyone tweets and retweets that the jsconfeu videos are on blip since those are last years [18:16] josefrichter has joined the channel [18:17] ako has joined the channel [18:17] creationix: GriffenJBS: http://github.com/creationix/step [18:17] creationix: ;) [18:17] GriffenJBS: thanks [18:17] matclayton has left the channel [18:18] mikeal has joined the channel [18:18] GriffenJBS: I've written some stuff along the same line, wanted to see if I was re-inventing the wheel [18:19] creationix: GriffenJBS: keep in mind that Step isn't the best answer, it's just the best I've come up with after several iterations and given some constraints [18:19] creationix: if you know your particular domain and have tighter control over function apis, you can do something more elegant [18:20] GriffenJBS: yeah, I built mine as a queue, functions to be pushed, popped, pushed to run next, or unshifted to be run later [18:20] bmavity has joined the channel [18:22] stagas has joined the channel [18:23] GriffenJBS: I like the Function idea, call the object as the entry point [18:24] tg has joined the channel [18:24] cpm_ has joined the channel [18:26] mbl has joined the channel [18:27] ngw has joined the channel [18:28] mbl has joined the channel [18:29] omarkj has joined the channel [18:31] stagas has joined the channel [18:31] franksvalli has joined the channel [18:33] hansek has joined the channel [18:35] cpm_ has left the channel [18:36] Druid_ has joined the channel [18:36] emmanueloga has joined the channel [18:37] BrianTheCoder has joined the channel [18:38] claudiu_ has joined the channel [18:42] c4milo has joined the channel [18:42] WALoeIII has joined the channel [18:46] mAritz has joined the channel [18:48] dylang has joined the channel [18:49] mbl has joined the channel [18:49] unomi has joined the channel [18:49] unomi has joined the channel [18:49] CIA-77: node: 03Ryan Dahl 07master * rc3bc48d 10/ lib/http.js : Move the http client's initParser() into prototype - http://bit.ly/a6yjTw [18:49] CIA-77: node: 03Ryan Dahl 07master * ree9af66 10/ test/simple/test-http-client-parse-error.js : [18:49] CIA-77: node: Add test for getting parse error from HTTP client [18:49] CIA-77: node: Made this test in response to this thread: [18:49] CIA-77: node: http://groups.google.com/group/nodejs/browse_thread/thread/f82835007a277de2/ [18:49] CIA-77: node: But Node appears to be working correctly. - http://bit.ly/9FZpfg [18:51] sechrist: -whew- disrupt is over [18:51] c4milo has joined the channel [18:53] mischievious has joined the channel [18:56] deepthawt has joined the channel [18:57] malkomalko has joined the channel [18:57] gorakhargosh has joined the channel [18:59] tobert has joined the channel [19:02] slaskis: isaacs: can i set the prefix for npm when i try to install it? i get permission denied otherwise: https://gist.github.com/72cacb4e6a6d8470afaf [19:02] halfhalo_ has joined the channel [19:02] isaacs_: slaskis: sure, just edit your .npmrc file first. it's ini-formated, so add this to it: root = /some/path/you/own [19:02] nodejs-log_ has joined the channel [19:03] slaskis: excellent, thanks! [19:03] isaacs_: slaskis: $HOME/.node_libraries is good [19:04] slaskis: hmm [19:04] slaskis: is that not the default? [19:04] isaacs_: slaskis: not the default for npm, no [19:05] isaacs_: slaskis: but that way, it'll be in the NODE_PATH by default [19:05] slaskis: great [19:05] c4milo: ryah: ? [19:06] c4milo: someone has C++ modules using the new macros ? [19:06] mbl has joined the channel [19:07] slaskis: isaacs_: now it fails to link the binaries instead [19:07] isaacs_: slaskis: binroot and manroot, set those, too [19:07] slaskis: ah [19:08] dysinger has joined the channel [19:10] bradleymeck: youll never take away my c++ init function! nevaaaah [19:10] Anti-X: ACTION shoots it [19:11] Anti-X: with a pellet of rainbow matter [19:11] halfhalo has joined the channel [19:11] halfhalo: alllllmost done setting up new servers! [19:12] c4milo: bradleymeck: ahahaha yes !!! you should use the super macro NODE_MODULE !! :P [19:12] nodejs-log has joined the channel [19:12] bradleymeck: nope, i dont wanna [19:12] bradleymeck: *avoids macros like plague* [19:12] Blackguard has joined the channel [19:12] BrianTheCoder has joined the channel [19:12] c4milo: bradleymeck: your destiny is to use the same module scheme that apache httpd :P [19:13] Blackguard has joined the channel [19:13] bradleymeck: i generally avoid mixing any 2 programming languages when using 1 is sufficient [19:13] c4milo: indeed [19:13] gregerolsson has joined the channel [19:14] c4milo: that's why I'm using nodejs :P [19:17] sugardave has joined the channel [19:17] BHSPitCS1 has joined the channel [19:18] sanduz2 has joined the channel [19:19] CIA-77: node: 03Ryan Dahl 07master * r1a2c1c8 10/ src/node.js : Simplify: per-module cache thing - http://bit.ly/bpX7NE [19:19] Aria has joined the channel [19:20] grahamalot has joined the channel [19:20] CIA-77: node: 03Ryan Dahl 07master * r5cc1428 10/ src/node.js : Remove unused function - http://bit.ly/dcD2Zw [19:21] saikat has joined the channel [19:22] stagas_ has joined the channel [19:22] sudoer has joined the channel [19:23] nerdEd has joined the channel [19:24] Me1000 has joined the channel [19:25] path[l] has joined the channel [19:26] path[l] has joined the channel [19:30] audy has joined the channel [19:31] AL_ has joined the channel [19:33] deepthawtz has joined the channel [19:34] malkomalko has joined the channel [19:35] csullivan has joined the channel [19:36] elijah-mbp has joined the channel [19:36] saikat has joined the channel [19:38] omarkj has joined the channel [19:39] stagas has joined the channel [19:43] Gruni has joined the channel [19:45] MikhX has joined the channel [19:46] trotter has joined the channel [19:47] pedrobelo has joined the channel [19:48] malkomalko has joined the channel [19:49] uvacav: ugh im confused.. if I define a User then create an instance of User inside my createServer( function() {here}) -- doesn't that only create one instance of User per server (whereas I would want one instance of User per connection) ? [19:51] bradleymeck: uvacav http.createServer(function(){var user=new User;}) would be 1 per connection [19:51] Aria: createServer's callback is called once per connection [19:51] Aria: That function gets called many times [19:51] Aria: (and local variables, var foo, inside it, are private to each call) [19:51] bradleymeck: aria did you have an smtp client or was that someone else? [19:51] uvacav: oh ok, that seems odd to me but that makes this code im reading make much more sense [19:52] Aria: bradleymeck: Someone else -- I'm writing a server (so far, though I intend the library to do both ends) [19:52] Aria: Yeah, if you're not used to closures, uvacav, it's surprising [19:56] programble has joined the channel [19:59] rwaldron_ has joined the channel [20:00] aubergine has joined the channel [20:00] mr_daniel has joined the channel [20:01] stagas: anyone tried orientdb? http://code.google.com/p/orient/ [20:02] loincloth has joined the channel [20:02] dpritchett: anyone here familiar with paperboy? [20:02] dpritchett: i've got it running on a no.de machine but now i'd like to add in some dynamic content as well [20:02] mirkok has left the channel [20:03] dpritchett: not sure if i need to run a second node service on a different port or if i can cram dynamic services in there as well [20:03] dpritchett: it *looks* like the paperboy.deliver() function wants to monopolize a port (i.e. port 80) [20:03] tg has joined the channel [20:04] malkomal_ has joined the channel [20:05] abiraja has joined the channel [20:05] saikat has joined the channel [20:05] hannesw has joined the channel [20:06] felixge has joined the channel [20:06] felixge has joined the channel [20:06] eisd|away has joined the channel [20:07] malkomalko has joined the channel [20:08] creationix: dpritchett: it can be done [20:08] creationix: using a technique like connect [20:08] felixge: ryah: does the buffer leak test make sense? [20:09] o_o has joined the channel [20:10] jesusabdullah: It sounds like it'd almost be better to switch from paperboy to something else, though, if paperboy makes it hard to serve not-so-static content [20:10] creationix: dpritchett: also you could just use connect's staticProvider [20:10] creationix: it's kinda like paperboy, except it's built to work along-side dynamic stuff [20:10] dpritchett: thanks, I'll read up on connect [20:11] creationix: though in the end it's just a function, you can just wrap paperboy's handler and intercept the requests [20:11] dpritchett: I had read that it was similar to Rack but since I hadn't yet needed to run two node services on one port it didn't sink it [20:11] creationix: I haven't looked, but I assume paperboy has thought more about static file serving since it's the main feature [20:11] dpritchett: my needs are meager but i'm learning a lot pushing through this so adding connect seems like a good next step [20:12] creationix: sure, let me know if you need any help. Just remember, it's just JavaScript [20:12] creationix: anything is possible if you understand what's going on [20:12] dpritchett: in the past two days i've written my first jquery, used paperboy for the first time, published my first app to no.de, learned how post-receive git hooks work, and hacked my first solaris SMF files [20:12] creationix: nice [20:12] dpritchett: http://dpritchett.no.de is all i have to show for it :) [20:13] blowery has joined the channel [20:15] rauchg__ has joined the channel [20:19] saikat has joined the channel [20:20] Aria: Woot! Fixed 20 testcases in the HTML5 suite! [20:20] Kung_Fu_Hamster has joined the channel [20:21] Gruni has joined the channel [20:21] bradleymeck: nice [20:22] ysynopsis has joined the channel [20:22] blowery has joined the channel [20:23] jameshome_ has joined the channel [20:25] boaz has joined the channel [20:26] mtodd_ has joined the channel [20:26] codetonowhere has joined the channel [20:30] emerleite has left the channel [20:30] emerleite has joined the channel [20:31] sudoer has joined the channel [20:32] LowValueTarget has joined the channel [20:32] mjr_: Wow, 375 people in here, and it almost never dips below 300. We are headed for a 400 person room. [20:32] felixge has joined the channel [20:32] felixge has joined the channel [20:33] aurynn: It's a big room, full of awesome. [20:33] wakawaka has joined the channel [20:34] wakawaka: hi all, does anyone know of a way to change the functionality of the + or - operators in js? [20:34] wakawaka: for example if i wanted some functionality to occur when i performed objectA + objectA [20:35] tjholowaychuk: you cant [20:35] wakawaka: ok thanks [20:35] tjholowaychuk: :) [20:35] tjholowaychuk: np [20:35] wakawaka: ha, i thought as much, wasnt sure [20:35] reid has joined the channel [20:35] mjr_: lack of operator overloading turns out to be a feature IMO. [20:35] Aria: I agree [20:35] tjholowaychuk: foo['+'](bar) is about as close as you will get [20:36] tjholowaychuk: me too [20:36] tjholowaychuk: hate it [20:36] mjr_: When I first learned about it in C++ I thought it was the greatest thing ever, used it everywhere, etc. [20:36] mjr_: Just not worth it. [20:36] tjholowaychuk: haha yeah, im working with c++ for an addon right now, makes me rage [20:36] Aria: Heh, yeah. Then you read your code and couldn't tell what it did [20:36] tjholowaychuk: overloading isnt the part that bugs me, just about everything else [20:37] tjholowaychuk: well operator overloading sucks [20:37] mjr_: Oh maybe you read it and think it does one thing, then you debug it and find out that it's doing some kind of mystery shit. [20:37] tjholowaychuk: methods == fine I guess [20:37] malkomal_ has joined the channel [20:37] capndiesel has joined the channel [20:37] mjr_: Or you want to change something, and then you find that your classes don't match up because something templated on something can't convert to some other form of something, etc. [20:37] tjholowaychuk: I like erlang style pattern matching way more [20:38] ironfroggy_: What sort of things would keep a process from exiting naturally? [20:38] mjr_: It seems like any C++ project I've worked with that uses all the fancy features ends up descending into a nightmare of battling with the linker and the debugger. [20:38] Aria: ironfroggy: pending IO? [20:38] mjr_: I really need to get over my C++ rage. Taking a breath. [20:39] tjholowaychuk: c can be nice, people just need to write stuff that actually makes sense lol [20:39] ironfroggy_: Aria: in particular, i find that if i create a client with the redis-client library, even if i later close the client, it fails to exit without a call to process.exit() [20:39] Anti-X: c can be nice as long as idiots stay away from it [20:40] ironfroggy_: should i consider that a bug in redis-client, maybe not releasing something? [20:40] Aria: Sounds it. [20:40] mjr_: ironfroggy_: you probably need to tell redis to disconnect. [20:40] capndiesel has joined the channel [20:40] mjr_: I'm not sure about that redis library though. Surely there's a way. [20:40] huyhong has joined the channel [20:40] mjr_: in node_redis, you'd do client.quit() [20:40] ironfroggy_: i am calling client.close() [20:40] huyhong has left the channel [20:41] mjr_: Sorry, I dunno. [20:41] mjr_: If you want to try node_redis, I can help you. :) [20:41] abiraja has joined the channel [20:42] aconbere has joined the channel [20:42] ajsie has joined the channel [20:43] Arro has joined the channel [20:44] logix812 has joined the channel [20:44] logix812 has left the channel [20:44] satori_ has joined the channel [20:44] deepthawtz has joined the channel [20:44] wakawaka: tjholowaychuk: cool suggestion foo['+'](bar), i hadnt thought of that [20:44] ironfroggy_: mjr_: well i've got my code invested a bit now and I'm close to wrapping up. but if node_redis is more mature, I'll certainly look at it for the next project. [20:45] MikhX has joined the channel [20:45] tjholowaychuk: wakawaka: hahaha :p yeah not practical, but it will work [20:45] mjr_: I dunno about more mature, but it is certainly more supported here in IRC. :)\ [20:45] tjholowaychuk: ironfroggy_: node_redis is sweet :) [20:45] reid has joined the channel [20:45] ironfroggy_: "used more" is a good enough metric for some things [20:46] steadicat has joined the channel [20:49] matjas has joined the channel [20:52] bradleymeck: python closures make for a sad panda [20:53] shimondoodkin: wakawaka: you may use string [20:53] wakawaka: how so? [20:53] wink_: anyone happen to know the env var to set so that libc will immediately free memory back to the kernel instead of whenever it feels like it? [20:53] ako has joined the channel [20:53] shimondoodkin: mycalc("5+3") = translate + eval() [20:54] shimondoodkin: =eval("return add(5,3)") [20:55] overra has joined the channel [20:55] tjholowaychuk: wakawaka: but you shouldnt [20:55] shimondoodkin: lol [20:55] capndiesel has joined the channel [20:56] shimondoodkin: he is right it is super low preformance and problems, it was just creative thinking about the probelm [20:56] grahampage has joined the channel [20:57] shimondoodkin: maybe it is posible to define c/c++ objects of your type [20:57] robotarmy has joined the channel [20:57] wakawaka: isnt eval generally considered a negative? [20:58] wakawaka: i mean best practices advise against it? [20:58] halfhalo: eval=evil? [20:58] wakawaka: ha thats what ive read [20:58] shimondoodkin: its dynamic parsing [20:58] shimondoodkin: i use it at initialization stage but not on runtine [20:59] wakawaka: hm, interesting, thanks [20:59] capndiesel has joined the channel [21:00] wakawaka: why not on runtime? [21:00] shimondoodkin: it takes cpu [21:00] audy has joined the channel [21:01] MikhX has joined the channel [21:01] shimondoodkin: actualy very little cpu but more then avarage, like 0.3% for 500 lines of code [21:02] tjholowaychuk: I have never come across a reason to use eval, nothing logical at least [21:03] tjholowaychuk: ive seen people do eval('some.lame.namespace.' + str) :S no clue why [21:03] bradleymeck: wakawaka Function > eval, for runtime code neither should be used pretty much ever [21:03] bradleymeck: template engines and code generators use them some though [21:04] shimondoodkin: i do compilation of pure jaavascript templates with that eval [21:04] shimondoodkin: works great at runtime [21:04] MikhX has joined the channel [21:05] DozyPieman has joined the channel [21:05] wakawaka: bradleymeck: why shouldnt either ever be used? just a matter of speed/memory? [21:06] tjholowaychuk: security as well in some cases [21:06] bradleymeck: generally speed/memory/injection attacks/avoidance of language features [21:06] bentruyman has joined the channel [21:06] bradleymeck: eval("x.y.z") will be far slower than x.y.z (forces v8 to use slow lookup :() [21:06] creationix: http://howtonode.org/object-graphs [21:08] creationix: eval is evil if there is ever a way to do what you want without using it [21:08] creationix: I've seen eval("a." + name) instead of a[name] [21:08] shimondoodkin: lol [21:08] tjholowaychuk: creationix: yeah ive seen that too [21:08] tjholowaychuk: I think it was actually sencha code [21:08] wakawaka: very good info, thanks [21:09] shimondoodkin: actualy ive seen this too [21:09] creationix: wakawaka: but yeah, bradleymeck hit it on the head [21:09] creationix: there are many reasons why it should be avoided, but occasionally in extreme cases it's a good fit [21:09] bradleymeck: injection attacks! gogo [21:10] bradleymeck: for a good example, open up your favorite js console in a browser, "eval = 1" [21:10] wakawaka: cool, ive never used eval and i guess there's not much reason to use it! [21:10] capndiesel has joined the channel [21:11] shimondoodkin: it is fun to use eval [21:11] capndiesel has joined the channel [21:12] shimondoodkin: it is like javascript rewriting itself [21:12] bradleymeck: its fun to mess w/ ppl who use it by setting it to a different function etc for some reason none of the browsers that use it internally protect against this [21:13] tjholowaychuk: bradleymeck: haha what happens? [21:13] tjholowaychuk: crash? [21:14] bradleymeck: consoles die, setInterval(String)/Timeout etc stop working [21:14] tjholowaychuk: haha [21:14] bradleymeck: i forgot how but you can make Function die [21:14] tjholowaychuk: would be cool of js had first class AST support [21:14] capndiesel has joined the channel [21:14] shimondoodkin: it still wokrs [21:14] bradleymeck: there are 2 es5 parsers out there [21:14] shimondoodkin: just tried in node console [21:14] hannesw has joined the channel [21:14] bradleymeck: a browser [21:15] JimBastard: Norm, the node orm. featuring a picture of Norm from cheers. [21:15] JimBastard: dont make me do it [21:15] jameshome_: hah [21:15] JimBastard: im looking at you cloudhead :-D [21:18] shimondoodkin: i have a vision, interested? [21:18] rwaldron has joined the channel [21:19] wakawaka: yes [21:20] shimondoodkin: i would like to have gui module manager for each application, and call it candy shop, it will be combind with some framework, maybe based on npm [21:20] felixge has joined the channel [21:20] felixge has joined the channel [21:20] isaacs_: shimondoodkin: like eggs and cheese shops? [21:21] shimondoodkin: when you do programming you will be "like a child in a candyshop", i want this plugin and that functionallity [21:21] bmizerany has joined the channel [21:21] shimondoodkin: it will look like php pear [21:21] grahampage has left the channel [21:22] shimondoodkin: but function like the new ruby 3 [21:22] shimondoodkin: plugin system [21:22] isaacs_: it should be better than those things :) [21:22] shimondoodkin: yea, lol [21:23] JimBastard: EVERYBODY STOP [21:23] JimBastard: javascript time [21:23] bradleymeck: *gets the hammer pants* [21:24] mif86 has joined the channel [21:28] Anti-X: MC JavaScript? [21:28] Anti-X: or JS Hammer? [21:28] eddanger has joined the channel [21:30] stephenjudkins has joined the channel [21:30] wakawaka: shimondoodkin: why arent you building it? [21:31] shimondoodkin: i am planing it yet in my head [21:32] shimondoodkin: i have not found yet a plugin system that i want [21:32] shimondoodkin: idea for a plugin system (inside the application) [21:33] Tim_Smart has joined the channel [21:34] creationix: shimondoodkin: I really like the plugin pattern I've found for nStore [21:34] shimondoodkin: see http://github.com/shimondoodkin/nodejs-clone-extend/wiki/structure-javascript-code-code-like-ruby-on-rails [21:34] JimBastard: so this is pretty funny, we are getting JUP fully ported to node. to use JUP.parse you need a DOM :p [21:34] creationix: make the main library be an immutable object as a prototype [21:35] shimondoodkin: i'm chacking out nStore [21:35] creationix: it's pretty simplistic though [21:35] creationix: shimondoodkin: http://github.com/creationix/nstore/blob/master/test/findTest.js#L3-7 [21:36] matjas has joined the channel [21:36] creationix: shimondoodkin: it's based on my pattern library/experiment http://github.com/creationix/pattern [21:37] creationix: it's quite ruby like [21:38] pengwynn_ has joined the channel [21:42] shimondoodkin: in "structure-javascript-code-code-like-ruby-on-rails" the idea was to store the configuration inside the body of the function object, (and the functions inside the constructor's prototype) [21:43] shimondoodkin: and later to be able to extend the object and to keep the configuration [21:43] shimondoodkin: so the functionality could be creative with the same configuration [21:45] shimondoodkin: creationix: where is extend is defined [21:46] creationix: shimondoodkin: http://github.com/creationix/pattern/blob/master/lib/pattern.js#L4-28 [21:46] creationix: originally I had a nice short implementation [21:47] benburkert has joined the channel [21:47] creationix: but I had to change it out for this convoluted one based on "new" to make it several orders of magnatude faster [21:47] creationix: V8 is optimized for the "new" case and not the Object.create case [21:47] creationix: even though "new" does more from a semantic point of view [21:49] sonnym: having problems with emitting events. anyone know of a good resource I could read? [21:51] tjholowaychuk: sonnym: whats the issue? [21:51] sonnym: I think it's a fundamental one with my understanding :) [21:52] sonnym: something as simple as: var emitter = require("events").EventEmitter; emitter.emit("test"); fails [21:52] technoweenie: new require("events").EventEmitter() [21:52] technoweenie: emitter needs to be an instance of EventEmitter [21:52] tjholowaychuk: sonnym: what he said :) [21:52] sonnym: ahh... . that should probably be in the docs. . . may have changed since v0.2.0 though :) thanks [21:52] webr3: somebody asked in the right place [21:53] shimondoodkin: from the right person [21:53] technoweenie: "All objects which emit events are instances of events.EventEmitter." [21:53] isaacs_: technoweenie: new require("events").EventEmitter() doesn't give you an event emitter, though [21:53] isaacs_: new X().Y() gives you a new X(), then calls the Y() method on it [21:54] technoweenie: new (require("events").EventEmitter)() ? [21:54] isaacs_: new is such a badly designed operator. [21:54] isaacs_: yeah, that'd work [21:54] shimondoodkin: ther is also some sys.inherit(myobject,object_to_inherit_from)? , right? [21:54] isaacs_: or events = require("events") ; new events.EventEmitter() [21:54] tjholowaychuk: sonnym: http://github.com/visionmedia/masteringnode/blob/master/chapters/events.md [21:54] isaacs_: shimondoodkin: yes [21:54] technoweenie: yea that 2nd one is how i roll [21:54] technoweenie: sys.inherit isn't really documented. i get the idea its going away [21:55] isaacs_: the thing that's really weird is this: new Date.getTime() [21:55] isaacs_: it actually implies the parens when it hits something that is a function [21:55] isaacs_: so that's like (new Date).getTime() [21:55] technoweenie: TypeError: undefined is not a function [21:56] isaacs_: js> new Date.getTime() [21:56] gbot2: isaacs_: Error: TypeError: Date.getTime is not a constructor [21:56] sprout has joined the channel [21:56] isaacs_: ha, nvm [21:56] tjholowaychuk: new Date().getTime() [21:56] tjholowaychuk: is fine [21:56] isaacs_: js> new Date().getTime() [21:56] gbot2: isaacs_: 1285883758919 [21:56] isaacs_: yeah [21:56] isaacs_: js> new Date [21:56] gbot2: isaacs_: Thu Sep 30 2010 17:56:09 GMT-0400 (EDT) [21:56] sonnym: sweet. bizarre, but works. [21:56] jacobolus: isaacs_: you might as well use +new Date [21:56] isaacs_: jacobolus: or Date.now() [21:56] jacobolus: js> +new Date [21:56] gbot2: jacobolus: 1285883786148 [21:56] isaacs_: js> Date.now() [21:56] gbot2: isaacs_: 1285883791491 [21:57] tjholowaychuk: haha from v8: "The grammar for new expressions is pretty warped" [21:57] webr3: js> new (require('events').EventEmitter)().emit('test'); [21:57] gbot2: webr3: Error: ReferenceError: require is not defined [21:57] jacobolus: . binds tighter than new, to answer the question a bit above [21:57] jacobolus: which is pretty reasonable [21:57] isaacs_: webben: nice try [21:58] isaacs_: er, webr3 ^ [21:58] jacobolus: you might want to say "new mylibrary.myclass" [21:58] jacobolus: and it shouldn't be trying to instantiate a "mylibrary" object [21:58] isaacs_: rght [21:58] matt_c has joined the channel [21:58] tjholowaychuk: also via v8: [21:58] tjholowaychuk: ('new')+ (PrimaryExpression | FunctionLiteral) ('[' Expression ']' | '.' Identifier | Arguments)* [21:58] isaacs_: the odd thing is that any function can be a ctor, and any ctor can return any object [21:58] Tim_Smart: mjr_: ping [21:58] jacobolus: so if you want to call a method on a new object, (new Date).getTime() [21:58] jacobolus: js> (new Date).getTime() [21:58] gbot2: jacobolus: 1285883917735 [21:58] isaacs_: js> new function () { return { hello : "world" } } [21:58] gbot2: isaacs_: {hello:"world"} [21:59] ekidd has joined the channel [21:59] shimondoodkin: tjholowaychuk: better change your book to gpl [21:59] isaacs_: js> new function () { return { hello : "world", me : this } } [21:59] tjholowaychuk: should be able to chain "new"s, never personally tried [21:59] bpot has joined the channel [21:59] tjholowaychuk: makes sense i guess [21:59] isaacs_: whoa, did i break it? [21:59] isaacs_: js> new function () { return { hello : "world", me : this } } [22:00] isaacs_: js> new function () { return { hello : "world" } } [22:00] gbot2: isaacs_: {hello:"world"} [22:00] isaacs_: huh. that's odd. [22:00] Anti-X: you killed it [22:00] isaacs_: js> new function Ctor () { return { hello : "world", isCtor : this instanceof Ctor } } [22:00] isaacs_: weird. [22:00] isaacs_: it does NOT like that [22:00] shimondoodkin: what that does: js> new function () { return { hello : "world", me : this } } [22:01] isaacs_: shimondoodkin: it returns an object with {hello:"world", me: object that is instanceof that functtion} [22:01] shimondoodkin: what use for that? [22:01] Anti-X: js> new function Blah() { return typeof this } [22:01] gbot2: Anti-X: {} [22:01] isaacs_: shimondoodkin: um.. showing how stupid js is? [22:01] shimondoodkin: lol [22:01] isaacs_: amusement? [22:01] Anti-X: js> new function Blah() { return this instanceof Blah} [22:01] gbot2: Anti-X: {} [22:01] jacobolus: what's stupid? [22:01] jacobolus: this is all perfectly clear behavior [22:01] isaacs_: Anti-X: new MUST return an object [22:02] isaacs_: Anti-X: so, you only hijack the object if you return an object [22:02] Anti-X: js> new function Blah() { return {whataboutnowthen: this instanceof Blah} } [22:02] gbot2: Anti-X: {whataboutnowthen:true} [22:02] isaacs_: js> function Ctor(){ return {foo:"bar"}} ; (new Ctor) instanceof Ctor [22:02] gbot2: isaacs_: false [22:02] Anti-X: js> new function Blah() { return {whataboutnowthen: this} } [22:02] gbot2: Anti-X: {whataboutnowthen:{}} [22:02] isaacs_: so, that ^ is what's wonky [22:02] webr3: js> new function Test() { return { me: this instanceof Ctor } } [22:02] gbot2: webr3: Error: ReferenceError: Ctor is not defined [22:03] shimondoodkin: yes ive found that mongodb also wird sometime, the reduce function cant return an array [22:03] webr3: js> new function Test() { return { me: this instanceof Test } } [22:03] gbot2: webr3: {me:true} [22:03] webr3: works for me [22:03] gormer has joined the channel [22:03] jacobolus: isaacs_: there's no way for gbot2 to print a self-referential object [22:03] webr3: js> new function Test() { return { hello:"world", me: this instanceof Test } } [22:03] gbot2: webr3: {hello:"world",me:true} [22:03] shimondoodkin: but object with array mit does [22:03] jacobolus: if you do this in a browser it works fine though [22:03] tjholowaychuk: js> function Test(){}; var obj = new new function(){ return Test }; obj instanceof Test [22:03] gbot2: tjholowaychuk: true [22:03] tjholowaychuk: woot [22:03] jacobolus: or in wherever [22:03] Anti-X: how is hijacking a constructor bad behavior? on the interpreters part [22:04] isaacs_: tjholowaychuk whoa!! [22:04] tjholowaychuk: hahaha [22:04] isaacs_: i didn't know you could return a new contructor! [22:04] jacobolus: why whoa? [22:04] tjholowaychuk: new new new new new [22:04] isaacs_: oh, new new [22:04] isaacs_: right [22:04] Anti-X: you'll love python then [22:04] isaacs_: didn't catch that [22:04] isaacs_: ew. [22:04] isaacs_: ewewew [22:04] Anti-X: haha [22:04] tjholowaychuk: haha [22:04] tjholowaychuk: funny shit [22:04] slaskis: I'm trying to get an express app running on a fedora server using upstart but i can't get it to find express (and other modules i guess). I'm using npm and it starts fine when not going through upstart. Anyone attempted this? [22:05] isaacs_: slaskis: where are your node modules installed? if they're in $HOME/.node_libraries, make sure that $HOME is set the same when upstart starts stuff [22:05] slaskis: isaacs_: aah but of course! [22:06] shimondoodkin: What is STOMP protocol? [22:06] shimondoodkin: http://github.com/benjaminws/stomp-js [22:07] webr3: js> typeof new new new new new new new new new new new new new new new new new new new new new new new new new new new new new new new new function Test(){ return Test; } [22:07] gbot2: webr3: "function" [22:07] slaskis: isaacs_: you rock, i must be getting stupid around midnight [22:08] isaacs_: js> new new new new new new new new new new new new new new new new new new new new new new new new new new new new new new new new function Test(){ return Test; }()()()()()()()()()()()() [22:08] gbot2: isaacs_: [22:08] shimondoodkin: webr3: it probably could work [22:09] tjholowaychuk: ahahahaha [22:09] tjholowaychuk: haha [22:09] tjholowaychuk: oh man [22:09] shimondoodkin: http://github.com/shimondoodkin/node-inflow "Bonus: DIY toy Async While:" i can do recursion using the same function name [22:12] ysynopsis has joined the channel [22:14] stephenjudkins has joined the channel [22:15] shimondoodkin: creationix: you are too smart pattern.js extend can't fit into my mind yet [22:16] dcolish has joined the channel [22:16] creationix: shimondoodkin: don't worry about how it works, just use it ;) [22:16] gormer has joined the channel [22:16] creationix: famous last words [22:16] shimondoodkin: it should be simple stupid [22:16] dcolish: is there a built-in way to convert a buffer to a string and preserve newlines? [22:17] bradleymeck: is it not preserving newlines? [22:17] shimondoodkin: probably some encoding misstake? or its true? [22:18] dcolish: doesnt appear to [22:18] dcolish: hmm, maybe my post is stripping them out [22:18] bradleymeck: JSON.stringify(String(new Buffer("\r\n\n"))) seems fine [22:21] MikhX has joined the channel [22:23] Anti-X: v8> JSON.stringify(String(new Buffer("\r\n\n"))) [22:23] v8bot: Anti-X: ReferenceError: Buffer is not defined [22:23] Anti-X: doh [22:24] Anti-X: hey i'm anti-x, i'm an idiot [22:24] dcolish: i ruled that out already [22:24] Anti-X: why isn't there a node eval bot? [22:25] hannesw has joined the channel [22:27] Tim_Smart: Anti-X: Because if someone doesn't sandbox it properly, their machine will die. [22:27] Tim_Smart: Degrading to user nobody should be fine though.. [22:27] Anti-X: well we're all friends here [22:27] Anti-X: no need to get nasty [22:27] hansek has joined the channel [22:28] Anti-X: and obviously don't put it on your home computer [22:28] Tim_Smart: Anti-X: I can't see anything wrong with running it as nobody. [22:28] Tim_Smart: Can't create files, etc etc. [22:29] Anti-X: me neither as i have no clue what that m... yeah ok [22:29] shimondoodkin: i like your internet connection [22:29] shimondoodkin: if its free [22:29] shimondoodkin: kidding [22:29] Tim_Smart: Anti-X: Then people would go http.client().downloadSomeMassiveFile [22:29] siculars has joined the channel [22:29] Anti-X: ahuh [22:29] shimondoodkin: waht i say is running an open bot can crate an internet connection issue [22:30] Tim_Smart: Anti-X: Basically you would have to start with a clean sandbox, then add things in one by one. [22:30] Anti-X: you'd need to create a few mock objects, like stream [22:30] prettyrobots: Basically what I'm doing with my hosting setup. [22:31] jashkenas has joined the channel [22:31] prettyrobots: Might be fun to create Node bot. [22:31] Tim_Smart: Anti-X: Naw. [22:31] q_no has joined the channel [22:31] shimondoodkin: there was some bot here that could do evals [22:31] bradleymeck: v8: 1+! [22:31] v8bot: bradleymeck: SyntaxError: Unexpected end of input [22:31] prettyrobots: See what sort of evil you all inflict upon a multi-tenant hosted node. [22:31] shimondoodkin: v8: 1+1 [22:32] bradleymeck: knuck knuck knuck [22:32] prettyrobots: Is there such a thing as synchrnous exec? [22:32] bradleymeck: no [22:32] Anti-X: v8: while(true){};'done' [22:32] v8bot: Anti-X: Error: Timeout [22:32] Anti-X: see? [22:32] Anti-X: do that [22:32] shimondoodkin: v8: 1+1 [22:33] Anti-X: shimondoodkin, you can't possibly have worked with python in your life if you don't see the error [22:33] shimondoodkin: v8: knuck knuck knuck [22:33] Anti-X: or do you just love spaces [22:33] admc has joined the channel [22:33] shimondoodkin: v8: 1+1 [22:33] v8bot: shimondoodkin: 2 [22:33] Anti-X: v8: 1+1 [22:33] v8bot: Anti-X: 2 [22:33] shimondoodkin: thanks [22:34] shimondoodkin: ijust copied with mouse [22:35] stephenjudkins has joined the channel [22:35] shimondoodkin: first time irealized python's spaces was a suprice for me it was when i refactored some code it topped working.. [22:35] shimondoodkin: stopped [22:36] Anti-X: any decent irc bot should trim input though [22:36] Anti-X: so i blame whoever wrote v8bot [22:37] shimondoodkin: v8: require('sys').inspect(new new x(){return x}) [22:37] v8bot: shimondoodkin: SyntaxError: Unexpected token { [22:37] Anti-X: js> return 'test'; [22:37] Anti-X: js> return 'test'; [22:37] gbot2: Anti-X: Error: SyntaxError: return not in function: return 'test'; ^ [22:37] Anti-X: same with that one [22:37] c4milo has joined the channel [22:37] shimondoodkin: v8: require('sys').inspect(new new function x(){return x}) [22:37] v8bot: shimondoodkin: ReferenceError: require is not defined [22:38] eisd|away has joined the channel [22:38] Anti-X: v8: new new function x(){return x} [22:38] v8bot: Anti-X: function x(){return x} [22:38] Anti-X: oh i know [22:38] shimondoodkin: fun [22:38] Anti-X: v8: new function x(){return new x} [22:38] v8bot: Anti-X: RangeError: Maximum call stack size exceeded [22:38] Anti-X: beat that! [22:38] shimondoodkin: yea [22:39] Anti-X: shouldn't that function be optimized for tail recursion? [22:39] bradleymeck: nope [22:39] Anti-X: kinda weird that js doesn't do that [22:39] creationix: js> a = [],i=1000000;while(--i){a.push(true)} [22:39] gbot2: creationix: 999999 [22:40] Tim_Smart: js> while (true) {} [22:40] gbot2: Tim_Smart: Timeout. [22:40] Tim_Smart: v8> while (true) {} [22:40] c4milo1 has joined the channel [22:40] creationix: js> a = [],i=1000000;while(--i){a.push(true)};while(a.length){a.shift()} [22:40] shimondoodkin: v8: process [22:40] v8bot: shimondoodkin: ReferenceError: process is not defined [22:40] v8bot: Tim_Smart: Error: Timeout [22:40] gbot2: creationix: Timeout. [22:40] Anti-X: is gbot2 also v8? [22:41] shimondoodkin: v8: this [22:41] v8bot: shimondoodkin: [22:41] c4milo1 has joined the channel [22:41] Anti-X: could someone make a bot out of gecko? [22:41] stephenjudkins has left the channel [22:41] creationix: js> a = [],i=1000000;while(i--){a.push(true)};while(a.length){a.pop()} [22:41] Tim_Smart: creationix: Warring against shift :p [22:41] Anti-X: or is that code fucked beyond belief [22:41] gbot2: creationix: Timeout. [22:41] bradleymeck: anti-x it cant in most conventional situations sadly due to the possibility of eval/arguments.callee/arguments.caller :( makes for a sad panda, due to this, no js engine i know of optimizes tail recursion [22:41] shimondoodkin: v8: this.constructor [22:41] v8bot: shimondoodkin: function Object() { [native code] } [22:41] creationix: hmm, pop shouldn't timeout [22:41] creationix: it's pretty fast on my laptop [22:42] Anti-X: bradleymeck, also, my example was technically an object creating a new object creating a new object, so it's not really a function anyways [22:42] shimondoodkin: v8: eval=1 [22:42] v8bot: shimondoodkin: 1 [22:42] shimondoodkin: lol [22:42] stephenjudkins has joined the channel [22:42] creationix: Tim_Smart: has scars from shift() [22:42] shimondoodkin: v8: eval("1+1") [22:42] v8bot: shimondoodkin: 2 [22:43] creationix: v8: a = [],i=1000000;while(i--){a.push(true)};while(a.length){a.pop()} [22:43] v8bot: creationix: true [22:43] Tim_Smart: creationix: Custom array constructors ftw? [22:43] creationix: nice, v8 has more power than js [22:44] Tim_Smart: v8: arguments [22:44] v8bot: Tim_Smart: ReferenceError: arguments is not defined [22:44] Anti-X: so does anybody know if gecko can be irc-botted? [22:44] bradleymeck: spidermonkey could be [22:44] bradleymeck: but its api burns [22:44] Tim_Smart: v8: (function() { return arguments.callee.caller; })(); [22:44] v8bot: Tim_Smart: [22:44] v8bot: Tim_Smart: [22:44] shimondoodkin: ohh a crazy idea: add spidermonky plugin to v8 [22:45] creationix: /be was telling me he could put an v8 api on spidermonkey if we would use it more [22:45] v8bot: Tim_Smart: [22:45] Tim_Smart: lol wut? [22:45] v8bot: Tim_Smart: [22:45] v8bot: Tim_Smart: [22:45] v8bot: Tim_Smart: [Output truncated...] [22:45] creationix: Tim_Smart: what have you done! [22:45] slaskis: that's just great, you broke it [22:45] slaskis: :) [22:45] Anti-X: that's not nice [22:45] shimondoodkin: v8: (function() { return arguments.callee.caller; })(); [22:45] v8bot: shimondoodkin: [22:45] Tim_Smart: >.> [22:45] v8bot: shimondoodkin: [22:45] v8bot: shimondoodkin: [22:46] v8bot: shimondoodkin: [22:46] Anti-X: im starting to wonder about this guy [22:46] Anti-X: just repeating shit [22:46] v8bot: shimondoodkin: [22:46] v8bot: shimondoodkin: [Output truncated...] [22:46] Anti-X: smells like bedtime [22:46] JimBastard: where can i get a badge saying my whole application stack is javascript [22:46] shimondoodkin: seems like it has 30 seconds time out to kill the send box [22:47] shimondoodkin: yea bad time - good idea [22:47] Anti-X: JimBastard, you can't, since v8 is c(++) [22:47] bradleymeck: creationix, he would need to make a case for moving beyond its there though [22:47] JimBastard: i mean, yeah [22:47] JimBastard: ubuntu isnt exactly JS either [22:47] Anti-X: SURE IT IS [22:47] Anti-X: :p [22:47] JimBastard: is this js dot com? [22:48] bradleymeck: well c++ is just assembly my whole stack is even better, its fin opcodes baby [22:48] creationix: webos is 100% pure js, even the wireless driver ;) [22:48] creationix: even the html and css are meta programmed in js [22:48] Anti-X: my whole stack is in my head [22:48] Anti-X: beat that [22:48] JimBastard: your head? [22:48] Anti-X: yes [22:48] Anti-X: the uppermost appendage [22:48] creationix: Anti-X: that explained the abnormal size of it ;) [22:49] Anti-X: the stack or the head? [22:49] Anti-X: :P [22:49] creationix: Anti-X: yes [22:49] Anti-X: i'll take both as compliments [22:49] Anti-X: bye now [22:50] creationix: JimBastard: Pakistani investors? [22:51] creationix: js is transported by air http://js.com/aviation-related-investment.asp [22:51] JimBastard: creationix: lol what [22:51] JimBastard: we arent taking any terrorist money i swear [22:51] tjholowaychuk: creationix: is sencha still supporting connect? mape and a few others wanted 0.3.x support [22:51] JimBastard: that plutonium sale was just a rumor, we dont even have any left [22:52] creationix: tjholowaychuk: if by sencha you mean me, I'm not sure [22:52] tjholowaychuk: creationix: wasnt sure if they had interest in supporting it anymore [22:52] tjholowaychuk: id get to it but im working on an addon that I want to get done in the next few days [22:52] creationix: tjholowaychuk: I think there is interest, it's just I'm the only resource left and I'm a but overwhelmed [22:53] creationix: s/but/bit/ [22:53] UltimateBrent has joined the channel [22:53] tjholowaychuk: no worries [22:53] tjholowaychuk: I think people are just jumping the gun a bit with 0.3.x in production already [22:53] creationix: I'll ask abe about it. If they want to support it, I need to hire some help [22:53] tjholowaychuk: but they should be quick fixes [22:53] creationix: otherwise the community should just fork it [22:53] tjholowaychuk: for sure [22:53] UltimateBrent: can anyone help me out with a socket issue? can't tell if I'm doing something wrong or this is just how it works [22:54] tjholowaychuk: whenever we move to 0.3.0 ill be happy to update [22:54] ajsie has joined the channel [22:54] creationix: yeah, 0.2.x is plenty fast and works for now [22:54] hassox has joined the channel [22:55] UltimateBrent: is there a terminator that TCP sockets in node.js look for? \r\n and 0xff still get grouped with other messages sometimes [22:55] creationix: UltimateBrent: as far as I know, it doesn't mess with the data [22:56] agnat: UltimateBrent: Thats how it works. TCP is a stream. [22:56] agnat: UltimateBrent: Use UDP or implement some sort of framing if you want to pass messages [22:56] UltimateBrent: so if messages are grouped, that's more likely a network hiccup? [22:57] UltimateBrent: as in, in a single on(data) [22:58] agnat: UltimateBrent: No, the network is fine ... thats how TCP works ... [22:58] jashkenas: creationix: you're the only resource left? [22:59] creationix: jashkenas: well, it was originally me and tjholowaychuk [22:59] creationix: then we got ddavis, but he's since been send to do trainings [22:59] creationix: s/send/sent/ [22:59] jashkenas: as the sencha open source js brigade? [22:59] UltimateBrent: well teh problem is that the grouped message delays the delivery, so it adds like 2or 300ms - that's how it's supposed to be? [22:59] creationix: jashkenas: yeah, pretty much [23:00] creationix: though I hear we have some new hires coming [23:00] creationix: not sure what they will be working on though [23:00] ooooPsss: you both work at sencha? [23:00] tjholowaychuk: ooooPsss: I dont anymore [23:00] bradleymeck: man im jealous [23:00] tjholowaychuk: I work with LearnBoost [23:01] jashkenas: would be a shame to drop the ball on it -- you announced it with such fanfare so recently ... perhaps there's some third party who has contributed the most that you can hand it off to? [23:01] ooooPsss: tjholowaychuk: ok, are you co-founder of it? [23:01] tjholowaychuk: of LearnBoost? nope [23:01] creationix: jashkenas: that would be tjholowaychuk ;) [23:01] creationix: but he's pretty busy too [23:01] ooooPsss: tjholowaychuk: you're a free service, how do you make money? [23:02] tjholowaychuk: jashkenas: no worries connect is not going anywhere [23:02] tjholowaychuk: ooooPsss: long story [23:02] ooooPsss: you have tons of investors but you'll have to make money somehow ;) [23:02] Tim_Smart: tjholowaychuk: not going anywhere, as in not being forgotten :p [23:02] creationix: tjholowaychuk: some day you'll have to tell me the story, but now now [23:02] creationix: Tim_Smart: right [23:02] creationix: s/now now/not now/ [23:03] tjholowaychuk: haha :D as long as Express is tied to connect it will be here [23:03] UltimateBrent: does node have UDP yet? [23:03] tjholowaychuk: and a lot of startups are using Express so I think it will be fine [23:03] creationix: UltimateBrent: yep [23:03] UltimateBrent: beta version or something? I don't see it in the api docs [23:03] creationix: jashkenas: but I was just saying to tjholowaychuk, I'll talk to my boss about getting a more responsive team behind connect [23:03] ooooPsss: express is really being heavily use in production? [23:04] bradleymeck: i wouldnt say heavily but it is out there [23:04] agnat: UltimateBrent: Look for 'dgram' [23:04] charlenopires has joined the channel [23:04] tjholowaychuk: ooooPsss: AFAIK more so than any other node framework but yeah heavily is still .. a huge word for anything node [23:04] UltimateBrent: thanks agnat, i will [23:04] creationix: lol [23:05] ooooPsss: do you think node.js will be heavily used ? [23:05] ekidd has joined the channel [23:05] Tim_Smart: I'm hoping node ends up with 3-5 well used frameworks to choose from. [23:05] ooooPsss: node.js or express or anything related [23:05] Tim_Smart: Rather than blessing one. [23:05] bradleymeck: ooooPsss it will be used for what it is good for, not a cure all [23:06] ooooPsss: bradleymeck: well, ruby + rails is used for pretty much everything [23:06] creationix: ooooPsss: I'm sure it will get used a lot, but it's a new field, we're not sure what all it's good at yet [23:06] creationix: it's so much more flexible than ruby or rails [23:06] bradleymeck: ooooPsss it is used for many things, but it also is not good at many things it is used for [23:06] sh1mmer has joined the channel [23:06] ooooPsss: well I'm afraid that node ends up being one more haskell, erlang, etc. just used in specific needs [23:06] shimondoodkin: i develop express like frame work it does nt have express like future set but it is a hand picked future set : "nodejs-mongo-app" [23:07] creationix: ooooPsss: no, it's more useful than those, don't worry [23:07] bradleymeck: ooooPsss for streaming at least node is the clear win [23:07] creationix: I know of several large companies using or planning to use node [23:07] creationix: webOS 2.0, for example will ship with node as a replacement for it's java backend [23:07] bradleymeck: creationix, inside info? [23:07] ooooPsss: ok nice ;) [23:07] creationix: bradleymeck: some inside, some public [23:07] creationix: ;) [23:07] bradleymeck: haha, idk how you get all that info you get [23:08] halfhalo: creationix: not STRICTLY true [23:08] halfhalo: c++ replaced java, and now node is being added [23:08] shimondoodkin: its witten on palm dev site [23:08] creationix: halfhalo: fair enough, but same effect, node is half c++ [23:08] halfhalo: yup [23:08] ooooPsss: anyway, IMO node has to be very good for web related tasks if the goal is to be heavily used. [23:09] ooooPsss: when I say web, I say more stuff like PHP, Rails, etc [23:09] bradleymeck: if the task does not rely on GC of large buffers/strings constantly yes [23:09] shimondoodkin: the gol was to have scripted generic network services [23:10] creationix: ooooPsss: no, web apps are not the primary target [23:10] creationix: that's not where node's strength lies [23:10] ajsie_ has joined the channel [23:10] Tim_Smart: creationix: Why not? [23:10] creationix: though it can hold it's own or excel it certain types of web apps [23:10] shimondoodkin: is there a node js dns yet? [23:10] ooooPsss: but it would be good to have something as easy as rails and as fast as node [23:10] rick has joined the channel [23:10] tjholowaychuk: node is great for web apps, but more in the sense that you would want to use js over ruby [23:11] boaz has joined the channel [23:11] tjholowaychuk: not really like wow node crushes all web app stacks [23:11] creationix: Tim_Smart: if you want super simple, mature, crud, use rails/php/django [23:11] Tim_Smart: creationix: Then you are stuck with sync IO, which makes scaling something else. [23:11] tjholowaychuk: rails sucks [23:11] tjholowaychuk: php sucks [23:11] creationix: the thing is that node allows posibilities that never were possible [23:11] JimBastard: careful tjholowaychuk technoweenie might here you [23:11] shimondoodkin: node does not crushes, you have to use on error , handler [23:11] JimBastard: /s/here/hear [23:11] tjholowaychuk: haha [23:12] creationix: node can make super fast http servers, but after than, then what [23:12] ooooPsss: wasn't someone doing a Rails-like framework for node? geddy? maybe it will make it more rails-alike [23:12] bradleymeck: fd passing in a scripting language is amazing [23:12] creationix: the logic is still painfully hard to scale complexity wise [23:12] Tim_Smart: creationix: The thing is, it is possible, with a framework, to make node almost as easy as ruby on rails. [23:13] ooooPsss: creationix: so you think node will be used together with other frameworks? [23:13] creationix: Tim_Smart: sure, that's a very good posibility, and I know we're trying [23:13] shimondoodkin: i thinks so too [23:13] creationix: but node is so much more than a web framework [23:13] mjr_: Tim_Smart: sorry, I've been really busy today. [23:13] creationix: it can do ANYTHING dealing with I/O [23:13] Tim_Smart: But I personally dislike rails, because it forces way too much stuff on the dev, creationix [23:13] halfhalo: like? [23:13] tjholowaychuk: rails is like M$ word [23:13] ginader: does anyone know how i can access form submit variables (GET or POST) in express.js ? if i try req.params it's empty [23:14] tjholowaychuk: haha fuck [23:14] creationix: dns server, proxies, mesh networks, routers [23:14] tjholowaychuk: not this again [23:14] tjholowaychuk: ginader: what node --version ? [23:14] mjr_: tjholowaychuk: you need to up your game on the docs. [23:14] tjholowaychuk: ACTION needs to document bodyDecoder better [23:14] [[zz]] has joined the channel [23:14] tjholowaychuk: yeah apparently lol [23:14] ginader: v0.2.2 [23:14] mjr_: The page looks beautiful, but it's hard for beginners to jump in, especially when they are used to like php. [23:14] halfhalo: ACTION is doing rails right now [23:14] Tim_Smart: mjr_: I just added proper multi support to the parser. [23:14] tjholowaychuk: ginader: k great good good :) do you have the bodyDecoder() middleware? [23:15] creationix: did you guys know the wireless at jsconf was router over two directed radios on the roof of the church. The tcp packets were dismantled and reassembled by a node server [23:15] creationix: wireless was the best I've seen in a while for a conference [23:15] Tim_Smart: Tim_Smart: Before it would just ignore the first MULTI_BULK count. [23:15] Tim_Smart: and emit replies as they came in. [23:15] tjholowaychuk: mjr_: its tough for me to get good doc coverage, it would almost be better for new people to write some so it makes sense from their point of view [23:15] tjholowaychuk: rather than mine [23:15] ginader: tjholowaychuk: I don't think so. I forked Dav's yuie express project and extent that now [23:15] ooooPsss: well, I really have ideas to use node for everything, replacing rails for web apps [23:15] tjholowaychuk: ginader: oh, I have no clue what his thing was doing [23:15] bradleymeck has left the channel [23:15] tjholowaychuk: well I know it is a DOM template thing [23:16] tjholowaychuk: but thats it [23:16] ginader: it it [23:16] creationix: ooooPsss: sure, it can replace rails, it's just painful till frameworks mature [23:16] ajsie_ has joined the channel [23:16] ginader: it should just be express.js but he uses yui3 to render [23:16] creationix: node can power routers, microwaves, cell phones [23:16] creationix: ANYTHING [23:16] Tim_Smart: creationix: I'm planning on using biggie when I have a first release done. [23:16] ooooPsss: creationix: what's the most close framework to rails atm? [23:16] halfhalo: hmmm.... node toasters... [23:16] Tim_Smart: ooooPsss: geddy [23:16] vmthehut has joined the channel [23:16] mjr_: Tim_Smart: cool, I'll check it out. I got surprised my nested-multibulk in my parser as well. [23:16] creationix: ooooPsss: Express is like Sinatra, geddy is like merb [23:17] Tim_Smart: mjr_: I wasn't surprised, it parsed it fine :p [23:17] ooooPsss: and a "like rails" ? [23:17] shimondoodkin: it was painful at the begining until we invented some orm, node-inflow, router, templates [23:17] creationix: well, merb is like rails [23:17] Tim_Smart: mjr_: Just didn't emit as one entire reply [23:17] mjr_: tjholowaychuk: Yeah, writing good docs is really hard. [23:17] creationix: mde: would you say geddy is "like rails"? [23:17] creationix: shimondoodkin: yeah, that was my pain point when I tried a real app [23:18] ginader: tjholowaychuk: are you saying i should try: app.use(express.bodyDecoder()); [23:18] ginader: ? [23:18] tjholowaychuk: ginader: yeah [23:18] tjholowaychuk: if it is not there already [23:18] Tim_Smart: mjr_: I have a few ideas for a faster send_command. [23:18] shimondoodkin: creationix: i am over it now, are you? [23:18] mjr_: Tim_Smart: that's cool. I gotta get back to work right now, but I'll check it out tonight. [23:18] figital has joined the channel [23:18] creationix: shimondoodkin: I never found a good data abstraction I liked [23:19] Tim_Smart: mjr_: Have fun ;) [23:19] creationix: shimondoodkin: plus I haven't written a real app in a few weeks [23:19] technoweenie: JimBastard: theres nothing wrong with hating on code. [23:19] ginader: thanks tjholowaychuk - will try :) [23:19] JimBastard: i hate icecream cones [23:19] Tim_Smart: creationix: I'll ping you when I get biggie to a state I'm happy with :) [23:19] creationix: ginader: are you coming from PHP, I noticed you said GET and POST variables [23:19] creationix: Tim_Smart: awesome [23:20] technoweenie: now going off on them when they ask questions, or calling them a fag is probably not the best way to build a community [23:20] creationix: ginader: if so, just be aware that php is a framework AND a language, it has a lot of really high level abstractions built-in [23:20] ginader: creationix: yes i am [23:20] creationix: ACTION did PHP for 10 years [23:20] creationix: node is just javascript + really fast I/O [23:21] creationix: and express is a nice framework, but it's very different than php [23:21] ginader: creationix: I already understand that there's not everything "there" in node.js but I thought that's too obvious [23:21] ajsie_ has joined the channel [23:21] Tim_Smart: ecmascript + a standard library = node [23:21] cardona507 has joined the channel [23:21] Tim_Smart: s/ecmascript/v8/ if you please. [23:22] ajsie_ has joined the channel [23:22] creationix: ginader: yeah, I just find it hard to unlearn the idea of GET and POST [23:22] ginader: I wouldn't mind parsing the url myself if i knew where i could access that... [23:22] creationix: ginader: req.url [23:22] Tim_Smart: creationix: Yeah, PHP makes GET seem too much like POST [23:22] shimondoodkin: creationix: it required some basic tools and shortcuts for a no sql driver, like: join with code, template for map reduce, and preprocess data in update and save + auto reat file uploads [23:22] ginader: creationix: cool! thanks [23:23] tjholowaychuk: ginader: req.url, or use bodyDecoder and you will get req.body for request bodies [23:23] creationix: shimondoodkin: nice [23:23] ginader: btw: [23:23] tjholowaychuk: ACTION will update docs tomorrow [23:23] GriffenJBS has joined the channel [23:23] ginader: tjholowaychuk: turns out: app.use(express.bodyDecoder()); was already in the app [23:24] tjholowaychuk: ginader: ah [23:24] ginader: how would that allow me to access get/post though? [23:25] sudoer has joined the channel [23:25] Tim_Smart: vim + ctags <3 [23:25] konobi: voodootikigod: PING [23:26] Tim_Smart: Finally found some decent ecmascript ctags definitions. [23:26] tjholowaychuk: ginader: http://github.com/senchalabs/connect/blob/master/lib/connect/middleware/bodyDecoder.js#L34 [23:26] tjholowaychuk: thats how :) [23:26] tjholowaychuk: you can see that we buffer the body, then parse it once we have all the data [23:26] tjholowaychuk: which is also the reason this is optional [23:27] ginader: tjholowaychuk: thanks! :-) [23:28] ajsie_ has joined the channel [23:28] ajsie_ has left the channel [23:29] ajsie__ has joined the channel [23:30] CIA-77: node: 03Evan Larkin 07master * r43ddc04 10/ lib/fs.js : No longer using the global variable "stat" in unwatchFile - http://bit.ly/ccwqAX [23:30] CIA-77: node: 03Mark Nottingham 07master * r1b24fc6 10/ (3 files in 3 dirs): Consume HTTP trailing headers - http://bit.ly/a4By2b [23:32] creationix: I finished the JavaScript article I started this weekend at jsconf. http://howtonode.org/object-graphs [23:32] creationix: oops, wrong channel, useful here too ;) [23:33] halfhalo: lol [23:33] creationix: I already pasted a link in here, no need to spam too much [23:33] grantmichaels has joined the channel [23:38] ekidd has joined the channel [23:39] TooTallNate has joined the channel [23:39] ajsie has joined the channel [23:39] ajsie has left the channel [23:46] shimondoodkin: creationix: is this 'self.__proto__' thing works? it marked as "Non-standard" https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/proto [23:46] creationix: yep, v8 uses it internally all over the place [23:46] creationix: and it's exposed [23:46] shimondoodkin: :) [23:46] bartt has joined the channel [23:48] shimondoodkin: creationix: why do you create a new new function each time? [23:48] creationix: shimondoodkin: in pattern?, hmm [23:49] shimondoodkin: inyes [23:49] shimondoodkin: in pattern [23:49] shimondoodkin: and rewrite arguments [23:50] shimondoodkin: is it because closure? [23:50] creationix: shimondoodkin: because it's the actual constructor used [23:50] Marak has joined the channel [23:50] creationix: I had to make my code constructor powered so that V8 had something to tie the hidden classes to [23:50] creationix: it's sad my original code wasn't as fast [23:50] jashkenas: creationix: wow ... that's an amazing/hideous hack. [23:51] creationix: yeah, here's the original http://github.com/creationix/pattern/blob/fafa13a6912776dfd8ace91028c87878e8e42900/lib/pattern.js#L6-11 [23:51] tjholowaychuk: creationix: not sure it ever will be as fast, most prototypal languages implement hidden classes [23:51] creationix: much nicer [23:51] creationix: tjholowaychuk: the current hack is about as fast [23:51] dcolish has left the channel [23:51] creationix: and I think the external API is unchanged [23:52] shimondoodkin: should it be like , prototype.__proto__ ? [23:52] ginader: creationix and tjholowaychuk. using req.url and yui3's QueryString.parse did the trick nicely :-) [23:52] ginader: (for GET at least) [23:52] creationix: ginader: nice, though node has a querystring parse too [23:53] creationix: probably works a little different [23:53] ginader: oh does it? that api doc doesn't help me at all... [23:53] tjholowaychuk: ginader: it's possible YUI is fucking shit up, Express parses the querystring for you, req.query [23:53] ginader: cool [23:54] shimondoodkin: creationix: thanks [23:54] tjholowaychuk: ginader: http://expressjs.com/guide.html#req-param-name- [23:54] ginader: ha! [23:54] Marak: alt button is command button over vnc, good to know [23:57] Tim_Smart: Mozilla is getting close... http://arewefastyet.com [23:59] Yuffster has joined the channel [23:59] ryah: Tim_Smart: yeah. i'm guessing that last bit is hard :)