[00:02] yhahn has left the channel [00:03] mfernest has joined the channel [00:04] jamund has joined the channel [00:07] isaacs: piscisaureus: \r chars in lib/tty_posix.js [00:07] isaacs: ^M [00:07] piscisaureus: isaacs: yeah. ryah_ complained about that too, and he's right [00:07] clarkfischer: What is the node-iest way of reporting multiple errors in an async function? I've got an array of errors, and the callback follows the format cb(error, data); Should I pass the array as error? Should I pass just the first error as error? [00:07] isaacs: kk, just making sure [00:07] isaacs: configure your editor etc etc [00:07] isaacs: :) [00:07] piscisaureus: isaacs: git handles it now [00:07] dmcquay has joined the channel [00:07] isaacs: yeah [00:07] isaacs: diff -b [00:07] isaacs: life saver^ [00:08] piscisaureus: isaacs: git config --global core.autocrlf = true [00:08] isaacs: whoa, what's that do? [00:08] gf3 has joined the channel [00:08] gf3 has joined the channel [00:08] piscisaureus: on windows, automatic conversion to \n [00:08] mscdex: clarkfischer: depending on what you're doing, usually i stop whatever it was doing at the first sign of an error and pass that error the callback [00:09] piscisaureus: ACTION fix udp for windows [00:09] isaacs: piscisaureus: that is, truly, a public service. [00:09] piscisaureus: :-O [00:09] mscdex: tmyk? [00:09] isaacs: clarkfischer: yeah, what mscdex said. [00:09] mscdex: :p [00:10] clarkfischer: mscdex: I'm writing a wrapper around a web API, and it may (or may not) return multiple errors [00:10] isaacs: clarkfischer: in npm/slide, the first error means "Stop everything, go no further, and do no more callbacks." If another async function returns to an error state, i just ignore it. [00:10] isaacs: treat it like a "throw" [00:10] isaacs: either handle it, or stop the world. [00:11] mscdex: clarkfischer: in that case, i'd always return an array i guess, when there is at least 1 error [00:11] derferman has joined the channel [00:12] clarkfischer: Yeah, that's what I'm thinking. [00:13] clarkfischer: I'd like to return only the first error, so, programatically, it's easier to deal with, but I'd also like to report as much data as the server is responding with [00:13] mscdex: yeah, i'd just always return an array on >= 1 error. more error info is better than less [00:14] piscisaureus: mjr_: patch working? [00:14] nejucomo has joined the channel [00:16] perlmonkey2 has joined the channel [00:17] banjiewen has joined the channel [00:17] charlenopires has joined the channel [00:18] andrewfff has joined the channel [00:19] AAA_awright_ has joined the channel [00:21] kiddphunk has joined the channel [00:22] jesusabdullah: Anybody here know how to edit an old commit message? [00:22] jesusabdullah: in git, I mean [00:23] jesusabdullah: sorry <_< [00:23] clarkfischer: Ugh. Looks like require('querystring').stringify has changed it's beahviour a bit.... [00:23] Lorentz: jesusabdullah: Probably not [00:23] jesusabdullah: *nod* [00:24] Lorentz: There's ways to uncommit, I think [00:24] jesusabdullah: ah [00:24] jesusabdullah: --amend [00:24] mikeal has joined the channel [00:24] sechrist: I'm curious if there's a way to do that if it's already pushed off (to like an origin or something) [00:25] ryah_: [00:28|% 100|+ 161|- 1]: Done [00:25] ryah_: :) [00:25] tjholowaychuk: :) [00:25] tjholowaychuk: haha [00:25] jesusabdullah: ugh, this is gonna be a big push [00:26] jesusabdullah: HNNNNNG [00:26] Tim_Smart has joined the channel [00:26] jesusabdullah: Saddest thing is, it's not a node project :( [00:27] mjr_: piscisaureus: sorry, people in my office. Patch didn't apply cleanly for me. [00:27] mjr_: piscisaureus: and the people, they haven't left. [00:28] piscisaureus: mjr_: hmm, ok, get back at me when u have time. should apply cleanly on master [00:29] tlrobinson1 has joined the channel [00:30] tim_smart has joined the channel [00:31] mscdex: time to make the donuts [00:33] dguttman has joined the channel [00:36] isaacs: piscisaureus: still around? [00:36] piscisaureus: yeah [00:36] isaacs: piscisaureus: what string do you expect to see for meta-X [00:36] andrewfff has joined the channel [00:37] mikeal has joined the channel [00:37] piscisaureus: key = { name: 'x', shift: true, meta: true, ctrl: false } [00:38] isaacs: piscisaureus: i'm getting "\x1bX" on iterm, and "\xf8" on iterm [00:38] isaacs: er, \x1bX on terminal.app [00:38] isaacs: piscisaureus: i mean, before that regexp hits it [00:38] piscisaureus: isaacs: that terminal.app thing I have tackled (I think) here: https://gist.github.com/788962 [00:39] piscisaureus: \xf8 is totally strange to me [00:39] isaacs: piscisaureus: it looks like, at least with the settings i have in iTerm, my $TERM or whatever it is that's affecting it, (char & ~127) is the character [00:39] isaacs: piscisaureus: it's charCode + 127 [00:40] isaacs: er... no, +126. [00:40] isaacs: yeah, it's weird. [00:40] piscisaureus: isaacs: I don't really care what you do with anything other than a-z A-Z 0-9 [00:40] isaacs: anyway, i can detect it easily enough. [00:40] piscisaureus: that's the point [00:40] isaacs: i'm just wondering how to make it a string that the regexp will handle properly [00:40] isaacs: right [00:40] piscisaureus: the regexp doesn't need to do it [00:40] piscisaureus: create your own if () statement [00:41] isaacs: hrm. ok. [00:41] isaacs: the issue is that it gets destroyed by the toString [00:41] piscisaureus: the regexp is meant to parse stuff like \x1b[1;5C [00:41] isaacs: since \xf8 isn't valid utf [00:41] piscisaureus: oh. that sucks! [00:41] isaacs: right [00:41] isaacs: that's why i'm gettting "?" [00:41] isaacs: because it's an invalid char [00:42] piscisaureus: isaacs: but that means that if anyone does stdin.setEncoding('something') you can't get the keys out [00:42] airhorns has joined the channel [00:42] isaacs: piscisaureus: yeah, unless i sniff for those bytes on the buffer, and turn it into a proper thing. [00:43] isaacs: so... what's \x1b[1;5C? [00:43] piscisaureus: isaacs: ctrl+left presumably [00:44] zentoooo has joined the channel [00:44] isaacs: hmm... that doesn't work here, either... [00:44] ryah_: ACTION is glad isaacs is fixing this [00:44] isaacs: lemme pull that patch [00:44] shiawuen has joined the channel [00:44] sudoer has joined the channel [00:44] piscisaureus: isaacs: mjr_ said it didn't apply, maybe it's line endings again [00:44] isaacs: well, between the three of us, it should work on node, mac, and windows, right? [00:44] jchris has joined the channel [00:44] piscisaureus: hehe [00:44] ezmobius has joined the channel [00:44] ron_frown has joined the channel [00:44] isaacs: piscisaureus: i already blasted your ^M chars ;) [00:45] isaacs: i've considered adding `perl -pi -e 's/\r//g' .` to my PROMPT_COMMAND [00:45] isaacs: but it'd be too slow [00:46] isaacs: hm, "patch does not have a valid email address" [00:47] piscisaureus: isaacs: maybe it is the mix of lf and crlf [00:47] piscisaureus: i can fix that [00:47] isaacs: nope [00:47] isaacs: error: patch failed: lib/tty_posix.js:66 [00:47] isaacs: error: lib/tty_posix.js: patch does not apply [00:47] isaacs: that's after i s/\r//g [00:47] piscisaureus: isaacs: let me rebase [00:47] hornairs has joined the channel [00:47] isaacs: kk [00:48] bingomanatee: So guys I kind of did a thing with the Node meetup group [00:49] bingomanatee: I said I had a meeting tonight but on the meetup board I scheduled for the 3rd of February [00:49] SvenDowideit has joined the channel [00:49] bingomanatee: I talked to a few people about getting together tonight but the meeting on Meetup.com is scheduled for February. [00:50] bingomanatee: If you guys want to get together tonight I'm definately going out but Its kind of retarted to throw it up on the meetup board this late unless you're up for it. [00:50] stagas: very nice http://schacon.github.com/ddd [00:50] piscisaureus: isaacs: just merge https://github.com/piscisaureus/node, it has only this patch on top of ryah/master [00:51] isaacs: lovely :0 [00:51] isaacs: :) [00:52] JRowe: slide 46 = win\ [00:52] rburhum has joined the channel [00:54] JRowe: awesome [00:54] bartmax has joined the channel [00:54] JRowe: google just became like over 9000 times less creepy [00:54] JRowe: http://www.techspot.com/news/42072-larry-page-to-replace-eric-schmidt-as-googles-ceo.html [00:54] nodejs has joined the channel [00:54] sudoer has joined the channel [00:55] piscisaureus: isaacs: there is also a minor error in that regex, tho I don't know if you're affected. it should read: [00:55] Lorentz: gf3: jerk can't do anything fancier, like watching out for user joins and parts? Seems to only listen to privmsgs. [00:55] piscisaureus: /^(?:\x1b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/ [00:55] isaacs: piscisaureus: updating to that. [00:55] gf3: Lorentz: yea, for now, if you can think of a clean api I will consider adding it [00:57] bsstoner has joined the channel [00:57] Lorentz: gf3: Let me think of one, hrm [00:58] gf3: Lorentz: because, the point of Jerk is to create dead-simple bots, and anything more advanced should use IRC-js [00:58] Lorentz: I like how jerk is kept simple, so it'd be good to keep watch_for as it is. [00:58] Lorentz: Yeah, that. [00:59] kiddphunk has joined the channel [00:59] kiddphunk_ has joined the channel [00:59] sh1mmer has joined the channel [00:59] Lorentz: gf3: Well, I think I might just take the cleaner code you have in jerk and fork it and improve it seperately instead of trying to taint on jerk's goals. [00:59] echosystm has joined the channel [01:00] gf3: Lorentz: okay cool, if you come up with something nice send me a pull request [01:00] Ond has joined the channel [01:00] Lorentz: gf3: Will do [01:00] echosystm: i just did the hello world c++ example - where does hello.node go once it is built? [01:00] gf3: :) thanks [01:00] echosystm: i mean, where do i put it if i actually want to use it [01:01] isaacs: character terminal codes are awful. [01:02] mjr_: echosystm: somewhere where require can find it, like ~/.node_libraries or /usr/local/lib/node [01:02] echosystm: ok, thanks [01:02] mjr_: Which is tedious, and why many people use npm, even for stuff they don't publish. [01:03] mjr_: Speaking of which, I've noticed that sometimes when building new versions of node that modules need to be rebuilt in order to work properly, but npm doesn't necessarily think so. [01:03] mjr_: So you get mysterious segfaults. [01:03] isaacs: mjr_: run `npm rebuild` [01:03] klaytonix has joined the channel [01:03] isaacs: mjr_: npm doesn't keep track of node's version changing [01:03] isaacs: it probably could, but meh [01:03] mjr_: Yeah, I dunno. [01:03] isaacs: if you're updating node, just do a rebuild. [01:04] mjr_: I guess that's the right answer, but I've been caught by that a few times now. [01:04] mjr_: Because you don't always need to do it, it seems. [01:04] mjr_: I gotta believe that others are similarly mystified. Thankfully most modules don't use native code. [01:06] mjr_: isaacs: npm rebuild didn't actually rebuild pcap, I think because of waf sadness or something. [01:06] isaacs: mjr_: hm. [01:06] isaacs: you shouldn't have to rebuild when moving between 0.2.x versions [01:06] isaacs: "shouldn't" [01:07] mjr_: Something about node changed recently that requires a rebuild, perhaps a V8 update. [01:07] mjr_: Anyway, it seems like npm is running the build command, but that the old build results are on the disk somewhere, so it doesn't actually recompile it. [01:08] isaacs: this charcode iterm/terminal.app thing is really obnoxious. [01:08] mjr_: https://gist.github.com/789072 [01:08] davidwalsh has joined the channel [01:08] isaacs: mjr_: oic, because it doesn't do a cleanup first. [01:08] isaacs: that's a problem. [01:08] isaacs: yeah [01:08] mikeal has joined the channel [01:08] mjr_: This does cause mystery segfaults. [01:08] isaacs: i suppose you could do "scripts":{"install":"node-waf configure clean install"} [01:09] isaacs: then it should remove the build dir first, right? [01:09] mjr_: yeah, I guess [01:09] mjr_: I dunno from waf. [01:09] isaacs: piscisaureus: ok... dude, get this... [01:09] mjr_: I just copy enough wscript lines from other wscripts until it works. [01:09] isaacs: piscisaureus: on terminal.app, meta-b = "\u001bb", right? [01:09] piscisaureus: isaacs: yeah, ok [01:09] isaacs: piscisaureus: on iTerm, meta-left = "\u001bb" [01:10] dthompson has joined the channel [01:10] piscisaureus: isaacs: howdie [01:10] piscisaureus: isaacs: that sucks [01:10] piscisaureus: that meta-b = "\x1bb" is also true on xterm btw [01:11] isaacs: right [01:11] piscisaureus: gnome-terminal, that kind of stuff [01:11] piscisaureus: isaacs: looks like you need to parse $(TERM) in some way [01:11] isaacs: env.TERM === "xterm-color" in both cases [01:12] piscisaureus: yeah posix ftw [01:12] broofa has joined the channel [01:12] boaz_ has joined the channel [01:12] isaacs: i don't quite grok how it was working before. [01:12] isaacs: because it was, i swear. [01:12] admc has joined the channel [01:13] piscisaureus: isaacs: probably you weren't using meta-left at all [01:13] isaacs: piscisaureus: oh, yeah, i was. [01:13] springmeyer has joined the channel [01:13] isaacs: that's how i noticed it :) [01:14] isaacs: ha!! [01:14] piscisaureus: it wasn't bound to any repl functionality afaict [01:14] isaacs: it's an iTerm preferences issue. [01:14] piscisaureus: isaacs: i think the iterm guys thought to be smart [01:14] isaacs: i have meta-left mapped to meta-b [01:14] isaacs: because that's "jump back a word" in like every app ever. [01:14] isaacs: apparently [01:14] piscisaureus: oh it was you [01:15] isaacs: well, i dunno if it was me or a default [01:15] piscisaureus: who tried to be smart [01:15] isaacs: hehe [01:15] isaacs: i try hard to be dumb [01:15] isaacs: but whenever i succeed, things break [01:15] isaacs: . [01:15] piscisaureus: isaacs: we should add meta+arrows to readline as an alias for forward/backword word [01:15] ph^ has joined the channel [01:16] mjr_: soon node will have a better REPL than bash. [01:16] isaacs: ok, so that's why meta-left and meta-b are the same. cuz i (or iterm?) made them the same. [01:16] isaacs: mjr_: nah. [01:16] isaacs: mjr_: not unless you wrap in readline ;P [01:16] broofa has joined the channel [01:16] mjr_: I'm sure we'll get there [01:16] mjr_: readline.js [01:17] piscisaureus: I would like to alt-left right as well, I'm totally not used to this linux jokes [01:17] isaacs: mjr_: i mean, rlwrap [01:17] piscisaureus: s/this/these [01:17] davidascher has joined the channel [01:17] isaacs: piscisaureus: ok. so, what *should* alt-b do? [01:17] isaacs: *meta- [01:17] piscisaureus: just a sec [01:17] mjr_: meta-b should go back a word [01:17] piscisaureus: backward word [01:18] piscisaureus: see readline.js : 455 [01:19] isaacs: ok, great [01:19] xSmurf has joined the channel [01:19] isaacs: so, my meta-left mapping is doing exactly the right thing, and mimicing meta-b [01:19] piscisaureus: yeah. pretty much [01:19] isaacs: but the parser thingie isn't quite grokking it [01:19] piscisaureus: that was what my patch did [01:19] piscisaureus: *should do [01:19] andrewfff has joined the channel [01:21] isaacs: ahh ok, i see. [01:21] isaacs: didn't rebuild *^_^* [01:21] isaacs: ok, almost there, then, i think. [01:22] piscisaureus: isaacs: just hope there are no error in there [01:22] isaacs: eh. errors are ok :) [01:22] isaacs: it's just the repl :) [01:23] isaacs: least important, but most tested. [01:24] brapse has joined the channel [01:24] sudoer has joined the channel [01:24] unomi has joined the channel [01:25] sprout has joined the channel [01:26] andrewfff has joined the channel [01:26] piscisaureus: ryah_: ping [01:29] piscisaureus: isaacs: ryah playing hide? [01:30] piscisaureus: ACTION ducks under the desk as well. monkey see monkey do [01:31] broofa has joined the channel [01:32] ryah_: piscisaureus: im here [01:32] ryah_: piscisaureus: what's up? [01:32] piscisaureus: I don't understand this: https://github.com/ry/node/blob/a763a4f4d9917c855922870181b67bbf64666504/src/node_net.cc#L1239-1248 [01:33] brainproxy: any up for writing an OrientDB connector for node.js using its network binary protocol? .. http://code.google.com/p/orient/wiki/NetworkBinaryProtocol [01:33] piscisaureus: on apple you set keepalive, then keepalive again? [01:34] mike5w3c has joined the channel [01:34] isaacs has joined the channel [01:34] clarkfischer: Okay, weird error. [01:34] clarkfischer: process.stdout.write(text); Is giving me a socket not writable error [01:35] skm has joined the channel [01:37] piscisaureus: I can make a guess about what to do but i'd like to understand :( [01:38] stepheneb has joined the channel [01:39] arpegius has joined the channel [01:43] daniellindsley has joined the channel [01:43] ryah_: piscisaureus: apple and linux support some extension options [01:44] ryah_: it's to send little keep-alive probes [01:44] piscisaureus: ryah_: but SO_KEEPALIVE actually does something if you're not setting the timeout? [01:46] ryah_: piscisaureus: yeah, it sends ip level heartbeats [01:46] airhorns has joined the channel [01:46] ryah_: not sure what happens on platforms without the timeout [01:46] isaacs has joined the channel [01:47] piscisaureus: ryah_: I can set the timeout on windows but it's an overlapped operation. e.g. it may not take effect immediately, although I could block until it finishes. do that? [01:47] ryah_: it's probably some super long timeout, like 2 hours [01:47] ryah_: piscisaureus: we have higher level idle timeouts too [01:48] ryah_: piscisaureus: i think you should just set the socket option [01:48] ryah_: if you have that [01:49] sudoer has joined the channel [01:49] piscisaureus: SO_KEEPALIVE is there, yeah. TCP_KEEP.* isnt [01:50] ryah_: just set that then [01:50] dnolen has joined the channel [01:50] isaacs: so, not only did messing with stdout and stderr in raw mode cause 2 kernel panics, the last one took my bluetooth with it. fml. [01:50] halfhalo: lol [01:50] isaacs: it would be insulting to lipstick and pigs to say that osx is lipstick on a pig. [01:51] piscisaureus: isaacs: not even speaking about the number of user panics it caused :p [01:51] halfhalo: ACTION <3 his textmate [01:51] isaacs: it's a gorgeous car with a pile of manure under the hood. [01:52] halfhalo: _what_ the hell windows... [01:52] halfhalo: you just ungenuined yourself... [01:52] hij1nx has joined the channel [01:52] dthompson has joined the channel [01:54] daveyjoe has joined the channel [01:55] yhahn has joined the channel [01:56] russ_nyc has joined the channel [01:56] meatmanek has joined the channel [01:58] creationix has joined the channel [01:58] abstractj has joined the channel [01:58] hornairs has joined the channel [02:00] ryah_: mraleph: ping [02:01] piscisaureus: mraleph takes a nap [02:01] ryah_: mraleph: getting many assert errors [02:01] ryah_: # [02:01] ryah_: # Fatal error in /home/ryan/projects/node/deps/v8/src/gdb-jit.cc, line 1164 [02:01] ryah_: # CHECK(e->value == __null) failed [02:01] ryah_: # [02:01] ryah_: x64 [02:02] galeal has joined the channel [02:02] galeal: tjholowaychuk: Hey. You around? [02:03] galeal: I have a question re: node-canvas, but I can toss you an email if you aren't around. [02:03] jamescarr has joined the channel [02:04] aconran___ has joined the channel [02:04] tjholowaychuk: galeal: sort of around, feel free to email [02:04] tjholowaychuk: gotta run for a bit [02:04] galeal: sure. works for me. thx [02:05] Kenta has joined the channel [02:09] AAA_awright_ has joined the channel [02:11] ryah_: mraleph: that was happening even without the --gdbjit flag [02:16] charlenopires has joined the channel [02:17] galeal has joined the channel [02:17] andrewfff has joined the channel [02:18] danyork: ryah_: Yes, as you saw, I updated the blog post with the info about IPv6. Thanks for the pointer... I'll do some more testing now that I understand how I need to think about it. [02:19] nejucomo has joined the channel [02:19] sudoer has joined the channel [02:23] brianmario_ has joined the channel [02:23] skm has joined the channel [02:25] piscisaureus: [03:05|% 100|+ 118|- 44]: Done [02:26] heauxbag has joined the channel [02:27] ryah_: piscisaureus++ [02:27] v8bot: ryah_ has given a beer to piscisaureus. piscisaureus now has 1 beers. [02:27] piscisaureus: thnx [02:29] ryah_: i think the new http client is done [02:29] galeal has joined the channel [02:30] piscisaureus: show me your money [02:32] ryah_: 0 0 ~/projects/node (http_agent) : make test-all [02:32] ryah_: [04:56|% 100|+ 352|- 0]: Done [02:32] shaver: using socket.io-node [02:32] shaver: can I get the client IP address? [02:33] sprout has joined the channel [02:33] aconbere has joined the channel [02:33] piscisaureus: ryah_++ [02:33] v8bot: piscisaureus has given a beer to ryah_. ryah_ now has 1 beers. [02:33] ryah_: shaver: if you can get the socket - i don't know if you can - socket.remoteAddress [02:34] brainproxy: ryah_: what's the status on request.pause() ? at some point will it be unnecessary to manually do event buffering for 'data' and 'end' events that might get emitted before pause takes effect? [02:34] pagameba has joined the channel [02:35] ryah_: brainproxy: sigh, yeah. i actually did a lot of work on it yesterday [02:35] ryah_: brainproxy: not there yet. it probably requires another day to integate it... [02:36] ryah_: brainproxy: any interest in working on it? [02:36] ryah_: i can push the code... [02:36] brainproxy: if one sets up two listeners for data and end as the first statements in the createServer callback is it even possible for a data event or end to get missed? [02:36] Vertice has joined the channel [02:36] ryah_: no [02:37] brainproxy: the ordering in the event loop would prevent it? [02:37] ryah_: yes [02:37] bartmax has joined the channel [02:37] bartmax has joined the channel [02:38] brainproxy: makes sense .. as far as helping with it, I think it would be a bit beyond my skill set atm, I'm just now starting to work at the bottom layer in node .. been using various modules for a year but now I'm trying to build my own stack from the bottom up [02:38] brainproxy: so I'm just getting familiar with the tough parts [02:38] ryah_: ok. it's something i'd like to do in the near future. [02:38] ryah_: it's just kind of hard. [02:39] brainproxy: btw, have you ever looked at flapjax? [02:39] ryah_: yeah [02:39] shaver: ryah_: yeah, trying to get to the socket [02:39] brainproxy: I'm trying to meld it deeply into a framework I'm building with node, as it makes reasoning about the evented flow easier [02:40] brainproxy: but I can't avoid mixing imperative and functional logic altogether, and it's making my brain a little fuzzy ;p [02:41] brainproxy: ryah_: btw, i asked the flapjax guys to please make their evenstream primitives support n-ary event emitters [02:41] brainproxy: so integrations w/ node is a bit easier [02:41] brapse has joined the channel [02:42] Sembiance: ok, I'm fed up. We really need some good IDE's for JavaScript. [02:42] dguttman_ has joined the channel [02:42] softdrink has joined the channel [02:42] brainproxy: one of the maintainers agreed to work on it, but I don't when the changes will be implemented [02:42] heauxbag: whats wrong with emacs [02:42] Sembiance: Eclipse JSDT is about the best I've seen so far, but it has some big bugs/issues/shortcomings still and the code is just an absolute nightmare underneath. [02:43] creationix has joined the channel [02:43] creationix has left the channel [02:43] Sembiance: maybe I should look into enhancing http://ajaxorg.github.com/ace/editor-build.html [02:43] guybrush: an IDE which autocompletes the special words like function and var? :D [02:43] guybrush: ill stick with vi [02:44] stepheneb has joined the channel [02:44] brainproxy: yeah, MacVim does 95% of what I want, though sometimes I'll go to BBEdit [02:44] piscisaureus: isaacs: ping [02:44] ryah_: Sembiance: http://neugierig.org/content/unix/ [02:44] Sembiance: heauxbag, guybrush: As far as I've been told, both emacs and vi don't really have much support for javascript stuff out of the box and that you need to modify them a good deal before being useful? [02:45] heauxbag: Sembiance: js2-mode is a nice improvement [02:46] Sembiance: ryah_: heh, amusing :) [02:46] Sembiance: I should probably switch to vi or emacs [02:46] Sembiance: I mean, I'm already running gentoo and xmonad. [02:47] heauxbag: sounds like you're already in config hell [02:48] Sembiance: heauxbag: do you run vanilla emacs or have you modified it? [02:48] heauxbag: mostly vanilla [02:49] heauxbag: with a ton of config and plugins and etc, but why use emacs if you're not going to tailor it [02:49] micheil has joined the channel [02:51] Sembiance: I'm not sure I buy the argument that vi/emacs is the best we can do. I mean, that's like saying "you have alert(), what more do you need" before firebug came along [02:52] c4milo1 has joined the channel [02:52] heauxbag: i dont disagree [02:53] heauxbag has joined the channel [02:54] bingomanateeIpho has joined the channel [02:57] chrischris has joined the channel [02:57] JusticeFries has joined the channel [02:59] piscisaureus: git hub is broken :-( [02:59] bingomanatee_ has joined the channel [02:59] quirkey has joined the channel [03:00] heauxbag: broken? works for me [03:01] piscisaureus: I pushed but nothing got updated [03:01] piscisaureus: but now it seems to work again [03:03] brianmario has joined the channel [03:05] mjr_ has joined the channel [03:06] piscisaureus: hmm still broken, actually [03:07] shaver: a *ha* [03:07] shaver: client.connection [03:07] shaver: come to papa [03:09] wdperson has joined the channel [03:10] shaver: oof, I have to run as root to use flashsocket [03:10] shaver: that is a bit scary [03:10] galeal has joined the channel [03:10] brainproxy: it will work w/o root [03:10] chrischris has joined the channel [03:11] brainproxy: but it takes a bit longer for the client to get hooked up w/ the flash transport [03:11] Lorentz: w/o [03:11] brainproxy: yeah sorry [03:11] brainproxy: w/o :) [03:11] Yuffster has joined the channel [03:16] AAA_awright has joined the channel [03:18] keyvan has joined the channel [03:20] luke`_ has joined the channel [03:20] perlmonkey2 has joined the channel [03:21] davidascher has joined the channel [03:21] creationix has joined the channel [03:23] piscisaureus: ryah_: https://github.com/piscisaureus/node/commit/4226e3e2cbabb23ae1591cc5ce0bb36db24213d9 [03:24] piscisaureus: ryah_: there's more stuff here that i want to discuss, but lets do that another time. my ttl has expired [03:25] galeal has joined the channel [03:25] luke` has joined the channel [03:26] tim_smar1 has joined the channel [03:28] piscisaureus has joined the channel [03:29] tmzt: anybody know how to do a 302 or 301 directly from nginx? [03:29] piscisaureus: shaver: can't you make ff do session restore tab-by-tab instead of all at the same time ... :-( [03:30] tmzt: or convert restores to bookmarks without regexing json [03:30] tmzt: bookmark folders [03:31] hornairs has joined the channel [03:32] tim_smar1 has joined the channel [03:33] mike5w3c has joined the channel [03:34] tim_smar1 has joined the channel [03:34] clarkfischer: Just pushed a rewrite of my minification package ;) [03:34] omygawshkenas has joined the channel [03:35] boaz has joined the channel [03:35] andrewfff has joined the channel [03:36] tim_smart has joined the channel [03:37] mischief has joined the channel [03:42] bingomanatee_: I got your minification package right here baby! [03:42] bingomanatee_: OOOOH YEAH! [03:44] objectvar has joined the channel [03:45] clarkfischer: I dig it. [03:45] shaver: piscisaureus: yes, that's what we do in FF4 [03:46] ezmobius has joined the channel [03:46] piscisaureus: shaver: great! rush :-) [03:47] jpiche has joined the channel [03:48] bingomanatee_: By the way Node.js is officially the second most popular idea in the SF PHP Meetup's idea box [03:48] bingomanatee_: Just behind the NoSQL exploratorium that has been there for several months [03:49] piscisaureus: uh minefield looking so slick these days [03:49] mischief has joined the channel [03:49] galeal has joined the channel [03:49] piscisaureus: now lets see what happens when I install all these extensions [03:50] creationix has left the channel [03:50] clarkfischer: jashkenas: I'm pretty much in love with backbone and underscore. Tremendous work! [03:50] AAA_awright: Node.js seems to be allowing trailing commas... Did something change in the ECMA spec or V8? [03:50] AAA_awright: v8: {a:1, b:2, c:3,} [03:50] v8bot: AAA_awright: SyntaxError: Unexpected token : [03:50] AAA_awright: uh [03:50] AAA_awright: v8: {a:1} [03:50] v8bot: AAA_awright: 1 [03:50] AAA_awright: v8: {a:1, b:2} [03:50] v8bot: AAA_awright: SyntaxError: Unexpected token : [03:50] clarkfischer: Isn't it v8>? [03:51] clarkfischer: v8> {a:1, b:2,} [03:51] v8bot: clarkfischer: SyntaxError: Unexpected token : [03:51] AAA_awright: v8> {a:1} [03:51] v8bot: AAA_awright: 1 [03:51] bingomanatee_: even if it were allowed why would you want to use it anyway? [03:51] AAA_awright: v8> {a:1, b:2} [03:51] v8bot: AAA_awright: SyntaxError: Unexpected token : [03:51] clarkfischer: v8> var j = {a:1, b:2} [03:51] v8bot: clarkfischer: undefined [03:51] clarkfischer: v8> var j = {a:1, b:2,} [03:51] v8bot: clarkfischer: undefined [03:51] AAA_awright: ah [03:51] AAA_awright: b8: var b={a:1, b:2, c:3,}; b [03:51] AAA_awright: v8: var b={a:1, b:2, c:3,}; b [03:51] v8bot: AAA_awright: {"a": 1, "b": 2, "c": 3} [03:51] AAA_awright: Huh [03:52] clarkfischer: As far as I know, v8's always allowed trailing commas. [03:52] clarkfischer: IE is the persnickety one, I believe. [03:52] AAA_awright: bingomanatee_: Because it's superior and allows for easier code generation, and make things more constistent if each property always starts with a ",\n" [03:53] madl10n has joined the channel [03:53] Ond has joined the channel [03:54] clarkfischer: each property starts with ",\n"? [03:55] warz has joined the channel [03:55] clarkfischer: like var j = {\n,sup: 'you'\n,dog: 'dauchshund'}; [03:55] clarkfischer: v8> var j = {,sup: 'you',hi: 'mom'} [03:55] v8bot: clarkfischer: SyntaxError: Unexpected token , [03:55] pyrotechnick has joined the channel [03:55] luke` has joined the channel [03:56] dgathright has joined the channel [03:56] clarkfischer: Aside from the first one, I'm guessing... [03:56] mischief has joined the channel [03:57] madl10n has joined the channel [03:57] jashkenas: clarkfischer: thanks. [03:57] AAA_awright: clarkfischer: Ends... starts works too I guess [03:58] AAA_awright: eh no nvm [04:01] omygawshkenas has joined the channel [04:02] aconbere has joined the channel [04:02] omygawshkenas: AAA_awright: sloppy comma habits are going to start to bite you, if JS ever gets Harmony's destructuring. [04:02] jashkenas_: [a,,[b,,[c]]] = f(); [04:02] keyvan has joined the channel [04:03] AAA_awright: Harmony? [04:04] AAA_awright: Oh that [04:05] keyvan has joined the channel [04:06] ossareh has joined the channel [04:09] abstractj has joined the channel [04:09] keyvan has joined the channel [04:11] sudoer has joined the channel [04:13] Aria has joined the channel [04:13] clarkfischer: harmony seems complicated... [04:13] djacobs7 has joined the channel [04:14] madl10n has joined the channel [04:14] opus_ has joined the channel [04:14] opus_: hello. I am trying to run npm as non-root but it always fails [04:14] echosystm: youre doing it wrong [04:14] opus_: it needs write access to /usr/local/bin/ [04:14] echosystm: what OS? [04:14] opus_: fedora 14 [04:14] clarkfischer: opus_: Did you install npm as non-root? [04:15] jashkenas: clarkfischer: If you've got a backbone app that you think would make a good example ... I'm always looking for more to add to the docs. [04:15] opus_: clark: I tried, it wouldn't work [04:15] ShizWeaK_: opus_: I use the top gist here: https://gist.github.com/579814 to install at appears to work fine everywhere ive tested [04:15] Aria: fedora 14 is SELinux hardened. [04:15] opus_: i created a node user account and group and chown /usr/local/lib/node to node.node [04:15] opus_: i tried turning off selinux [04:15] Aria: That means either disabling it, or hacking the selinux permission sets to allow it. [04:15] clarkfischer: jashkenas: Almost... I'm just hammering out the details with a RoR+Backbone wiki (Backbone is great, RoR is the one giving me a headache...) [04:15] echosystm: opus_: install node in your home, then install npm with the default script [04:15] opus_: like i said, it wants to write to /usr/local/bin, I'll check out Shiz link [04:16] opus_: ok, thanks guy [04:16] echosystm: unless you have some reason to not install it in home, i think you will find this is much easier [04:17] opus_: its purely principal [04:17] echosystm: well, personally i dont like installing things that i have built form source outside my home [04:18] echosystm: i get scared things are going to break [04:18] galeal has joined the channel [04:18] echosystm: often, they do [04:18] ShizWeaK_: too often hah [04:19] opus_: whats new in the node.js land [04:21] teddy__ has joined the channel [04:22] desaiu has joined the channel [04:24] softdrink has joined the channel [04:24] ShizWeaK_: opus_: http://nodejs.org/changelog.html :) [04:25] creationix has joined the channel [04:25] creationix has left the channel [04:26] amerine has joined the channel [04:27] cb2 has joined the channel [04:28] Aria has joined the channel [04:30] cb2 has left the channel [04:30] dgathright has left the channel [04:31] gathright has joined the channel [04:32] andrewfff has joined the channel [04:34] klaytonix has joined the channel [04:38] galeal has joined the channel [04:44] dthompson has joined the channel [04:46] Yuffster_work has joined the channel [04:47] rudebwoy has joined the channel [04:47] davidascher has joined the channel [04:51] coffee has joined the channel [04:52] devdrinker has joined the channel [04:52] Me1000 has joined the channel [04:53] andrewfff has joined the channel [04:56] balaa has joined the channel [04:57] ron_frown has joined the channel [04:57] bsstoner has joined the channel [04:58] kawaz_air has joined the channel [04:59] jakehow has joined the channel [04:59] nodejs_ has joined the channel [05:01] ryan[WIN] has joined the channel [05:02] xthsky has joined the channel [05:02] nodejs_ has joined the channel [05:04] pyrotechinck has joined the channel [05:04] meso_ has joined the channel [05:05] dgathright has joined the channel [05:07] Lorentz: gf3: For now, I added an extra param to watch_for() for type to listen to, and modified receive_message accordingly [05:08] EyePulp has joined the channel [05:09] andrewfff has joined the channel [05:09] tilgovi has joined the channel [05:09] Lorentz: Now I can regex for join/part events, regexes on the nickname since it doesn't make sense to do it on usual message. [05:10] pyrotechnick: Lorentz: what you doing? [05:10] pyrotechnick: bots? [05:10] Lorentz: pyrotechnick: IRC bot [05:10] pyrotechnick: Lorentz: pm coffee with !union [05:11] pyrotechnick: what library? [05:11] Lorentz: Ah yes, this thing, you were doing it in the channel before [05:11] pyrotechnick: lol [05:11] pyrotechnick: yeah but now it pms [05:11] Lorentz: pyrotechnick: gf3's jerk + irc-js, I'm forking jerk [05:11] pyrotechnick: true true [05:11] pyrotechnick: i didnt mind jerk but i dont think i could get a list of names [05:11] tmcw has joined the channel [05:11] Lorentz: It's going to be significantly different to jerk, so for now I'm going to call it dork [05:11] Lorentz: Could merge, but jerk's meant to be clean and simple [05:12] Lorentz: dork's going to do all sorts of things. First thing I did to it was add listening for more than just privmsg. [05:12] meatmanek has joined the channel [05:13] pyrotechnick: im keen [05:13] pyrotechnick: im using some dead library now for coffee [05:13] pyrotechnick: it's not bad but it could use some work [05:14] echosystm: i'm reading the v8 user guide and this stuff about handles is totally boggling my mindgrapes [05:14] echosystm: anyone able to dumb it down for me? [05:14] echosystm: http://code.google.com/apis/v8/embed.html#handles [05:15] pyrotechnick: i didnt even know that guide existed [05:15] ceej has joined the channel [05:15] pyrotechnick: probably explains why i struggled so much with my first bindings [05:16] josephhitchens has joined the channel [05:16] sudoer has joined the channel [05:18] tilgovi: anyone tried to use node to make an irc client? [05:18] pyrotechnick: lol [05:18] pyrotechnick: when did you come in here? [05:19] Lorentz: tilgovi: No that I know of, but it's probably do-able [05:19] slickplaid: i dont think anyone has tried it [05:19] pyrotechnick: we were just talking about the irc bots we're writing [05:19] slickplaid: you should do it and be the first [05:19] _jdalton has joined the channel [05:19] pyrotechnick: yep [05:19] tilgovi: ah. I may have been in here [05:19] tilgovi: not paying attention to the room [05:19] pyrotechnick: we can point you towards some packaged [05:19] tilgovi: yeah, what's happened in that direction? [05:19] pyrotechnick: s/d/s/ [05:19] tilgovi: I can go back and read my scrollback, or just give me the tl;dr [05:20] tilgovi: I was just thinking how I'd totally fullscreen my browser all the time with cloud9 if I had an irc client [05:20] skm has joined the channel [05:20] pyrotechnick: we were just saying how awesome our bots are really and how im using an old dead library and Lorentz is reviving jerk [05:20] pyrotechnick: tilgovi: FTW [05:20] tilgovi: ah [05:20] pyrotechnick: man ill totally contribute [05:20] pyrotechnick: that's a hella good idea [05:20] tilgovi: thanks :) [05:21] _jdalton has left the channel [05:21] pyrotechnick: now im wondering about what i even need to alttab for [05:21] pyrotechnick: maybe i should just replace OSX with COS [05:21] pyrotechnick: git tower [05:22] hobodave has joined the channel [05:22] pyrotechnick: anyone use tower? [05:22] tilgovi: tower? [05:22] pyrotechnick: u use mac? [05:22] tilgovi: thinkpad w ubuntu on it mostly [05:22] pyrotechnick: mmm no good to you then [05:22] pyrotechnick: but anyone who uses mac and git should consider http://www.git-tower.com/ [05:23] pyrotechnick: it's free for a bit more too [05:23] pyrotechnick: but you have me thinking now tilgovi [05:23] pyrotechnick: what about a git client like the irc one [05:23] pyrotechnick: so a node deamon and then HTML interface [05:24] tilgovi: for bettercodes.org? [05:24] tilgovi: I haven't really checked it out, but there's work there already [05:24] tilgovi: wonder what the architecture is [05:25] pyrotechnick: mmm [05:25] Lorentz: pyrotechnick: https://github.com/lorentzkim/Dork [05:25] pyrotechnick: the website has snowflake effects [05:25] Lorentz: I just started today, and honestly, it's my first forked project ever [05:25] pyrotechnick: welcome to OSS Lorentz [05:25] pyrotechnick: enjoy your stay [05:25] Lorentz: \o/ [05:26] tilgovi: pyrotechnick: but this is different. you were talking client with access to your local machine [05:26] Evet has joined the channel [05:26] andrewfff has joined the channel [05:27] mike5w3c has joined the channel [05:28] pyrotechnick: tilgovi: yeah i most definitely am [05:28] pyrotechnick: basically tower or changes or tortoisegit but written in node/html [05:28] tilgovi: right [05:28] pyrotechnick: id never have to alttab again [05:28] tilgovi: but would you ctrltab? [05:28] pyrotechnick: all day long [05:28] tilgovi: :) [05:28] rmh has joined the channel [05:28] tilgovi: we're halfway there [05:29] pyrotechnick: you know what you could do [05:29] pyrotechnick: you could clone github/gitosis [05:29] pyrotechnick: not only make it a html/node app for doing local git stuff [05:29] pyrotechnick: but utilise the same code for SASS [05:29] pyrotechnick: SAS* [05:30] pyrotechnick: kind of like p2p github [05:30] pyrotechnick: damn this is a good idea [05:30] klaytonix has joined the channel [05:30] Figaroo has joined the channel [05:30] pyrotechnick: and one monthly payment gets you the SAS as well as the local app [05:31] pyrotechnick: but tilgovi i'll need a platform and so will you and they will be very similar [05:31] pyrotechnick: node deamon + HTML app [05:31] pyrotechnick: so we could make that together if you're interested [05:31] pyrotechnick: although…we use coffee and dnode and backbone and all that jazz [05:31] pyrotechnick: so it's not for the fainthearted [05:31] pyrotechnick: nor TJ for that matter ;) [05:32] tilgovi: i've looked ta backbone. seems neat. [05:32] rmh: 0/ [05:32] pyrotechnick: is that a nazi? [05:32] rmh: oops.. [05:32] rmh: nope [05:32] pyrotechnick: lol [05:32] klaytonix has joined the channel [05:32] rmh: lol :/ [05:32] Lorentz: Also need to learn how to make .md files proper [05:33] tilgovi: wow. dnode looks pretty rad. [05:33] rmh: it is.. ;) [05:33] rmh: has anyone any experience with hoxy? [05:34] rmh: https://github.com/greim/hoxy [05:35] rmh: just asking cuz I think it might be limited to only one client... or I am doing something wrong, just installed and configured ist... [05:35] rmh: ist =it [05:36] Lorentz: looks pretty cool [05:36] rmh: yup [05:37] rmh: I tried it on my tablet and it works just fine, then I connected my desktop and it won't load a thing... got ping and everything... but that's iptables... told it port 80 to go through hoxy, rest can get through [05:38] kiranryali has joined the channel [05:38] kiranryali has left the channel [05:41] rmh: hoxy... [05:41] rmh: anyone? [05:41] rmh: ... [05:41] jashkenas has joined the channel [05:41] tim_smart: hoxy? [05:41] rmh: https://github.com/greim/hoxy [05:41] rmh: got a tiny prob with it [05:42] rmh: there also is a youtube video demoing it [05:42] tim_smart: OK. Can't help with that one - never used it. [05:43] jimt has joined the channel [05:43] rmh: here's the vid: [05:43] rmh: http://www.youtube.com/watch?v=2YLfBTrVgZU [05:43] comster: sounds cool [05:43] rmh: it is.. but it doesn't seem to work with multiple clients at once, or I am doing something wrong [05:44] echosystm: can anyone asplain what HandleScope scope; and Local<....> x... actually do? [05:44] sivy has joined the channel [05:44] echosystm: i totally do not get it [05:45] klaytonix has joined the channel [05:46] jimmybaker has joined the channel [05:46] ajpiano has joined the channel [05:47] AAA_awright has joined the channel [05:49] hosh_work has joined the channel [05:50] langworthy has joined the channel [05:51] rmh has joined the channel [05:53] balaa has joined the channel [05:53] B2oba has joined the channel [05:54] B2oba: Hey, is there a facebook sdk for node.js? [05:56] razvandimescu has joined the channel [05:57] Lorentz: Apparently there is: https://github.com/dominiek/node-facebook [05:57] Lorentz: Looks kinda old though [05:57] Lorentz: Check the forks [06:00] yhahn has left the channel [06:01] pyrotechnick has joined the channel [06:01] pyrotechinck has joined the channel [06:02] jdub has joined the channel [06:02] jdub: is there an svg of the node logo hanging around anywhere? [06:03] JusticeFries has joined the channel [06:03] jdub: or eps or whatever [06:03] matyr has joined the channel [06:06] pyrotechnick: ask ryah_ [06:06] jdub: yeah, just pinged him on twittr [06:06] jdub: whoa [06:06] jdub: old school [06:06] jdub: twitter [06:07] zomgbie has joined the channel [06:08] ShizWeaK_: jdub: something like http://intertwingly.net/svg/nodejs.svg ? [06:09] Utkarsh has joined the channel [06:09] klaytonix has left the channel [06:09] jdub: isn't that just sam's cloud? [06:09] jdub: yeah [06:09] dbathurst has joined the channel [06:09] jdub: on a large screen, people will wonder why i'm raving about a grey stomach [06:11] dbathurst: this may be a dumb question but what is the command to bring a node process from the background to the foreground? [06:11] dbathurst: like when I start it wit "node server.js &" [06:11] dbathurst: with* [06:11] jdub: dbathurst: did you hit ctrl-z for instance? type 'bg' [06:13] dbathurst: but since it's running in the background ctrl-z won't work right? [06:14] jdub: dbathurst: using & did the same thing. type 'bg'. [06:14] bingomanateeIpho has joined the channel [06:14] rmh: killall node [06:14] pyrotechnick: tilgovi: [06:14] pyrotechnick: my net died :( [06:14] pyrotechnick: actually the power went off here [06:15] pyrotechnick: thank god for cars and inverters [06:15] B2oba: Thanks Lorentz, ill look at it [06:15] sivy has joined the channel [06:15] B2oba: If I made a project using Node, how does it work to get listed on the page? [06:15] jdub: B2oba: you put it there, because it's a wiki page :-) [06:16] nooder has joined the channel [06:16] B2oba: ahhhhhhhhhhh, silly me :D [06:16] tilgovi: pyrotechnick: oh dear. [06:17] bingomanatee_ has joined the channel [06:19] Lorentz: pyrotechnick: This is why I have UPSs [06:19] bingomanateeIp-1 has joined the channel [06:19] rmh: yeah, they deliver fast [06:19] pyrotechnick: doesn't help when it stays off for 5 days and your fridge goes warm [06:19] rmh: current [06:19] pyrotechnick: then you need generators ;) [06:20] pyrotechnick: i have laptop though [06:20] pyrotechnick: built in UPS ;) [06:20] bingomanatee_: I got your code generator RIGHT HERE BABY! [06:20] bingomanatee_: OOOOOOOOOOOOOOOOH YEAH! [06:20] Aria: Or you need to drink the beer already ;-) [06:21] echosystm: lol pyrotechnick [06:21] echosystm: true story, at my last work we had a client [06:21] echosystm: he used laptops for all his servers, "because they have inbuilt UPS" [06:22] Lorentz: Now that's silly. [06:22] bingomanatee_: See that proves that there is a big difference between a thought and an idea [06:24] bingomanatee_: Thats a "thought" by the way. [06:24] pyrotechnick: lol [06:25] pyrotechnick: that's clever [06:25] pyrotechnick: but stupid [06:25] pyrotechnick: if you know what i mean [06:25] skm has joined the channel [06:25] dbathurst: okay thank you jdub [06:26] B2oba: anyone has experience launching a social service? I'm having this problem -- I created a product, but have no idea how to reach users :( And the success of the app is directly correlated with the numebr of users [06:27] Aria: Heh. That's kinda how most things go. [06:27] Aria: But ... give a hook. Some reason for people to spread it, even if it's just a LOL, and then encourage them to do so. [06:27] Aria: And reward the people who spread it. [06:27] B2oba: I see, i'm missing that aspect [06:28] bingomanatee_: Facebook? [06:28] B2oba: yes, facebook app [06:29] B2oba: you can actually see it and give feedback if you want [06:29] bingomanatee_: What is the product? [06:29] B2oba: It's www.letschattr.com, using node.js for backend [06:30] bingomanatee_: so chatroom meets facebook?: [06:30] B2oba: sort of, but randomly [06:30] B2oba: :P [06:30] bingomanatee_: Well at the risk of sounding self serving, decided risk, I'd say it wouldn't hurt to prsent it to technical groups like the one I'm kicking off. [06:31] bingomanatee_: But the thing is you need to hook it into a real event such as a party, a concert, or some other event to reach large numbrs of people. [06:31] bingomanatee_: A movie release would be a great example. [06:31] bingomanatee_: Or a show like the Daily Show. Or OWN. [06:31] Ond has joined the channel [06:31] B2oba: what technical group are you kicking off? I'd be interested :P [06:32] bingomanatee_: Also keep in mind you are treading on gound broken and soiled by Yahoo. So you will face the same problems they did. [06:32] bingomanatee_: I am working with the owner of another node meetup but right now I'm working on http://www.meetup.com/Node-js-sfbay/ [06:33] bingomanatee_: Also we are presenting - or at least, Joyent is presenting - at the PHP meetup at an undetermined date [06:33] bingomanatee_: so talk with Ryan and see if he'll feature your tool as a use case. [06:33] _derferman has joined the channel [06:34] bingomanatee_: http://www.meetup.com/Node-js-Serverside-Javascripters-Club-SF/ is the other local group - are you SF local? [06:34] Aria: B2oba: Your hook could be the facebook standard "let me post to your wall", and do it by default and let people bypass it with a checkbox. [06:34] pkrumins: bingomanatee_: how was the meetup? [06:34] pkrumins: bingomanatee_: we were not sure it was today [06:35] Aria: B2oba: So when someone logs in, it posts a message to their wall, saying "I started using letschattr", unless the user chooses not to. [06:35] pkrumins: bingomanatee_: we were 2 blocks away [06:35] bingomanatee_: Yesh I kind of screwed things. [06:35] bingomanatee_: Its Feb 3 - I announced it for today but I posted for Feb 3 so I kind of mixed things up and realised it at the last minute. [06:35] B2oba: right, I must add that, and when they "meet someone", make a post too [06:36] MrTopf has joined the channel [06:36] bingomanatee_: Which is kind of fine gives me more time to recruit and set up the program [06:36] pkrumins: bingomanatee_: ok so there is no meetup on Feb 3? [06:36] bingomanatee_: No - that is a go. [06:36] balaa has joined the channel [06:36] bingomanatee_: Tonights was a wash. [06:36] bingomanatee_: What is on the website is canonical. [06:36] mikedeboer has joined the channel [06:36] bingomanatee_: What comes out of my mouth is not apparently :D [06:37] B2oba: bingomanatee_: I need to be in the bay area to join the meetup right, there is no "remoting"? [06:37] bingomanatee_: By the way if anyone has something to present or a proposal bring it - the Feb 3 meeting will be largely a chance to meet people in real life and kick things off. [06:38] bingomanatee_: at this point I don't have remoting though I could skype something up. Let me work on that aspect. [06:39] bingomanatee_: That is a good pooint though. I'm going to work at seeing if I can open this up to a streaming audience, maybe webex or something. [06:39] bingomanatee_: Drop a note on the meetup site if you have any suggestions on how best to remote the meetup [06:39] bingomanatee_: I've attended a lot of meetups but this is the first one that I've ran [06:39] bingomanatee_: Actually the second if you include my Lightsaber Fight Club. [06:40] meatmanek has joined the channel [06:40] B2oba: lol [06:41] peol has joined the channel [06:45] bingomanatee_: B2oba where you at? [06:45] B2oba: Seattle [06:45] pkrumins: sf is the place to be for node.js [06:45] bingomanatee_: Sweet - I grew up in Portland - spent a lot of time up in Seattle [06:46] bingomanatee_: It doesn't hurt. [06:46] pkrumins: met guillermo today [06:46] B2oba: oh Portland is nice, very pretty :) [06:47] bingomanatee_: Yeah - there is more "there" there in Seattle, but the weather is worse and your strets are impossibly fucked up [06:47] bingomanatee_: I swear to god whoever laid out Seattle did so to express his hatred of humanity. [06:47] bingomanatee_: And nailed it [06:48] shaver: the Boston school of transit design? [06:48] B2oba: ahah for sure, and driving manual in Seattle is hell [06:48] bingomanatee_: Its like, first street NE is not NE 1st st [06:49] bingomanatee_: The hills are insane, its just a bunch of really bad street naming conventions and winding roads mashed together. [06:49] bingomanatee_: The University district and downtown is not so bad but the rest of it is just badness. [06:50] Aria: Yes, yes it is. [06:50] bingomanatee_: Its enough to make you wear plad shirts and blow your head off with a shotgun [06:50] Aria: Also one ways that go the same direction twice in a row, and dead-ends into I-5. [06:50] bingomanatee_: sorry, too soon? [06:50] pkrumins: bingomanatee_: what's with Seattle streets? [06:50] pkrumins: oh [06:51] pkrumins: never been in seattle. [06:51] B2oba: Arial: Are you from Seattle too? [06:51] Aria: No, but I've been there a fair bit. [06:52] bingomanatee_: I mean northeast 40th street intersects with 40th street NE [06:52] bingomanatee_: fer F's sake who in their right mind has number streets intersecting each other? [06:52] Aria: The town next to me, too. [06:53] boogyman has joined the channel [06:53] Aria: Always amusing to say 'meet me at 4th and 5th' and have them miss you because they're at 5th and 4th. [06:54] bingomanatee_: yeah that is just wrong. [06:54] bingomanatee_: I think you really can't get how bad things are til you are there. [06:55] bingomanatee_: Keep in mind - Portland where I am from is supposed to be an award-winning town with superb urban planning. [06:55] boogyman: sorry to jump into the middle of the conversation, but wouldn't the inclusion of more context prevent that sort of issue. Ie, 4th ave and 5th st or visa versa [06:55] void_ has joined the channel [06:55] bingomanatee_: I kind of think the "Planning" part of that equation is way overstated - I think Portland just got lucky becuase the people who live there are a bit retarded from lack of sun and general life challenge [06:56] bingomanatee_: but the fact is its laid out pretty well and easy to get around in [06:56] Aria: Hah. [06:56] Aria: Yes. Also, planning in the US is hard, because big businesses like to have things their way. [06:56] bingomanatee_: and the number streets cross streets with NAMES and they are often alphabetized. [06:56] B2oba: lol [06:56] bingomanatee_: I blame the Irish. [06:57] B2oba: Some businesses are big enough to forge urban planning their way [06:57] bingomanatee_: Cisco systems has its own train. [06:57] bingomanatee_: You know you've arrived when your business is big enough to need and acquire its own mass transit system. [06:58] bingomanatee_: Its kind of their own fault - they intentionally didn't build enough parking because they thought it would "encourage carpooling" [06:58] bingomanatee_: So when that failed they designed a trolley to ferry people to their cars. [07:00] Aria: Oy. Oops. [07:00] bingomanatee_: Yeah - [07:01] booo has joined the channel [07:01] bingomanatee_: That's kind of how Cisco rolls. Even when they fuck up they do it large scale. [07:01] x_or has joined the channel [07:01] muhqu has joined the channel [07:02] bingomanatee_: They were notorious for paying all their contractors in net ten. [07:02] bingomanatee_: Months. [07:02] Aria: ... [07:02] bingomanatee_: Or worse. [07:02] Aria: Ewww. [07:02] Aria: Almost Barnes and Noble fail there. [07:02] bingomanatee_: Yeah stay the F**k away from them unless they give you employee status. [07:02] clarkfischer has joined the channel [07:03] deepthawtz has joined the channel [07:03] bingomanatee_: They may have gotten better - this was 96 or so when I last was operating near them - but Cisco is in many ways far worse than Microsft depending on what end of the stick you are at with them. [07:04] BrianTheCoder has joined the channel [07:04] Aria: Oh yes. [07:05] luke` has joined the channel [07:05] bingomanatee_: I was working with one of their subcontractors putting video/web transcripts of training sessions on their network for a group called Worldwide Training (WWT) [07:05] bingomanatee_: and get this - I had to sneaker in the files to their headquarters [07:05] bingomanatee_: because they couldn't figure out how to make a secure channel for remotely uploding these files to their FTP sites. [07:07] bingomanatee_: Which I am fairly certain meets the textbook definition of irony. [07:07] Aria: Yes, I think so! [07:08] bingomanatee_: By the way - I do love Seattle - it is a great town to party in and their mushrooms are phenomenal. [07:09] bingomanatee_: In fact its one of the great places for an accessible wilderness adventure - the Olympic Peninsula is an amazing set of road-accessible islands - you can literally drive from island to island and eventually find one you can claim for yourself for an entire weekend. [07:10] Aria: Indeed. [07:10] micheil: hmm, no indexzero or jimbastard? [07:10] Aria: That's the part I know much better, having bicycled much of it. [07:10] B2oba: yes during the summer in particular Seattle is amazing [07:10] bingomanatee_: Anyway - I've polluted the channel enough for one night. [07:10] bingomanatee_: I'll let you guys know when I get the remoting up and running. [07:11] bingomanatee_: I'm working with David J. Kordsmeier who runs a Typo3 house in SF and the other Node.js meetup - he is quite set up so I am sure we can get something together. [07:11] sudoer has joined the channel [07:12] snapple has joined the channel [07:13] mr_daniel has joined the channel [07:13] prettyrobots has joined the channel [07:15] drudge has joined the channel [07:15] Aria: Night! [07:16] bingomanatee_: BTW: check out http://ngrsf.eventbrite.com/ - they have chapters everywhere. [07:16] bingomanatee_: Night Aria. [07:16] figaroo has joined the channel [07:16] josephhitchens has joined the channel [07:16] EyePulp has joined the channel [07:17] jdalton has joined the channel [07:18] jdalton has left the channel [07:19] ezmobius has joined the channel [07:20] briznad has joined the channel [07:23] HerrTopf has joined the channel [07:24] keyvan has joined the channel [07:31] blueadept has joined the channel [07:31] Utkarsh_ has joined the channel [07:32] vineyard has joined the channel [07:32] matyr_ has joined the channel [07:36] masahiroh has joined the channel [07:37] kiranr has joined the channel [07:40] simoncpu has joined the channel [07:40] simoncpu: i can has javascript! [07:40] ph^ has joined the channel [07:44] kiranr: I followed the chat tutorial from node-camp that uses socket.io. Safari (websocket) is able to submit without refreshing the connection. However, Firefox(flashsocket) is unable to do so. Any ideas?http://173.230.140.232:8080/ [07:44] kiranr: *refreshing browser [07:45] x0xMaximus has joined the channel [07:50] daveyjoe has joined the channel [07:52] eirikb: Hey. I asked this yesterday but I will repost as I didn't see any answers. Would you prefer to see a git pull for modules in my Makefile, or npm commands? [07:52] kiranr: ahah, it was just a console.log i left. figured it out [07:54] polotek has joined the channel [07:55] evl has joined the channel [07:56] muhqu has joined the channel [07:56] evl: Is there any dot-all matching option for node.js's regexp implementation? [07:57] nejucomo has joined the channel [07:57] common has joined the channel [08:00] b_erb has joined the channel [08:01] dgathright has joined the channel [08:03] tanepiper: oh, new http module is quite high-level [08:03] b_erb: yeah, and really a breaking change [08:04] Evet_ has joined the channel [08:05] tanepiper: yea, definetly going to have to freeze on 0.3.5 until things catch up [08:05] mscdex: evl: i don't believe so [08:07] b_erb: is there now one single HTTP agent? [08:07] lumino has joined the channel [08:08] ryah_: the old api is still supported [08:08] b_erb: ryah_: good to know! will the old API eventually be removed? [08:09] mikeal has joined the channel [08:09] nu- has joined the channel [08:09] ryah_: yes - but not for a while [08:10] lightharut has joined the channel [08:10] sriley has joined the channel [08:10] ryah_: a lot of code was written with the old api - so it will need to be supported [08:11] mAritz has joined the channel [08:13] djacobs7 has joined the channel [08:13] fangel has joined the channel [08:13] SamuraiJack has joined the channel [08:13] micheil: ryah_: hmm, does it know pool connections and implement similar to mikeal's request? [08:13] micheil: http.Client, that is. [08:14] mikeal: i have comments about that [08:14] mikeal: i just haven't had time [08:14] skm has joined the channel [08:15] mikeal: ryah_: is there a way to opt out of the pooling? [08:15] b_erb: after a short look on the new api: can i create separate pools with new http agent? i.e. two pools with different number of clients? [08:15] ryah_: mikeal: yes [08:15] ryah_: er [08:15] mikeal: ok [08:15] ryah_: micheil: yes [08:15] mikeal: i was reading the diff [08:15] ryah_: mikeal: no [08:15] ryah_: :) [08:15] lightharut: I have the following question: I have 2 node servers which are located on a different computers. I need to share the same array between them. Do you know any node.js solution for it? [08:15] mikeal: dude [08:15] mikeal: that's not cool :) [08:16] ryah_: mikeal: you can set maSockets = 1 [08:16] ryah_: maxSockets [08:16] mikeal: but that's not what i wnt [08:16] mikeal: i want to force parallel [08:16] micheil: lightharut: one simple way is to back that array with something like netstrings+json+network socket [08:16] mikeal: i don't want to lock up a single socket, i want to insure that these two requests run in parallel [08:17] mikeal: backing up tho, i like the fact that this is in [08:17] mikeal: nobody, in any platform, has a solid pooling system [08:17] mikeal: just out the box and ready to go [08:17] mikeal: but there are cases where you just don't want to use it [08:18] lightharut: micheil: it is a chat and we will have a million of users. We have to share load between computers. [08:18] mikeal: the other question i had [08:18] mikeal: just reading the diff [08:18] mikeal: is that I didn't see an obvious way to do streaming [08:18] b_erb: lightharut: intermediate key value store? [08:18] mikeal: now that request takes a callback [08:19] micheil: lightharut: hmm, okay; I have ideas about sort of similar, although, you don't share data structures; you share events. [08:19] virtuo has joined the channel [08:19] micheil: for example, "message", "join", "part", etc [08:19] b_erb: lightharut: maybe redis [08:20] micheil: so, you change something in say the EventEmitter style pattern, and make it emit to something different, other then the current scope [08:20] micheil: mikeal: would that be an interesting talk for nodeconf? [08:20] ryah_: mikeal: yeah, it probably needs some work still [08:20] mikeal: micheil: maybe, i'm a little unclear on the full topic [08:21] mikeal: overall i like it [08:21] mikeal: but there are some points i find confusing [08:21] mikeal: for instance, using host and an options keyword [08:21] mikeal: does that also set the host header? [08:21] mikeal: the remote host and the host header often differ [08:22] mikeal: whenever the port is non-standard [08:23] b_erb: mikeal: for me this looks more low-level HTTP-ish [08:23] micheil: ryah_: are you busy atm? [08:23] lightharut: micheil:thanks, but I really didn't understand EventEmitter style pattern what is it and how to use it here? [08:23] mikeal: b_erb: it's higher level than the old API for sure [08:24] micheil: umm, okay, so, with an eventemitter, it's two things: a) a core component of node, b) a pattern to code with [08:24] admc has joined the channel [08:24] b_erb: mikeal: i meant the host value in the options [08:25] mikeal: b_erb: no, i know what it actually defines, i'm just saying that the naming is a little confusing [08:26] lightharut: micheil: will it work if two servers are located on a separate computers? [08:26] admc: mikeal: your name is spelled kinda weird man [08:26] micheil: lightharut: well, eventEmitters are only located within one process as they stand in the core of node at the moment [08:26] admc: it makes it hard to understand your technical advice [08:26] mikeal: hahaha [08:26] lightharut: micheil: so it will not work. [08:26] mikeal: fuq you buddy! [08:27] admc: hahaha [08:27] admc: super 0day eventEmitters are where its @ [08:27] mikeal: admc: IM me, i need to tell you about this dude today [08:27] micheil: lightharut: I wouldn't write it off so quickly, like I said, an EventEmitter is a pattern; you can take the same API and do some fairly powerful stuff with them [08:28] micheil: admc: you know what's more confusing? myself and mikeal hosting a podcast together. (I still need to mix down the node-camp audio) [08:28] lightharut: micheil: is there any other solution to share sesssions between node servers? [08:29] micheil: well, you mention that you're working on a chat service; typically I'd say a chat service would be highly event driven; "on message from one user, send that message to every other user" etc [08:30] lightharut: micheil:Right so we need some place that it will be accesiable from all users of chat. [08:30] Kingdutch has joined the channel [08:30] lightharut: micheil: we will have many different "chat rooms" and every room will be a one array. [08:31] pyrotechnick has joined the channel [08:31] micheil: right, but it's these "on" pieces that are more easy to communicate, rather then specific data structures [08:31] lightharut: But the problem is the load balancer that we will have can send user to any node server. [08:31] micheil: for example, if you're using socket.io or node-websocket-server, the connections are already event emitters in those cases [08:32] micheil: as for scaling the network side of it, there's already a few solutions for it; it's when you need to share data that it gets sticky [08:32] DracoBlue has joined the channel [08:33] micheil: there's an article by pgriess on YDN about scaling / load balancing http requests, and there's also work by creationix / sencha on that edge [08:33] lightharut: micheil: I saw the possible solution to share message based on file system storage. [08:33] lightharut: So every room will be located in a separate file. [08:34] jankoprowski has joined the channel [08:34] dgathright has joined the channel [08:34] micheil: lightharut: so, rather then doing that, think of it just that you know you've received a message from a user; for example {user: UID, message: "hello chat_1", room: "chat_1"} [08:35] micheil: the whole scaling of it happens below your application logic in a way. It's a bit hard to explain it right now though. [08:35] clarkfischer: What is process.binding? I see it around, but it's undocumented... [08:36] micheil: lightharut: for scaling http, see: http://developer.yahoo.com/blogs/ydn/posts/2010/07/multicore_http_server_with_nodejs/ and https://github.com/senchalabs/spark [08:37] micheil: clarkfischer: it's an internal API [08:37] micheil: clarkfischer: it loads up a C module into the javascript scope; from what I understand [08:37] clarkfischer: Ah.... [08:37] micheil: (that is, a C module in the /src/ directory of the code base) [08:37] clarkfischer: That makes some sense. [08:38] Kingdutch: It loads up raw C? O.o [08:38] micheil: not quite. [08:38] Kingdutch: oh ok [08:39] micheil: it's the way node's javascript vm can interface with other C code, it has to do with the exposing of C functions through the v8 api, there are others that know more about the specific then myself though, I only know the rough idea of it) [08:39] lightharut: micheil:thank you. I will check. [08:40] [AD]Turbo has joined the channel [08:40] clarkfischer: Is there a good way to 'mix-in' the Events module into an object? Like make myObj.on('xxx') accessable? [08:40] micheil: lightharut: for example, currently in say, node-websocket-server, you get an event on a Connection each time it receives a message, a "message" event, nothing stops you from re-emitting that event, but publishing it via say redis pub/sub [08:40] [AD]Turbo: yo all [08:40] micheil: sys.inherits/util.inherits is one way [08:40] CrazyGoogle has joined the channel [08:41] micheil: and myObj.__proto__ is another [08:41] micheil: different people like different methods, personally I prefer the util.inherits method [08:41] Kingdutch: Events are pretty damn cool [08:42] Kingdutch: Means you can put a lot of code for say a button press, in the button event, and not check each render to see if it has been pressed :D [08:42] CrazyGoogle: util.inherits is cool, i use small cut from yui3 [08:42] teemow has joined the channel [08:42] clarkfischer: Excellent [08:42] micheil: the one thing to understand with node's Events.EventEmitter is that emit() blocks [08:42] clarkfischer: 8) [08:43] kubrow has joined the channel [08:43] adambeynon has joined the channel [08:43] clarkfischer: emit() blocks, meaning that upon an emit() call, all on() callbacks are triggered? [08:44] micheil: clarkfischer: yes, all on() callbacks that are bound to that event [08:44] TvShowFan has joined the channel [08:44] clarkfischer: Yeah, good [08:45] clarkfischer: nextTicking the callbacks wouldn't make sense particularly... [08:45] micheil: all the listeners happen in sequence; so if your first listener does something like fs.statSync, then your subsequent listeners won't be called until that fs.statSync has returned [08:45] NetRoY has joined the channel [08:46] micheil: clarkfischer: purely because of the out-of-order data issue. [08:46] clarkfischer: Ah [08:46] clarkfischer: That makes sense [08:46] micheil: so, process.nextTick is sort of like setTimeout(fn, 0); (but not quite); [08:47] micheil: if you have setTimeout(fn, 2000); setTimeout(fn2, 2000); which triggers first? [08:47] gadelat has joined the channel [08:47] clarkfischer: presumably fn? [08:48] sudoer has joined the channel [08:49] micheil: there is a chance that you could have the events get out of order [08:49] micheil: bbiam [08:50] Druid_ has joined the channel [08:53] masahiroh has joined the channel [08:54] ajpiano has joined the channel [08:54] micheil: back. [08:57] torgeir has joined the channel [08:58] mikedeboer has joined the channel [08:58] ROBOd has joined the channel [09:00] romeo_ordos has joined the channel [09:00] aklt has joined the channel [09:00] romeo_ordos has left the channel [09:00] fly-away has joined the channel [09:02] pdelgallego has joined the channel [09:03] lightharut has joined the channel [09:03] gnab has joined the channel [09:03] q_no has joined the channel [09:04] ziro` has joined the channel [09:04] mraleph1: ryah_: ouch. will take a look. [09:05] DracoBlue has left the channel [09:06] dguttman has joined the channel [09:07] eikke has joined the channel [09:07] chrisfrog has joined the channel [09:08] Figaroo has joined the channel [09:09] Figaroo: Hi, so what's a good template module that closely relates to PHP? [09:10] romeo_ordos has joined the channel [09:10] romeo_ordos has left the channel [09:10] tlrobinson has joined the channel [09:10] pgte has joined the channel [09:10] Figaroo: Yo, a cappuccino developer is in the house. :P [09:11] christophsturm has joined the channel [09:12] tlrobinson1 has joined the channel [09:15] mraleph1: ryah_: what revision was that and what did you run? [09:15] tanepiper: ahhh... nodefu has been renamed nodester - I thought *another* hosting platform had popped up [09:15] rot13 has joined the channel [09:16] jetienne has joined the channel [09:17] skm has joined the channel [09:18] torgeir: Figaroo: jspp.io seems promising.. [09:18] Figaroo: torgeir, link? [09:20] Figaroo: haha, jspp.io is the link. :P [09:20] mikeal has joined the channel [09:21] admc has joined the channel [09:21] chapel: heh tanepiper [09:21] chapel: wonder if the parent company decided it was better to change the name than have ill will in the node community [09:21] tanepiper: chapel: seemed to me like hosting platforms were the new "Hello World" [09:21] rot13 has joined the channel [09:21] tanepiper: chapel: probably [09:22] chapel: yeah [09:22] chapel: does seem like that [09:25] razvandimescu has joined the channel [09:27] clarkfischer: What should I ask for my hourly rate as a low-level web developer? [09:27] clarkfischer: I'm thinking somewhere in the $15-20/hr range, but I may be grossly over/underestimating. [09:27] chapel: more than you probably think you should [09:27] chapel: if you are confident in what you are doing, ask for more [09:27] rot13 has joined the channel [09:28] chapel: make your potential clients bargain down [09:28] clarkfischer: I'm confident in my abilities, but I have no professional references/'industry experience'. [09:28] chapel: well its easy to get references and experience [09:28] chapel: do some pro bono work [09:28] chapel: open source work [09:29] chapel: shows your skill, shows you know what you are doing [09:29] chapel: then you can leverage that as your portfolio [09:29] clarkfischer: Heh, that's what I'm trying to do.... [09:30] chapel: if you go too cheap, you could end up with clients that expect more for their money, and those clients aren't fun to have [09:30] clarkfischer: Yeah... [09:30] chapel: you want clients to respect your ability and that you are the professional [09:31] clarkfischer: That is, if you are respectable [09:31] chapel: sure [09:31] chapel: but don't you want to be respectable? [09:32] ivanfi has joined the channel [09:32] clarkfischer: I do want to be respectable, but I don't know if I am currently. [09:32] clarkfischer: Basically the only thing I can put on my resume at this point is Starbucks. [09:32] torgeir has joined the channel [09:32] clarkfischer: And that's not impressive to web-moguls. [09:33] Figaroo: which is better nodemon or node-dev? [09:33] chapel: for what Figaroo ? [09:33] chapel: and clarkfischer I am in a similar boat as you [09:34] chapel: you have to start somewhere [09:34] ewdafa has joined the channel [09:34] chapel: confidence matters more than some lines on a cv [09:34] Figaroo: chapel, well I'm using node-dev to be able to automatically detect changes within my running instance and restart the process upon those changes. [09:34] Figaroo: node-dev server.js instead of node server.js, for example. [09:35] zentoooo has joined the channel [09:35] saschagehlich has joined the channel [09:35] pgte: Figaroo: I have good experience with nodemon, don't know node-dev [09:35] Figaroo: they're practically the same huh? [09:37] chapel: it might not be easy to get your first client or two, but having something to show them will help [09:37] tisba has joined the channel [09:38] chapel: I use node-dev [09:38] chapel: I like it [09:38] clarkfischer: chapel: http://github.com/clarkf - not too impressive. [09:39] MikhX has joined the channel [09:39] chapel: you have to start somewhere [09:39] chapel: mine is even less impressive [09:40] sveisvei has joined the channel [09:40] clarkfischer: chapel: check http://clarkf.github.com/jWindows95/demo/ [09:40] clarkfischer: that's my most impressive online thing [09:40] clarkfischer: oh, and it's not even at the latest version.....ugh [09:41] mytrile has joined the channel [09:44] Figaroo: With ejs, how can you "echo" out content? [09:45] mnbvasd: clarkfischer: that doesn't work for me in either opera or firefail. [09:46] matjas has joined the channel [09:46] clarkfischer: yeah, mnbvasd, that was before i did a bunch of bugfixes that made it more cross-browser. [09:46] clarkfischer: chrome it should work on though [09:46] clarkfischer: I'm updating it now [09:46] clarkfischer: (I hope) [09:48] Figaroo: while we're bragging https://github.com/samholmes/Animation.js [09:48] mnbvasd: clarkfischer: oh, it feels just like it... I remember trying a version of windows once, it was almost as functional. [09:49] mnbvasd: Figaroo: demo? [09:49] Figaroo: mnbvasd, try the playback example [09:50] rjrodger has joined the channel [09:50] mnbvasd: urly? [09:51] xla has joined the channel [09:51] TomY has joined the channel [09:51] tc77 has joined the channel [09:53] Figaroo: mnbvasd, I never got around to getting that set up. [09:54] Figaroo: I just need to create a repo called myusername.github.com and push that up to github? [09:54] mnbvasd: ACTION shrugs [09:55] chapel: goto repo admin Figaroo [09:55] chapel: shows how to use the html stuff [09:55] gadelat: which commandline parameters is available in nodejs? [09:55] Figaroo: chapel, goto is a command? [09:56] pgte: gedelat: node --help [09:56] pgte: gadelat: node --help [09:56] Figaroo: I don't have the goto command. [09:56] shiawuen has joined the channel [09:56] gadelat: right, i tryed -help, thanks [09:56] chapel: so I have a question not exactly related to node.js, I have a repo I forked, I did a pull request, and it was accepted, but now it is showing my branch being different than the master branch I forked and wants me to redo the commit I made for the pull request, how can I get it to match master? [09:57] chapel: Figaroo: no, goto your repo admin page [09:57] glenngillen has joined the channel [09:57] glenngillen has left the channel [09:57] chapel: https://github.com/samholmes/Animation.js/admin [09:57] Figaroo: ah ok [10:00] bzinger has joined the channel [10:02] Figaroo: meh, I don't wanna do it right now. You'll just need to clone the project to take Animation.js for a test drive :P [10:03] mike5w3c has joined the channel [10:06] Figaroo: g2b [10:06] Figaroo: bye [10:08] garrensmith has joined the channel [10:08] clarkfischer: chapel: Upstream merging? I think you can just do a pull and it'll fetch the intermediary commits, try to merge them, and yell at you if there are any big problems [10:08] ezmobius has joined the channel [10:09] kubrow has joined the channel [10:09] chapel: well it is trying to get me to merge my commit [10:09] clarkfischer: Oh [10:09] clarkfischer: Look for >>> markers in the files you monkied with [10:10] chapel: its a super small change [10:10] chapel: Im considering just deleting the fork [10:10] chapel: and reforking [10:10] chapel: just wondered if there was some better way [10:10] niklasfi has joined the channel [10:10] chapel: I only changed one character in one file [10:10] niklasfi has left the channel [10:10] b_erb has left the channel [10:10] clarkfischer: it should say something like "<<<<<< HEAD\n{section in HEAD}\n==========\n{section from merge}\n>>>>>>> master" [10:11] chapel: nope [10:19] clarkfischer: what does `git status` report? [10:22] chapel: Im doing this all through the website [10:22] chapel: I just deleted it and re forked [10:22] chapel: easier than worrying about it [10:24] clarkfischer: Heh, probably. [10:24] masahiroh has joined the channel [10:25] mscdex: chapel: when that happens, i sometimes reset the branch if the latest commit is the one that got merged or i will revert the commit [10:25] chapel: hmm [10:25] chapel: I dont know how to do any of that :P [10:26] mscdex: heh [10:27] mscdex: chapel: fwiw: http://www.kernel.org/pub/software/scm/git/docs/git-reset.html [10:27] mscdex: otherwise there's always gui tools :) [10:28] mscdex: i use 'git extensions' when i'm on windows [10:29] jetienne: (as a side note, #git is full of very helpfull people) [10:29] echosystm has joined the channel [10:31] herbySk has joined the channel [10:32] ttpva has joined the channel [10:45] lightharut has joined the channel [10:45] sriley has joined the channel [10:45] rjrodger has joined the channel [10:47] x_or has joined the channel [10:49] altamic has joined the channel [10:49] ukev has joined the channel [10:52] common has joined the channel [10:52] nu- has joined the channel [10:52] d0k has joined the channel [10:56] stagas: mscdex: nice one [10:57] daveyjoe has joined the channel [10:59] stephank has joined the channel [11:09] mape: terminate called after throwing an instance of 'std::bad_alloc' [11:09] mape: Common? [11:09] clarkfischer has joined the channel [11:13] mnbvasd: 4 [11:16] Utkarsh has joined the channel [11:17] keyvan has joined the channel [11:18] Fullmoon has joined the channel [11:22] invizko has joined the channel [11:23] invizko: hi guys. Is anyone interested in extandable and fast CSSOM parser? because I made one [11:24] invizko: https://gist.github.com/787788 here are some spec examples to show what i mean [11:26] jetienne: invizko: what is CSSOM ? [11:26] invizko: CSS object model [11:26] invizko: when you parse CSS into objects [11:26] invizko: change it, and save back to string [11:26] jetienne: ah ok [11:26] invizko: also useful to support your own properties in css [11:26] invizko: and even your own css supersets [11:26] invizko: http://github.com/Inviz/Sheet.js/tree/properties [11:26] invizko: anyways the thing is there [11:32] zorzar_ has joined the channel [11:33] jetienne: v8bot: var a = "salut"; var b = "salut"; a === b [11:33] v8bot: jetienne: Use v8: to evaluate code or "`v commands" for a list of v8bot commands. [11:34] jetienne: the bot dislikes my code... anybody knows why [11:36] pgte has left the channel [11:36] pgte has joined the channel [11:37] mraleph: jetienne: because you need to use v8 instead of v8bot [11:37] mraleph: v8: var a = "salut"; var b = "salut"; a === b [11:37] v8bot: mraleph: true [11:38] mraleph: ryah_: I fixed something (http://code.google.com/p/v8/source/detail?r=6427) but I don't know whether this something is something that was crashing for you. I need a reproduction. [11:38] devinus has joined the channel [11:43] jetienne: mraleph: thx. a picky bot :) [11:46] markwubben has joined the channel [11:48] devinus has joined the channel [11:52] fermion has joined the channel [11:54] dsirijus has joined the channel [12:02] eee_c1 has joined the channel [12:08] skm has joined the channel [12:09] jashkenas has joined the channel [12:14] masahiroh has joined the channel [12:19] muhqu_ has joined the channel [12:21] shiawuen has joined the channel [12:24] bartmax has joined the channel [12:26] tisba has joined the channel [12:26] tanepiper: i really thought "The thread that must not be named" had died [12:26] tanepiper: but it';s still going [12:27] mraleph: people like talking, but talking alone does not get things done [12:27] mraleph: unfortunately [12:28] tanepiper: indeed, my bets are these people have complained and complained, but won't actually do anything about it and go back to the language they are familiar with, which in itself is fine [12:29] tanepiper: nodejs might not be for everyone [12:29] mraleph: ya dawg we heard you don't like callbacks so we put coroutines in your continuation so you can go nuts while you try to understand wtf is going on. [12:29] Ezku\: mraleph: _b [12:29] jashkenas: tanepiper: I'd join you on that bet. [12:30] Ezku\: hmm, which thread are we talking about again? [12:30] Ezku\: sorry, i haven't been following lately :< [12:30] tanepiper: Ezku\: The thread that must not be named [12:30] tanepiper: if it is, it will summon Cthulhu from his slep [12:30] bartmax has joined the channel [12:32] RichardJ: haven't you just named it? [12:36] tanepiper: so need to take this: http://www.ambiera.at/copperlicht/demos/demo_quakelevel_external.html and build a Dnode-based server for it [12:36] tanepiper: WebGL + DNode (socket.io) + NodeJS would be full of win [12:39] Throlkim has joined the channel [12:39] tanepiper: and this gives me ideas about canvas + Dnode + nodejs to do colaborative music over the web :D http://perso.numericable.fr/pzinn/plasma/ [12:39] fairwinds has joined the channel [12:39] stepheneb has joined the channel [12:40] jacobolus has joined the channel [12:44] meso_ has joined the channel [12:44] Ezku\: tanepiper: right, be obscure if you will :( [12:46] tanepiper: Ezku\: https://groups.google.com/forum/#!topic/nodejs/wzSUdkPICWg [12:46] tanepiper: but it's also exploded out into other threads and leaked onto the nodejs-dev list too :( [12:48] Ezku\: the objections based on extra verbosity, i think, are promptly solved by something like handle = (f) -> (err, result) -> throw err if err; f(result) [12:48] Ezku\: and you're not going to nest everything like that anyway in most cases [12:51] booo has joined the channel [12:52] tanepiper: the problem is that people are complaining about things that aren't really nodejs's problems to solve. nodejs is first and foremost a library of tools for writing fast network and fileio code, and the issues lie with the language, not the tool [12:57] nsswb has joined the channel [12:58] nsswb has left the channel [12:59] pgte: I learned that if you structure your app right, it becomes really controllable, but that it will always be more difficult to debug [13:00] pgte: more difficult than correspondant sync code, that is [13:03] tanepiper: pgte: yea, between flow control libs, and moving large chunks of code into their own modules with a callback at the end, it's really not that hard [13:03] tanepiper: pgte: that'll change soon with EventSource [13:05] void_ has joined the channel [13:05] pgte: tanepiper: true [13:07] unomi has joined the channel [13:10] pagameba has joined the channel [13:10] Sami_ZzZ has joined the channel [13:12] chapel: event source? [13:14] Kingdutch has joined the channel [13:17] tanepiper: chapel: debugging tool, will trace code through execution so you get better stack traces of exactly where an error occured [13:18] Kingdutch has joined the channel [13:20] pyrotechnick: git gui for linux [13:20] pyrotechnick: anyone use a good one? [13:20] aklt: pyrotechnick: tig (cionsole gui :-P) [13:20] pyrotechnick: it's for my comrade, he's using git gui atm but it's not great [13:20] pyrotechnick: tig [13:21] pyrotechnick: will check it out, thanks [13:21] pyrotechnick: had a pretty good idea today, make a github clone that can access local files [13:21] pyrotechnick: so it's both github and your git gui [13:21] pdelgallego has joined the channel [13:22] aklt: pyrotechnick: Well, I do not think it is good as a gui for doing git work, but it is nice when browsing through repositories. [13:22] pyrotechnick: ok [13:22] aklt: pyrotechnick: tig, that is [13:22] pyrotechnick: will check it out thanks [13:22] aklt: np [13:22] ChrisPartridge: git intergration in cloud9 would be cool [13:22] tanepiper: ChrisPartridge: it is, on the hosted version [13:22] ChrisPartridge: Ah [13:23] ChrisPartridge: I didn't think it was any different [13:23] aklt: Does anyone know if there are plans for node_crypto.cc? Some of the code seems broken. [13:24] ChrisPartridge: tanepiper: is it done via the cli at the bottom? [13:24] pdelgallego has joined the channel [13:25] tanepiper: i think so, i haven't really done anything with it yet, but when you create a project on the hosted one it has to be on git, and you provide it the git url, and it's imported [13:26] ChrisPartridge: Ah ok [13:27] MattJ has joined the channel [13:28] JimBastard has joined the channel [13:28] unomi has joined the channel [13:28] perlmonkey2 has joined the channel [13:28] unomi has joined the channel [13:28] JimBastard: is it possible to get the properties of a method set via this.* = foo, without creating a new instance of the method? [13:28] torvalamo has joined the channel [13:29] Jaye has joined the channel [13:29] JimBastard: i might have coded myself into a corner [13:29] torvalamo: code a window [13:29] squeeky: the only way you can break out is HACK HACK HACK [13:30] JimBastard: like, http://webchat.freenode.net/ [13:30] JimBastard: err [13:30] JimBastard: like, https://gist.github.com/789672 [13:30] JimBastard: ive got a very specific reason to do this, im working on a tool that takes CommonJS modules and turns them into webservices [13:30] torvalamo: foo().blah? [13:30] CrazyGoogle: foo.prototype.blah [13:31] CrazyGoogle: ah no [13:31] CrazyGoogle: sorry [13:31] JimBastard: torvalamo: that creates a new instance [13:31] CrazyGoogle: i am stupid [13:31] torvalamo: then no [13:31] JimBastard: fuck [13:31] CrazyGoogle: no, you can access instance values over static methods [13:31] torvalamo: only way would be if you assigned them outside of the constructor [13:31] CrazyGoogle: cann't [13:31] JimBastard: i can get it to work, but the side-effects of calling the method are unacceptable [13:32] CrazyGoogle: ACTION have to go home and sleep little bit mor [13:32] gadelat has joined the channel [13:35] stagas: JimBastard: foo.toString(), parse everything in { } and replace 'this' to 'something', eval? :) [13:35] JimBastard: stagas: i was going to do that, but you see why that is very fragile right? [13:35] Remoun has joined the channel [13:36] Utkarsh_ has joined the channel [13:36] JimBastard: stagas: the goal is i want to be able to do stuff like, this.verbs = ['GET', 'POST'] inside of a method [13:36] JimBastard: and then have webservice.js autogenerate docs and stuff based on that [13:36] JimBastard: but to autogenerate the docs, i gotta call the method to get those this.* props [13:36] JimBastard: which is pretty much unacceptable [13:36] JimBastard: since the sideeffects of calling a method with wrong arguments is unknown [13:37] ivanfi has joined the channel [13:37] JimBastard: i could set the properties in the exports level of the module [13:37] JimBastard: but that makes it a bit ugly [13:37] stagas: you definetely need a parser [13:38] JimBastard: id like to avoid that [13:38] JimBastard: if i was going that far, id be building a DSL [13:38] evl: Any good node tutorials out there on modules etc.? Right now my program is just one big js with everything [13:39] JimBastard: i have dreams of building a coffeescript dialect that adds a bunch of extra crap jashkenas would never package by default [13:39] booo has joined the channel [13:39] ChrisPartridge: evl: Check out howtonode.org [13:39] JimBastard: evl: i usually look at how other projects are structured [13:39] philipharrison has joined the channel [13:39] evl: I'm still trying to understand libraries and how I can override their internals [13:39] AAA_awright_ has joined the channel [13:39] JimBastard: evl: its pretty straight forward, check out some of the nodejitsu projects, they are pretty well separated [13:39] evl: Say a library is using a logger via log.js, I can't really figure out how I can adjust that level without hacking the actual lib etc. [13:39] evl: ChrisPartridge, JimBastard: thanks [13:40] stagas: screw the docs :) [13:40] JimBastard: evl: use winston [13:40] JimBastard: evl: https://github.com/indexzero/winston [13:40] Wizek has joined the channel [13:40] JimBastard: multitransport logging tool with multiple log levels and metadata [13:40] evl: I'm coding a bot atm that uses Jerk which in turn uses log.js [13:41] davidsklar has joined the channel [13:41] CrazyGoogle: JimBastard: why not use static properties for stuff you need ? [13:42] ziro` has joined the channel [13:42] JimBastard: CrazyGoogle: how do you mean? where would is set them? [13:43] JimBastard: CrazyGoogle: here is an example of the syntax i was trying to implement [13:43] JimBastard: https://github.com/Marak/webservice.js/blob/db65ce4c5be78bc3bc25c1b02373f234b46ef8a9/examples/demoModule.js [13:43] Gruni has joined the channel [13:44] aklt: ryah_: Are there any plans for node_crypto.cc? I think there are some issues with it. [13:45] CrazyGoogle: JimBastard: https://gist.github.com/789672#comments [13:45] JimBastard: aklt: its 5am in cali, im not sure he's awake [13:46] CrazyGoogle: JimBastard: its possible, but you have to refactore demoModule.js [13:46] aklt: JimBastard: Hehe, thanks for the advice,... OTOH who knows :-) [13:46] JimBastard: CrazyGoogle: i see, that might work [13:46] JimBastard: CrazyGoogle: part of the problem is also keeping demoModule.js as simple as possible [13:46] CrazyGoogle: store ['GET', 'POST'] as static property of your export stuff, and use it in the instance [13:46] JimBastard: im going to fork your gist and perhaps try that a bit later. i think its best for me to skip this problem until i fix some other api issues in the library [13:47] JimBastard: but i gotta come back to it for certain [13:47] JimBastard: thank you [13:47] JimBastard: ahh, no need to fork, its a comment [13:47] CrazyGoogle: JimBastard: you can contact me if you dont get it self [13:48] CrazyGoogle: i would create objects first, like echo, private_echo and ping, and than export it as last line of the demoModule.js code [13:48] CrazyGoogle: and than you can add static properties [13:49] arpegius has joined the channel [13:50] matjas has joined the channel [13:57] heavysixer has joined the channel [13:58] Utkarsh_ has joined the channel [13:58] eee_c has joined the channel [13:59] gf3 has joined the channel [14:00] ttpva: hi, is there a 'FakeWeb' for node.js? [14:01] davidsklar has joined the channel [14:05] colinclark has joined the channel [14:08] TomY: ttpva, not sure what you are after, but maybe http://zombie.labnotes.org/ [14:08] ttpva: TomY: I'm looking to simulate HTTP response codes in order to test a node.js HTTP Client [14:08] ttpva: so I want to simulate all the HTTP codes [14:14] trotter has joined the channel [14:15] JimBastard: ttpva: i saw someone start to make one, but i dont think it exists [14:16] ttpva: ok JimBastard, thanks [14:17] djanowski has joined the channel [14:18] backthatzachup_ has joined the channel [14:18] meso_ has joined the channel [14:20] Evet has joined the channel [14:21] sivy has joined the channel [14:21] fumanchu182 has joined the channel [14:23] proppy has joined the channel [14:23] fairwinds has joined the channel [14:24] proppy: Hi, is there a way to get an event, when a console.log was been written to stdout ? [14:24] elux has joined the channel [14:27] SamuraiJack_ has joined the channel [14:28] tanepiper: write a custom function, inherit from EventEmitter and have a method that you pass the message to, that writes to console.log and fires an event? [14:29] mraleph: JimBastard: why do you want your documentation be _inside_ the function that does actual actions? [14:29] JimBastard: mraleph: documentation is kinda an edge case in regards to what im doing [14:30] JimBastard: mraleph: the .docs property is somewhat off-topic. the important ones are things like, this.verbs and this.private [14:30] proppy: tanepiper: nop I mean when console.log has been actually flushed to the stdout stream [14:30] proppy: tanepiper: because it is async you never know [14:30] mraleph: JimBastard: documentation and specification (verbs + private) [14:30] polotek has joined the channel [14:30] proppy: tanepiper: see http://groups.google.com/group/nodejs-dev/browse_thread/thread/4e3fc73506efb59b [14:30] tanepiper: well i don't think console inheits from eventemitter [14:30] garrensmith has joined the channel [14:30] JimBastard: mraleph: ultimately, i would store docs in separate markdown file or do a docco like approach [14:30] hij1nx has joined the channel [14:30] proppy: yes, but it doesn't seems I could get a write callback either [14:30] proppy: if using process.stdout [14:31] dgathright has joined the channel [14:31] proppy: directly [14:31] JusticeFries has joined the channel [14:31] mraleph: JimBastard: exports.echo = function () {}; exports.echo.verbs = ['GET']; exports.echo.private = false; <- this looks more clear to me [14:31] proppy: I will do that while (!process.stdout.flush()) ; [14:32] proppy: thing that isaacs suggested [14:32] proppy: but it's ugly :) [14:32] eirikb has left the channel [14:32] JimBastard: mraleph: ohh heh, that will work [14:32] JimBastard: i think, i should try that out [14:32] kristsk has joined the channel [14:33] JimBastard: im updating the webservice stuff now [14:37] clarkfischer has joined the channel [14:37] hzin has joined the channel [14:38] ron_frown has joined the channel [14:39] TigerMunky has joined the channel [14:39] mraleph: JimBastard: it's a pity that JavaScript lack decorators/annotations... but at least you can set any properties you want on Function object [14:40] tapwater has joined the channel [14:41] cronopio has joined the channel [14:42] russ_nyc has joined the channel [14:43] boaz has joined the channel [14:44] sriley has joined the channel [14:44] danoyoung has joined the channel [14:44] Aikar: i wish V8 would strive more to add some of the goodies mozilla introduces :/ [14:45] Aikar: stuff like var a,b; [a, b] = (func() { return [1, 2]; })(); is useful [14:47] montylounge has joined the channel [14:48] jashkenas: mraleph: decorators/annotations are only a good idea in languages where functions aren't first-class. [14:48] jashkenas: Just pass the function. [14:49] BillyBreen has joined the channel [14:49] pyrotechnick: jashkenas: YOU [14:49] jashkenas: Aikar: coffeescript implements destructuring for objects and arrays... [14:49] pyrotechnick: you're in #node.js [14:49] pyrotechnick: first time i've ever seen it [14:49] pyrotechnick: !union [14:49] jashkenas: pyro: often am. [14:49] cronopio: Hi noders!! [14:49] JimBastard: jashkenas: you peep that node.js irc stats article i did? you made it on [14:50] JimBastard: http://blog.nodejitsu.com/most-active-nodejs-users [14:50] djanowski: jashkenas: hey there. great timing. coffee (and cake) should run smoothly on 0.3.x right? [14:50] jashkenas: JimBastard: nice. [14:50] JimBastard: jashkenas 1299 http://github.com/jashkenas Jeremy Ashkenas, JavaScript Zen Master. All lists must contain at least one instance of jashkenas. Author of CoffeeScript, Backbone, and underscore to name a few. [14:50] dnolen has joined the channel [14:50] mscdex has joined the channel [14:51] jashkenas: djanowski: We're targeting the latest stable version of Node ... but that said -- yes, it should all run fine on 0.3.x. [14:54] pengwynn has joined the channel [14:55] femtoo has joined the channel [14:56] ChrisPartridge: Is there anyway to watch a directory for changes/file additions? I see watchFile but no watchDir in the API? [14:56] djanowski: jashkenas: ok, thanks! [14:56] claudiu__ has joined the channel [14:59] void_ has joined the channel [14:59] kristsk: make changer of directory contents change one known file in that dir ? [14:59] saschagehlich: ChrisPartridge: that's right, I guess you have to look through the directories and do watchFile. I did this on hotnode: http://github.com/saschagehlich/hotnode [14:59] squeeky has left the channel [15:00] ChrisPartridge: saschagehlich: I'll take a look, thanks [15:00] djanowski: anybody actually using 0.3.x? [15:00] JimBastard: djanowski: we use 0.3.1 in production right now [15:00] matt_c has joined the channel [15:01] iszak has joined the channel [15:01] djanowski: JimBastard: awesome. do you know if vows is compatible with it? if not – are you using any other testing lib? [15:01] JimBastard: djanowski: 100% it works [15:01] JimBastard: we use vows everywhere [15:01] saschagehlich: ChrisPartridge: https://github.com/saschagehlich/hotnode/blob/master/javascript/hotloader.js#L40 right here. maybe the coffeescript code makes it clearer [15:01] kiranr has joined the channel [15:02] djanowski: JimBastard: 0.5.3? [15:03] chrischris has joined the channel [15:03] JimBastard: i think so [15:04] djanowski: JimBastard: are you getting warnings about possible memory leaks? [15:04] JimBastard: djanowski: no.. [15:05] djanowski: JimBastard: oh you're on 0.3.1. may be different on 0.3.5. i'll check. thanks! [15:05] JimBastard: djanowski: 0.3.4 and 0.3.5 we had issues with [15:05] ChrisPartridge: saschagehlich: Is this picking up new file additions? or just watching existing files? [15:06] davidwalsh has joined the channel [15:08] saschagehlich: ChrisPartridge: this is just watching existing files [15:08] saschagehlich: of course you could put that "find" command inside an inverval of 2 seconds or so [15:09] saschagehlich: but don't forget to unwatch the files [15:09] dgathright has joined the channel [15:09] ChrisPartridge: saschagehlich: Yeah, just concerned about performance if many people using app, constant finds running [15:09] ChrisPartridge: over potentially large dirs [15:10] saschagehlich: well yea, that would be bad. but I don't think there's a way to automatically add new files to it [15:10] saschagehlich: how are the new files created? with a script? [15:10] ChrisPartridge: Yeha but I also want to capture files that are created on the filesystem outside of the app [15:11] clustaCoder has joined the channel [15:11] daveyjoe has joined the channel [15:11] saikat has joined the channel [15:11] Kingdutch: ACTION thinks JS is crippled [15:11] kristsk: ChrisPartridge, are you running linux? [15:12] kristsk: http://en.wikipedia.org/wiki/Inotify <-- this might be useful [15:12] pjackson: This might end up being a http question rather than node but would you mind eyeballing this and telling me why I don't get the hackernews front page I expect? http://pastie.org/1484366 [15:12] bingomanateeIpho has joined the channel [15:12] kristsk: you could set it up watching a dir and listen to output [15:12] pjackson: I instead get a index listing. [15:12] saschagehlich: pjackson: what is the response? [15:13] clustaCoder: Hey, first time using cygwin to make node.js but it comes up with an error 'Build failed: -> task failed (err #2): {task: libv8.a SConstruct -> libv8.a}' now i have checked the SHELL has a unix based path and it's echo-ing to /bin/bash so its not that. Does anyone have an idea what else could cause this build error ? [15:13] ChrisPartridge: kristsk: I was actually just reading about inotify [15:13] saschagehlich: pjackson: sometimes webservers are acting real strange. btw, why do are you sending a content-length on a GET request? [15:13] pjackson: saschagehlich: I thought that was the thing to do with a GET? [15:14] saschagehlich: pjackson: no, you use Content-Length when you transfer data, like with a POST request [15:14] pjackson: saschagehlich: Ok, well same thing happens without the header. [15:14] pjackson: saschagehlich: I get a directory listing as if there's a virgin apache there. [15:15] creationix has joined the channel [15:15] tanepiper: http://blogs.jetbrains.com/webide/2011/01/use-strict-from-ecmascript-5-is-supported-in-webstorm-phpstorm/ nodejs support! [15:15] saschagehlich: pjackson: could you paste that to gist.github.com? pastie is doing strange things when I try to get the raw code [15:16] pjackson: Sure. [15:16] bingomanateeIp-1 has joined the channel [15:17] pjackson: saschagehlich: https://gist.github.com/789813 [15:17] Timmmm has joined the channel [15:18] chrischr_ has joined the channel [15:18] saschagehlich: that's real strange, look at your gist [15:19] pjackson: saschagehlich: Yea, hold on sorry. [15:19] Timmmm: Hi, I'm having trouble building node-o3-xml. When I run the tools/node_modules_build (which apparently uses node-waf or something), it starts compiling (with lots of warnings) but then just freezes. It also warns that it can't find my node path, although it finds the node binary fine. Can anyone help? [15:20] pjackson: saschagehlich: https://gist.github.com/789813 [15:21] hornairs has joined the channel [15:21] pjackson: (I copied it from a term and got a mass of postfixed spaces) [15:22] saschagehlich: well, your createClient() call is wrong [15:22] saschagehlich: you have to connect to "news.ycombinator.com" [15:22] saschagehlich: and its "GET", "/" [15:23] saschagehlich: now it's connecting to ycombinator.com with the HOST header "news.ycombinator.com", trying to get "http://ycombinator.com/http://news.ycombinator.com" [15:23] charlenopires has joined the channel [15:23] pjackson: Right. Oddly, that code worked for other sites. [15:24] pjackson: Yep. That's done the trick. [15:24] pjackson: Thanks for your help. [15:24] saschagehlich: no problem [15:24] bradleymeck has joined the channel [15:25] saschagehlich: btw, what is this? o_O http://news.ycombinator.com/workatastartup [15:26] clustaCoder has left the channel [15:27] hzin has joined the channel [15:27] figital has joined the channel [15:27] achiu has joined the channel [15:27] bradleymeck: do we have a good ast generating JS parser lying about that wont bomb with a stack overflow? [15:28] Anti-X has joined the channel [15:28] markstory has joined the channel [15:28] ph^ has joined the channel [15:29] ronnyfro has joined the channel [15:30] ronnyfro: so my goal is to use node.js along side the socket.io and socket-io packages... and I've had that successfully working no problem [15:30] hzin has joined the channel [15:30] ronnyfro: node must however run as root however to eliminate the "serve flash policy inline" stuff [15:30] daniellindsley has joined the channel [15:30] ronnyfro: I was wondering if anyone was doing anything remotely parallel with this [15:30] yhahn has joined the channel [15:31] aheckmann has joined the channel [15:31] ronnyfro: the security risks involved with running node.js as a root user are frankly not that appealing, so I'd like to try and figure out how to include this functionality running as anon priviliged user [15:31] bradleymeck: any socket under 1024 is going to require root, so yea you need root to ever serve a non-inline flash policy file [15:32] invizko has left the channel [15:32] ronnyfro: supprisingly I didnt know that [15:32] Timmmm: you can change that with a kernel option though I believe. [15:33] hzin has joined the channel [15:33] ronnyfro: should I just turn off the flashsocket transport? [15:33] Timmmm: (or add an iptables rule) [15:33] ronnyfro: are the xhr/comet/longxhr transports comparable? [15:33] tanepiper: ronnyfro: that will push non-websocket browsers to longpoll [15:33] bradleymeck: ronnyfro, what you could do is make a tcp proxy on 843 running under root and have it redirect to some random port for node to pick up [15:34] ronnyfro: that sounds much better [15:34] bradleymeck: xhr comet and longxhr do not require any special permissions [15:34] ronnyfro: bradleymeck: I guess my question ws more a question of will xhr and longxhr scale as well, and provide that "instant" messaging [15:34] tapwater has joined the channel [15:35] ronnyfro: because if flash transport is good but not a ton better than the failovers [15:35] bradleymeck: ronnyfro they wont scale as well no, but they work for most applications (now if you have 1000+ concurrent users thats going to be an issue for anything) [15:35] ronnyfro: I'll just turn it off [15:35] c4milo has left the channel [15:36] ronnyfro: well I will have hundreds of thousands of users [15:36] ronnyfro: BTU [15:36] ronnyfro: but [15:36] Jaye has joined the channel [15:36] ronnyfro: I ahve a plan to have that traffic distributed across a bunch of node servers =) [15:36] ronnyfro: ok [15:37] ronnyfro: well shit [15:37] ronnyfro: I guess I'll research the proxy route [15:37] hzin has joined the channel [15:37] ronnyfro: I trust node, but wouldnt want bad code *I* write compromising my servers because the service has to run as root [15:37] cognominal has joined the channel [15:37] ceej has joined the channel [15:38] kristsk: run nginx on that port! [15:38] x_or has joined the channel [15:38] kristsk: (you do trust nginx?) [15:38] bingomanateeIpho has joined the channel [15:38] ronnyfro: I've never personally used it [15:38] ronnyfro: but yeah it looks like that would work dandy [15:39] rjrodger: nginx ftw - recommended [15:39] ronnyfro: hard to configure? [15:39] ronnyfro: meh [15:39] ronnyfro: I'll go do some research [15:39] ronnyfro: thanks for the pointers guys [15:39] rjrodger: no, super easy - much easier than apache's not quite but sort of XML [15:40] softdrink has joined the channel [15:40] jdalton has joined the channel [15:40] russ_nyc: hi all, why is it this works: bar = JSON.parse('{"foo":123}'); [15:40] russ_nyc: but not this: bar = JSON.parse('{ "foo":function(){ return 123 } }'); [15:40] matjas has joined the channel [15:40] bingomanateeIpho: How du parse xml in node [15:40] russ_nyc: im working int he console btw [15:41] jdalton: u arent executing the function [15:41] russ_nyc: no, i dont want to [15:41] hzin has joined the channel [15:41] jdalton: json doesnt serialize functions [15:41] russ_nyc: i just want it to pasrse so i can execute it later [15:41] russ_nyc: ah [15:42] russ_nyc: how can i take a serialized function and turn it back to an object? [15:42] jdalton: if u trust the code u can use eval('(' + ')'); [15:42] jdalton: eval('(' + yurdata + ')'); [15:42] bradleymeck: russ_nyc JSON does not support functions [15:42] Lorentz: Don't trust no enum [15:42] Anti-X has joined the channel [15:42] russ_nyc: ack, is this the only way? [15:42] jdalton: ya [15:42] Lorentz: I'll never trust enum [15:43] russ_nyc: ok, thanks, i appreciate the help [15:43] jdalton: function can be decompiled via toString() (though not officially supported by the ecma spec) [15:44] tanepiper: russ_nyc: if you need to pass functions back and forward, look at DNode [15:44] tanepiper: https://github.com/substack/dnode [15:44] russ_nyc: ok, thanks [15:44] tanepiper: RPC over socket.io, you can pass function stubs between the client and server [15:44] bradleymeck: russ_nyc, instead of using eval which gives scope variables use Function if you do need to compile it [15:45] russ_nyc: bradleymeck how do i use that? [15:45] SamuraiJack has joined the channel [15:45] jdalton: Function( code ) :D [15:45] hzin has joined the channel [15:45] russ_nyc: like Function('function(){ return 123 }') ? [15:45] bradleymeck: var obj = Function("return "+code)() [15:46] bradleymeck: saves you from a lot of eval's hiccups [15:46] bingomanateeIpho: Seems to me you should be able to require or include a js file rather than passi g it around as variable [15:47] ronnyfro: hmmm is nginx a webserver as well? [15:47] russ_nyc: it's a queueing system. i store the toString version of the function in redis [15:47] russ_nyc: ronnyfro: yes, nginx is a webserver [15:47] kristsk: nginx IS a webserver [15:47] bradleymeck: its a lot of things honestly, dont view it as only a webserver [15:48] sivy has joined the channel [15:48] aconbere has joined the channel [15:48] ronnyfro: but it also does web proxying [15:48] kristsk: it does. [15:48] ronnyfro: or were you guys suggesting just having it serve up the flahs policy period [15:49] mraleph: jashkenas: well. when I say decorators/annotations for JS I mean having syntax different from a property assignment. [15:49] hzin has joined the channel [15:50] jdalton has left the channel [15:50] bradleymeck: mraleph? aspect oriented extension? or just separate? [15:51] mraleph: dunno [15:51] luke` has joined the channel [15:53] d0k has joined the channel [15:53] bradleymeck: i just ask because ive been playing with aspect oriented stuff in js and havent found an appropriate use case for it, very hard to determine appropriate way to hook things [15:54] shaver: dependency injection! [15:54] shiawuen has joined the channel [15:54] brapse has joined the channel [15:54] josephhitchens has joined the channel [15:54] brapse: is there a reason why cipher.final() only supports hex/binary and not base64? [15:54] JimBastard: anyone here use journey? i keep seeing res.send(403, {'Content-Type': 'application/json'}, JSON.stringify(result.toString())); not work [15:54] kristsk: SPRING ftw! [15:55] JimBastard: only for 403s for some reason [15:55] jashkenas: mraleph: decoration isn't just property assignment. it's arbitrary wrapping of the function. [15:55] hzin has joined the channel [15:55] jashkenas: var newFunc = decorate(oldFunc); [15:55] mraleph: jashkenas: yes I know [15:55] kristsk: 403 a body part in rfc ? [15:56] JimBastard: let me try clearing all that [15:56] kristsk: i mean - does a 403 coded response have a body part? [15:56] SamuraiJack has joined the channel [15:56] jashkenas: mraleph: what in particular are you trying to write? [15:56] JimBastard: res.send(403); don't work either [15:57] shiawuen has joined the channel [15:57] mraleph: jashkenas: at this particulat moment I am trying to write new incremental GC for V8 [15:57] christophsturm has joined the channel [15:57] bingomanateeIpho has joined the channel [15:57] mraleph: but this is completely unrelated to the annotation/decoration discussion :-) [15:57] jashkenas: lovely -- I meant trying to write with decorations... [15:58] pengwynn has joined the channel [15:58] mraleph: jashkenas: it was JimBastard who is trying to annotate function with metainformation to make them into webservices [15:58] jashkenas: The reason I'm interested is because people have asked to add decorations/annotations to coffeescript several times ... and every example we can come up with is better done by just passing the function, in JavaScript. [15:58] tanepiper: putting pretty lights around functions :p [15:59] bradleymeck: if you really want it, i do have a decent looking AOP implementation, but when i use it i cry [15:59] JimBastard: bradleymeck: toString() + eval() ? lol [15:59] bradleymeck: Function > eval [15:59] JimBastard: 100x [15:59] bradleymeck: :D [15:59] hzin has joined the channel [15:59] mraleph: jashkenas: yes, just calling a function works just fine. [16:00] Yuffster has joined the channel [16:01] bradleymeck: all you have to do is be sneaky using what we have to get some nice looking stuff, ie. 'Http("Get","Post") \n (function index() {...});' [16:01] mraleph: jashkenas: I am just comparing function foo() {}; foo.doc = "foo bar"; vs. foo = mkService(function () {}, {doc: "foo bar"}) vs. @webserice.doc("foo bar") function foo() {} [16:01] nerickson has joined the channel [16:01] mraleph: where the last one is something you do not have in JS. [16:02] mike5w3c_ has joined the channel [16:02] bradleymeck: mraleph im not sure i understand what @webservice would do [16:03] mraleph: jashkenas: but in CoffeeScript calls are nice and function-literals are boilerplateless. so it's probably not making anything more clear... [16:03] bradleymeck: oh in cs, nm [16:03] hzin has joined the channel [16:04] mraleph: bradleymeck: not in CS. [16:04] JimBastard: i should make webservice.js work with CF modules for sure [16:04] JimBastard: it should be easy [16:04] Me1000 has joined the channel [16:05] jashkenas: in coffee: webservice.doc "foo bar", -> [16:05] mraleph: bradleymeck: @expr(arg1, ..., argN) function () {} would be equal to expr(function() {}, arg1, ..., argN) [16:05] mraleph: jashkenas: yeah. that's why I say that in CS you don't need all this [16:06] mraleph: jashkenas: btw are you the author of cs? [16:06] jashkenas: Express (Sintatra-style) apps are the canonical example of this, I think. The Python version of sinatra has to use nasty annotations... [16:06] jashkenas: https://github.com/jashkenas/api-playground/blob/master/src/app.coffee#L38 [16:06] jashkenas: mraleph: yessir. [16:07] mraleph: jashkenas: sweet. nice language. [16:07] davidc_ has joined the channel [16:07] mraleph: I enjoy it more then I enjoy JS :-) [16:07] mraleph: *than [16:07] bradleymeck: mraleph is it really that much better than AOPexprWrapper(arg1...argN) (fn) translating to expr(function() {}, arg1 ... argn? that way you would keep both, but meh [16:07] hzin has joined the channel [16:07] paulrobinson has joined the channel [16:07] m64253 has joined the channel [16:07] jashkenas: mraleph: glad to hear it. [16:08] galaxywatcher has joined the channel [16:08] mraleph: bradleymeck: yeah, that works as well. but having special syntax is like saying "hey, here is annotation" [16:08] mraleph: but this is all just rumbling :-) we have what we have [16:08] nsswb has joined the channel [16:09] bradleymeck: i guess, but i never really enjoyed the eye numbing annotations in python/java [16:09] cronopio has joined the channel [16:09] bradleymeck: its seperating the runtime from itself basically for business logic, which i guess is the point, but i like things to be simple [16:09] kawaz_air has joined the channel [16:10] bradleymeck: runtime logic* [16:10] kawaz_air has joined the channel [16:11] hzin has joined the channel [16:11] fumanchu182: I just found the EventEmitter class and feel like I reinvented the world with my own callback objects that I built because I didn't read the docs. [16:12] davidascher has joined the channel [16:12] EyePulp has joined the channel [16:13] tjholowaychuk has joined the channel [16:13] bradleymeck: fumanchu182 just dont forget that callbacks have their place [16:14] russ_nyc: does the ChildProcess class actually create new threads? [16:14] bzinger has joined the channel [16:14] davglass has joined the channel [16:15] hzin has joined the channel [16:16] bradleymeck: russ_nyc, it makes processes not threads [16:16] russ_nyc: i see, is there a class that will allow me to create threads? [16:18] cronopio: Great post!! => http://blog.nodejitsu.com/most-active-nodejs-users [16:18] bradleymeck: russ_nyc, no since we do not want concurrent actions on shared memory [16:18] russ_nyc: ok [16:19] flippyhead has joined the channel [16:19] bradleymeck: processes work better generally for scaling when you use a worker model anyway due to abort issues [16:20] russ_nyc: i see in the api docs for processes, they use all bash type commands. can i just pass it a require('myclass') and have it spawn new processes for it [16:20] bradleymeck: spawn("node",[...]) [16:20] hzin has joined the channel [16:20] russ_nyc: oh, duh. haha, so simple [16:21] JimBastard: thanks cronopio [16:22] djacobs7 has joined the channel [16:22] JimBastard: :p [16:22] fumanchu182: bradleymeck, this is true, after some further reading I think I was going to use streams/events incorrectly and am happy with what I wrote instead. [16:23] cronopio: JimBastard: and how is you learning process?? [16:23] flippyhead_ has joined the channel [16:23] JimBastard: cronopio: ? [16:23] dthompson has joined the channel [16:24] cronopio: JimBastard: you started with node in November?? [16:24] JimBastard: of 2009, yeah [16:24] cronopio: JimBastard: oh! 2009 :P [16:24] cronopio: JimBastard: Im started november 2010 :'( [16:25] hzin has joined the channel [16:25] cronopio: JimBastard: and always the better help its on IRC :) [16:25] Kingdutch: I just fell in love with the JS call method [16:25] Kingdutch: throw new Error('No such method: vec3.x() with arguments: \'' + Array.prototype.slice.call(arguments).join(', ') + '\''); [16:26] MrTopf has joined the channel [16:26] skm has joined the channel [16:27] dthompson has joined the channel [16:28] hzin has joined the channel [16:28] davidascher has joined the channel [16:31] hzin has joined the channel [16:32] c4milo has joined the channel [16:33] teemow has joined the channel [16:33] BrianTheCoder has joined the channel [16:35] astoon has joined the channel [16:35] hzin has joined the channel [16:36] Kingdutch: http://pastebin.com/tJ2zDbjk [16:36] Kingdutch: Although I suppose I could make those setters and getters to just do vec3.x = 5; =') [16:36] CrazyGoogle has joined the channel [16:38] sprout has joined the channel [16:39] killfill: hi [16:39] Kingdutch: Hi [16:39] bradleymeck: grrr i really want a non-recursive js parser grrr [16:39] bradleymeck: in js [16:39] killfill: Im using this: http://pastebin.com/RuK1pPdS to use socket.io [16:39] hzin has joined the channel [16:40] killfill: the server says that when the browser im using connects, then its using the xhr-polling transport. [16:40] killfill: (yes, this browser does supports websocket) [16:40] tjholowaychuk: bradleymeck: non-recursive? [16:40] killfill: im using npm... ami missing something?.. [16:40] matt_c has joined the channel [16:40] bradleymeck: non-recursive descent because of stack size limitation [16:41] Lorentz: killfill: Clear your cookie for the site. [16:41] mytrile has joined the channel [16:41] tjholowaychuk: bradleymeck: ah [16:41] killfill: chrome says there are no cookies [16:41] tjholowaychuk: bradleymeck: ive never personally had issues [16:42] bradleymeck: i dont encounter them often [16:42] bradleymeck: on some big stuff the panpg i am using kinda barfs [16:42] Greg__ has joined the channel [16:42] mraleph: bradleymeck: well. you can write one :-) step 1. make PEG machine a-la LPEG in JS. step 2. write PEG for JS. step 3. profit. [16:42] killfill: ACTION wonder why its not using websockets.. :S [16:42] bradleymeck: there are multiple peg parsers, bleh [16:43] tjholowaychuk: bleh as well [16:43] mraleph: you want the one that does not use stack :-) [16:43] daniellindsley has joined the channel [16:43] mraleph: peg is pretty neat abstraction if it is done correctly. [16:43] tjholowaychuk: ACTION not a fan of parser generators [16:43] bradleymeck: mraleph there isnt one in js that doesnt use stack right now to my knowledge [16:43] hzin has joined the channel [16:43] bradleymeck: i love parser generators but hate when they have glitches [16:44] tjholowaychuk: lemon is the only one i like [16:44] tjholowaychuk: used to be ok with peg/leg but it's code is not thread-safe (amoung other issues) [16:45] Kingdutch: No comments on my vec3 implementation? :O [16:45] mraleph: peg is different from say lalr because it is "lowlevel". I don't like granpa yacc or his children. [16:45] Evet: node.js + socket.io + zeromq? is this combo ok for comet apps? [16:46] charlenopires has joined the channel [16:46] bradleymeck: i have a similar parser gen i wrote to peg, but doing the tree to jump table mapping would be evil [16:46] JusticeFries has joined the channel [16:47] mraleph: in general I prefer parser combinators to parser generators :-) [16:47] ph^ has joined the channel [16:47] bradleymeck: ACTION is not familiar with parser combinators [16:47] hzin has joined the channel [16:47] farhadi has joined the channel [16:48] tjholowaychuk: the project im working on is sooooo context sensitive im not even sure you could use a parser gen [16:48] mraleph: bradleymeck: http://en.wikipedia.org/wiki/Parser_combinator [16:48] tjholowaychuk: you probably could, but it would be hell [16:48] balaa has joined the channel [16:48] mraleph: stand back I know regular expressions :-) [16:48] bradleymeck: mraleph, i see, its more a modular approach [16:48] kristsk: i have used antlr with moderate success [16:49] kristsk: among other things it has javascript target [16:49] tjholowaychuk: antlr has some interesting tools [16:49] kristsk: (which i have not used) [16:49] ph^ has joined the channel [16:49] kristsk: yeah antlrworks is nice for early stages prototyping [16:49] bradleymeck: i know the lack of \A in js makes me a sad panda [16:49] vineyard has joined the channel [16:49] nerickson has left the channel [16:50] danoyoung has left the channel [16:50] dguttman has joined the channel [16:51] hzin has joined the channel [16:51] pietern has joined the channel [16:52] cloudhead has joined the channel [16:53] bradleymeck: great googly moogly i found a use for void() [16:53] snafuz has joined the channel [16:54] zemanel_ has joined the channel [16:54] Blink7 has joined the channel [16:55] charlenopires_ has joined the channel [16:55] hzin has joined the channel [16:56] sudoer has joined the channel [16:56] swaj has joined the channel [16:58] briznad has joined the channel [16:58] Kingdutch has joined the channel [16:59] christophsturm has joined the channel [16:59] killfill: dont know why is socketio using polling.. :S [16:59] mape: tjholowaychuk: Them socket.io secrets coming up at node.conf.. wanna spill them? ;) [16:59] hzin has joined the channel [16:59] tjholowaychuk: mape: I dont now them actually haha [16:59] tjholowaychuk: I forgot to ask :D [16:59] mape: Bah :( [17:00] mape: I just hope it stops all the random error messages [17:01] aklt: Does anyone know if there are plans for node_crypto.cc? I think there are some problems with it... [17:01] hornairs has joined the channel [17:02] fangel has joined the channel [17:03] jakehow has joined the channel [17:03] hzin has joined the channel [17:03] dguttman has joined the channel [17:05] mape: aklt: Plans as in not having bugs? :) [17:05] mape: I'm pretty sure there are [17:05] balaa has joined the channel [17:06] aklt: mape: Yay! That would be great :-) [17:06] colinclark has joined the channel [17:06] mape: aklt: Have you submitted a bug report? [17:07] aklt: mape: I used some time trying to track down an issue, but I did not have success in finding the correct solution [17:07] w0rse has joined the channel [17:07] hzin has joined the channel [17:08] aklt: mape: I described the problem here: http://groups.google.com/group/nodejs-dev/browse_thread/thread/436e5d81e5f4dba3 [17:08] mape: aklt: Yeah, great start :) [17:08] saikat has joined the channel [17:08] caolanm_android has joined the channel [17:09] aklt: The example is a minimal example derived from an app I was trying to write,.. :-) [17:10] aklt: mape: Are there many other bugs with the crypto code? Maybe a good overhaul of the crypto part is needed? [17:10] colinclark has joined the channel [17:11] amirpc has joined the channel [17:11] hzin has joined the channel [17:11] noahcampbell has joined the channel [17:11] mape: aklt: I wouldn't be able to say, but yeah, voicing it to people in the know is always a good idea. [17:12] amirpc: hey guys I'm building the communications portion of my game and since socket.io is event driven I'm largely using events but in the game code I'd like to do stuff as simple as com.getSession(sessionId, function(err) { // Session initialized handler }) [17:12] amirpc: so I have to um like, block until an event triggers then hit my callback [17:12] amirpc: in my getSession function [17:12] amirpc: what should I be looking at to accomplish this? [17:13] jesusabdullah: Why do you need to block? [17:13] amirpc: ah you're right [17:13] amirpc: I can save the callback, when the reply comes hit it [17:13] jesusabdullah: Yup [17:13] amirpc: Thanks thats all I needed, sometimes when I go back and forth between C & node a lot it's hard to stay in the js mindset [17:14] jesusabdullah: yeah [17:14] aklt: mape: Yeah, I was hoping to learn from someone that knows better what is going on :-) [17:14] altamic has joined the channel [17:15] mape: aklt: you should poke ryah_ just so you know he spotted it :) [17:15] hzin has joined the channel [17:15] banjiewen has joined the channel [17:15] aklt: mape: Good idea! It must be day now in ca,... [17:16] aklt: ryah_: Do you know if there will be changes to node_crypto.cc? [17:16] Qbix1 has joined the channel [17:17] hobodave has joined the channel [17:18] jchris has joined the channel [17:19] hzin has joined the channel [17:19] isaacs has joined the channel [17:21] sveimac has joined the channel [17:21] aklt: Ah, well. I'll be off [17:22] x_or has joined the channel [17:26] stephank has joined the channel [17:27] hzin has joined the channel [17:27] Wizek: Hi there! What is the easyest way to connect to a particular port on localhost and determin if there is something listening? Like by examining wheter it sends esponse or not. [17:28] mape: start a (tcp|udp) client and look for a response? [17:28] sc has joined the channel [17:28] Bonuspunkt: portscanner? [17:28] sc: test [17:29] stagas: Wizek: what is your platform? [17:29] daniellindsley has joined the channel [17:30] hzin has joined the channel [17:30] Wizek: stagas: win7, using node through cygwin [17:30] Wizek: stagas: why? [17:30] stagas: Wizek: http://www.nirsoft.net/utils/socket_sniffer.html [17:31] Wizek: stagas: I need this functionality within Node. [17:31] alex_b has joined the channel [17:31] Wizek: stagas: To check wheter DB server is running or not [17:31] stagas: Wizek: still a great tool to have :) [17:32] Wizek: stagas: Okay :D [17:32] russ_nyc: hi all, what is the standard practice for checking if a callBack exists? right now I do it like this: if (callBack) { callBack() }; [17:32] evl: Can anyone recommend an ORMish libary for node that works with sqlite? [17:32] russ_nyc: is this appropriate? [17:32] saschagehlich has joined the channel [17:33] hzin has joined the channel [17:33] benburkert has joined the channel [17:33] stagas: Wizek: open a connection with net to the db server and check for errors [17:33] mscdex: Wizek: just set a timeout, if it doesn't connect within that time, the db isn't listening ;-) [17:33] pomodoro has joined the channel [17:35] kiddphunk has joined the channel [17:35] q_no has joined the channel [17:36] charlenopires has joined the channel [17:36] hzin has joined the channel [17:36] sprout has joined the channel [17:37] tapwater has joined the channel [17:37] cronopio: ROFL => http://debuggable.com/posts/slides-node-js-in-production:4d39b9a4-e250-4ba3-85d4-6388cbdd56cb [17:37] shiawuen: russ_nyx: callback && callback(); [17:37] aconbere has joined the channel [17:37] russ_nyc: shiawuen: thanks! [17:37] sudoer has joined the channel [17:38] shiawuen: :) [17:38] altamic has joined the channel [17:39] hzin has joined the channel [17:39] davglass has joined the channel [17:39] pgte has left the channel [17:39] sprout has joined the channel [17:41] isaacs_ has joined the channel [17:41] quirkey has joined the channel [17:42] isaacs__ has joined the channel [17:43] lumino: Does anybody know a way to autocompile coffeescript to javascript in vim in split view? [17:43] lumino: Like live? [17:43] markstory has joined the channel [17:43] hzin has joined the channel [17:43] pdelgallego has joined the channel [17:44] tim_smart: lumino: By writing a plugin [17:44] lumino: :) [17:44] tim_smart: Which I got no idea how to do. [17:44] piscisaureus has joined the channel [17:44] lumino: meen either at the moment.. [17:44] piscisaureu_ has joined the channel [17:45] lumino: I thought maybe someone here already did that. [17:45] derferman has joined the channel [17:45] tim_smart: lumino: Check on #coffeescript [17:46] lumino: aah, thx [17:46] CrabDude has joined the channel [17:47] yozgrahame has joined the channel [17:47] hzin has joined the channel [17:48] CrabDude: FYI, Had some fun writing a control-flow library with ES5 Proxies: https://github.com/CrabDude/sexy [17:48] CrabDude: HN Post if you want to comment: http://news.ycombinator.com/item?id=2127733 [17:49] tjholowaychuk: lolol [17:51] riven: nodemon [17:51] andrzejsliwa has joined the channel [17:51] riven: err, wrong chat [17:51] hzin has joined the channel [17:54] brianleroux has joined the channel [17:55] tapwater has joined the channel [17:55] hzin has joined the channel [17:55] Anti-X has joined the channel [17:56] piscisaureus has joined the channel [17:57] Country has joined the channel [17:58] Kingdutch: http://pastebin.com/KR6Uss4m This a good way to do stuff? Or should I use the prototype method? (It would revoke me access to _x =/) [17:59] hzin has joined the channel [18:00] balaa has joined the channel [18:03] piscisaureus_ has joined the channel [18:03] davidascher has joined the channel [18:03] hzin has joined the channel [18:03] dipser has joined the channel [18:04] benburkert has joined the channel [18:04] deepthawtz has joined the channel [18:05] Kingdutch: No JS guru's to take a look at it :') [18:06] broofa has joined the channel [18:06] Evet: anyone used zero mq here? [18:06] heavysixer has joined the channel [18:06] Aikar: http://sphotos.ak.fbcdn.net/hphotos-ak-ash1/hs781.ash1/167163_10150141295681281_589866280_8276985_173601_n.jpg Today at work.... Can you guess what type of company I work for by the picture? [18:07] Kingdutch: Aikar: Something with Light? [18:07] Kingdutch: Blue LEDs to be precise? [18:07] josephhitchens: safety stuff [18:07] hzin has joined the channel [18:07] Kingdutch: Ooh good call [18:07] Aikar: no, those are cap and gowns [18:07] perlmonkey2 has joined the channel [18:08] Bosmon2: Kingdutch... seems wasteful :P Why not just operate on arrays [18:08] isaacs has joined the channel [18:08] josephhitchens: satin manufacturer? [18:08] Kingdutch: Because Array's don't have the required, .add and .mult feature that I want to implement [18:08] Aikar: note theirs construction guys in the back lol... [18:08] Kingdutch: vec3 is quite a useful format for 3D graphics [18:08] josephhitchens: yes, i'm trying to figure out why. [18:09] Kingdutch: Aikar: I see them, can't figure out what they're for [18:09] lumino has joined the channel [18:09] Aikar: its email marketing. Our place is crazy... lol us new employees just 'graduated training' and the CEO made the senior leadership team all dress up in construction outfits. Last year he made them all wear leaderhosen (sp?) [18:10] kylefox has joined the channel [18:10] Kingdutch: lederhosen [18:10] Kingdutch: right [18:10] josephhitchens: oy. [18:10] Kingdutch: But that's, lol.. [18:10] amerine has joined the channel [18:10] herbySk has joined the channel [18:10] Kingdutch: Bosmon2: See above for explanation of vec3 bt [18:10] Kingdutch: w [18:11] jamesarosen has joined the channel [18:11] hzin has joined the channel [18:13] muk_mb has joined the channel [18:13] franck34: what's the best npm extension to hot reload a node server ? [18:13] djanowski has joined the channel [18:13] piscisaureus_ has joined the channel [18:14] Kingdutch: A shell script? [18:14] dnyy has joined the channel [18:14] tim_smart: franck34: It isn't recommended at this stage, due to possible memory issues. [18:14] Kingdutch: Just have it start the server, wait for end, goto start and start the server again [18:15] Kingdutch: Then in this script just do Process.exit() if you want to restart [18:15] franck34: tim_smart: thanks [18:15] Kingdutch: Will also auto-reboot at crashes [18:15] achiu has left the channel [18:15] Kingdutch: franck34: ^ [18:16] franck34: Kingdutch: my question was about hot reloading, not restart ;) [18:16] franck34: but thx anyway [18:16] Kingdutch: Don't really see the difference, but ok [18:16] isaacs: franck34: you could use supervisor to do what Kindutch is talking about [18:16] tim_smart: Well a process restart isn't a 'hot reload', but it is the recommended option. [18:16] Kingdutch: hot reloading is reloading the script, right? [18:16] swaj: what seem to be the most popular web frameworks right now? is express decent? I'm looking for something lean. [18:16] isaacs: Kingdutch: he wants to swap out amodule, not restart the server. [18:16] franck34: Kingdutch: apache reload and apache restart, you don't know the difference ? [18:16] Kingdutch: Ooh [18:16] Kingdutch: My bad [18:16] franck34: ;) [18:16] Kingdutch: apache restart sounds better though :') [18:16] tim_smart: Erlang is a pro at this stuff. [18:17] tjholowaychuk: erlang++ [18:17] v8bot: tjholowaychuk has given a beer to erlang. erlang now has 1 beers. [18:17] franck34: tim_smart: i've used erlang for an xmpp server, but omg the syntax is incredible [18:18] tjholowaychuk: if beam was not so huge id use erlang all the time [18:18] franck34: and if beam can be setup to listen on localhost to avoid configuring iptable, should be great ... just a 2 years old request feature :( [18:19] booo: what's the best way to use compression on http responses in node? [18:20] ryah_: booo: probably a proxy server like nginx at the moment [18:20] ryah_: booo: but i'll probably be adding gzip in the near future [18:21] tim_smart: booo: Otherwise there is https://github.com/waveto/node-compress [18:21] tjholowaychuk: ryah_: is there a roadmap wiki or anything? [18:21] tjholowaychuk: (curious) [18:21] franck34: booo: and if you wana do it yourself, note that the client send "Accept-Encoding: gzip, deflate" headers (or "none", or no header), so you can manage it manualy .. [18:21] tim_smart: tjholowaychuk: Maybe, but those get pretty stale [18:21] tjholowaychuk: haha yeah totally [18:22] tjholowaychuk: but nice to see what the ideas are [18:22] tim_smart: (From experience) [18:22] franck34: ACTION tested socket.io successfully [18:22] tim_smart: tjholowaychuk: The todo list is the best roadmap :p [18:23] franck34: i'm looking for a document like "node.js server side application good practices" if you know something like that [18:23] franck34: to organise libraries and other stuffs [18:23] franck34: my only way to learn is to take a look at some node extensions at the moment [18:24] tim_smart: franck34: Write something, put it on Github, and get someone to review it [18:24] ryah_: tjholowaychuk: no - the best i have is the email i sent out in novemeber [18:24] djanowski has joined the channel [18:24] ryah_: tjholowaychuk: but i'm basically narrowing in on 0.4 now [18:25] franck34: tim_smart: i must learn github, i'm a old school svn guy, every body is using github i'm loosed lol [18:25] ryah_: to be done in the next week or two [18:25] tjholowaychuk: awesome! [18:25] tjholowaychuk: ill have to take like a week to update all my stuff haha [18:25] ryah_: https client is the one missing feature [18:25] tjholowaychuk: stoked though [18:25] tim_smart: franck34: git is nice, you won't regret it. [18:25] ryah_: yeah, i'll release a new version this weekend and start encouraging people to upgrade [18:26] NeoAvatar has joined the channel [18:26] franck34: let's go :) [18:26] CrazyGoogle: i need https client so much [18:26] CrazyGoogle: i do my all oauth and rpc stuff with it [18:27] charlenopires has joined the channel [18:27] CrazyGoogle: i hope, cloud9ide will also fix segfaulting with 0.3.x [18:27] tim_smart: CrazyGoogle: node <3's patches [18:28] CrazyGoogle: tim_smart: i am pretty sure, but i dont realy like C or C++ codding [18:28] tim_smart: ryah_: Do you want the https client to follow the same API as before? [18:28] tjholowaychuk: supporting two releases is gonna kinda suck [18:29] CrazyGoogle: tim_smart: i hope it will work same as http client, but with security = true param [18:29] ChrisPartridge: CrazyGoogle: i have cloud9 on 0.3.x - no segfaults [18:29] CrazyGoogle: ChrisPartridge: i get it segfault assoon first client connects [18:29] ChrisPartridge: What OS? [18:30] piscisaureu_ has joined the channel [18:30] ChrisPartridge: And how did you install? via npm? [18:30] CrazyGoogle: ChrisPartridge: also saw same problem in cloud9ide issue list on github from someone else. (Gentoo 64bit linux, maybe its because o3-xml) [18:30] CrazyGoogle: ChrisPartridge: i install node and cloud from git manualy [18:30] nejucomo has joined the channel [18:30] ChrisPartridge: Yes, just recompile o3 modules [18:30] vineyard has joined the channel [18:31] isaacs has joined the channel [18:31] CrazyGoogle: ChrisPartridge: cloud9ide works on same machine without recompiling of the o3-xml with latest 0.2 version [18:32] ChrisPartridge: Yeah, because the shipped o3 binaries are built against 0.2 [18:32] CrazyGoogle: ahhh [18:32] CrazyGoogle: now i understand [18:33] CrazyGoogle: ChrisPartridge: thanks, but i will wait until 0.4 is released, as i sad, i need https client badly [18:33] ryah_: tim_smart: no [18:33] Kingdutch: ACTION just figured out a library he's using already has vector classes. *Deletes vector function* [18:34] mraleph: ryah_: \o/ [18:34] stagas: Kingdutch: what library? [18:34] TheEmpath has joined the channel [18:34] tim_smart: ryah_: Right. So you want it to be require('https').createClient()? [18:34] mraleph: ryah_: so can you give me a bit more info about crash you had last night (or day in your TZ) [18:34] mraleph: ? [18:34] CrazyGoogle: 0.4 will be some faster because of new webkit JS Engine ? [18:34] tjholowaychuk: CrazyGoogle: node uses v8 [18:35] CrazyGoogle: tjholowaychuk: my bad [18:35] ryah_: mraleph: i saw it while running through the node tests on the debug build [18:35] CrazyGoogle: yeah, i meaned newer v8 engine [18:35] mraleph: ryah_: without --gdbjit I presume? [18:35] ryah_: mraleph: yeah [18:35] mraleph: ryah_: ok. that should be fixed now [18:36] mraleph: ryah_: http://code.google.com/p/v8/source/detail?r=6427 [18:36] ryah_: mraleph: cool - thanks [18:36] CrazyGoogle: after https client work, only one thing can make me more happier - nginx node fastcgi proxy that understand HTTP 1.1 [18:37] q_no has joined the channel [18:37] mraleph: CrazyGoogle: there is a funny thing about Crankshaft and node.js. when it went public people in node.js community went trying it and saw no improvement. [18:37] ryah_: question: does nginx get messed up if you're using it in front of node and node sends chunked-encoding? [18:37] flippyhead has joined the channel [18:37] CrazyGoogle: ryah_: i use node behind nginx massively [18:37] MrTopf has joined the channel [18:38] bradleymeck: is there a way to give a Function a name when make with Function("code") [18:38] kolbyjack: ryah_: Yes, nginx is http/1.0-only to upstreams [18:38] ryah_: does 1.0 not understand transfer-encoding: chunk ? [18:38] kolbyjack: Nope, that was added in 1.1 [18:38] CrazyGoogle: nginx latest version always - didnt excpected any problems, except missing http1.1 stuff and not profixieng websockets :D [18:39] bradleymeck: mraleph, yea, but then again its hard for me to saturate the host without a blatent issue in my code or long running function (which takes time anyway) [18:39] mraleph: I was trying some simple tests myself and saw that Crankshaft does not try to optimize node.js functions... But I did not look deep into that and just assumed that profiler was going crazy because of all those time node spends in C++ [18:39] bradleymeck: still not sure what exactly crankshaft optimizes [18:39] piscisaureu_: ryah_: 224.0.0.1. Is that universally a broadcast address? [18:39] mraleph: but this week I had a divine revelation [18:40] mraleph: the problem is in the way node.js handles modules. [18:40] ryah_: mraleph: oh, do tell! [18:40] mraleph: it wraps module body into a function: function (bla, bla, bla) { module-body; } [18:40] ryah_: piscisaureu_: i think [18:41] mraleph: Crankshaft had a limitation: it can't deal with functions with a non-trivial outer scope [18:41] mraleph: it just does not try to optimize them at all [18:41] mraleph: did not --- we partially lifted this limitation [18:41] tjholowaychuk: :( [18:42] ryah_: what's a non-trivial outer scope mean? [18:42] bradleymeck: mraleph even if the functions do not reference the outer scope or have eval? [18:42] mraleph: if they don't reference it should be fine i think [18:42] mraleph: but I am not sure. [18:42] CrazyGoogle: will be modules handling rewritten some day in node.js ? [18:43] CrazyGoogle: somehow i fill me bad any time i write export.something = localvar [18:43] mraleph: but we partialy fixed that --- now closure that only read from scope are optimized [18:43] bradleymeck: doubt it crazygoogle, we want scoped modules [18:43] stride: weekend! \o/ [18:44] bradleymeck: we dont want php global exports everywhere or the browser hell namespaces [18:44] ryah_: mraleph: great [18:44] ryah_: mraleph: let's try it:) [18:44] mraleph: so now when I run simple http bench on node I can see that Crankshaft tries to optimize some internal node stuff... [18:44] piscisaureu_: mraleph: so you are saying that we should see improvements now ? [18:45] mscdex: piscisaureu_: that's multicast, not broadcast [18:45] CrazyGoogle: bradleymeck: arent thay scoped now ? [18:45] pkrumins: good morning! [18:45] mraleph: piscisaureu_: I would not expect anything great... [18:45] bradleymeck: indeed, and the way it is now would be hard to change [18:46] bradleymeck: want the c++ bridge costs to come down :( [18:46] CrazyGoogle: another question, why i get very strange error exceptions if i include my file with js scripts with Script.runInNewContext [18:46] mraleph: sometimes it tries to optimize a function and then it sees some silly construct that frightens hydrogen graph builder... and when I say silly I mean silly [18:46] mraleph: like unary plus [18:46] CrazyGoogle: its mostly not usable, what i get if there is an error in the script i load dynamicaly [18:46] mraleph: or try catch [18:46] muhqu has joined the channel [18:47] ryah_: unary plus. fucking javascript people. [18:47] tjholowaychuk: mraleph: is const optimized much? [18:47] bradleymeck: const is not [18:48] bradleymeck: oh in crankshaft [18:48] zzak has joined the channel [18:48] zzak has joined the channel [18:48] joelklabo has joined the channel [18:48] bradleymeck: crazygoogle just imagine the code you send to runInNewContext as a new file so it should be giving sane errors, you just may be unable to see the code [18:48] mraleph: if you function has a try catch it will not be optimized... if you function creates closures that references outer scope it will not optimize it... a lot of limitations. but we will lift them one by one I think. [18:48] CrazyGoogle: bradleymeck: it even dont say properly file name and line where exception was thrown [18:49] mraleph: tjholowaychuk: const is bad. const = performance penalty. and Crankshaft will just refuse to optimize the function with const [18:49] joelklabo: I am getting a JSON.stringify error: http://pastebin.com/KAYmbi6H, isn't JSON part of V8? [18:49] piscisaureus_ has joined the channel [18:49] bradleymeck: crazygoogle it should, but those things coming from a string are undefined, you have to give arguments to runinnewcontext [18:49] tjholowaychuk: mraleph: haha shit, good to know. was curious if it had any benefit at all [18:49] Bosmon2: JSON parse errors could be a lot better in V8 [18:50] Bosmon2: Mostly you just get "ILLEGAL" :P [18:50] joelklabo: It's telling me object is not a function [18:50] djanowsk_ has joined the channel [18:50] perezd has joined the channel [18:51] CrazyGoogle: bradleymeck: not sure i did understand you right. But i give all params that are in the node.js docu -> sandbox, filename, etc... [18:51] djanowski has joined the channel [18:51] ryah_: mraleph: how do you tell if a function is getting optimized or not? [18:51] piscisaureus: mscdex: I am not so into multicast, but don't you need to send a join packet or something like that to register yourself. [18:51] ryah_: mraleph: just through the profiler? [18:51] piscisaureus: I am talking about test/simple/test-dgram-multicast, it tests whether a packet sent to 224.0.0.1 can be received by multiple listeners but there is no attempt to join a multicast group afaict [18:52] CrazyGoogle: if it would usefull, i can write minimal example and start an github issue with this [18:52] mraleph: also today we finally looked at the thing felixge report like several months ago: if you put try {} catch (e) {} (empty try catch) in the same function as some hot loop --- then hot loop goes like 2 times slower. [18:52] mraleph: ryah_: --trace-opt --trace-bailout [18:52] mraleph: ryah_: will dump info about optimizer attempts. [18:53] jamesarosen has joined the channel [18:53] djacobs7 has joined the channel [18:53] piscisaureus_ has joined the channel [18:53] ryah_: thanks [18:54] tanepiper: tjholowaychuk: so how can you back up you 0.4.0 comment on twitter ;) [18:54] mraleph: ryah_: also V8 should be >=r6340, that is where we partially lifted that scope limitation [18:54] Evet: any tutorial to port a C library into node.js? [18:54] altamic has joined the channel [18:55] mraleph: ryah_: profiler also should print optimized function names differently... with a * I think [18:56] ChrisPartridge has joined the channel [18:56] ryah_: mraleph: that should be in 3.0.9 - right? [18:56] mraleph: ryah_: now I think it manages to optimize only tiny tiny functions that do nothing serious. all other hot ones it detects contain unsupported constructs. [18:56] mraleph: ryah_: let me check [18:56] tjholowaychuk: tanepiper: what? lol [18:57] mraleph: ryah_: yeah it should be [18:57] tanepiper: i assume your 'nodejs 0.4.0 soon!' comment was Duke Nukem Forever soon rather than tomorrow is saturday soon? [18:58] tjholowaychuk: hahha [18:58] djanowski: ryah_: question, would it be possible to provide some way of reading the raw http headers in a client response? i'm thinking a 'header' event on the request [18:58] djanowski: that would be for 0.2.x [18:58] ryah_: tanepiper: feb 5 is my deadline for 0.4 [18:58] tjholowaychuk: booyah [18:58] tjholowaychuk: the spacing has been reasonable so far [18:58] swaj: ryah_: is 0.4 the next stable release? not sure about your versioning schema. [18:58] ryah_: swaj: yes [18:58] Fuld has joined the channel [18:58] ryah_: djanowski: maybe [18:58] tanepiper: sweet! Now Sencha need to hurry up and get ExtJS 4 out so I can finish client side features, and we might be able to launch before the end of march! [18:59] tek has joined the channel [18:59] ryah_: swaj: even/odd stable/unstable [18:59] swaj: ryah_: I see. So then 0.4 will be the stable release of the 0.3 dev branch [19:00] ryah_: yes [19:00] swaj: nice :) [19:00] CrazyGoogle: and what all features are planed for 1.0.0 release ? [19:00] swaj: CrazyGoogle: lol [19:00] CrazyGoogle: :D [19:01] dguttman has joined the channel [19:01] herbySk has joined the channel [19:01] CrazyGoogle: is there simething like release plan ? [19:01] amacleod has joined the channel [19:01] franck34: tanepiper: what are you waiting in extjs 4 ? [19:02] djanowski: ryah_: is that something you can do in like 5 minutes? :) haven't dug into node's codebase yet [19:02] ryah_: djanowski: no [19:02] tanepiper: franck34: well origionally Ext.draw.* and the new TreeStore to replace the TreeLoader, but based on their first two blogs about the next release, looks like I'll be re factoring a lot of stuff [19:03] djanowski: ryah_: ok, thanks! [19:03] piscisaureus: ryah_: Please help me ... I am not so into multicast, but don't you need to send a join packet or something like that to register yourself? [19:03] piscisaureus: I am talking about test/simple/test-dgram-multicast, it tests whether a packet sent to 224.0.0.1 can be received by multiple listeners but there is no attempt to join a multicast group afaict. [19:03] mraleph: maybe I should start blogging about all this V8 gotchas... [19:03] tanepiper: basically they have a ORM now with models, and I need to hope it'll work with out CouchDB database [19:03] Fuld: omh guys, I'm finally getting to start coding my web app in node.js [19:03] Fuld: omfg this is exciting [19:04] benburkert has joined the channel [19:04] Fuld: The only thing that gets me this excited is seeing Madonna in concert [19:04] tjholowaychuk: mraleph: I'd read it :) where is your blog at? [19:04] ryah_: mraleph: you should start a wiki page [19:05] ryah_: things that are unoptimized [19:05] Fuld: Is it normal to be sexually aroused by an I/O framework? [19:05] swaj: wow the sencha screencast page for ext designer has killed my chrome tab twice :P [19:05] piscisaureus: mraleph: you should do that if it doesn't prevent you from making v8 better :-) would love to read it [19:06] ryah_: piscisaureus: i dont know... [19:06] mraleph: tjholowaychuk: I do not have a technical blog right now, only personal one in Russian. [19:06] ryah_: piscisaureus: i want to restructure all these ifdefs you did in net.cc [19:06] ecto has joined the channel [19:07] ryah_: piscisaureus: we should build an interface for these and put them in separate files... [19:07] djanowski_ has joined the channel [19:07] mraleph: yeah. maybe we should just pour all information we have into wiki... Erik this year on GOTO and AFAIK several other V8 team members in different years did presentations about JS performance pitfalls. [19:08] blaines has joined the channel [19:08] Anti-X: js performance in v8, or in general? [19:08] mraleph: but nobody ever collected and summarized all this info. the problem is that stuff changes all the time. [19:08] mraleph: Anti-X: I think it was a mixture. [19:09] piscisaureus: ryah_: I would like that too, it's just that I didn't see how to abstract it ahead of time [19:09] piscisaureus: ryah_: you need to have something that works before refactoring, is what I've always learned :- [19:09] piscisaureus: ryah_: but I guess time's ready [19:09] mraleph: for example everybody knows that with is bad in general... but nobody knows that try { } catch (e) {} in v8 actually has a with in catch clause. [19:09] aheckmann: mraleph you should present at nodeconf on this stuff [19:09] x_or has joined the channel [19:10] tjholowaychuk: ditto [19:10] tjholowaychuk: that would be really interesting [19:10] admc has joined the channel [19:10] Fuld: Is nodeconf coming to nyc? [19:10] tjholowaychuk: how about "A Minute With mraleph" haha [19:11] aheckmann: Fuld its in Portland in May [19:11] mraleph: aheckmann: I would if it was not bothersome for me to travel to US (visa and all that stuff). Maybe I should ask Erik Corry if he wants to do that. [19:11] matjas has joined the channel [19:11] aheckmann: mraleph please do, we'd love it! [19:11] Fuld: Okay. Come to NYC someday please. I'm tired of PHPcon :( [19:12] Fuld: Seriously, I'd love to see more employers here embrace node.js [19:12] aklt has joined the channel [19:12] CrazyGoogle: mraleph: you cuould write about that facts in v8 [19:12] piscisaureus: ryah_: right now I'm assuming that 224.0.0.1 that is used by test-dgram-multicast is some crazy glitch that happens to work on posix systems, but does not do anything but broadcast-to-localhost. You could just use 255.255.255.255 instead. [19:12] davidwalsh has joined the channel [19:13] ryah_: piscisaureus: let's ask pquerna [19:13] ryah_: piscisaureus: he put that there [19:13] ryah_: pquerna: --^ [19:14] piscisaureus: good to know it was pquerna :-) [19:14] piscisaureus: btw if I drop dead, no worries. Im in a train and my internet is really flaky [19:16] franck34: ACTION learning node.js coding good practive, is there somebody who have few sec to help me ? [19:16] franck34: https://gist.github.com/790224 [19:16] mraleph: ryah_: I am going out for a dinner. If you'll get any interesting numbers with 3.0.9 please share them I will check logs when I get back :-) [19:16] franck34: line 22 [19:16] isaacs: mraleph: what is "non-trivial outer scope"? [19:16] isaacs: oh, nvm, have a good dinner :) [19:16] springify has joined the channel [19:17] bingomanatee has joined the channel [19:17] piscisaureus: ryah_: I will bug pquerna about it then [19:17] piscisaureus: wrt to net interface, if you have any ideas, go ahead. I will do the windows part. But i'd like it to be such that people hammer on the the posix code without even knowing that they're breaking the windows build. [19:18] piscisaureus: well, that's what I don't want [19:18] piscisaureus: anyone who touches posix net should know he has windows to fix as as well [19:20] ryah_: piscisaureus: we need to get you a buildbot. [19:20] piscisaureus: ryah_: yeah. It's just that I am afraid of it :-( and I don't know how to do it [19:22] mraleph: isaacs: according to the sources it means that outer scope should be either global or have not heap allocated locals, where heap allocated local is a local referenced from inner scope. and there should be no with or eval scopes in scope chain. [19:22] Me1000 has joined the channel [19:22] Aikar has joined the channel [19:22] Aikar has joined the channel [19:22] piscisaureus: isaacs: will you land that meta key fix or should I do it? [19:22] isaacs: piscisaureus: i can do it [19:22] mraleph: isaacs: nom nom nom [19:23] isaacs: mraleph: if you have any suggestions for how node's module system would be able to better leverage crankshaft/v8, i'd love to hear it [19:23] ryah_: yet another way commonjs modules has failed us [19:24] mraleph: isaacs: I think we just need to remove all limitations. It just requires some major refactoring. [19:24] ryah_: complex constructions => missing out on optimizations [19:24] isaacs: indeed [19:24] mraleph: nah. I don't think this way. this limitation is pretty much regacy/artifact from the early ages of V8 [19:25] sh1mmer has joined the channel [19:25] isaacs: ryah_: though, if we just dumped everythign into the top-level scope, people would wrap in their own closures anyhow [19:25] mraleph: somebody just needs to get machete, go into jungle called scopes.cc and fix it. [19:25] isaacs: i mean, what we're doing is not any worse, really, than every jquery program on the web [19:26] mraleph: bbl [19:26] ecto has joined the channel [19:27] franck34 has joined the channel [19:27] ecto: hey guys. i'm using express. is there any way i can send post data in a res.redirect? [19:27] bartt has joined the channel [19:28] Fuld: http://shootout.alioth.debian.org/u32/benchmark.php?test=all&lang=gcc&lang2=v8 -- This makes me worried about choosing node.js over C [19:28] ecto: actually i can just use sessions. nevermind haha [19:28] Fuld: I wonder if you could compile JS to C :) [19:29] piscisaureus: ryah_: where do the other buildbots run? [19:30] Fuld: Anyone have more reliable information on C vs. v8 speed? [19:30] Rixius has joined the channel [19:31] joelklabo: I am using request all through my app and it works fine. But, this one spot keeps giving me errors. As far as I can tell it is exactly the same as the others. Does anyone see an issue with this? http://pastebin.com/NWA2GE8G [19:31] franck34 has joined the channel [19:32] Aikar: !w hell [19:32] Aikar: err wrong channel [19:32] Aikar: should bring my bot here lol [19:32] Aikar: even tho its in php atm >_> [19:34] Kingdutch: No PHP bots in here :O [19:34] Fuld: In node.js, how do you guys typically break down your code into files? [19:34] [[zzz]] has joined the channel [19:34] kolor has joined the channel [19:34] pyrotechnick: Fuld: elaborate... [19:35] tjholowaychuk: Fuld: by using serveral files :p [19:35] tjholowaychuk: with exports [19:35] pyrotechnick: lol [19:35] Fuld: Is each .js file for a certain type of request? For a certain function? [19:35] pyrotechnick: Fuld: whatever makes sense [19:35] pyrotechnick: there is no universal rule [19:35] CrazyGoogle: Fuld: one class - one file [19:35] piscisaureus: ACTION about to enter a no-internet area. from now on, email pls. [19:35] GasbaKid has joined the channel [19:36] Fuld: Traditionally, the URL requested actually defines the file organization. i.e. to post something, you might have something called login.pl or submit.pl [19:37] tjholowaychuk: do that if you want [19:37] Fuld: How do you divy different types of requests to different files typically? [19:38] tjholowaychuk: depends on how many routes I think it will have, user.js, auth.js, post.js [19:38] tjholowaychuk: doesnt really matter [19:38] Fuld: I'm trying to get an idea of the code structure / organization of a typical node.js site that needs to handle many different types of requests [19:38] MikhX has joined the channel [19:39] tjholowaychuk: its the same as you would with any other language [19:39] tanepiper has joined the channel [19:39] tjholowaychuk: just dont write gross bloated code [19:39] Fuld: The way to make code more managable is to divy it up into different files in a way that is clear to others maintaining the code. [19:40] tjholowaychuk: yeah of course [19:40] tjholowaychuk: so do that [19:40] tjholowaychuk: lol [19:40] ecto: tj: Error: session requires the "secret" option string for security [19:40] tjholowaychuk: ecto: session({ secret: 'whatever' }) [19:40] admc1 has joined the channel [19:40] ecto: always get that when i'm using connect sessions and it's not covered as far as i can find [19:40] tjholowaychuk: because the docs suck [19:40] tjholowaychuk: sorry [19:40] tjholowaychuk: lol [19:40] ecto: yeah i figured it out, just wanted to let you know i couldn't find it [19:40] ecto: haha no worries [19:41] rauchg_ has joined the channel [19:41] tjholowaychuk: wish sencha didnt abandon it [19:41] Fuld: I'm thinking about doing multiple node.js servers hmm [19:41] saikat has joined the channel [19:41] Fuld: The requests are all via xmlhttprequest(), so I can really do anything I want [19:41] swaj: is it possible to call a native C++/C library from within node? [19:42] Fuld: swaj: Yes [19:42] piscisaureu_ has joined the channel [19:42] stuart__ has joined the channel [19:42] jpld has joined the channel [19:42] Fuld: swaj: Someone did that to implement a postgresql library [19:43] Fuld: swaj: Here ya go https://www.cloudkick.com/blog/2010/aug/23/writing-nodejs-native-extensions/ hope that helps you :) [19:44] swaj: thanks, will read [19:44] Fuld: disclaimer: I am but a high-latency proxy to google (I have never used node.js, but am considering it myself0 [19:45] stuart__: Does anyone have any experience using node-jqtpl with express? [19:48] bingomanatee has left the channel [19:49] elux has joined the channel [19:49] Fuld: Is there a library or script that node.jsers tend to use to handle requests with different files based on the URL? [19:50] pandark_ has joined the channel [19:51] CrypticSwarm has joined the channel [19:51] piscisaureus has joined the channel [19:51] Fuld: For example, a http://::1/user.js?foo=bar&whatever HTTP GET would result in a require("/user.js"); on the server [19:51] tjholowaychuk: Fuld: that sounds like it would be really annoying to use :s [19:51] isaacs: Fuld: check out http://jspp.io [19:52] tjholowaychuk: Fuld: I think there is one that routes via the fs but you have to handle mega nesting then [19:52] tjholowaychuk: kinda awkward, but if that is your thing I think it exists already [19:52] isaacs: Fuld: most people who just wanna host a website easily use Express. [19:52] isaacs: it's node's django/rails/etc [19:52] isaacs: (not as big as rails, of course, but few things are) [19:52] tjholowaychuk: sinatra [19:52] robtmr has joined the channel [19:52] tjholowaychuk: kinda [19:53] isaacs: tjholowaychuk: i guess i just mean in the sense that it's the go-to MVC stack for node [19:53] tjholowaychuk: ya i gotcha [19:53] isaacs: just like a python user wil probably want to go to django, or a ruby dev to rails [19:53] Fuld: I'm thinking that's whole point of the http.createServer(function () { }), to decide what should handle a request, rather than handling it there. [19:53] isaacs: Fuld: yeah [19:53] tjholowaychuk: Fuld: typically yeah [19:53] isaacs: Fuld: check out express [19:54] tjholowaychuk: unless you have a tiny web service or something [19:54] isaacs: srsly. it's quite nice. [19:54] ezmobius has joined the channel [19:54] robtmr has joined the channel [19:54] tjholowaychuk: im stoked for 0.4.0, express 2.0 will be quite a bit nicer [19:54] tjholowaychuk: but now I can actually start pushing it [19:54] isaacs: yeah [19:54] philipharrison has joined the channel [19:54] tjholowaychuk: how long has it been since 0.3.x started? 3 months? [19:55] isaacs: i think i'm going to have to retire support for node 0.2.x fairly soonish, or branch npm or something [19:55] Fuld: Checking out express :) [19:55] tjholowaychuk: isaacs: yeah tough call there [19:55] tjholowaychuk: its easy with something like express that is passed 1.0 [19:55] tjholowaychuk: but most my other stuff [19:55] tjholowaychuk: will be awkward [19:55] isaacs: tjholowaychuk: v0.3.0 tag syas Date: Sat Oct 23 16:00:53 2010 -0700 [19:55] tjholowaychuk: and connect [19:55] tjholowaychuk: cool [19:55] tjholowaychuk: i think that is reasonable, to long or to short is really annoying [19:55] Fuld: Okay cool, I'm going to write my first node.js server then! :) [19:55] isaacs: npm works on 0.3 and 0.2, so 0.4 should be fine [19:56] isaacs: but 0.5 is going to change some deep core stuff [19:56] isaacs: like, how require.resolve works. [19:56] Fuld: ACTION finally got node.js working on the crufty old centos machine [19:56] robbles has joined the channel [19:56] isaacs: kinda affects npm in a big way [19:56] stuart__: anyone here use node-jqtpl with express? [19:56] tjholowaychuk: i dont want to bump connect to 1.0 just to start supporting 0.4.0 so it will have to use a bunch of compat hacks i guess [19:56] tjholowaychuk: stuart__: I have not tried it [19:56] tjholowaychuk: sorry [19:57] pquerna: piscisaureus: yess, 224.0.0.1 [19:57] ezmobius has joined the channel [19:57] pquerna: piscisaureus: 224.0.0.1 isn't 'special', its just a multicast address [19:57] isaacs: tjholowaychuk: you could just folllow the node version [19:57] pquerna: piscisaureus: for windows you'll need to toggle a few more things to recieve it [19:57] tjholowaychuk: isaacs: yeah, just sucks even our stuff and lots of other startups dont have time to update [19:57] tjholowaychuk: right away at least [19:57] tjholowaychuk: not the end of the world [19:58] tjholowaychuk: but I dont want to prevent myself from backporting features [19:58] isaacs: tjholowaychuk: just make sure you have an "engines" spec in your package.json [19:58] Fuld: What do you folks do with node.js that's not classified as a CRUD (Create-Read-Update-Delete) operation? [19:58] isaacs: that's the best way to ensure that you don't get wonky bugs [19:58] isaacs: npm will not install it on the wrong version of node, then [19:59] piscisaureus: pquerna: how do you joint a multicast group in node? that is done automatically? [19:59] tjholowaychuk: isaacs: Drupal requires that modules do say DRUPAL-5-n.n.n [19:59] tjholowaychuk: im not really a fan [19:59] tjholowaychuk: but it is explicit [19:59] isaacs: yeah [19:59] pyrotechnick: i cant find any docs for the "mode [19:59] isaacs: with npm at least you can say: "engines" : { "node":"0.3 || 0.4" } [19:59] pyrotechnick: goddam new keyboard [19:59] pyrotechnick: i cant find any docs for the "mode" arg of mkdir [20:00] isaacs: pyrotechnick: it's just like chmod [20:00] pyrotechnick: can anyone explain it to me…i assume it's persmissions [20:00] isaacs: pyrotechnick: 0755 or whatever. [20:00] isaacs: yeah, permissions [20:00] pyrotechnick: as a decimal? [20:00] pyrotechnick: i tried 0x0777 [20:00] isaacs: as a Number. i usually write it in octal [20:00] pyrotechnick: but that fails [20:00] tjholowaychuk: isaacs: it's easy for express 1.x supports 0.2.x, and 2.0 can be 0.4.x, but stuff like connect that is at 0.5.5 its just weird having > 0.5.5 0.4.x only haha [20:00] isaacs: 0x0777 is hex, you don't want that :) [20:00] pyrotechnick: right lol [20:00] teemow has joined the channel [20:00] pyrotechnick: how does one octal in js [20:01] isaacs: pyrotechnick: leading 0 [20:01] isaacs: pyrotechnick: 0777 [20:01] pyrotechnick: ahh smart js [20:01] isaacs: just like chmod on the cli [20:01] isaacs: pyrotechnick: you can also use 0x1ff if you mean 0777 [20:01] Fuld: What if I want to modify bits? Can I do that? [20:01] pyrotechnick: that worked. champion [20:01] pyrotechnick: isaacs++ [20:01] v8bot: pyrotechnick has given a beer to isaacs. isaacs now has 7 beers. [20:01] isaacs: but when the flags are nibbles, octal is best. [20:01] isaacs: v8: 0777 [20:01] v8bot: isaacs: 511 [20:01] pyrotechnick: omnomnom [20:02] Fuld: isaacs: Why are octals better than integers? [20:02] pyrotechnick: i see [20:02] isaacs: pyrotechnick: nibbles. it's "imnimnim" [20:02] pyrotechnick: haha [20:02] isaacs: Fuld: 0777 is an integer [20:02] pyrotechnick: Fuld: because mode expects permissions [20:02] robtmr has joined the channel [20:02] pyrotechnick: and people usually use octal to represent them [20:02] isaacs: Fuld: but 0754 is: 111 for user, 101 for group, 100 for world, where the flags go xwr [20:02] pyrotechnick: since they're 4 sets of 8 options [20:03] lior066 has joined the channel [20:03] isaacs: x = execute, w = write, r = read [20:03] unomi has joined the channel [20:03] pquerna: piscisaureus: well, node doesn't really... join multicast stuff yet, not properly [20:03] Fuld: What do you think the creators of UNIX chose octals for representing permissions? [20:03] pyrotechnick: because there's 8 options [20:03] pyrotechnick: 2x2x2 [20:03] softdrink has joined the channel [20:03] pquerna: piscisaureus: http://msdn.microsoft.com/en-us/library/ms739161(VS.85).aspx [20:04] Fuld: Yes, factorial [20:04] isaacs: Fuld: because it squeezes all the required info into 9 bits, probably [20:04] pquerna: piscisaureus: setting IP_MULTICAST_LOOP should make it work over localhost [20:04] Fuld: Bits must have been expensive then :) [20:04] pquerna: In Winsock, the IP_MULTICAST_LOOP option applies only to the receive path. [20:04] pquerna: In the UNIX version, the IP_MULTICAST_LOOP option applies to the send path. [20:04] pquerna: piscisaureus: ^^ thats why the difference [20:05] piscisaureus: pquerna: :-) ah [20:05] isaacs: then if you use 2 bytes (one short unsinged int), you can still have 7 bits to store other flags, like suid, islink, etc. [20:05] kiddphunk_ has joined the channel [20:06] bradleymeck has joined the channel [20:06] piscisaureus: pquerna: gotta go now, sorry ;( [20:06] bradleymeck has joined the channel [20:06] robtmr has joined the channel [20:07] cognominal has joined the channel [20:07] arpegius has joined the channel [20:08] booo has joined the channel [20:09] strmpnk has joined the channel [20:11] KyleXY has joined the channel [20:12] hdon- has joined the channel [20:12] elux has joined the channel [20:12] fangel_ has joined the channel [20:14] elux: hey [20:14] elux: can node run on multiple threads? [20:14] elux: to make use of multiple cores [20:14] sh1mmer: you can run one process per core [20:14] sh1mmer: but Node is not threaded [20:14] dguttman has joined the channel [20:14] elux: and route traffic to it..? [20:14] sh1mmer: yes [20:14] elux: to the various processes [20:14] elux: cool. that works [20:14] sh1mmer: look at spark2 [20:14] elux: is there anything nice to start/stop processes in a group like that? [20:15] elux: its annoying having to do this manually [20:15] sh1mmer: ^ [20:15] elux: check :P [20:15] farhadi has left the channel [20:16] elux: thanks dude [20:16] elux: sh1mmer: do you know of any services using node in production? [20:16] elux: api's .. [20:16] sh1mmer: yes [20:16] MrTopf has joined the channel [20:16] elux: or anything else. cool.. which? [20:16] sh1mmer: palm use it on webos [20:16] elux: on the embedded device? [20:16] sh1mmer: gomockingbird.com I was talking to this morning [20:16] sh1mmer: yes [20:16] elux: hrmm.. locally? .. why tho .. i dont see the use [20:17] sh1mmer: they use it to do background services [20:17] elux: why not just spawn a process? [20:17] prettyrobots has joined the channel [20:18] sh1mmer: they do, a node process [20:18] fabian has joined the channel [20:18] sh1mmer: node is easy to write and asynchronous [20:18] elux: ahh i see. they use node as a framework for their services [20:18] elux: can node do async file i/o? (ie. logging) [20:18] sh1mmer: yes [20:19] elux: im getting excited [20:19] sh1mmer: everything is async [20:19] isaacs: elux: sh1mmer is the guy to speak to if you want to know about node in production. [20:19] elux: and its built on v8 and libev? [20:19] isaacs: you lucked out [20:19] elux: :) [20:19] sh1mmer: isaacs: humbug [20:19] sh1mmer: :) [20:19] pyrotechnick: mokingbird is amazing. me and my comrade had a competition just before [20:19] bradleymeck: it is hard to do, nay impossible, sync io if it is not one of the few built in methods [20:19] dgathright has joined the channel [20:20] isaacs: elux: sh1mmer is a joyeur, he's the guy who emailed the mailling list asking for case studies. [20:20] podman has joined the channel [20:20] sh1mmer: yeah and I now I know where everyone is using node [20:20] elux: ive been really hoping someone would write a nice async reactor for ruby and some better concurrency mechanisms ... the async+coop scheduling stuff is nice because it feels just like ruby but, it's a bit of a hack and needs evolution [20:20] bradleymeck: why is ejs so slow [20:20] podman: hey guys, anyone have experience with any of the hosted node.js platforms? are any of them any good? [20:20] sh1mmer: elux: ruby has event machine but node is really pretty nice [20:20] Fuld: Is Express geared towards AJAX more? [20:20] tfe_ has joined the channel [20:20] isaacs: podman: joyent has a no.de thing that's pretty ok [20:20] sh1mmer: anyway I have to go to a meeting [20:20] elux: yea i know eventmachine very well. ive built many things on top of it. it sucks [20:20] bradleymeck: podman, joyent and nodejitsu are good from what i have used [20:21] isaacs: ACTION works on no.de [20:21] podman: isaacs, bradleymeck: do they handle scaling automatically? [20:21] isaacs: podman: not automatically, no. but if you start bumping into the limit of a free account, we can talk. [20:21] bradleymeck: never had a catastrophicly large thing [20:21] Fuld: My node.js is only serving xmlhttprequest() to get new messages from the server. Should I use Express? [20:21] isaacs: "scaling automatically" is a thing that's easier said that done. [20:22] isaacs: scaling "what" exactly? that's the problem. [20:22] podman: isaacs: right :) [20:22] isaacs: bandwidth? cpu? memory? [20:22] podman: isaacs: well, right now i'm hosting it on EC2 [20:22] isaacs: depends on what's the bottleneck [20:22] Fuld: Scaling customers! [20:22] isaacs: hehe [20:22] podman: so, i also was running mongodb on the same instance [20:22] bradleymeck: scaling functions across processes while keeping closures [20:22] podman: so, i think mogodb was the bottleneck [20:22] isaacs: auto-scaling = "Hey, Mr. CEO. You know that guy you pay a bunch of money to who knows how computers work? REPLACE HIM WITH THIS ROBOT!!" [20:23] podman: specifically disk i/o with EBS [20:23] podman: so i'm moving everything to mongohq in the hopes that they have better performance [20:23] pagameba: disk i/o in EC2 sucks in general [20:23] pyrotechnick: curl -k https://api.no.de/♥ -X POST -u pyrotechnick:secret — how do i auth? [20:23] isaacs: podman: yeah, what pagameba said [20:23] podman: isaacs: yes, i know this :) [20:23] isaacs: pyrotechnick: create an account. user your username/pw [20:24] podman: so, i'm hopeful that that will solve most of the problem [20:24] isaacs: pyrotechnick: also, make sure you add an ssh key to your acct before creating a machine [20:24] Fuld: I am tired of people identifying me as a "genius software developer" without knowing anything about me. They go by my looks [20:24] pyrotechnick: i get it [20:24] pyrotechnick: isaacs: yep, i'm on the list ^w^ [20:24] pyrotechnick: i swear you used to have another process a while ago [20:24] pyrotechnick: i never did no unicode heart API thing [20:24] isaacs: Fuld: "They go by my looks." Pretty sure that's an insult, then.... [20:25] isaacs: "No, I didn't mean he's *smart*. I meant he's *badly dressed*" [20:25] Fuld: lol [20:25] swaj: podman: it's very unlikely mongo was your issue [20:25] isaacs: "...and needs a shave." [20:25] Fuld: People in New York just approach me and ask me if I'm a software developer. [20:25] swaj: podman: Disk I/O is absolutely horrible in AWS [20:25] podman: swaj: it was not mongo per say [20:25] podman: but monogo interacting with the disk [20:25] Fuld: swaj: But that's okay because you keep your mongo in RAM [20:26] hunterloftis has joined the channel [20:26] dguttman_ has joined the channel [20:26] elux: yea [20:26] swaj: podman: you might want to look into another provider. Maybe linode (www.linode.com) -- I use them and I have great performance. [20:26] elux: that is why i dont use aws [20:26] elux: because disk i/o is pretty darn important for database performance [20:27] podman: swaj: well, i'm going to try mongohq.com [20:27] dguttman_ has joined the channel [20:27] elux: podman: that will suck too if they are on aws [20:27] swaj: good luck :) [20:27] elux: and memory is so expensive on aws... and mongo needs lots of memory to be fast [20:27] podman: elux: apparently they raid their ebs volumes [20:27] podman: or so i hear [20:27] elux: doesnt matter [20:27] elux: you can raid your ebs' on aws yourself too [20:27] podman: yes, but i don't know how... and they do [20:28] elux: after a point there are marginal gains.. from benchmarks i saw [20:28] elux: http://orion.heroku.com/past/2009/7/29/io_performance_on_ebs/ [20:28] elux: here [20:28] podman: well, it'll only take me a couple of hours to run my own benchmarks [20:28] elux: http://alestic.com/2009/06/ec2-ebs-raid [20:28] pedrobel_ has joined the channel [20:28] robtmr has joined the channel [20:28] Remoun has joined the channel [20:29] estrathmeyer has joined the channel [20:29] podman: elux: ultimately, i'm one man, i don't have the time to mess with this stuff, so, if mongohq solves the problem for the next 6 months, that makes me happy [20:30] pyrotechnick: mongohq is great unless you have massive amounts of data [20:30] pyrotechnick: their "big" plan is 10GB [20:30] Fuld: This web app is a disaster. We have PHP, Perl, C++ and node.js now [20:30] pyrotechnick: sounds like facebook [20:30] swaj: podman: if you want fantastic i/o, I recommend a provider that uses Local Raid 10 arrays instead of slow SAN space. That's if MongoHQ doesn't work out for you. Linode is Xen-based so overselling is almost impossible (and they don't oversell anyway). I know Rackspace cloud has even better I/O than Linode, but bandwidth is a premium there. And MediaTemple was faster than anyone I tried, however they use Virtuozzo, which I'm not so keen on the memory model [20:30] dgathright has joined the channel [20:30] langworthy has joined the channel [20:30] Fuld: lol, 10GB is how much RAM I can put in my smartphone [20:30] fabian: bradleymeck: ejs slow? [20:31] fabian: bahaha [20:31] softdrink: ACTION throws his iphone across the room [20:31] fabian: fabian... ohhh irc [20:31] podman: looks like my dataset is 100MB right now [20:31] tjholowaychuk: bradleymeck: when I have some time I want something like ejs but a restricted language set, so that with() can be removed etc [20:31] tjholowaychuk: super optimized but still flexible [20:31] Fuld: The key is to only keep the data you will use in memory [20:32] bradleymeck: fabian, slower than it should be i guess is what im saying [20:32] softdrink: i'm just going to go back to C. [20:32] softdrink: heh [20:32] tjholowaychuk: bradleymeck: sorry that was me haha irc re-nicked me, my ejs impl or someone elses? [20:32] bradleymeck: tj so you basically want a js parser [20:32] bradleymeck: one off google code [20:32] Fuld: softdrink: I am actually a C developer trying to move into the web world [20:32] podman: isaacs: what are the limits on the free no.de accounts? [20:33] softdrink: i miss C a lot sometimes [20:33] tjholowaychuk: bradleymeck: not really, I dont care if it looks like js really [20:33] isaacs: podman: 128M memory. You won't run out of CPU. Don't know about the disk space limitation offhand. [20:33] handle_with_care has joined the channel [20:33] isaacs: So, they're small, tiny even. bit it's impressive what oyu can do with that much, and it's free. [20:33] softdrink: i miss it even more whenever i have to do anything with java [20:33] softdrink: gross. [20:33] tjholowaychuk: bradleymeck: im thinking liquid might be a good candidate, easy to optimize [20:33] Fuld: softdrink: The web is a lot harder. We're expected to do presentation, structure, behavior, and server-side CRUD. [20:34] jchris has joined the channel [20:34] smcq has joined the channel [20:34] isaacs: Fuld++ [20:34] v8bot: isaacs has given a beer to Fuld. Fuld now has 1 beers. [20:34] Fuld: And AJAX has of course changed how we think about the presentation layer [20:34] softdrink: Fuld: and run in multiple environments, generally limited to the lowest common denominator (IE) [20:35] podman: isaacs: looks like our node process is only using about 32MB right now :) [20:35] softdrink: i swear if i ever meet an IT guy that has kept a company on IE, i'm going to beat the hell out of them [20:35] Fuld: softdrink: For my startup, I've made things a lot easier by banning any browser that doesn't support CORS and websockets :) [20:35] bradleymeck: tj i think getting the template close to a programming language is good since people will want the power of a language, every time i hear you shouldn't do X i want to do X and 3months down the road I have a situation that needs X [20:35] swaj: Fuld: must be nice to not need those customers :P [20:35] softdrink: Fuld: same with an app i'm working on… unfortunately i can't do that at my real job :( [20:35] tjholowaychuk: bradleymeck: yeah, but I think the biggest issues with jade, ejs and friends are the try/catches (for nice error reporting), and of course with() [20:36] Fuld: softdrink: I've known them. They're generally very laid back guys that don't want to change anything more than they have to to get by. [20:36] swaj: Fuld: for my startup, I'm going all the way down to IE 7 (IE 6 makes me have nightmares) [20:36] tanepiper: Fuld: yea, i'm currently our companys database guy, server side guy and client side guy :D [20:36] bradleymeck: pffff error reporting, id just make the line numbers match up [20:36] softdrink: those guys need to be fired, quickly. [20:36] tjholowaychuk: bradleymeck: but IMO if you need something blazzing fast to attempt vertical scaling you misewell just use some concats lol [20:36] tjholowaychuk: bradleymeck: yeah but you have to catch for that [20:36] Fuld: Those guys will be replaced by the cloud [20:36] softdrink: (out of a cannon, into the sun) [20:37] tjholowaychuk: bradleymeck: if you want to show context at all [20:37] tjholowaychuk: there are just two extremes with template languages really [20:37] bradleymeck: maybe, or just strap a source attribute onto your renderer [20:37] tjholowaychuk: for different cases [20:37] Fuld: There's no reason for a company to keep IT around to support desktops these days [20:38] elux: hey guys .. is 0.3.5 a dev branch of node? [20:38] softdrink: yeah there is: dumb users [20:38] bradleymeck: fuld, there is lots of reasons, and those reasons involve people not wanting to learn [20:38] elux: nevermind :S [20:38] Fuld: Once the last of the desktop apps are retired for solutions like Salesforce, IT guys will be as useful as payphone booths. [20:38] bradleymeck: elux 0.x.* where x is odd is unstable dev [20:39] MikhX has joined the channel [20:39] bradleymeck: working on it fuld lol [20:39] JusticeFries_ has joined the channel [20:39] bmizerany has joined the channel [20:40] Fuld: bradleymeck: You're abetting their demise as well? :) [20:41] farhadi has joined the channel [20:41] bradleymeck: im betting the cycle of hosted to mainframe is about to come up and we are going to thin clients all around for quite a while again (with web as the client platform) [20:42] rwaldron has left the channel [20:43] joelklabo has joined the channel [20:43] jshaw: hi, i'm trying to figure out how to catch a DNS exception in http.Client, i understand that a new call stack gets built up, but I would like to be able to catch the exception before the process.uncaughtException, is there a work around? [20:43] halfhalo has joined the channel [20:44] jamesarosen has joined the channel [20:45] pagameba: anyone here use the Seq library? [20:46] podman: isaacs: i forgot to ask, limits on bandwidth? [20:46] isaacs: podman: dunno offhand [20:46] podman: k [20:46] isaacs: podman: you could ask over in #joyent [20:46] isaacs: :) [20:47] tanepiper: pagameba: yea, i use it [20:47] tanepiper: what's up? [20:47] mnbvasd: !the center of the earth [20:47] pagameba: tanepiper: I'd like to use it for some startup code for a server - check if file exists, connect to database using config from file, start express server [20:48] Fuld: Thin clients failed in the 90s because they were Doing It Wrong (TM). Rather than being basically monitor+keyboard over an ethernet cable, they should have put X Window Server on the thin client and made the protocol stateless except for backwards compatibility. [20:48] pagameba: basically Seq().seq(checkConfigFile).seq(readConfigFile).seq(connectToDb).seq(startServer).catch(function(err){...}); [20:49] Fuld: disclaimer: I don't remember the 90s [20:49] tanepiper: pagameba: ok, whats the issue your having? [20:49] pagameba: but I don't quite grok how to set up the functions [20:49] tanepiper: ok, well either you can do something like this: [20:50] mnbvasd: Fuld: what we did wrong was upgrading from 80x24 vt220s [20:51] tanepiper: pagameba: https://gist.github.com/cc02f26887cec5be7302 [20:52] Fuld: Imagine if DEC had released a terminal that supported HTML :) [20:52] pagameba: tanepiper: https://gist.github.com/790394 <- what do I do in checkPath to make it go ? [20:52] tanepiper: (although this is old, i'm not using seq for startup just now) [20:52] pagameba: tanepiper - checking [20:52] tanepiper: well you need to pass `this` [20:52] tanepiper: then it's a callback [20:53] mexitek has joined the channel [20:53] brianc: anyone get websockets working behind haproxy? [20:53] tanepiper: pagameba: something like this: https://gist.github.com/1bbbeda706a5539c82f5 [20:54] pagameba: tanepiper: trying ... [20:55] tanepiper: pagameba: there is also this: https://github.com/substack/node-seq/blob/master/test/readdir.js [20:55] tanepiper: where you write re-usable functions, and `this` becomes Swq [20:55] tanepiper: *Seq [20:56] tanepiper: when you throw around `this` as a callback, the first parameter is always null OR and Error [20:56] pagameba: tanepiper in last gist, should the call to cb() be inside the async response of path.exists() in the checkPath function? [20:57] tanepiper: the the rest of the parameters are what you need to pass, and if it's and Error, it'll fall to catch [20:57] tapwater has joined the channel [20:58] tanepiper: instead of throwing the error, wrap it in a callback, if no error do cb(null) [20:58] ziro` has left the channel [20:58] Chris_Biscardi has joined the channel [20:59] tapwater has joined the channel [20:59] CIA-89: node: 03Ryan Dahl 07http_parser_refactor * rd791225 10/ (5 files in 3 dirs): ... - http://bit.ly/hwoQbH [20:59] tanepiper: i've updated the gist: https://gist.github.com/1bbbeda706a5539c82f5 [21:00] pagameba: tanepiper: ok, trying that [21:00] tanepiper: whoops, refresh [21:00] tanepiper: forgot to pass the null [21:02] TigerMunky has joined the channel [21:02] robtmr has joined the channel [21:03] bruce has joined the channel [21:04] AAA_awright: How am I supposed to include modules in with Vows tests? [21:05] pagameba: tanepiper: getting an error requiring traverse/hash ? [21:05] AAA_awright: If I have a module that constructs a test for a certain interface, for instance, to be tested across a number of different things [21:05] tiemonster has joined the channel [21:06] tanepiper: pagameba: did you install Seq with npm? [21:06] pagameba: no [21:06] pagameba: I guess I should [21:06] tanepiper: yes, it will install all the dependenceis [21:06] tanepiper: *dependencies [21:06] pagameba: I was trying to package everything into one tree [21:06] pagameba: ok, I'll work on it [21:07] daveyjoe has joined the channel [21:07] tanepiper: if you youself create a package.json file for your project, you can have it install all your dependencies too! [21:07] rjrodger has joined the channel [21:09] iFire has joined the channel [21:10] banjiewen_ has joined the channel [21:10] TooTallNate has joined the channel [21:10] davida has joined the channel [21:12] EyePulp has joined the channel [21:13] admc has joined the channel [21:13] brianleroux has joined the channel [21:14] mikeal has joined the channel [21:14] ryah_: wait for it... [21:14] ryah_: wait for it... [21:14] CIA-89: node: 03Ryan Dahl 07master * re65f6b4 10/ (4 files in 2 dirs): Initial pass at https client - http://bit.ly/esPzS3 [21:14] ryah_: ah. [21:14] admc1 has joined the channel [21:14] ryah_: hopefully i'll stop getting 10 emails a day about https now [21:15] Rixius: no there will always be mountains of email [21:15] tanepiper: woop [21:15] Rixius: that's why it's great that it isn' paper >_> [21:16] w0rse has joined the channel [21:16] MrTopf has joined the channel [21:17] bradleymeck: jesus christ https client that kinda works? [21:17] Gruni has joined the channel [21:17] isaacs: hooray!! [21:17] MikhX has joined the channel [21:18] jashkenas: hip hip, https! [21:18] isaacs: ryah_++ [21:18] v8bot: isaacs has given a beer to ryah_. ryah_ now has 2 beers. [21:18] isaacs: ryah++ [21:18] v8bot: isaacs has given a beer to ryah. ryah now has 2 beers. [21:18] isaacs: ry++ [21:18] v8bot: isaacs has given a beer to ry. ry now has 1 beers. [21:18] isaacs: _ry++ [21:18] v8bot: isaacs has given a beer to _ry. _ry now has 1 beers. [21:18] Rixius: ryah_++ [21:18] v8bot: ryah_ is getting too many beers. Don't let ryah_ get drunk! [21:19] isaacs: https++ [21:19] v8bot: isaacs has given a beer to https. https now has 1 beers. [21:19] Rixius: ry++ [21:19] v8bot: ry is getting too many beers. Don't let ry get drunk! [21:19] Rixius: _ry++ [21:19] v8bot: _ry is getting too many beers. Don't let _ry get drunk! [21:19] Rixius: isaacs++ [21:19] v8bot: Rixius has given a beer to isaacs. isaacs now has 8 beers. [21:19] Fuld: Can I take my ++ in coffee please? [21:19] Kingdutch: oh god [21:19] Kingdutch: Rixius: leave the bot alone [21:19] Rixius has left the channel [21:19] Kingdutch: isaacs: u too [21:20] Kingdutch: ho [21:20] Kingdutch: oh* [21:20] Fuld: Why is node.js refusing all connections unless I connect on the same machine using wget http://localhost:81? [21:20] sveimac has joined the channel [21:20] mape: Fuld: locking it to localhost? [21:20] isaacs: Fuld: what's your "listen" command look like? [21:21] piscisaureus has joined the channel [21:21] Fuld: listen(81, "127.0.0.1"); [21:21] isaacs: that is, are you doing "listen(81, 'localhost')" or just "listen(81)" [21:21] isaacs: ok, that's why [21:21] Fuld: Get rid of the second arg? [21:21] mape: Fuld: use null :) [21:21] isaacs: because you're only binding to that one ipaddress [21:21] isaacs: yeah [21:21] isaacs: no second arg [21:21] isaacs: just port [21:21] Fuld: thnx ;p [21:21] CIA-89: node: 03Ryan Dahl 07master * rdb8736a 10/ (doc/api/https.markdown lib/https.js): Add https.get() - http://bit.ly/hQSeXe [21:22] aconbere has joined the channel [21:22] ryah_: https://github.com/ry/node/blob/db8736ad932319 86b747e21131719fdacdf39a02/doc/api/https.markdown [21:22] mape: ryah_: Did you see the crypto issue? [21:22] Fuld: Is running on port 81 a really bad idea if I want my websockets to work for most people? [21:22] ryah_: mape: no? [21:23] isaacs: ryah_: is that all backwards compatible? [21:23] isaacs: or not so much? [21:23] tiemonster: isaacs: keep 'em guessing: listen(Math.floor(Math.random()*9999)) [21:23] mape: ryah_: 18:08:08 < aklt> mape: I described the problem here: http://groups.google.com/group/nodejs-dev/browse_thread/thread/436e5d81e5f4dba3 [21:24] mraleph has joined the channel [21:24] mape: Not sure it is a bug, just figured it would be good knowing about it regardless [21:24] bstmstr has joined the channel [21:24] tiemonster: Fuld: I think different port will cause cross-domain failure - http://en.wikipedia.org/wiki/Same_origin_policy [21:25] tiemonster: not sure if that affects websockets or not [21:25] pquerna: its not a bug is it? i mean, you are slicing an aes cipher stream [21:26] ryah_: isaacs: the normal client is [21:27] ryah_: isaacs: i bet with a little glue you could make .setSecure work [21:27] handle_with_care has joined the channel [21:27] isaacs: ryah_: i don't mind replacing setSecure with somethign else. [21:27] ryah_: :) [21:27] ryah_: you have no choice [21:27] isaacs: since the pre-today https is so broken [21:27] mape: pquerna: Not saying it is. I wouldn't know. Just figured I'd make it known so people feel they get answered :) A responce is always nice though. [21:27] ryah_: yeah [21:28] hij1nx has joined the channel [21:28] pquerna: slicing and appending ' ' to the middle of a cipher stream may cause it not to do what you want. its not providing authentication that the data isn't modified [21:28] mikeal: ryah_: are there docs on the new http [21:28] pquerna: use an hmac for that [21:28] pquerna: anwyays [21:28] ryah_: mikeal: yes [21:28] jashkenas: pquerna: this, at least: https://github.com/ry/node/blob/db8736ad93231986b747e21131719fdacdf39a02/doc/api/https.markdown [21:28] mikeal: that's enough [21:29] mikeal: i actually just wanted http, not https :) [21:30] ryah_: it's amazing how tall node's infrastructure has become [21:30] pquerna: infrastructure? [21:30] ryah_: none of these libraries are just thin c bindings [21:30] farhadi: how can I change default value of maxSockets for the underlying agents in new http api. [21:31] ryah_: https on http and cryptostream on secure pair on net.js [21:31] philipharrison has joined the channel [21:31] mikeal: automagically connection pooling for you is pretty high level [21:31] pquerna: true [21:31] pquerna: the other way to do it all would be to write far more in c [21:31] mikeal: nobody does that [21:31] mikeal: that said, i love it :) [21:31] pquerna: i've thought about that as a separate project really, node.c [21:31] pquerna: and then binding it to Lua / python etc [21:31] mikeal: it's a hard problem you have to solve as soon as you decide to make your clients fast [21:32] pquerna: well, maybe. [21:32] MaSch: Hey, does anyone remember the name of this nice tool that makes nodejs running like a daemon? My Google-Skill seems to fail [21:32] ryah_: mape: nohup ? [21:32] ryah_: er [21:32] ryah_: MaSch: [21:32] mape: MaSch: spark2? [21:32] aurynn: do date objects in JS have a set timezone method? [21:33] heauxbag has joined the channel [21:33] swaj: MaSch: Forever looked interesting to me, too [21:33] mikeal: kind of [21:33] MaSch: mape: thanks [21:33] bradleymeck: aurynn no, but they do have the concept of UTC [21:33] mape: I've had issues using node to watch node, memory maxed [21:34] mikeal: aurynn: look at date.js [21:34] farhadi: how can I change default value of maxSockets for the underlying agents in new http api. [21:34] mikeal: it has tz support [21:34] mikeal: so does dojo's datetime stuff [21:34] mape: MaSch: it is wonky as hell :/ [21:34] mape: * mikeal [21:34] MaSch: okay [21:34] mikeal: none of it should require a dom [21:34] swaj: MaSch: http://blog.nodejitsu.com/keep-a-nodejs-server-up-with-forever [21:34] bradleymeck: aurynn, https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset <- somehow detects locale somehow [21:34] mape: seems timezones mess up date.js [21:34] MaSch: swaj: yes i read that already.. will have a look on that, thanks a lot [21:34] swaj: MaSch: or https://github.com/indexzero/daemon.node [21:34] mscdex: upstart! [21:34] mscdex: :-D [21:34] tim_smart: pquerna: You wrote the http client Agent stuff right? [21:35] swaj: egad upstart... the plague! [21:35] mikeal: javascript has one of the worst datetime implementations on the planet [21:35] mscdex: upstart works great for me [21:35] mape: tim_smart: someone wanted to get a hold of you, if they didn't already [21:35] mikeal: date.js and dojo both have good higher level fixes [21:35] mikeal: they should be easily portable [21:35] mscdex: and it's simple to set up [21:35] swaj: god upstart is terrible. I'd never rely on it. [21:35] bradleymeck: mikeal have you seen pythons? [21:35] mscdex: swaj: care to elaborate? [21:35] tanepiper: swaj: yea, upstart hates stuff in .home [21:35] mikeal: pythons works [21:35] mape: mikeal: High lever fixed? As in it doesn't work out of the box? [21:35] mikeal: it's not nearly as bad as js [21:36] aurynn: bradleymeck, hmm. Node on my system is in UTC. Should I expect everywhere to be in UTC? [21:36] mikeal: s/lever/level :) [21:36] swaj: mscdex: usually mis-matched configuration. problems with it not restarting services... in general it's just very kludgy [21:36] tanepiper: eh, /home [21:36] tim_smart: mape: Got any idea when and who? [21:36] bradleymeck: aurynn all Date's should be utc based w/ offset [21:36] mape: tim_smart: think someone usual, mikeal ? [21:36] mikeal: out of the box, I wouldn't do anything but UTC [21:36] swaj: mscdex: and besides, I prefer debian for my servers, and I'd never herpify debian with upstart :P [21:36] mraleph: Fuld: tjholowaychuk: I have some thoughts about compiling subset of JS to C/C++ --- (codename "no bullshit" js) --- but I can't find time to get it started. [21:36] mikeal: in javascript [21:36] mscdex: swaj: hmm, i've never had issues with restart not working [21:36] mikeal: what did i do? i'm confused [21:37] tmzt: if you already have a llvm backend can't you just output binary? [21:37] tiemonster has left the channel [21:37] Fuld: mr_daniel: Intriguing. [21:37] mnbvasd: cool, I've got socket.upgrade() to tls working for uncrypted streams :) [21:37] tmzt: I know it's not that simple, but.. [21:37] tjholowaychuk: mraleph: doesnt that mobile framework do that? titanium or something [21:37] Fuld: mraleph: Intriguing. [21:37] bradleymeck: appcelerator [21:37] tjholowaychuk: mraleph: I would be interested [21:37] mape: mikeal: nah just remember someone trying to get a hold of time, someone usual around here, figured you. Perhaps not [21:37] tjholowaychuk: ah yeah that [21:37] tjholowaychuk: it would be reasonably easy [21:37] mikeal: ryah_: how do you get access to the agent object for your request? [21:37] bradleymeck: mraleph, would be good [21:37] swaj: mscdex: I love ubuntu on my desktop, but on a server, Debian Lenny + a few backports is home sweet home. [21:37] mikeal: and can you pass in an existing one? [21:37] mape: *tim... not time [21:38] MaSch: swaj: forever works great, thanks [21:38] swaj: MaSch: np [21:38] dthompson has joined the channel [21:38] tim_smart has joined the channel [21:38] tmzt: ryah_: node doesn't have ten different networking backends, webkit still wins [21:38] mape: tim_smart: 00:55 < micheil> anyone got any other way's to contact tim-smart? [21:38] mape: at least they start with m [21:39] mraleph: the complicated thing is that I want 0% pain low overhead integration between nobs js and V8 js [21:39] Insanity5902 has joined the channel [21:39] bradleymeck: mraleph, using type graphing? [21:39] bradleymeck: or having typed vars? [21:39] mraleph: "type graphing"? [21:40] mraleph: nobs will should look exactly as JS --- no syntax changes at all. [21:40] bradleymeck: well tracing types to determine what function types [21:40] bradleymeck: ah, k [21:40] mraleph: I call it type inference :-) [21:41] aurynn: ACTION is hitting postgres->js type casting [21:41] tanepiper: anyone doing screenscraping with node? [21:41] isaacs_ has joined the channel [21:42] mraleph: the problem is that if I start doing nobs in parallel with my work on V8 my brain will burn out very fast [21:42] tmzt: tanepiper: use beautifulsoup or port it to node [21:42] tjholowaychuk: nobs? [21:42] admc has joined the channel [21:42] mraleph: no bullshit :-) [21:42] tjholowaychuk: oh :) [21:42] MaSch: tanepiper: i did a little experiment on this some time ago.. performes quiet good even with my worse code [21:42] mraleph: it will shout "bullshit" if it sees something it can't process :-) [21:42] tjholowaychuk: hahaha [21:42] Ond has joined the channel [21:42] tjholowaychuk: it would be fun [21:43] tjholowaychuk: not sure how practical or useful [21:43] tjholowaychuk: but still fun [21:43] bradleymeck: mraleph find funding and beat a minion to do it [21:43] mraleph: that is no fun [21:43] RushPL: when I have some file.js with function someFunction(x,y) how can I include this file into my server's global namespace? [21:43] bradleymeck: well then beat a minion to do your v8 work? [21:43] ryah_: isaacs: patches are still not applying cleanly [21:43] isaacs_: ryah_: oh? [21:44] isaacs_: hrm... lemme see. [21:44] mape: tim_smart: that was Wed Jan 19 2011 [21:44] mraleph: bradleymeck: that is no fun either :-) [21:44] Ond: RushPL, module.exports.someFunction = someFunction(x, y) ? [21:44] bradleymeck: rushpl, dont do it unless its config or logging etc, memory leaks / colisions [21:44] tjholowaychuk: mraleph: you could even infer "closures" to some degree [21:44] bradleymeck: rushpl, if you HAVE to, global.somefunction = somefunction [21:44] tjholowaychuk: I toyed around a bit with that a while back [21:44] RushPL: bradleymeck: it's my own math library [21:44] ryah_: mikeal: that's not yet exposed :) [21:44] tjholowaychuk: closures for c [21:45] isaacs: oic, yeah, i changed some stuff, it looks like.. [21:45] isaacs: . [21:45] RushPL: or vector, name it [21:45] ryah_: mikeal: i'll expose it... [21:45] RushPL: and it's shared with client [21:45] tanepiper: yea, going to do some freelance work and they have python code, but i'd like to do it in node if i can [21:45] bradleymeck: rushpl, srsly unless there is -1% chance of colision namespacing > other [21:45] tmzt: global namespace? [21:45] bradleymeck: we dont want php [21:45] tanepiper: because pythong + parsing is just *ugh* [21:45] farhadi: ryah_: what about exposing getAgent function? [21:45] mikeal: ryah_: would aslo be nice if request({agent:false}) opted out of pooling :) [21:45] tanepiper: i suppose i could use davglass's YUI stuff [21:45] ryah_: mikeal: i'm not sure about how that would work... [21:45] tmzt: tanepiper: no parsing, it does the parsing you just get a tree of html stuff (not dom) [21:46] aurynn has left the channel [21:46] aurynn has joined the channel [21:46] mraleph: tjholowaychuk: well there is slightproblem with closures. I am still figuring out how memory would be managed. [21:46] tanepiper: tmzt: we'll it'll mainly be XML i'm working with [21:46] mikeal: you could still use an agent under the hood, but just create it and throw it away after [21:46] tim_smar1 has joined the channel [21:46] isaacs: ryah_: sent [21:46] mikeal: there needs to be some way to opt out of pooling [21:46] bradleymeck: mraleph, want to abandon ref counts? [21:46] mikeal: i love that you pool by default [21:46] tmzt: tanepiper: supports that as well, why do you need screenscraping not dom or sax-like? [21:47] mikeal: 99% of the time it's going to be better for people [21:47] isaacs: ryah_: it was sitting on top of my history-search-forward/backward patch that i've been floating forever [21:47] tjholowaychuk: mraleph: I had some c closure stuff, basically just a tiny superset on c that would just expand the anonymous functions to real functions and map them all in place, and by inspecting what was passed in constructing the signature [21:47] tim_smart has joined the channel [21:47] tjholowaychuk: mraleph: it kinda works with the strict typing but yeah with js I have no clue [21:47] tmzt: isaacs: patch to what? [21:47] tanepiper: tmzt: well i don't know exactly what i'll need yet, but i want to have some stuff to show [21:47] CIA-89: node: 03Ryan Dahl 07master * rb9574b9 10/ (doc/api/http.markdown lib/http.js lib/https.js): Expose http.getAgent - http://bit.ly/go7XPy [21:47] mape: tjholowaychuk: btw how is the date.js thingy working out ;) [21:47] bstmstr has left the channel [21:47] tanepiper: i suppose i could throw something together with this: https://github.com/robrighter/node-xml [21:48] isaacs: tmzt: https://github.com/isaacs/node/commits/master [21:48] tjholowaychuk: mape: not there yet haha, just finishing up docs on this recent project [21:48] Fuld: How many clients do you think you could have connected with socket.io in node.js? [21:48] RushPL: okay but more basic question [21:48] tmzt: funny that harmony uses the python generator syntax [21:48] mikeal: farhadi, ryah_: i think just a property, var req = http.request(….); req.agent [21:48] mikeal: that's enough [21:48] tanepiper: but makes me think of writing a java sax parser on android and makes me want to cry [21:48] tmzt: coffeescript will essentially be python/v8 [21:48] mikeal: i don't know why you would want to me a getAgent method [21:48] RushPL: I have one somefile.js file, how to include it? var module = require("somefile"); does not work [21:48] ryah_: isaacs: still not applying cleanly [21:48] tmzt: tanepiper: yeah, just look at BS, I learned python for that libarary [21:49] isaacs: ryah_: that's unpossible. i just rebased and cherrypicked onto ry/master [21:49] jakehow has joined the channel [21:49] mikeal: there is a pythonic DSL called pyscript designed by aza raskin that compiles to javascript [21:49] isaacs: oh, you pushed other stuff, maybe [21:49] tmzt: tanepiper: http://www.crummy.com/software/BeautifulSoup/ [21:49] tim_smart: ryah_: Won't the Agent prototype need to be accessed for https client? [21:49] tanepiper: tmzt: I do DOM scraping on my own site for this page: http://tanepiper.com/linkedin [21:49] Bonuspunkt: RushPL require("./somefile") [21:49] mikeal: that's already around and works alright [21:49] tanepiper: tmzt: yea i know beautiful soup, i've used it before [21:49] tanepiper: i want to do it in nodejs [21:49] isaacs: ryah_: https://github.com/isaacs/node/commits/ry-master [21:49] mikeal: i thought that was mostly deprecated [21:49] mikeal: in favor of libxml2/pyquery [21:49] tanepiper: mikeal: it is [21:49] tanepiper: well it's cetainly old [21:49] mikeal: tanepiper: someone wrote a thing [21:50] mikeal: it uses jsdom and jquery [21:50] Fuld: How many clients can you have connected with socket.io in node.js? [21:50] mikeal: apricot? [21:50] tanepiper: mikeal: that's what i;d like [21:50] Ond: Yeah, apricot. But it uses sizzle [21:50] isaacs: Fuld all of them [21:50] tim_smart: ryah_: Then a SecureAgent or something could be made which derives from agent [21:50] mikeal: this https://github.com/silentrob/Apricot [21:50] tjholowaychuk: mraleph: #include == require('stdio') ? hahahaha [21:50] tanepiper: mikeal: yup, just found it :) [21:50] MaSch: is there a way to bring jspp together with connect ? [21:50] mikeal: indexzero spent a lot of time doing this stuff [21:50] mikeal: he contributed to Apricot, might be worth pinging him on twitter to see what he settled on [21:50] Ond: I use use soupselect and htmlparser [21:51] Ond: I just use * is what I meant to say [21:51] Fuld: isaacs: Well, I wonder if socket.io can get around the 10,000 sockets limit [21:51] mape: tjholowaychuk: owells, let me know and I'll buy you fancy beer, and snus if you are into it [21:51] mraleph: tjholowaychuk: that would be hard to achieve but this is possible. [21:51] JusticeFries has joined the channel [21:51] tjholowaychuk: mape :D [21:51] isaacs: Fuld: you should bug rauchg_ [21:51] yx has joined the channel [21:51] mraleph: tjholowaychuk: Mike Pall recently release this kind of ffi for luajit2 [21:51] tanepiper: mikeal: thanks, i;ll throw some tests together with this so i can show it off tomorrow, hopfully get some values out of it to see it it's faster :) [21:52] mikeal: i know from experience that there are crazy things jsdom doesn't handle yet [21:52] RushPL: okay so I do "var shared = require("./client/scripts/");" and then in that directory I have a file specifying module.exports=require("./Vector"); .. but in the end my 'shared' variable is empty [21:52] mikeal: it works on a large percentage of pages, but not all quite yt [21:52] tjholowaychuk: mraleph: I would be more interested in a c++ alternative (hate it) [21:52] mikeal: er yet [21:52] RushPL: so I don't quire get it how to get my stuff from there :) [21:52] ryah_: tim_smart: there is a secure agent which derives from http.Agent [21:52] Fuld: rauchg_: Is socket.io smart enough to start dropping the most idle "connections" when there's a huge amount of clients? i.e., the c10k problem [21:52] tjholowaychuk: I will call it, c+.5 [21:52] mape: mikeal: Seems it is broken most of the time, that test coverage isn't that great, got a msg for node-scraper with issues introduced it later versions of jsdom [21:53] mape: *in [21:53] mikeal: i'm not surprised, it's an insane amount of code [21:53] mape: rauchg_: Have you seen the issue on Caught exception: TypeError: Cannot call method 'destroy' of null ? [21:53] mikeal: tmpvar did a shit ton of work [21:54] tim_smart: ryah_: Oh nice. I must have had old code checked out or something. [21:54] mape: mikeal: Yup, but totally black magic, I got 100 watchers for making a shitty wrapper of jQuery and jsDom. People really want something like it so seems like something worth putting time into [21:54] mikeal: totally [21:54] tim_smart: ryah_: I'll see if I can get a secure client worked out [21:54] mikeal: i wish we were more actively attaching this with more than just jsdom tho [21:55] mikeal: there are lots of C parsers and dom's out there [21:55] ryah_: tim_smart: secure client? [21:55] tim_smart: ryah_: https.Client? [21:55] ryah_: tim_smart: ah - there is https.request now [21:56] mape: ryah_: Is micheil still poking at the docs? [21:56] ryah_: i don't want a https.Client shim though - the Client thing is legacy [21:56] ryah_: mape: he hasn't done much in a while [21:56] tim_smart: ryah_: Right. Is http.Client on the way out or something? [21:56] ryah_: tim_smart: yeah [21:56] boogyman has joined the channel [21:56] mikeal: already out in master [21:56] tim_smart: That is good to know [21:56] isaacs: ok, i think it is unavoidable. [21:56] chapel: I like what you did with http.request ryah_ [21:56] isaacs: npm is branching. [21:57] pquerna: tim_smart: hmm? 'agent' stuff? [21:57] mikeal: me too [21:57] mikeal: i was a little freaked out at first [21:57] mape: ryah_: I'm still thinking of a docs*examples page. Seem like the help would be major for new people. [21:57] CIA-89: node: 03Bert Belder 07master * r8da7202 10/ lib/tty_posix.js : Fix meta+character keys on mac - http://bit.ly/f5jNqi [21:57] CIA-89: node: 03isaacs 07master * rd40af91 10/ (lib/tty_posix.js lib/tty_win32.js): Windows line endings. s/\r//g - http://bit.ly/hCL1Ug [21:57] mikeal: but i'm calm now, it's quite nice [21:57] CIA-89: node: 03isaacs 07master * r4927552 10/ lib/tty_posix.js : Fix for meta keys in a weird iTerm state. - http://bit.ly/dPmsfQ [21:57] isaacs: either that, or i just have to shim http(s).request for <=0.3.5 [21:57] chapel: ryah_: how soon for https.request? [21:57] tim_smart: pquerna: Nevermind, my question got answered :p [21:57] ryah_: chapel: already landed [21:57] tim_smart: pquerna: The http client stuff [21:57] chapel: oh [21:57] chapel: sweet [21:57] chapel: will look into it [21:57] chapel: :) [21:57] isaacs: ryah_: huzzah! the repl works! [21:58] chapel: <3 [21:58] dipser_ has joined the channel [21:58] chapel: ryah_+ [21:58] chapel: ryah_++ [21:58] v8bot: chapel has given a beer to ryah_. ryah_ now has 1 beers. [21:58] tjfontaine has joined the channel [21:58] Kingdutch: Yay :D [21:58] chapel: If I could send you a real bear I would [21:58] chapel: and anyone that helped get it working [21:58] Ond: I would never send Ryah a bear. [21:58] chapel: guess I could go look at blame [21:58] isaacs: ryah_: #node.js has spoken. you shall have beers for this. [21:58] Kingdutch: I can now download torrent files and when my PC hibernates it'll shift the lot off to my headless server and start downloading them between 11 PM and 9 AM :D [21:58] mape: Why isn't there a service to send real beer? [21:58] isaacs: we will make this happen. [21:59] chapel: mape: I know, I actually have it written down as an idea [21:59] pquerna: new yc company, go. [21:59] ryah_: chapel: pquerna did the ground work for the https system [21:59] chapel: one company allows you send vouchers for local bars that have accepted being part of it [21:59] chapel: for a couple of dollars each [21:59] mape: chapel: If you actually get it going, flattr will look like piss compared to it. Unless you deliver budweiser :S [21:59] chapel: haha [22:00] aheckmann has joined the channel [22:00] chapel: the only way I see it working logistically is to save up the beers, like once you get 6 you can get a 6 pack sent [22:00] chapel: each individual bear shipped is a lot of addon cost [22:00] estrathmeyer has left the channel [22:00] Ond: Beer, chapel. Beer. [22:00] pquerna: sure, minimum orders make sense. [22:00] chapel: :) [22:01] chapel: I was wondering if there was any demand for it [22:01] chapel: funny thing is, I dont drink [22:01] mikeal: sending me a 6 pack of budweiser is kind of like sending me a stack of AOL CDs [22:01] guntbert has joined the channel [22:01] chapel: heh mikeal [22:01] tjfontaine: tty.open() returns [stream, child], stream should be used for interactivity correct? [22:01] chapel: If I made it, you would be able to choose which beer [22:01] sWORDs has joined the channel [22:01] mikeal: "you know that thing you like? here's the lamer version of that! YOUR WELCOME!" [22:01] mscdex: mikeal: you'll probably need the aol cds for coasters for your beer [22:02] mape: mikeal: Well the US has some nice micro thingys no? Seems like they wouldn't have helping out. [22:02] sWORDs: Hi guys, I'm just starting with node.js and I'm already in trouble. I'm using the TCPserver sample (net.createServer(function(socket){socket.on("data", function(data){) and I would like to use the data that I get as a string, however I keep getting errors (second argument should be a buffer). [22:02] mape: Start small, stay drunk [22:02] mikeal: sure [22:02] Kingdutch: 21 Jan 22:14:55 - Error: ENOENT, No such file or directory './torrents' [22:02] Kingdutch: Why is my node.js server outputting that? [22:02] Kingdutch: O.o [22:02] Kingdutch: all it's doing is listening on port 8 [22:02] Kingdutch: 0 [22:02] isaacs: Kingdutch: somewhere you're trying to access a file at ./torrents [22:02] saikat has joined the channel [22:03] isaacs: maybe a statSync or something? [22:03] Kingdutch: Pretty sure I'm not [22:03] mscdex: Kingdutch: are you allowing access to arbitrary paths from the internets? :S [22:03] Kingdutch: My windows might try to move stuff there [22:03] isaacs: Kingdutch: I don't believe that "all" it's doing is listening on port 80 [22:03] Kingdutch: mscdex: No... that's y =S [22:03] Kingdutch: I guess not o.o [22:03] herbySk has joined the channel [22:03] mape: And if anything, if people hate ryah_ and want coroutines, they can always ship a ton of beer to keep him immobalized [22:03] isaacs: Kingdutch: it's also trying to access ./torrents [22:03] mape: Win win [22:03] Kingdutch: Well it has a http.createServer which listens on 80 [22:04] guntbert has left the channel [22:04] Kingdutch: And for / or /index it'll serve index.html [22:04] Kingdutch: And it'll serve up some regex matches, but none of em match .torrents and even if the regex matches it's a static file being served, you can't input anythng [22:05] Kingdutch: I guess it's what I deserve for automatically moving my torrent files to my downloader :> [22:05] RushPL: how can I debug require? [22:05] RushPL: it is not loading my file as an object [22:06] RushPL: and I'm wondering why [22:06] jamesarosen has joined the channel [22:06] sWORDs: Did anyone understand my question or do I need to provide more info? Or isn't there anyone that knows the answer? [22:07] RushPL: strace does not even show it trying to open my file [22:08] SwiftLayer has joined the channel [22:09] siong1987 has joined the channel [22:09] Wizek: What does http.createClient().request() supposed to do when it doesn't find the host specified? [22:09] chapel: sWORDs: have you tried data.toString() ? [22:09] DTrejo has joined the channel [22:09] Kingdutch: Good night all [22:09] DTrejo: hi everyone [22:09] sWORDs: data.match("textinput") works but data == "textinput" or data.toString() == "textinput" both don't [22:09] chapel: shouldnt it be http.request() Wizek ? [22:10] chapel: sWORDs: did you do console.log(data.toString()) to see what it is? [22:10] mike5w3c has joined the channel [22:11] pair has joined the channel [22:11] Wizek: chapel: http doesn't seem to have a request function [22:11] chapel: what version of node? [22:11] tc77 has joined the channel [22:12] chapel: master branch changed to http.request [22:12] chapel: instead of client [22:12] Wizek: taking a look [22:12] mape: btw, why does var thingy = {}; thingy['random'] work as falsy but thingy['random']['ohNoes'] doesnt? What is the logic behind it? [22:13] mscdex: sWORDs: just do "socket.setEncoding('utf8');" before your socket.on() statement [22:13] sWORDs: chapel, that returns the string and a blanklink, so I'll try to strip /r/n. Tnx [22:13] mscdex: sWORDs: then data will always be a string [22:13] chapel: what mscdex said [22:13] sWORDs: mscdex, I've got that in aswell, but it gave the same error [22:13] chapel: sWORDs: I like to use console.log to check my data while developing [22:13] Wizek: chapel: 0.3.1 [22:14] chapel: it isn't the most elegant thing, but it lets me know if Im getting what Im expecting [22:14] sWORDs: chapel, yeah I just didn't got that far yet. It's my first hour with node [22:14] mscdex: mape: because undefined doesn't have any properties [22:14] mscdex: mape: er wait nvm :> [22:14] pair: hey all. got a problem with write streams, it seems. We are reading in 400+ text files, doing some manipulation, and then writing out using streams. About 10 out of the 400+ files will end up with a single occurrence of garbage in the output file. On different runs it happens in different places in different files. Ever see anything like this before? [22:14] mscdex: misread that [22:14] mscdex: oh wait, no i didn't [22:14] mape: mscdex: yeah sure, I get that, but I don't care 99% of the time :) [22:14] chapel: Wizek: well go along with what you are doing, since you'd have to update to master to get the changes [22:14] mscdex: hah [22:15] echosystm has joined the channel [22:15] farhadi: ryah_: http agent doesn't work as expected. see this: https://gist.github.com/790532 [22:15] chapel: pair: is this synchronous or asynchronous [22:15] pair: async [22:16] c4milo has joined the channel [22:16] sWORDs: I still don't understand why data.length didn't work either [22:16] Fuld: In node.js, if some event happens on the server, how do I send the client a message? This is socket.io [22:16] mape: if (obj['deep']['in']['the']['cave']['where']['mscdex']['plays']['i']['wonder']['if']['he']['is']['still']['there']){console.log('yay')}; ... that is my experience with xml to json :S [22:16] opengeard has joined the channel [22:16] mape: well if only it was that easy [22:17] tjfontaine has left the channel [22:17] echosystm: you read the documentation Fuld [22:17] Fuld: Which I need to create an associative array with a variable that's a reference to the connection handle? [22:17] Fuld: echosystm: The documentation doesn't exist. [22:17] chapel: pair: it could be something with how your async code is working, I would do some small scale tests to see how it is going through, if the garbage you are seeing is consistent in what it is, you could always do a check for it while running [22:18] Fuld: I am trying to read through the source code, but I can't get it big enough to see on my monitor [22:18] russ_nyc: if i have a function that is doing some calculations that take a while, how do I make it non-blocking, so that it will perform a callback once completed? [22:19] AAA_awright: Vows is giving me: (node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit. [22:19] Fuld: <-- temporarily a blind coder [22:19] pair: chapel: we've done a bunch of small scale tests and can't get it to repeat. In the large scale tests, it is pretty much guaranteed to happen, but very rarely and on different files. [22:19] bradleymeck: russ_nyc look into webworkers on node [22:20] chapel: what kind of garbage? [22:20] echosystm: Fuld: on connect, add the socket to an array [22:20] boaz has joined the channel [22:20] echosystm: on disconnect, remove the socket from the array [22:21] chapel: russ_nyc: the only way to make it non blocking with something like calculations would be to send it to a sub worker [22:21] chapel: child worker [22:21] pair: chapel: a small amount of binary data. It varies, but it's somewhere around 10bytes. [22:21] chapel: is the garbage consistent in what it is? [22:21] Fuld: echosystm: Okay, so just like I would in C [22:21] ryah_: farhadi: thanks. making a test... [22:21] echosystm: ie. socketio.on('connection', function(client) { clients.push(client); ....  [22:21] russ_nyc: what would happen if i just wrap it in a setTimeout with 1ms? [22:22] chapel: well it would then block 1ms from the time it was first called [22:22] bradleymeck: it would wait 1ms then block [22:22] mape: russ_nyc: it still blocks :) use workers if possible [22:22] bradleymeck: webworkers are simple [22:22] echosystm: if you want to associate session data with each client, you'll obviously want to use a map for that, so the session will get purged along with the connection on disconnect [22:22] JusticeFries_ has joined the channel [22:22] Fuld: Arrays in Javascript are statically limited, or can I tell v8 to put the array in heap? [22:23] russ_nyc: mape: im trying to make this work in both node and regular browser js [22:23] mape: russ_nyc: Good luck :) [22:23] russ_nyc: thanks :) [22:23] sWORDs: chapel, tnx! socket.write(JSON.stringify(test[data.substr(0,data.length - 2)])); Did the trick [22:23] Fuld: russ_nyc: NYC CODERZ FTW [22:24] bradleymeck: russ_nyc webworkers, they have support in browsers and a iframe fallback for ie as well as multiple node implementations [22:24] JusticeFries has joined the channel [22:24] echosystm: Fuld: javascript arrays are fully mutable [22:24] echosystm: you dont set a length [22:24] aurynn: length sets you [22:24] aurynn: can't you manipulate length to truncate the array? [22:24] bradleymeck: yes [22:24] bradleymeck: it is faster than popping [22:24] echosystm: var a = []; a.push(obj); a.push(obj);.... [22:24] pair: chapel: no, the garbage is different. Mainly binary zeros, but a few other bytes of binary data as well. Different lengths at different places in different files across runs. [22:25] Fuld: Any idea what happens with socket.io when you hit the c10k limit? [22:25] russ_nyc: Fuld: lol [22:25] bradleymeck: fuld silent fail [22:25] Fuld: <-- Washinton Heights coder [22:25] russ_nyc: bradleymeck: is it lightweight? [22:25] chapel: pair: all I can think is to sanity check your data while its being computer/written [22:25] bradleymeck: russ_nyc its the only thing to use on both, could probably make something lighter on node, not in browser [22:25] chapel: but I don't have a lot of experience with large problems like yours [22:25] Fuld: bradleymeck, maybe rauchg_ will add some code to start killing connections when it hits 10k [22:26] Fuld: Or I could do that I guess [22:26] bradleymeck: the question is which connections :/ [22:26] pair: yeah, we've started commenting out our transforms to see if we can find the "sweet spot". It's so strange, though, that it is occuring on less than 5% of all files. [22:26] russ_nyc: i see [22:26] markwubben has joined the channel [22:26] jchris has joined the channel [22:27] jchris has joined the channel [22:27] Fuld: c10k limit is like Lady Gaga's Telephone. "Stop calling stop calling, I don't want to recv() anymore!" [22:28] mape: pair: Edge cases seem like they are always the issue for me using node. Annoyingly enough. [22:29] mape: mikeal: request isn't going into core at all? [22:29] mikeal: i don't think it needs to [22:29] mscdex: pair: out of curiousity, how are you reading in the files and writing back? Buffers to strings via setEncoding? [22:29] mikeal: it's kind of high level [22:30] mikeal: i think ryah's new http client code is high level enough [22:30] mikeal: it makes my job writing request as lot easier [22:30] mikeal: s/as/a [22:30] mape: mikeal: k, well just know I'm happy about it :) Think 90% of my code would fail without it :) [22:30] mikeal: we have npm, being in core isn't a blocker for usage or adoption [22:30] pair: mscdex using read and write streams. setting the encoding on the readstream. [22:30] mape: Would be more if the https issues weren't so bad [22:30] mikeal: mape: i just fixed like 4 bugs [22:30] mikeal: you might wanna pull down master and check out the fixes [22:31] mape: mikeal: https issues? [22:31] mikeal: no [22:31] mikeal: there are no https issues in request [22:31] mikeal: those are in node core :) [22:31] mape: that is where I've had issues, rewrote 100 lines of code into a shitty exec curl instead [22:31] mape: it works but yeah, doesn't feel cosy [22:32] chapel: well https.request works now mape [22:32] mape: chapel: Really? reallly? [22:32] chapel: yeah, on master [22:32] chapel: thats what ryah_ said [22:32] mikeal: fixed relative fowards, error on maxredirect, support for proxies, and support ofr specifying encoding [22:33] mape: chapel: https://gist.github.com/764187 that seems to not like things [22:33] tanepiper: mikeal: will request even be neeeded with the new http stuff? [22:33] DTrejo has joined the channel [22:33] tanepiper: (request is awesome though at the moment) [22:33] mape: just die for the fun of it [22:33] chapel: are you on master mape ? [22:33] benburkert has joined the channel [22:34] chapel: its var https = require('https') [22:34] chapel: and var request = http.request [22:34] mape: chapel: I was, to many beers to be on master now, I'm a submissive drunk [22:34] chapel: https [22:35] chapel: but yeah mape, as of like 0.3.2 I think on until recently, https didn't work at all [22:35] mape: I wonder how long it takes for someone to make a kitchensink module for node that moves towards php [22:35] chapel: so when you created that, it didnt work [22:35] mape: chapel: yeah [22:35] davidascher has joined the channel [22:36] nooder has joined the channel [22:36] mape: Gotta love things that improve fast and break things [22:36] mikeal: tanepiper: yes [22:36] mape: Making things better <3 [22:36] jchris has joined the channel [22:36] nooder: hi. so anyone using node for production in web? [22:37] mape: nooder: Yeah [22:37] nooder: mape, just for some services or only node? [22:38] mape: nooder: Only node, express for some and socket.io for most. Still having issues but it handles 150k req a day with mongo [22:38] nooder: i mean is there any problems and what frameworks [22:39] mape: But then again I get Caught exception: TypeError: Cannot call method 'destroy' of null every couple of seconds :) [22:39] hackeron has joined the channel [22:39] mape: But there is a pull request for that, just a matter of rauchg_ merging it [22:40] zemanel: hi [22:40] mape: Hey [22:40] nooder: what about crashes? [22:40] zemanel: any of you fine gentlemans has any suggestions on how to implement resource harvesting "ticks" on MM strategy games? [22:40] mape: nooder: I'm using spark2 to scale it across 6 cores, and using websockets as ipc [22:40] AAA_awright: If under some conditions Node.js never returned a response to an HTTP request could that cause a memory leak (of sorts), has anyone had a problem with that? [22:41] AAA_awright: zemanel: Like setInterval()? [22:41] nooder: mape, thats good :) [22:42] mape: nooder: Well kinda, it keeps throwing socket not readable now and then, without any consistant pattern. But yeah, good problem to have :) [22:42] zemanel: AAA_awright: that's the easy part. what if the process breaks for example? a player wouldnt get any resources until a new process [22:42] chapel: zemanel: build a function that handles a setInterval, and add players to it, as it hits the interval, it runs the resource tick [22:42] nooder: mape, are you restarting instances from time to time? or they are really stable and not leeching? [22:42] mape: nooder: Well spark2 kills children as they don't want to live any more [22:42] mape: Only had spark2 die once because of memory issues [22:42] bradleymeck: cant live w/o peepaw! [22:42] zemanel: chapel: ye but what if the game universe has 10.000 players? :) [22:43] AAA_awright: zemanel: Well how would you get around that then? you tell me [22:43] AAA_awright: [22:43] zemanel: AAA_awright: thats why im paying you [22:43] chapel: thats why you have a separate function or even sub routine that handles the tick [22:43] tc77 has joined the channel [22:44] AAA_awright: zemanel: Let's say you couldn't do it with setInterval. You would have to calculate how many resources the player had at any given point in time. [22:44] chapel: it could be used in a large scale way, or you could implement it on a per game basis [22:44] jchris has joined the channel [22:44] mape: nooder: But yeah, "most of the time" mongo spikes CPU... Not node [22:44] echosystm: mape: woudlnt it be better to use domain sockets for IPC? [22:44] mape: node crashes a ton though [22:44] AAA_awright: zemanel: You just need to calculate how things have changed since the last time something was recorded to the database, using timestamps and such... where you go from there depends on what you're doing [22:44] chapel: mape: not if you code right [22:44] chapel: :P [22:45] zemanel: AAA_awright: good point [22:45] chapel: if there is a consistent tick value [22:45] markstory has joined the channel [22:45] chapel: it would be easy to calculate in reverse like AAA_awright brought up [22:46] zemanel: chapel: yeah but the player may have spent some resources along the way, so calculating at a given time may not work directly [22:46] mikeal has joined the channel [22:46] AAA_awright: If things grow with interest, you use Math.pow to calculate interest, etc... Or Math.exp for continually compounding interest [22:46] AAA_awright: zemanel: That's why you calculate from the last event recorded in the database [22:46] chapel: well you just need to track spent resources and accumulated, and just have fall backs that can reverse calculate [22:46] mikeal: tanepiper: request does a lot of stuff that you don't wanna write yourself that also aren't in the new node core http api [22:47] zemanel: AAA_awright: its for a space based strategy game, a la Eve Online/ OGame [22:47] mape: chapel: well yeah.. helps if modules don't break := [22:47] AAA_awright: zemanel: See also #bitcoin-gamedev we might be intersted in this idea [22:47] zemanel: sure thanks m8 [22:47] zemanel: whats bitcoin ? [22:48] tanepiper: mikeal: fair enough, i haven't checked out the new stuff just yet, i was having a brief scan though it though [22:48] tanepiper: zemanel: something that overheats my laptop :D [22:48] mikeal: request will need to get massively refactored [22:48] mikeal: for the new api [22:48] nooder: are they any real alternatives to mongo? [22:48] tanepiper: nooder: couchdb [22:48] mikeal: hahaha [22:48] mikeal: CouchDB! [22:49] chapel: couchdb! [22:49] chapel: :) [22:49] nooder: why? i cant get it work even as fast as mysql [22:49] isaacs[away]: couchdb!! [22:49] tanepiper: i can't even use mongodb because mongo means something else here, and i laugh every time i see it [22:49] mikeal: i'm going to keep requests API the same during the shift to the new node core http api [22:49] nooder: it was 3x slower [22:49] AAA_awright: zemanel: Let's say you have a virtual bank that gives continually compounding interest, 1% per timestamp... They deposit $1.00 at timestamp 5.00, when they re-visit at 10.50 and withdraw $1.00 you do a quick calculation how much interest has accumilated since the last transaction, before processing it. [22:49] AAA_awright: So it would be... [22:50] paulrobinson has joined the channel [22:50] mikeal: fast for what? [22:50] tanepiper: mikeal: cool :) i use it for a couple of things [22:50] nooder: thats good question [22:51] zemanel: AAA_awright: hum. what's it good for? :) [22:51] chapel: nooder: couchdb isn't entirely about speed [22:51] chapel: but if you are worried about speed, you shouldn't be using couchdb [22:51] mikeal: it's about durabiliyt [22:51] chapel: err [22:51] chapel: wtf [22:51] chapel: ... [22:51] chapel: mongo [22:51] chapel: err, mysql [22:51] chapel: fuck me [22:51] chapel: sideways [22:51] davglass has joined the channel [22:51] mikeal: but insert speed for an object is usually compared to a SQL instert of multiple rows in related tables [22:51] AAA_awright: zemanel: That process I described is the only way you can process non-quantum events (non-discrete events that aren't triggered or happen at specific intervals, but happen continually) [22:52] chapel: if you are worried about speed, you shouldn't be using mysql [22:52] CrazyGoogle: is there something better on couchdb than mongodb ? [22:52] echosystm: are there any databases that can automatically handle a split brain problem where the network gets partitioned? [22:52] mikeal: because you don't break up your data when like you do for sql when you use as document store [22:52] nooder: chapel, mysql is pretty fast [22:52] mikeal: CrazyGoogle: it doesn't corrupt if the process crashes mid-write :) [22:52] tanepiper: haha isaacs what madness is this! https://github.com/isaacs/_ify [22:52] zemanel: AAA_awright: hummmmm [22:52] mikeal: HTTP API [22:52] mikeal: generational map/reduce [22:52] isaacs: tanepiper: it's a currying lib for js [22:52] mikeal: _changes feed [22:52] CrazyGoogle: mikeal: i didnt any crashes yet [22:52] mikeal: full geospatial index [22:52] jashkenas: someone needs to lend sam ruby a bit of assistance... [22:52] isaacs: tanepiper: not a lot of code. [22:52] ezmobius_ has joined the channel [22:53] mikeal: yet! [22:53] isaacs: tanepiper: from my pre-node days, actually [22:53] jashkenas: to quote: "That being said, my own personal efforts have stalled for the moment, at least as they relate to node.js. jsdom is buggy, I’ve yet to get responses to email, tweet, or even post to the mailing list. I’d fork the project myself, but if you read to the bottom of my post, I can’t even seem to figure out how to run the tests." [22:53] mikeal: jashkenas: what is that from? [22:53] jashkenas: http://intertwingly.net/blog/2011/01/21/MicroLark [22:53] CrazyGoogle: mikeal: ok, so as i understand mongodb is better [22:54] chapel: nooder: mysql has caveats that don't mesh well with node.js [22:54] tanepiper: isaacs: ASCII boobies as arguments ftw! [22:54] mikeal: watching Sam Ruby figure out how to contribute to a GitHub project is like watching an old man try to work a digital camera [22:54] isaacs: ascii boobies? [22:54] mikeal: CrazyGoogle: well, that's just wrong :) [22:54] isaacs: (_,_) looks more like a butt to me [22:54] nooder: chapel, yep. i would like to try new web project with node and smth new. like mongodb [22:54] CrazyGoogle: mikeal: as example mongodb can map/reduce also [22:54] mikeal: mongodb was written for analytics, it's very very good at that [22:55] mikeal: but that map/reduce is across the entire dataset every time you query [22:55] mikeal: that's not sustainable [22:55] chapel: yeah [22:55] tanepiper: yea, that does look like a butt - these look like clevage: (_,_,_) [22:55] nooder: yes [22:55] mikeal: couchdb map/reduce stores the result in a btree and updates incrementally [22:55] chapel: (o )( o) [22:55] chapel: thats cleavage [22:55] aconbere has joined the channel [22:55] mikeal: on man [22:55] CIA-89: node: 03Ryan Dahl 07master * r68f2aa2 10/ (lib/http.js test/simple/test-http-agent.js): http: agent should cycle on close - http://bit.ly/e9jIBX [22:55] ryah_: farhadi: fixed---^ [22:56] mikeal: oh man [22:56] tanepiper: nooder: i'm using couchdb, and over a local connection it's certainly faster than MySQL for me, even with _view + _list generation [22:56] CrazyGoogle: mikeal: never had problems with how map/reduce work for mongodb [22:56] mikeal: how big is your dataset? [22:56] bradleymeck: chapel: correction : mysql's C API has caveats that don't mesh well with node.js [22:56] tanepiper: to couchone, results vary on traffic [22:56] chapel: tanepiper: _view _list generation has a one time cost [22:56] tanepiper: chapel: exactly [22:56] echosystm: does anyone know of a distributed database that wont mess up state if the cluster gets split in half? [22:56] chapel: unless data is changed, results are stored [22:56] mikeal: bradleymeck: so, libdrizzle supports the entire mysql api [22:57] mikeal: and it's all non-blocking [22:57] isaacs has joined the channel [22:57] bradleymeck: yub [22:57] CrazyGoogle: i dont like couchdb even already because its writen in erlang [22:57] tanepiper: chapel: even then, changes are usualyl appended - not the whole view or list [22:57] bradleymeck: mysql as a db has no problems w/ node [22:57] chapel: echosystm: couchdb :) [22:57] mikeal: if we had bindings for libdrizzle it could work for both drizzle and mysql [22:57] mikeal: that would be nice [22:57] mikeal: CrazyGoogle: hahahaha [22:57] mikeal: you never touch erlang [22:57] CrazyGoogle: second what is wrong - its belongs to apache [22:57] chapel: bradleymeck: yeah good point, just feel like couchdb or mongodb mesh better with node [22:57] mikeal: it's written by people who have written databases before, mongodb is just a bunch of randos [22:57] nooder: bradleymeck, are they any? i'm using node-libmysqlclient and it seems stable [22:57] isaacs_ has joined the channel [22:58] farhadi: ryah_: thanks [22:58] echosystm: chapel: say you have 4 couchdbs in a cluster - what happens when 2 of them don't die, but lose their connection to the others? [22:58] mikeal: couchdb is great with node because it's http, and node has better http suppor than any other platform [22:58] mikeal: echosystm: umn… nothing [22:58] chapel: they keep running echosystm :P [22:58] CrazyGoogle: mikeal: i know erlang good enought to say that, its not first projekt made in erlang, as example there is "great" xmpp server [22:58] mikeal: couchdb has peer-to-peer replication [22:58] Ond: (Riak also has an HTTP interface) [22:58] echosystm: they keep accepting writes? [22:58] mikeal: it can do 3 way sync [22:58] isaacs__ has joined the channel [22:58] bradleymeck: nooder, the bindings mask the blocking issues, but you can see queuing if you are really trying, node-mysql is a bit diff [22:59] andrzejsliwa has joined the channel [22:59] nu- has joined the channel [22:59] mikeal: Riak is great if you're working with a giant dataset that you can't seperate that needs high availability [22:59] CrazyGoogle: mikeal: thats why ryah write http supper new for 0.3 [22:59] mikeal: the querying in Riak is still limited [22:59] echosystm: if they keep accepting writes whithout being able to propagate those changes to the rest of the cluster, the state of your application is going to get messed up [22:59] chapel: mapreduce rocks it though [22:59] Ond: Why is separation an issue in Riak? [22:59] CrazyGoogle: mongodb has http interface too [22:59] mikeal: CrazyGoogle: i think i'm done talking to you [22:59] chapel: and couchapps in couchdb are awesome [22:59] prettyrobots has joined the channel [23:00] Ond: It is my understanding that you can assign a different back end to each bucket. No other nosql database can do this, right? [23:00] jakehow has joined the channel [23:00] chapel: mikeal: did you see Kanso? [23:00] mikeal: couchapps are cool, limited but cool [23:00] Ond: I mean, for one you could use flat files, and bitcaks for another. [23:00] mikeal: chapel: nope [23:00] chapel: www.kanso.com [23:00] mikeal: bitcask is cool [23:00] tjholowaychuk has joined the channel [23:00] chapel: bah [23:00] chapel: hold on [23:00] mikeal: that website is BROKEN [23:00] mikeal: in a spectacular fasion [23:00] echosystm: so how can you avoid the state of your application getting screwed up from that split brain problem with couchdb? [23:00] chapel: http://kansojs.org/ << there mikeal [23:01] tanepiper: yea, thinking of writing my blog using kanso on couchdb [23:01] chapel: tanepiper: have you installed kanso yet? [23:01] nooder: bradleymeck, you are not using bindings? why? i'm pretty happy with them. but there is no heavy load, it just takes values from mysql and puts to cache. so i carry just about speed [23:01] chapel: its fairly early, been talking to the guy behind it [23:01] tanepiper: and tying it to a Couchdb _changes emitter in nodejs to handle other stuff (as mikeal suggests doing) [23:02] chapel: but for me, push doesn't work [23:02] echosystm: does couchdb have any node fencing mechanisms? [23:02] mikeal: chapel: hehe, this guy never say node.couchapp.js :) [23:02] chapel: I have rooted the problem, just not sure how to fix it [23:02] tanepiper: chapel: not yet, not had time and probably won't until next month [23:02] chapel: ahh, well it should work by then [23:03] chapel: mikeal: the advantage isn't node, the advantage is writing code once in couchdb that handles client and server side rendering [23:03] isaacs_ has joined the channel [23:03] chapel: so you can have full ajax site, but also responds accordingly with static non-js clients [23:03] chapel: like google [23:03] mikeal: this is interseting tho [23:03] techwraith has joined the channel [23:03] Aria has joined the channel [23:04] mikeal: chapel: you can do that with node-couchapp you just have to know the couch api a bit better [23:04] chapel: sure mikeal [23:04] mikeal: chapel: but mainly, node-couchapp should be a dependency of this [23:04] bradleymeck: nooder, im not pressed for speed but rather install ease for my client [23:04] mikeal: this is a cool higher level thing, but under the hood it could use node-couchapp to build the design doc [23:04] chapel: its possible without anything, its just he wrote the couchdb stuff to make that easier [23:04] mikeal: then you could get stuff like watchin for changes and resyncing for free [23:04] chapel: yeah mikeal [23:04] chapel: Ill recommend that [23:05] paulrobinson has left the channel [23:05] chapel: since his actual node code is having issues [23:05] chapel: I cant get it to push [23:05] dguttman has joined the channel [23:05] mikeal: my long term vision for node-couchapp isnt't hat people build applications with it directly but that people build tools with it [23:05] chapel: ah [23:05] chapel: definitely then [23:05] echosystm: does anyone have an answer to my questions? :P [23:05] mikeal: it still needs some work, but I commit to it often [23:05] tanepiper: thats why i love cradle, cos it takes couch designs as actual javascript. Although I wish they would merge in my pull requests for _list and _update support [23:05] farhadi has left the channel [23:05] chapel: cause the real gold for his app is the commonjs stuff for design docs [23:05] mikeal: echosystm: split brain? [23:05] tanepiper: i hate running a custom version [23:05] echosystm: yes [23:06] admc has joined the channel [23:06] CrazyGoogle: http://www.slideshare.net/gabriele.lana/couchdb-vs-mongodb-2982288 [23:06] mikeal: cradle is interesting, but it's just so much code [23:06] echosystm: say you have 2 nodes in data centre A and 2 nodes in data centre B [23:06] mikeal: i have a hard time using that much code between me and couchdb [23:06] chapel: I prefer writing my own wrapper for couch [23:07] echosystm: if the link goes down between them and the nodes keep running independently of the others, the state of your application is going to get screwed up [23:07] mikeal: i mostly use request directly from node [23:07] chapel: I found that out after using a few modules [23:07] mikeal: and a wrapper around jquery.ajax in the browser [23:07] mikeal: echosystm: why? [23:07] echosystm: think about it [23:07] mikeal: i have [23:07] smcq has joined the channel [23:07] mikeal: i work on CouchDB :) [23:07] chapel: echosystm: they use _changes [23:07] tanepiper: CrazyGoogle: Chalk n Cheese, Cats and Dogs [23:07] chapel: to sync [23:07] mikeal: you need to look at the CouchDB datamodel [23:07] echosystm: client A sees ds A, client B sees bs B [23:07] mikeal: it's not at all like mongodb or sql [23:07] chapel: the clients aren't going to match until they link up again [23:08] echosystm: they both make changes based on the state they see from each respective ds [23:08] mikeal: you use bi-direcitonal replication [23:08] mikeal: so writes to both are eventually consistent [23:08] mikeal: when the link goes down both can still update [23:08] chapel: yep [23:08] saikat has joined the channel [23:08] echosystm: when the link comes back up, douchdb (i imagine) will try to merge the changes [23:08] dustinwhittle has joined the channel [23:08] mikeal: when the link comes back up they replicate and sync up [23:08] echosystm: hence the state of your application is going to get messed ip [23:08] tanepiper: For me, I need ease of use and data security, not speed. I don't get either of those with mongodb [23:08] echosystm: this is why you need node fencing [23:08] mikeal: if both updated the same doc, it'll be in a conflict state that you can resolve, but both have the same revision as "winning" the conflict and current so you can still write [23:08] nooder: what about incremental id's in couch/mongo? [23:09] tanepiper: google "Mongo DB outages" vs "CouchDB Outages" [23:09] nooder: just don't use? [23:09] tanepiper: CouchDB wins that one [23:09] mikeal: security in couchdb is pretty extensive but it's a learning curve for sure [23:09] jpick has joined the channel [23:09] tanepiper: nooder: UUID's over incremental, but you do get a sequence [23:09] mikeal: cuase you got readers and roles on databases, and then the validation functions in each db for writes [23:09] echosystm: mikeal: so how do you decide which version is correct? [23:09] mikeal: nooder: incremental id's can't replicate [23:09] nooder: tanepiper, for web uuid seems pretty ugly... [23:09] tanepiper: echosystm: couchdb doesn't [23:10] mikeal: neither can atomic operations [23:10] mikeal: those two things just fail sync replication [23:10] tanepiper: the user has to decide [23:10] echosystm: i know, your application has to [23:10] dylang has joined the channel [23:10] mikeal: so you just don't include them in a good db data model [23:10] joelklabo has joined the channel [23:10] mikeal: echosystm: no, couchdb decides [23:10] mikeal: it's basically the highest rev wins [23:10] mikeal: but you can resolve the conflict if you have better logic [23:10] tanepiper: nooder: include a 'slug' property of the document [23:11] echosystm: how does that not mess up the state of your application? [23:11] Ond: Is there an npm command to view installed modules? [23:11] tanepiper: don't use the UUID, if you need pretty urls that way [23:11] mikeal: the main point, is that being in "conflict" doesn't mean you can't access or write to that document, you totally can [23:11] isaacs: Ond: npm ls installed --noreg [23:11] mikeal: echosystm: what state, give me an example? [23:11] Ond: Thank ya thank ya [23:11] echosystm: oh [23:11] nooder: thats crazy :( [23:11] isaacs: Ond: or just "npm ls installed" if you wanna see all the details and stuff [23:11] echosystm: *ok [23:11] mikeal: is the state global to a bunch of documents [23:11] mikeal: if it is, then that state is a view it's not the document store [23:11] mikeal: so it's fine [23:11] echosystm: say we have a document for a list of peoples names [23:12] mikeal: no [23:12] mikeal: you don't [23:12] echosystm: ? [23:12] mikeal: you have a document for every person [23:12] mikeal: and a view that gives you an index of the names [23:12] echosystm: ok, say we have a document for every person [23:12] mikeal: the document store is replicated around [23:12] echosystm: the cluster gets partitioned [23:12] mikeal: no [23:12] mikeal: forget partitioning [23:12] mikeal: that's not a factor here [23:12] echosystm: client A changes the name of index 1 [23:12] mikeal: it's only a factor in the db model you already have in your head [23:12] echosystm: ? [23:12] mikeal: there is no index 1 [23:13] mikeal: ever [23:13] nooder: thats the point :( [23:13] mikeal: i know that mongodb is basically a lot of document store sugar on top of what is essentially a relational database [23:13] mikeal: but CouchDB is not [23:13] mikeal: and Riak is not [23:13] echosystm: what do you mean there is no index 1 [23:13] tilgovi has joined the channel [23:13] mikeal: and everyone else who is a real document store is not [23:14] mikeal: nothing is inserted numerically [23:14] mikeal: there are documents, they have id's [23:14] mikeal: the id's are UUIDs [23:14] tanepiper: ^ and you can get the seq of documents [23:14] mikekelly has joined the channel [23:14] mikeal: tanepiper: that is going to confuse him [23:14] nooder: mikeal, so how you change uuids to pretty names? [23:14] mikeal: create a view [23:15] mikeal: use map/reduce to create a normalized index [23:15] mikeal: and that view will be updated on read [23:15] mikeal: the state of the view is in relation to the database sequence at whatever time you read it [23:15] mikeal: so it's consistent [23:15] echosystm: ok let me try another example [23:15] tanepiper: you also don't *have* to use uuid as Id, you can use something like "/blog/mypost" as the ID [23:16] echosystm: say you have a document like this... { a: 1, b: 2 } replicated between two instances [23:16] echosystm: the instances lose the connection between themselves [23:16] warz has joined the channel [23:16] softdrink: base64 'em [23:16] nooder: when i just met couchdb, i thought that this is the way how new fast db will be made. but my test showed up that views totally screwed up [23:16] echosystm: a client on the first instance changes that document to { a: 5, b: 2 }, while a client on the other instance changes that document to { a: 1, b: 5 } [23:16] echosystm: what happens when the link comes back up? [23:17] chapel: nooder: you could have a slug value in a document that you use for the pretty url instead of the uuid [23:17] chapel: looks at revision time [23:18] echosystm: right, so the last change wins correct? [23:18] chapel: err, rev number [23:18] chapel: it should [23:18] chapel: you can build in such logic [23:18] clvv has joined the channel [23:18] echosystm: so then the change that the first client made has been lost completely, correct? [23:18] chapel: there can be a revision history before a compaction [23:18] isaacs_ has joined the channel [23:18] chapel: I am not as well versed as mikeal btw [23:18] chapel: so don't take what I say as gospel [23:19] tanepiper: echosystm: http://guide.couchdb.org/draft/conflicts.html there is a whole chapter on conflic management here. While certainly talk about it here, or in #couchdb, i would recommend reading it [23:19] mikeal: echosystm: when the links come back it'll be in conflict [23:20] mikeal: which ever revision id has a higher hash will win [23:20] echosystm: now another example, a client on the first instance changes another document based on what it thinks is { a: 5, b: 2 } [23:20] mikeal: for the time being, unless you decide to resolveit [23:20] mikeal: but i have production instances with conflicts that stay forever [23:20] nooder: you are using couchdb because of good replication? [23:20] echosystm: while the other client changes another document also based on what it thinks the state of the othe rdocument is [23:20] mikeal: chapel: if a doc is in conflict compaction wont' remove the old revisions [23:20] jashkenas: mikeal: do you have any big couchapps that you've worked on that are public? [23:20] echosystm: how can you possibly resolve that without messing up the state of your application? [23:20] mikeal: nodeconf.com [23:21] mikeal: 2011.jsconf.com [23:21] mikeal: aminutewithbrendan [23:21] echosystm: in these circumstances, the only thing i have ever seen people do is node fencing [23:21] mikeal: the meebo bar is a couchapp [23:21] echosystm: witnesses + STONITH [23:21] mikeal: it has something like 8 million users [23:21] jashkenas: thanks. [23:21] mikeal: echosystm: that's because the data model wasn't build with offline in mind [23:22] mikeal: echosystm: CouchDB was built with a lot of knowledge of how Lotus Notes was designed [23:22] echosystm: what if your application makes that impossible? [23:22] mikeal: and Lotus Notes did one thing great, offline replciation [23:22] chapel: awesome mikeal [23:22] _derferman has joined the channel [23:22] jpld has joined the channel [23:23] tanepiper: a) rethink your application b) couchdb might not be for you? [23:23] mikeal: my blog is a couchapp, mikealrogers.com [23:23] CrypticSwarm has joined the channel [23:23] mikeal: yeah, there is a large problem set that CouchDB doesn't fit [23:23] echosystm: ok [23:23] mikeal: there is no argument right now that is CouchDB vs Redis [23:23] mikeal: they solve totally different problems [23:24] mikeal: you know what also works really well, Postgres :) [23:24] chapel: mikeal: non-www doesn't work on your link? [23:24] mikeal: i know it's all boring to use SQL [23:24] kuhrt has joined the channel [23:24] mikeal: but postgres has every features you've ever thought of [23:24] mikeal: chapel: probably, i'm lazy :) [23:24] chapel: :) [23:24] echosystm: postgres still doesnt really have good distribution features, at least not that i am aware of [23:24] brianc: postgres hell-yeah [23:24] mikeal: oh yeah it does [23:24] echosystm: pretty much everyone just uses log shipping [23:25] mikeal: you just don't know how to use them [23:25] mikeal: neither do I, but is definitely has them [23:25] brianc: has good documentation too [23:25] mikeal: what i do is just ask Josh Berkus what I to do [23:25] mikeal: :) [23:25] mikeal: i don't know if that scales [23:26] mikeal: but you can hire him to tell you what to do [23:26] mikeal: so i guess it does scale [23:26] jashkenas: mikeal: I think the date is wrong on the latest aminutewithbrendan post, fyi. [23:26] echosystm: lol [23:26] mikeal: http://www.pgexperts.com/ [23:26] mikeal: tell chris williams [23:26] mikeal: he runs it [23:26] mikeal: there is a lot of production CouchDB [23:27] mikeal: UbuntuOne is all CouchDB [23:27] echosystm: i dont doubt couchdb is a good db [23:27] mikeal: every Ubuntu version for a year and a half ships with CouchDB [23:27] mikeal: they have over a million database [23:27] mikeal: they serve 600K replication requests every 10 minutes [23:27] echosystm: i'm just trying to work out its limitations [23:27] mikeal: CouchDB is the primary datastore now for the BBC [23:28] echosystm: which is evidently that its not ideal where your application cannot accept conflict as an inevitable thing [23:28] mikeal: well, can your application ignore conflict? [23:28] echosystm: not really [23:28] mikeal: you don't see this a lot in production [23:28] echosystm: the state has to be perfect [23:28] mikeal: because if you're update heavy [23:28] chapel: echosystm: look into bigcouch then [23:29] mikeal: then once you have a conflict, you're like 100 updates in by the time you even see there was a conflict and then you don't care [23:29] mikekelly: I have a big couch [23:29] mikeal: if you aren't update heavy, you're unlikely to get a conflict [23:29] echosystm: i am very update heavy [23:29] echosystm: _very_ [23:29] mikeal: echosystm: do you need to be? [23:29] echosystm: yes [23:29] mikeal: could that just be a view [23:29] mikeal: and you could be insert heavy [23:30] echosystm: hmm [23:30] mikeal: could you mostly write new data and then expose a view as the state that you care about? [23:30] mikeal: cause that would be consistent, wouldn't have replication problems, and never get a conflict [23:30] chapel: you could use something like redis for local memory store, and incrementally write to couchdb, so you lessen your actual writes or chances for conflicts [23:30] mikeal: like, how you structure a voting system in CouchDB [23:30] mikeal: is that you insert a document for each vote [23:30] mikeal: and then you use map/reduce to sum it up [23:30] mikeal: that's what banks do [23:30] mikeal: your balance is really the history of all your transactions [23:30] mikekelly: banks use couch db? [23:31] chapel: they should [23:31] chapel: :P [23:31] mikeal: they don't atomically increase and decrease you back account [23:31] jchris1 has joined the channel [23:31] mikeal: they insert a record that adds or removes data [23:31] pquerna: well [23:31] mikeal: i don't know of a bank using CouchDB, it's WAY too new [23:31] echosystm: the issue is that i cant have some clients seeing one version of the data while others are seeing another [23:31] spetrea has joined the channel [23:31] mikekelly: I see [23:31] mnbvasd: I've been prodding tls.js some more, please can I have commments regarding an api to upgrade clear text connections? [23:32] mnbvasd: https://gist.github.com/790640 [23:32] echosystm: whenever something changes, all clients are alerted of the change [23:32] mikeal: echosystm: well, if you have two datacenters on opposite sides of the world, they can't really be consistent unless all requests incur the latency of the link between the datacenters [23:32] echosystm: yes [23:32] echosystm: the writes basically need to be synch [23:33] mikeal: you should look in to Riak [23:33] echosystm: if split brain occurs, there needs to be consensus on which one to shut down [23:34] mikeal: you should really check out Riak [23:34] echosystm: i looked into riak, but apparently that wont do what i need [23:34] mikekelly: ... [23:34] mikeal: of all the giant distributed datastores that attack this problem it's probably the best [23:34] gryzzly_ has joined the channel [23:34] Fuld: What does expresso do in socket.io? Does it handle the socket connections from the clients for your server? [23:34] tjholowaychuk: Fuld: it's a test framework [23:34] echosystm: expresso is a testing framework Fuld [23:35] mikeal: tjholowaychuk: dev-dependencies dude [23:35] mikeal: test requirements shouldn't be in the base dependencies list [23:35] tjholowaychuk: mikeal ? I dont work on socket.io [23:35] Fuld: What part of socket.io abstracts away the HTTP connections to look like a socket to your node.js code? [23:35] tjholowaychuk: it's in the package.json as a dep? [23:35] mikeal: i think so [23:35] tjholowaychuk: I wouldnt use npm for dev deps [23:35] tjholowaychuk: submods are fine [23:35] isaacs: tjholowaychuk: you can use "devDependencies" [23:36] isaacs: tjholowaychuk: just like regular deps, but only when you do -dev or `npm link` [23:36] mikeal: Fuld: that's in socket.io's code [23:36] mikeal: thats kind of what it does [23:36] tjholowaychuk: i dont mind submods :) [23:36] isaacs: that's where test harnesses and stuff shoudl live [23:36] mikeal: it's the whole point of the lirbary [23:36] mikeal: i can't stand submods [23:36] gryzzly_: I'm following dailyjs 9 posts node-tutorial, and I am having some trouble with expresso. I have an app, that has this line: var Document = require('./models.js').Document(db); and model.js exports.Document and it actually works fine in browser. But expresso tells me "app.Document" is == undefined ==. [23:36] mikeal: i have a bad taste in my mouth from abuse of them in build systems [23:36] aurynn: I'm thinking I may have to just have every timestamp through postgres.js be in UTC [23:36] brianc: aurynn: why? [23:37] aurynn: brianc, the conversions are giving me some trouble [23:37] brianc: aurynn: what kind of trouble? [23:37] handle_with_care has joined the channel [23:37] brianc: aurynn: I got date round-tripping working in node-postgres [23:37] aurynn: brianc, mostly locale-related on the javascript side [23:38] gryzzly_: Does anybody know why wouldn't expresso have an access to the required module? [23:38] aurynn: brianc, .toLocaleString() is useful, but, I don't know how to sensibly set a timestamp's timezone when I'm pulling the date out of PG [23:38] tjholowaychuk: gryzzly_: --include lib ? [23:38] aurynn: Date objects seem to have none of that [23:39] tjholowaychuk: gryzzly_: you can alter require.paths with -I, --include [23:39] Fuld: If I do Client.send("yo!") whilst the client is disconnected (between HTTP GETs for example), will socket.io save my message and send it when the client connects again? [23:39] gryzzly_: tjholowaychuk: thanks! if they are in the same folder, how would I specify it? --I . ? [23:39] rpflo has joined the channel [23:40] tjholowaychuk: gryzzly_: yeah $ expresso --include lib my.test.js [23:40] tjholowaychuk: or omit the test for test/*.test.js [23:40] aurynn: brianc, it's seeming reasonable to me to have everything just in UTC by default, and allow for manipulation based on tht [23:40] gryzzly_: tjholowaychuk: cool, thanks! [23:42] brianc: aurynn: I disagree. if someone gives you a date to insert in CST you should insert it with the CST timestamp [23:42] aurynn: brianc, right, always. But I'm thinking on how to get dates back from PG. [23:42] aurynn: hm [23:42] aurynn: I think I need to test something [23:43] aurynn: Ahh [23:44] brianc: aurynn: node-postgres will convert all dates into local time [23:44] bingomanatee has joined the channel [23:45] ossareh has joined the channel [23:45] jakehow has joined the channel [23:45] brianc: aurynn: so you insert a date say from a node process on the west coast, it goes in w/ -8:00 and you pull it out in texas and it comes out and is adjusted. so on west coast you insert at 8:00pm and you pull it out in texas it'll be 10:00pm [23:45] gryzzly_: tjholowaychuk: hmm, "expresso --include models", where models.js is a file that contains what is exported as app.Document is still undefined. [23:45] aurynn: brianc, right. I'm trying to pull that off as well [23:46] gryzzly_: i meant "app.Document" is still undefined [23:46] brianc: aurynn: ah okay, yeah parsing the date format is kinda a hell [23:46] tjholowaychuk: gryzzly_: that is not how it works :p .. just require('../models') if you need to [23:46] aurynn: brianc, hence trying to do as little as possible and achieve working effects :) [23:47] brianc: aurynn: the date parsing in node-postgres is currently in need of some refactoring/regex love but it's functional if you want a reference [23:47] gryzzly_: tjholowaychuk: yeah, i made "var Document = require('./models.js').Document(db);" in the app, and it actually works when I run it with "express" and view in browser. it's just that expresso tells me it can't run methods on app.Document in tests. [23:48] gryzzly_: it returns "Cannot call method 'findById' of undefined" [23:48] aurynn: brianc, I think I just came up with a very minimalist solution. [23:48] brianc: aurynn: nice [23:48] aurynn: brianc, date strings in PG always suffix with ?XX [23:48] tjholowaychuk: gryzzly_: dunno, hard to say since i cant see the code [23:48] tjholowaychuk: just some messed up require()s [23:48] brianc: aurynn: not if it's UTC, then it's a Z [23:49] aurynn: ? [23:49] gryzzly_: tjholowaychuk: sure thing, will try to go through it all one more time, thanks for help. [23:49] aurynn: Example? :) [23:49] perlmonkey2 has joined the channel [23:53] brianc: aurynn: maybe I'm misunderstanding what ?XX means [23:53] kiddphunk has joined the channel [23:53] aurynn: brianc, always in the form of +00 or -07 or whatever [23:54] brianc: aurynn: oh not if it's UTC [23:54] charlenopires has joined the channel [23:54] brianc: aurynn: then instead of '-08'z it is 'Z' [23:54] aurynn: hmm [23:55] aurynn: I can test for that, still [23:55] [[zz]] has joined the channel [23:55] brianc: aurynn: some examples: https://github.com/brianc/node-postgres/blob/master/test/unit/client/typed-query-results.js [23:56] aurynn: ah-hah [23:56] aurynn: I see what you mean [23:58] handle_with_care has joined the channel [23:58] brianc: aurynn: maybe it'd be better for the community to pool our work on a single driver rather than two? might be confusing for people to be like "hmm...there are a bunch of drivers, which one to pick?" [23:58] aurynn: brianc, I've thought that as well [23:58] sdn has joined the channel [23:59] sdn has left the channel [23:59] brianc: I know the libpg bindings have been giving people problems