[00:00] marcostoledo has joined the channel [00:00] isaacs: GAH!! [00:00] isaacs: mscdex: what are you doing? [00:00] isaacs: oh, defined function names? [00:01] isaacs: yonkeltron, mscdex: the arity of a function is function.length [00:01] mscdex: yonkeltron: where fn is the function: /^function\s*\((.*?)\)/.exec(fn.toString())[1].split(',').map(function(x){return x.trim()}).filter(function(x){return x.length>0}) [00:02] isaacs: v8: function foo (a, b) {} ; function bar (a) {} ; [foo.length, bar.length] [00:02] v8bot: isaacs: [2, 1] [00:02] mscdex: isaacs: yes, but to get the parameter names ^^^ [00:02] dipser_ has joined the channel [00:02] isaacs: why do you need the parameter names? [00:02] yonkeltron: mscdex: that's just masochism [00:02] yonkeltron: a good question, indeed [00:02] isaacs: yeah, mscdex, i have to agree. [00:02] mscdex: yonkeltron: heh [00:02] yonkeltron: isaacs: i think he wants it just for the lols [00:02] isaacs: parsing javascript with regexps this way is not wise. [00:02] isaacs: you will unleash something.... evil. [00:02] isaacs: deep and dark, from a forgotten time. [00:02] mscdex: nah [00:02] dilvie_ has joined the channel [00:03] HAITI has joined the channel [00:03] HAITI has joined the channel [00:04] hassox: anyone familiar with socket.io here? [00:04] mscdex: parameter names are useful if they are named something meaningful ;-) [00:04] yonkeltron: mscdex: you've actually succeeded! it induced lols [00:04] yonkeltron: spec pattern, cough, cough [00:04] rauchg_ has joined the channel [00:04] hassox: when I've put it into production mode, the request, response, and connection are all set to null [00:05] mscdex: just think, you could add block comments after each parameter and then you could auto-generate your own documentation! [00:05] jashkenas: isaacs: https://github.com/sstephenson/prototype/blob/master/src/prototype/lang/function.js#L38-43 [00:05] mscdex: :p [00:05] niko has joined the channel [00:05] mscdex: ES5 Array methods ftw! [00:06] mscdex: :D [00:06] mscdex: jashkenas's solution is more evil because it has more regexps [00:07] isaacs: mscdex: on the contrary. putting two regexps into one makes it twice as evil. [00:07] yonkeltron: now you have 2^2 problems! [00:07] jimt has joined the channel [00:09] cafesofie has joined the channel [00:09] jashkenas: FYI, Prototype.js runs that method on every function defined in a class, to detect if it's going to use super() or not. [00:09] jashkenas: the more you know... [00:10] isaacs has joined the channel [00:11] hassox: anyone from socket.io here [00:11] hassox: ? [00:12] techwraith: hassox: I'm not but I've worked with it, what's the question? [00:12] hassox: In development I'm accessing the request through the client so I can see the origin, disconnect etc [00:12] hassox: but I've moved it to production, and now the request, resonse and connection are all set to null [00:13] hassox: I don't know why :( [00:13] ysynopsis1 has joined the channel [00:13] davidc_ has joined the channel [00:14] richcollins: Getting (libev) select: Invalid argument [00:14] richcollins: and crash [00:14] richcollins: I can't keep this process running more than a few minutes before it crashes for some reason :-( [00:14] masahiroh has joined the channel [00:15] rauchg_ has joined the channel [00:16] kkaefer: ok, so from what I understand, v8 follows WebKit's js engine very closely and only implements features found there too [00:16] kkaefer: so does anyone know what the chances are that the yield statement will make it into webkit's js engine anytime soon? [00:16] richcollins: kkaefer: Does webkit have a js engine? [00:16] Aria has joined the channel [00:16] kkaefer: richcollins: I mean JavaScriptCore [00:17] kkaefer: or Nitro [00:17] richcollins: Nitro? [00:17] richcollins: ah ok [00:17] kkaefer: or however you call it [00:17] niko has joined the channel [00:19] jchris has joined the channel [00:19] jashkenas: kkaefer: close to zero -- until it's ratified by the ECMA committee. [00:19] springmeyer has joined the channel [00:19] kkaefer: ah, ok [00:20] kkaefer: too bad, would come in handy sometimes [00:20] jashkenas: all for the best though -- yield's implementation in JS is pretty bizarre. [00:20] jashkenas: do you use it in a spidermonkey project? [00:21] kkaefer: no [00:21] kkaefer: throw StopIteration seems weird, though [00:21] jashkenas: You can already do the same thing by passing in a callback, with less strangeness ... no Function/Generator distinction to worry about. [00:23] isaacs: does the "[Function]" in black from util.inspect make anyone else crazy, or is it just me? [00:23] isaacs: ACTION realizes that debating the color of inspect output is about as close to a "what color shall we paint this bikeshed" discussion possible [00:24] hellp has joined the channel [00:26] isaacs: setting text color to black or white should *always* come with a background color. [00:26] jlecker has joined the channel [00:26] arpegius has joined the channel [00:26] isaacs: otherwise it's sure to be almost invisible on half of terminals [00:28] bmizerany has joined the channel [00:28] niko has joined the channel [00:29] Aria: Yeah. You usually want to set to 'normal' rather than either of those. [00:31] isaacs: in this case, it's set to "grey", which is actually "bright black" [00:31] bentruyman has joined the channel [00:31] ryah: closure lint is kinda good [00:31] hornairs: kkaefer out of curiosity what did you want to use yield for? [00:32] richcollins: ryah: Now its crapping out here: https://github.com/ry/node/blob/master/lib/readline.js#L95 [00:32] richcollins: TypeError: Object [object Object] has no method 'write' [00:32] isaacs: for now i just set my terminal to display "bright black" as white. [00:32] richcollins: (using NODE_NO_READLINE) [00:32] isaacs: the actually-grey color i had is almost exactly the same color as my background. [00:33] isaacs: but if a script tries to set grey-on-white (which is reasonable, and responsible), it'll be invisible. [00:33] SubStack: (light on dark)++ [00:33] jashkenas: ryah: you like it better than javascriptlint? [00:35] arpegius has joined the channel [00:35] meck has joined the channel [00:37] arpegius has joined the channel [00:39] softdrink has joined the channel [00:39] intellectronica has joined the channel [00:42] niko has joined the channel [00:44] CIA-54: node: 03Ryan Dahl 07master * ra128451 10/ (46 files in 5 dirs): [00:44] CIA-54: node: Import Google's closure_linter [00:44] CIA-54: node: Run with 'make lint' - http://bit.ly/hSwxnV [00:44] CIA-54: node: 03Ryan Dahl 07master * rdb78043 10/ (lib/assert.js lib/buffer.js): lint - http://bit.ly/eOGjY8 [00:44] isaacs_ has joined the channel [00:46] techwraith has joined the channel [00:52] isaacs: ryah: closure lint is weird. [00:52] isaacs: what's with the no-space-after "function" rule? kinda weird. [00:53] niko has left the channel [00:54] ryah: yeah, i don't like that either, but whatever [00:54] ryah: similar to the c++ style [00:54] ryah: which i also don't like - but again - whatever [00:54] ryah: i'll import google's cpplint soon [00:55] dguttman_ has joined the channel [00:55] richcollins: Hrm I suddenly can't add things to Array.prototype [00:55] richcollins: After my last pull [00:55] richcollins: any ideas why? [00:56] CIA-54: node: 03Ryan Dahl 07master * r11ea8da 10/ lib/child_process.js : lint child_process.js - http://bit.ly/hsKOiQ [00:56] rauchg_ has joined the channel [00:56] dguttman_ has joined the channel [00:57] sechrist: I've asked this just about every week since january, but what is the best way to pack a few uints and bytes in node? [00:57] sechrist: I see the php.js port of pack and it scares me [00:57] sechrist: must be pragma packed so the alignment doesn't freak [00:57] isaacs: sechrist: you mean like packing some bytes into a Buffer object? [00:58] sechrist: yeah Buffer, or anything I send() [00:58] sechrist: it's going over wire [00:58] MikhX has joined the channel [00:59] kschzt has joined the channel [00:59] kschzt: ehlo [00:59] sechrist: isaacs: and I mean without resorting to writing a cc [01:00] sechrist: performance is fairly important -- this is the framing for all of our network code so all packets will be touched by it pretty much [01:00] isaacs: sechrist: var buf = new Buffer(10); buf[0] = 125; buf[1] = 40; etc. [01:00] kschzt: warimals.com now 100% js, backend in node.. socket.io, node-amqp, webworker [01:00] dguttman has joined the channel [01:00] isaacs: sechrist: then socket.write(buffer) [01:00] kschzt: we ran some stuff in rhino, moved it to node, and that load went to a tenth [01:00] sechrist: isaacs: I can't do uint32s with indexes can I? [01:00] isaacs: sechrist: each item in the buffer is 1 byte, and can be from 0 to 255. go nuts. [01:02] kschzt: we prefork a bunch of pgriess/webworker workers, each of those run n Script.createContext() scopes [01:02] CIA-54: node: 03Ryan Dahl 07master * rac58d3a 10/ (LICENSE Makefile tools/cpplint.py): [01:02] CIA-54: node: Import cpplint.py [01:02] CIA-54: node: make cpplint [01:02] CIA-54: node: make jslint [01:02] CIA-54: node: make lint - http://bit.ly/eYlb6e [01:02] sechrist: isaacs: http://pastie.org/1340073 that is specifically what I need to do [01:02] ryah: hopefully other people will be lint nazis [01:03] ryah: i don't really want to go through it all :) [01:03] isaacs: sechrist: ok, so that'll fit in a Buffer(8) [01:03] kschzt: a lot to optimize, node-amqp could at least double its throughput.. [01:03] sechrist: yes but packing a uint16 and uint32 properly can't be done with just blah[1] right? [01:04] sechrist: that would only work for 8bit types [01:05] jacobolus has joined the channel [01:08] kschzt: now my main priority is getting Node visible into node-inspector profile tab [01:08] kschzt: (in terms of node) [01:09] kschzt: setting breakpoints already works, but you have to step in, the files node sees aren't visible until you step into them [01:10] kschzt: debugging+profiling tools are a very high priority [01:11] Nimphious has joined the channel [01:11] kschzt: would love to have it in webkit a la node-inspector, not sure if it's possible? next I'll give mape's tool more of a try [01:13] technoweenie: mjr_: dude, node_redis is working well for me [01:13] richcollins has joined the channel [01:13] technoweenie: i found what looked like a weird ass bug with node_redis, and apparently it was fixed in master w/in the last month [01:15] mjr_: technoweenie: are you using it in production? [01:15] isaacs has joined the channel [01:15] technoweenie: not yet but soooon [01:15] mjr_: I'm glad to hear it is working well for you. [01:15] mjr_: cool [01:15] sechrist: so there's no way to pack stdints into a buffer? [01:15] benburkert has joined the channel [01:15] sechrist: this is surprising [01:17] rauchg_ has joined the channel [01:19] dguttman has joined the channel [01:19] jimt_ has joined the channel [01:20] mikeal: mjr_: i'm about to dive in to a lot of node-pcap stuff [01:20] mikeal: i think we're going to use it for all the logging in hosting :) [01:21] SubStack: it'd be sweet if some pcap decoders got released too [01:21] sprout has joined the channel [01:21] SubStack: tshark filters are a pain to work with [01:21] SubStack: they're also crazy useful for capture analysis [01:23] luke` has joined the channel [01:24] sechrist: there's not even a php.js implementation of unpack() [01:24] sechrist: damn [01:24] SubStack: all 3000+ functions in core? [01:24] SubStack: that is one hell of a yak [01:25] sechrist: man all I need to do is pack 3 different uint types [01:25] sechrist: it looks like I'm going to have to make a c++ node module to do this [01:25] sechrist: ridiculus [01:25] SubStack: packing eh? [01:25] sechrist: http://pastie.org/1340073 [01:25] sechrist: yes [01:25] richcollins: isaacs: [01:25] richcollins: String.prototype.appendPathComponent = function(pc){ var path = require("path"); return path.join(this, pc) }; "a".appendPathComponent("b") [01:26] richcollins: 'b' [01:26] SubStack: sechrist: perhaps https://github.com/substack/node-put can help [01:26] sechrist: ooooh [01:26] shirro has joined the channel [01:26] SubStack: I spun this out of node-rfb [01:27] SubStack: to test it better in isolation [01:28] zentoooo has joined the channel [01:29] CIA-54: node: 03Ryan Dahl 07master * rf22c248 10/ (lib/console.js lib/constants.js lib/crypto.js lib/dgram.js): more lint - http://bit.ly/dRoylW [01:29] ryah: i can't help myself [01:29] stride: :) [01:30] sechrist: SubStack: :D this seems acceptable [01:30] SubStack: ;) [01:31] sechrist: SubStack: is there any crippling performance caveat? [01:31] Astro: https://github.com/dodo/node-raphael [01:31] sechrist: Actually, looking at your buffer function, looks fine [01:32] SubStack: yeah I haven't run into any bottlenecks in use [01:32] sechrist: can it unpack? [01:32] SubStack: no but bufferlist can [01:32] kschzt: moar ocd lint! [01:32] kschzt: .b [01:33] SubStack: I'll probably clean up the bufferlist api a bit as I hack on node-rdesktop [01:33] richcollins: Is there a way to run a single test for node? [01:33] SubStack: maybe rebrand it as 'node-binary' [01:33] sechrist: SubStack: so I should use put AND bufferlist? [01:33] sechrist: seems put should be a part of bufferlist or yeah -- node binary [01:34] jakehow has joined the channel [01:34] SubStack: bufferlist was my first npm lib :p [01:34] kschzt: argh, 3.33am is when this channel is at its best, and I'm knackered. next week we'll post about how we use webworker + Script for warimals.com. it's awesome. [01:34] SubStack: while I was still getting a feel for how all the pieces fit together [01:35] sechrist: I'm not understanding how it works, does getWord16 etc increase a pointer? [01:35] SubStack: it registers a handler [01:35] SubStack: I should probably split up the async streaming stuff from the decoding algorithms [01:36] SubStack: maybe I'll do this tonight! [01:36] SubStack: after blogging [01:36] sechrist: I need to get into blogging [01:36] sechrist: I do a lot of day to day crap that's more interesting than a lot of the stuff on HN [01:36] SubStack: I'm on day 3 of a 7-days-of-blogging adventure [01:38] mjr_: SubStack: what pcap decoders are you looking for? [01:39] SubStack: mjr_: oh nothing specific I just don't like tshark filter syntax [01:39] mjr_: it's also confusing that wireshark uses both pcap filters AND their own filter syntax, which are not the same. [01:40] mjr_: It's a tricky problem though, because the pcap syntax is awkward, but very fast and runs in the kernel. [01:40] sechrist: SubStack: and BufferList and Put are working together for me. Many thanks! [01:40] mjr_: But hey, with node_pcap, you can make up your own filter syntax in JavaScript if you like. [01:41] charlenopires has joined the channel [01:42] MikhX has joined the channel [01:42] arpegius has joined the channel [01:43] SubStack: sechrist: glad to hear it! I'll make the getting side of it suck a little less soonish [01:43] SubStack: now that I have a better idea of use cases [01:44] PeterAnselmo has joined the channel [01:44] Nohryb has joined the channel [01:45] isaacs_ has joined the channel [01:45] sechrist: SubStack: I'm doing unscientific benchmarks and i'm getting about 7000/s put generation and bufferlist get serialization/deserialization for a test case [01:45] sechrist: which is more than acceptable [01:45] CIA-54: node: 03Ryan Dahl 07master * r09329cb 10/ (lib/dns.js lib/events.js lib/freelist.js lib/fs.js): more lint - http://bit.ly/e2fWLc [01:45] ryah: linting does not give me pleasure [01:46] ryah: yet i cannot stop [01:46] SubStack: excellent [01:46] sechrist: ryah: it does give you pleasure [01:46] sechrist: SubStack: https://gist.github.com/724596 [01:46] techwraith: Love the fact that you're linting it though Ryah [01:47] SubStack: I know it can't be too slow since I use it for real-time framebuffer decoding [01:47] sechrist: hah -- that's almost what I'm about to be doing [01:47] sechrist: but more specialized [01:47] rauchg_: lint that shit™ [01:48] sechrist: ^ [01:48] jashkenas: hah -- lint is destroying comma-first... [01:48] SubStack: a rauchg_ appears! [01:48] rauchg_: SubStack uses masterball [01:49] sechrist: rauchg_: need to grab beer sometime -- but it's quite a commute up to sf from sj [01:49] rauchg_: but rauchg_ dodges it and throws a pokeball at SubStack [01:49] rauchg_: it's super-effective [01:49] booths has joined the channel [01:49] rauchg_: sechrist you're in SJ? [01:49] SubStack: heh [01:49] sechrist: yeah I moved here last month [01:49] rauchg_: neat [01:49] kschzt has joined the channel [01:49] sechrist: a startup gulped me up so I moved cross country [01:50] kschzt: uh, woops, looks like Fb disabled our thing [01:50] SubStack: rauchg_: what was the mozilla talk about? I saw in on your tweet stream [01:51] kschzt: nice. can't show it without Fb, so we'll talk later :) [01:51] sechrist: kschzt: facebook disabled one of your apps? [01:51] rauchg_: SubStack: tech talk for their engineers [01:51] sechrist: kschzt: they disabled a few of mine last week citing their policies. :) [01:51] rauchg_: talked to some of the guys working on websocket / security /mobile too [01:52] SubStack: cool [01:52] kschzt: sechrist, yes, they seem to have disabled our game [01:52] sechrist: was it doing any autopublishing? [01:53] kschzt: sechrist, 15 minutes ago it worked perfectly, now nobody can login, and the application details in fb are fine [01:53] sechrist: oh hmm -- I've seen that too -- are you doing FQL queries? [01:53] kschzt: no autopublishing, only asking the minimal permissions [01:53] kschzt: no FQL, but we did create loads of Graph API test users today [01:53] kschzt: to fix IE8 problems [01:53] sechrist: I've seen weird behavior where only FQL queries failed with the javascript connect api but everything else worked [01:53] sechrist: oh hmm [01:53] kschzt: of course, at FB, there is nobody to contact [01:54] kschzt: absolutely amazing. [01:54] sechrist: well because projects at facebook are like orgies [01:54] sechrist: so many people touch them [01:54] kschzt: hundreds of people are trying to get into the game, I can see in the logs nobody is getting in [01:55] sechrist: temporarily make a new app [01:55] sechrist: and put the new id in your javascript [01:55] sechrist: should work for a bit until it gets swept again [01:55] sechrist: if an app gets banned they send the developers a facebook message [01:55] kschzt: Facebook Credits is like that -- Facebook reserves the right to tell you "today you don't get to use Credits" [01:55] Yuffster has joined the channel [01:56] kschzt: sechrist, ja, considering it; no message. [01:56] sechrist: however the ban message is queued -- there's no guarantee on the timing [01:56] kschzt: nice big pile of h8 right here at 4am, thanks Mark, bitch [01:56] sechrist: also they have auto banning based on heuristics which gives me false alarms every so often [01:57] smcq has joined the channel [01:57] sechrist: since I have high virality apps that are related to fan pages with >= 1m fans [01:57] sechrist: TOO VIRAL -- MUST BE PHISHING [01:57] kschzt: we are an Applifier app, and got a large spike of users yesterday, also could be [01:58] sechrist: yeah spikes are what throw the heuristic ban off [01:58] kschzt: changing the appId is not that simple ... [01:58] sechrist: ah I see -- luckily everything I've had to quickfix like that has just been a javascript variable change in a single template [01:59] kschzt: how pissed off am I, brb -> [02:04] mikew3c_ has joined the channel [02:05] msekimur_ has joined the channel [02:06] themiddleman has joined the channel [02:06] mikew3c_ has joined the channel [02:09] Nimphious has joined the channel [02:11] indutny has joined the channel [02:11] indutny: ryah: hey! looks like you've pushed linter patches? [02:11] msekimura has joined the channel [02:12] rauchg_ has joined the channel [02:12] kschzt: damn you zuckerberg, I'm going to change the appId [02:12] bingomanatee_ has joined the channel [02:12] kschzt: 'Directory Status: Approved' fuck off [02:15] mscdex: there ought to be a mobile app for doing jslint and the like, called "pocket lint" [02:15] mscdex: :p [02:15] isaacs_ has joined the channel [02:16] kschzt: although Fb has had weird problems all day, I'll refrain from doing shit at 4.20am [02:16] kschzt: it's just gonna stay down until Facebook fixes their god damn shit [02:18] kschzt: gonna leave it. try again later. thanks for playing [02:18] postwait has joined the channel [02:19] alexfner has joined the channel [02:19] cafesofie has joined the channel [02:19] jchris has joined the channel [02:19] indutny: I was proposing this jslint patches at two or three months ago :( [02:19] indutny: noone had heard me this day [02:20] indutny: ACTION thinks that sometimes community is too blind for useful changes! [02:23] matt_c has joined the channel [02:26] dguttman has joined the channel [02:26] dguttman has joined the channel [02:26] mscdex: ryah: https://gist.github.com/724632 [02:27] softdrink has joined the channel [02:31] jpld has joined the channel [02:32] herbySk has joined the channel [02:33] techwraith: ryah: How goes the linting? [02:34] cnu has joined the channel [02:36] whyme has joined the channel [02:37] msekimur_ has joined the channel [02:38] sprout has joined the channel [02:39] Nimphious has joined the channel [02:40] agnat has joined the channel [02:42] rauchg_ has joined the channel [02:47] xonecas has joined the channel [02:48] xonecas: caligula: This guys is not to be trusted!! :-) hehe [02:51] pquerna: https://github.com/pquerna/ckl/issues#issue/1 [02:52] ehaas has joined the channel [02:53] Fenda has joined the channel [02:53] viirya has joined the channel [02:53] sechrist: Anybody in here use protocol buffers in nodejs? [02:54] sechrist: I'm trying to find a way to access the schema declared enums in both exslim's port and the original and it doesn't seem possible [02:54] meso has joined the channel [02:55] Fenda: ive moved hosts for my nodejs server. socket:io is now defaulting to xhr-polling on chrome (on previous host it would default to websockets). Any ideas why? [02:55] Fenda: rauchg_: ^^ if your here!! [02:55] rauchg_: Fenda: try removing your cookies [02:55] c4milo has joined the channel [02:56] Fenda: rauchg_: still defaults to xhr-polling [02:57] Dreamer3 has joined the channel [02:59] dguttman_ has joined the channel [03:02] cafesofie has joined the channel [03:03] rauchg_: Fenda: are you behind a proxy [03:04] mjr_ has joined the channel [03:08] xonecas has joined the channel [03:09] springmeyer_ has joined the channel [03:10] langworthy has joined the channel [03:11] abiraja has joined the channel [03:15] isaacs_ has joined the channel [03:15] arrty has joined the channel [03:19] bartt has joined the channel [03:19] unomi has joined the channel [03:20] paulrobinson has joined the channel [03:23] jchris has joined the channel [03:25] amerine has joined the channel [03:25] amerine has joined the channel [03:26] yozlet has joined the channel [03:28] boaz has joined the channel [03:29] amerine has joined the channel [03:30] amerine has joined the channel [03:31] sechrist has joined the channel [03:37] c4milo1 has joined the channel [03:37] c4milo has left the channel [03:38] dilvie has joined the channel [03:39] dguttman has joined the channel [03:40] CyberTF2k4 has joined the channel [03:42] yozlet has joined the channel [03:47] herbySk has joined the channel [03:49] isaacs_ has joined the channel [03:52] langworthy has joined the channel [03:54] cardona507 has joined the channel [03:56] aconbere has joined the channel [03:59] Fenda: rauchg_: yes I am :> [04:01] smcq has joined the channel [04:01] rauchg_: Fenda: [04:01] rauchg_: then [04:01] rauchg_: it's to be expected booyah [04:02] dilvie has joined the channel [04:02] Fenda: yeah, i forgot about my companies proxy [04:02] Fenda: ACTION punches himself [04:02] SubStack has joined the channel [04:02] rauchg_: Fenda: [04:02] rauchg_: that's actually really good [04:02] rauchg_: im glad to hear [04:02] rauchg_: my fallback works [04:02] rauchg_: :D [04:02] Fenda: haha :D [04:02] derren13 has joined the channel [04:02] cnu has joined the channel [04:03] noahcampbell has joined the channel [04:03] Fenda: rauchg_: which transports work behind a proxy? [04:04] ryah: i like that joyent always has a refidgerator full of beer [04:05] abiraja has joined the channel [04:06] meck has joined the channel [04:07] Aria: Ooh. Dangerous. [04:08] twoism has joined the channel [04:08] Aria: It was bad enough when I worked at Wondermill and it was Jones Soda. [04:08] hammerdr_ has joined the channel [04:08] mikeal has joined the channel [04:10] mbrochh has joined the channel [04:10] mbrochh has joined the channel [04:10] ryah: dangerous for my commits after 6pm [04:11] ryah: :) [04:12] techwraith has left the channel [04:12] pquerna: someone needs to invent calorie free beer. [04:12] pquerna: somehow. [04:12] mikeal: pquerna: it's called whisky [04:12] mikeal: pquerna, ryah: drinks friday? [04:13] pquerna: i'm down [04:13] ryah: mikeal: okay [04:13] mikeal: werd [04:13] mikeal: where is guillermo? [04:13] mikeal: he's suppose to be in town [04:13] ryah: he came today [04:13] ryah: i think [04:13] mikeal: need to invite him [04:13] ryah: rauchg_--^ [04:14] mikeal: are we going to do another cocktail tour of SF ;P [04:14] Anti-X has joined the channel [04:16] HAITI has joined the channel [04:16] HAITI has joined the channel [04:16] mscdex: ryah: you see the freebsd patch? [04:18] ryah: mscdex: no [04:18] mscdex: ryah: https://gist.github.com/724632 [04:18] ryah: mscdex: thanks [04:18] meck has joined the channel [04:19] mikeal: i need to add proxy support to request [04:19] mikeal: but i've already had like 4 cocktails tonight [04:19] mikeal: and i think i'm going to make myself another [04:19] mikeal: i could still probably do it [04:19] mikeal: it's not actually hard [04:21] micheil: mikeal: actually, different styles of option passing to request wouldn't be too bad ;) [04:21] mikeal: i'm not adding sugar to request quite yet [04:21] isaacs has joined the channel [04:21] mikeal: because if it goes in to core i want as little sugar as possible [04:22] mikeal: if it doesn't then I'll probably do a cooler API on top of it [04:22] ajpiano has joined the channel [04:22] tim_smart has joined the channel [04:23] micheil: yeah [04:23] richcollins has joined the channel [04:23] micheil: I'm using an abstraction on top of it, just because I found myself repeating quite a lot of code other wise [04:24] mikeal: oh totally [04:24] mikeal: the point of it is to deal with a bunch of hard shit [04:24] richcollins: isaacs: Not a believer in duck typing? [04:24] mikeal: not necessarily to reduce repeated code [04:27] micheil: mikeal: also, nice thread there on twitter :D [04:28] jacobolus has joined the channel [04:29] CIA-54: node: 03Brian White 07master * rddbaeef 10/ src/platform_freebsd.cc : Fix executable path on FreeBSD. - http://bit.ly/dOHUfN [04:29] CIA-54: node: 03Ryan Dahl 07master * re232f6e 10/ (8 files): more lint - http://bit.ly/epADwA [04:29] abiraja has joined the channel [04:29] mikeal: about? [04:30] ryah: no space after function takes some getting use to [04:30] mikeal: the one with brendan? [04:30] brianmario has joined the channel [04:30] mikeal: why did the node codebase go so lint-nazi [04:31] mikeal: i fuckin love using a space after function [04:31] richcollins: Does isaacs reasoning make sense to anyone else? https://github.com/richcollins/node/commit/d48a699991dc0620d087bff2bf8bc6619c3d81dc [04:31] mjr_: mikeal: I thought you guys were having something in your office on Friday? [04:32] ryah: mikeal: i was bored this afternoon [04:32] mikeal: mjr_: in the afternoon [04:32] mikeal: ryah: still, the linters are all nazi's [04:32] mjr_: mikeal: I'd like to hear about your pcap logging plans, maybe we can chat on Friday [04:33] mikeal: sure, can you come by in the afternoon? or do you just mean later for drinks? [04:33] gf3 has joined the channel [04:34] mjr_: Not sure if I can get out early on Friday yet. Drinking in the evening sounds like a win though. [04:34] mikeal: don't get off early [04:34] mikeal: just go the couch office instead of your office :) [04:35] aconbere: isaacs: ping [04:36] richcollins: Looks like I can just do "" + this to make a "string" [04:43] jacobolus has joined the channel [04:43] ryah: host = (obj.host !== undefined) ? obj.host : [04:43] ryah: obj.hostname !== undefined ? ( [04:43] ryah: (obj.auth ? obj.auth + '@' : '') [04:43] ryah: + obj.hostname [04:43] ryah: + (obj.port ? ':' + obj.port : '') [04:43] ryah: ) [04:43] ryah: : false [04:43] ryah: -_- [04:43] mikeal: where is that from? [04:44] ryah: nested conditionals like this [04:44] ryah: should not use the ternary operator [04:44] ryah: url.js [04:44] mikew3c has joined the channel [04:44] aconbere: https://gist.github.com/724784 [04:45] ryah: ACTION avoids the urge to git blame it [04:45] aconbere: I would love some quick opinions on this attempt at simplifying traverser + findModulePath [04:45] aconbere: it's still pretty obtuse [04:45] aconbere: but it's a lot more clear than traverser [04:51] PeterAnselmo has joined the channel [04:53] miter has joined the channel [04:54] ryah: ACTION is going to make isaacs lint url.js [04:55] aconbere: ouch [04:55] Aria: Hee. [04:56] jimt has joined the channel [04:56] killfill has joined the channel [04:57] jamescarr has joined the channel [04:59] mjr_: I don't like the ternary operator ever. I think it is ugly and too clever. [04:59] CIA-54: node: 03Ryan Dahl 07master * rdd53cee 10/ (7 files): lint - http://bit.ly/fLsMel [05:00] SubStack: ternary rocks [05:00] mjr_: I do like var host = obj.host || obj.hostname || whatever [05:00] Aria: Me too. [05:00] Aria: I do miss Ruby's if-then-else as expression though [05:01] springmeyer has joined the channel [05:01] mjr_: My objection to ternary is my same objection to clever language things like list comprehensions. [05:01] mjr_: They are really fun to write yourself, but hard to read when other people write them [05:01] Aria: Yeah. Dense syntax. [05:01] ryah: everything is okay used in moderation [05:01] Aria: Yeah. But if you're being clever, you need to admire how smart you are, then stop doing that. [05:01] micheil: ryah: is jslint being placed in the buildtools now? pre-commit hook style? [05:02] ryah: micheil: "make lint" [05:02] micheil: ah [05:02] micheil: nice [05:02] mjr_: just like the nazis used to do. [05:02] ryah: yep [05:02] samh_ has joined the channel [05:02] mjr_: exactly the same [05:02] Connorhd: the nazis used to lint their javascript? [05:03] Aria: Yeah. Minus the murdering millions. But y'know. Data processing, big blue, and killing millions. Two out of three ain't bad. [05:03] mjr_: Come on, I don't mean that linters a HISTORICAL Nazis. That would be absurd. [05:04] mjr_: I just mean linters are NEO-Nazis. [05:04] mjr_: Shaved heads, armbands, etc. [05:04] mjr_: That's all. [05:04] Aria: Oh, well, then. Carry on. [05:04] bneil has joined the channel [05:04] aconbere: meh, sometimes stuff like that is all about culture and expectations [05:04] aconbere: take list comprehensions [05:04] aconbere: that's super common in python land [05:04] aconbere: and nobody seriously writing python would ever think twice about them [05:04] ryah: aconbere: indeed. [05:04] Me1000 has joined the channel [05:05] aconbere: in JS, it might be a little surprising :) [05:05] Aria: Yeah. And ruby's blocks-as-callbacks, or node's callback-first arguments. [05:05] naturalethic: Godwin++ [05:05] v8bot: naturalethic has given a beer to Godwin. Godwin now has 1 beers. [05:05] Aria: But even so where you have to comprehend several lines at once and complex nesting to even know which syntax is being invoked, that's bad. [05:05] Aria: Ternary operators hit that wall pretty fast. [05:05] evanmeagher has joined the channel [05:06] mjr_: I wrote Python seriously for a while, and I wrote Perl seriously before that. I thought it was my duty to make everything as dense and concise as possible. [05:06] aconbere: ah yes, as with ternary operators, you should not compose list comprehensions :) [05:06] Aria: Heh. [05:06] mjr_: Fun to write. Hard for others to read, even if they expect that kind of cleverness. [05:06] Aria: I think it's my duty to make everything as concise as possible. But that's a conceptual concise, not a syntactic one. [05:07] Aria: You should look at it and think "Man, that's _simple_" [05:07] mjr_: Hmm, concise isn't quite what I mean. "Compact" is closer. [05:07] aconbere: while we're tlaking about conciseness, can I get some reviews of this pull request! [05:07] ryah: aconbere: link? [05:07] aconbere: https://github.com/ry/node/pull/487 [05:08] aconbere: I hate reading in diff form [05:08] tim_smart: 'Compact' can often be confusing. [05:09] Aria: Oooh. I like the look of that. [05:09] Aria: Easier to read than traverser. [05:09] Aria: Even if traverser was clever. [05:09] ryah: aconbere: run the linter over your code [05:10] mjr_: tim_smart: yeah, that's my feeling as well. I find that many people directly equate compact with good. [05:10] isaacs has joined the channel [05:10] aconbere: yessir [05:10] ryah: aconbere: also in your test - which is great, btw - test a few properties of the modules being loaded [05:11] micheil: Aria: it's callbacks last btw. [05:11] ryah: http://halvm.org/wiki/browser <-- have people seen this [05:11] Aria: Er. Right. I meant error-first, actually. [05:11] cjmFloating has joined the channel [05:11] SubStack: micheil: except for reduce() annoyingly [05:12] mjr_: ryah: what is that? [05:12] micheil: reduce isn't really a callback [05:12] ryah: mjr_: haskell without an OS [05:12] micheil: reduce is an operator on something [05:12] aconbere: ryah: will do [05:12] aconbere: ryah: I read about halvm today [05:12] aconbere: pretty slick [05:12] aconbere: those naught galois kids being too smart for their own britches [05:12] ryah: ACTION wonders if actually works [05:13] aconbere: "we use this on a couple of projects" <- the most impressive part [05:13] deepthawtz has joined the channel [05:13] jchris has joined the channel [05:14] benburkert has joined the channel [05:14] shirro has joined the channel [05:15] micheil: hmm.. if memory serves me correctly, I should have a lot of emails this morning.. [05:15] aconbere: ryah: what's the best way to run the linter against a specific file? [05:15] aconbere: it fails out of urls.js when running against everything [05:16] micheil: aconbere: check the makefile [05:19] aconbere: ACTION sobs [05:19] aconbere: ryah: how are you going about handling files that needs some deep lint scrubbing [05:19] aconbere: (node.js is one of them) [05:21] slloyd has joined the channel [05:21] mjr_: Send 'em to the scrubbery. [05:24] micheil: I might do them, if there's a bug ticket associated with them, or an email. [05:25] aconbere: micheil: well I would love to do it, I just don't want to have to merge afterwards :P [05:26] aconbere: so it looks like closure lint expects a 4 space "tab" [05:26] whyme has joined the channel [05:26] aconbere: should I go ahead and properly indent mystuff in the middle of a file in 2 space tabs? [05:26] micheil: ACTION uses 2 space [05:26] aconbere: as do I [05:27] aconbere: but linter is NOT happy about indentation in src/node.js [05:27] aconbere: :) [05:27] SubStack: 4 ftw [05:27] micheil: 2b. JavaScript is to be camel cased, two space indention, and [05:27] micheil: generally follow Node's style. [05:27] SubStack: 4 spaces is good for keeping programmers honest and not introducing too much nested logic [05:28] micheil: from ryan's styleguide post [05:28] SubStack: yeah well I don't hack on the node core :p [05:28] micheil: ryah: I'm going to patch the docs to add that in somewhere. [05:28] mikeal: ryah: Mozilla is having a Cantina on Friday [05:28] mikeal: you wanna head down? [05:29] hamsterspider has joined the channel [05:29] micheil: https://github.com/miksago/node/issues/issue/19 [05:29] aconbere: hmmm [05:29] MattDiPasquale has joined the channel [05:29] aconbere: I wonder why when I run the linter it complains about the indentation then [05:29] aconbere: ACTION ponders [05:31] jamescarr: micheil, true or false: will the websocket close event be called if frames are dropped on the network connection? [05:31] noahcampbell has joined the channel [05:31] micheil: uhh.. false [05:31] jamescarr: I've been reading through the spec and I'm confused :( [05:32] jamescarr: I gave a presentation on websockets and it was a question that came up. [05:32] nooder has joined the channel [05:32] micheil: well, if frames get dropped, there's no way to know [05:32] jamescarr: if it would get fired on frames being dropped, the network going offline, etc [05:33] micheil: (the best way to know would be to have a format that keeps a counter [05:33] micheil: network going offline, I think it will fire 'close' [05:33] micheil: may vary on different browser vendors [05:33] jamescarr: yeah, so do I [05:33] aconbere: OH [05:33] MikhX has joined the channel [05:33] mjr_: jamescarr: dropped frames will be retransmitted by TCP [05:33] aconbere: it's cause the WHOLE file is in a function [05:33] aconbere: dur [05:34] micheil: jamescarr: there you go then, as mjr_ said. [05:34] micheil: aconbere: yeah, not sure what's up with that. [05:34] mjr_: jamescarr: when the TCP closes, you'll get a close event [05:34] jamescarr: mjr_, awesome [05:34] SubStack: Silly ryah! Javascript is whatever kind of langauge you want it to be [05:34] mjr_: jamescarr: but when the network changes, you might NOT get a close event, because the TCP might still be alive. [05:34] SubStack: javascript doesn't judge you [05:35] jamescarr: ah, so anything that could make a TCP socket terminate applies [05:35] mjr_: jamescarr: yes. The only way to really notice network changes is to send regular ping/pong keepalives and close the connection yourself if you don't get an answer back. [05:36] micheil: tim_smart / mape you guys about? [05:36] mape: ? [05:37] aconbere: micheil: I think it's because it happens before we boot strap the module loading process [05:38] micheil: hmm.. "\x00" is valid UTF8, right? [05:38] aconbere: so it's going to be retrieved from src, v8 side as a function [05:38] aconbere: that initializes the node bootstrap environment [05:38] micheil: yeah, a closure [05:40] Yuffster has joined the channel [05:40] isaacs has joined the channel [05:43] tim_smart: micheil: I'm pretty sure it is. [05:43] tim_smart: v8: "\x00".charCodeAt(0) [05:43] v8bot: tim_smart: 0 [05:44] tim_smart: v8: "\x00".charCodeAt(1) [05:44] v8bot: tim_smart: NaN [05:44] tim_smart: Yup [05:44] micheil: tim_smart: okay, cool, I'm thinking of changing the two binary write()s I do in nws per message to being just a string concat [05:44] micheil: so, socket.write("\x00"+message+"\xFF") [05:45] micheil: meaning I can return the write code [05:45] mjr_: That'll probably be faster. [05:45] jamescarr: heh, one more thing I am confused about when I read the spec... what happens if non-UTf-8 data is sent? [05:45] micheil: yeah [05:45] micheil: and it'll have better error handling [05:45] micheil: jamescarr: it's just not implemented yet [05:45] jamescarr: ah [05:45] jamescarr: that was what I said in regards to binary [05:45] micheil: but draft-04/03 is far better framing [05:45] micheil: draft-00 is kinda shit compared to it [05:46] jamescarr: they mention in the future about binary data transfer right? [05:46] jamescarr: I mean, the draft mentions in the future [05:46] micheil: javascript doesn't have anything in it yet to work with binary data, but there is the ByteArray proposal [05:50] smcq has joined the channel [05:51] richcollins: Is anyone familiar with the readline lib? This line is failing for me because "output" is set to stdin, which doesn't have a write method: [05:51] richcollins: https://github.com/ry/node/blob/master/lib/readline.js#L95 [05:53] KeyboardWarrior: Hello, fellow MAVERICKS. [05:53] JimBastard has joined the channel [05:53] KeyboardWarrior: As event-driven overlords that we are, how do we make the PHPers bend to our will? [05:54] mjr_: throw new Errors at them? [05:54] JimBastard: KeyboardWarrior: no need to bend [05:54] micheil: KeyboardWarrior: no need to make them bend, if they want, they will come [05:54] SubStack: PHPers are already bent over [05:54] KeyboardWarrior: lolz [05:54] JimBastard: ACTION says, Welcome to #node.js! [05:55] KeyboardWarrior: SubStack, are you using node.js for your stackvm thing? [05:55] JimBastard: SubStack: you see that Forever post? [05:55] samh_ has joined the channel [05:55] JimBastard: http://blog.nodejitsu.com/keep-a-nodejs-server-up-with-forever [05:55] micheil: jamescarr: on binary: http://blog.vjeux.com/2010/javascript/javascript-binary-reader.html [05:55] SubStack: KeyboardWarrior: all over the place [05:56] micheil: jamescarr: http://fhtr.blogspot.com/2009/12/3d-models-and-parsing-binary-data-with.html [05:56] KeyboardWarrior: cool [05:56] SubStack: JimBastard: saw that in my twitter thing, will check out as soon as I finish this blog post [05:56] micheil: wow. this is short. http://en.wikipedia.org/wiki/Server-side_JavaScript [05:56] SubStack: which is actually live I just haven't finished the art for it yet [05:56] micheil: same with this. http://en.wikipedia.org/wiki/Node.js [05:56] jamescarr: micheil, yeah, i did binary over ajax before [05:56] JimBastard: ACTION isn't notable enough. [05:56] jamescarr: just had some questions about it on websockets [05:57] KeyboardWarrior: Here's what I am building: A service where messages are POSTed to it that need to broadcasted to bunch clients that are polling for them, but only to the clients where a certain expression is true. Is this perfect for node.js? What else would I consider? [05:58] JimBastard: KeyboardWarrior: sounds like the demo for socket.io [05:59] KeyboardWarrior: Because HTTP won't let me reliably push chat messages to the clients, I'll need to store the messages somewhere and send them to the clients when they poll with HTTP GET [05:59] KeyboardWarrior: I don't want to get too fancy because this has to work in 10 year old browsers [05:59] pquerna: socket.io-node [05:59] mscdex: bit twiddling! [05:59] micheil: ryah: why single quotes? [05:59] mscdex: single quotes rule [05:59] mscdex: :D [05:59] KeyboardWarrior: So where should I start socket.io-node for this? [06:00] micheil: http://socket.io [06:01] KeyboardWarrior: Double quotes are my showhammer [06:01] arrty has joined the channel [06:02] luke` has joined the channel [06:02] KeyboardWarrior: So is socket.io abstracting away HTTPs stateless nature? [06:03] micheil: yes, sort of. [06:03] micheil: websockets with a fallback [06:04] richcollins: micheil: Is that your library? Looks very useful [06:04] KeyboardWarrior: So guaranteed to work on IE 6 and old Blackberrys :) [06:04] ceej has joined the channel [06:05] micheil: richcollins: nup, I maintain node-websocket-server [06:05] micheil: KeyboardWarrior: not necessarily, but you're asking for pain going back 10 years. [06:06] mscdex: psh, you're asking for pain by just bringing up IE [06:06] mscdex: ;-) [06:06] KeyboardWarrior: Blackberrys don't even like jquery :( [06:07] maushu: micheil, single quotes since then you can use double quotes in html. [06:07] mscdex: droid does! [06:07] maushu: Besides, Google says so. [06:07] micheil: but then you can't use escape chars :D [06:07] mscdex: sure you can [06:07] micheil: "\xffwoot\x00" [06:08] yozlet has joined the channel [06:08] micheil: that doesn't work in single quotes, does it? [06:08] mscdex: '\n' and the like work just fine [06:08] maushu: http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml?showone=Strings#Strings [06:08] mscdex: v8: '\xffwoot\x00' [06:08] v8bot: mscdex: "ÿwoot [06:08] mscdex: ;-) [06:09] maushu: GOOGLE SAYS SO. [06:09] mscdex: v8bot says so [06:09] mscdex: :> [06:09] maushu: No reason or logic needed. [06:09] mscdex: !seen _announcer [06:09] maushu: I killed her. [06:09] mjr_: her? [06:09] mscdex: nowai [06:09] maushu: Then ate her dead body. [06:09] mjr_: Yikes [06:09] maushu: So that I can be the one. [06:09] mjr_: Well, there can be only one [06:10] mjr_: So that part checks out. [06:10] mscdex: highlander.js [06:10] mscdex: i called it the other day [06:10] mscdex: it's the framework to end all other frameworks [06:10] jimmybaker has joined the channel [06:10] mjr_: Speaking of momentous occasions, I was unaware that there was a Computer Engineer Barbie: http://shop.mattel.com/product/index.jsp?productId=4032107 [06:10] mjr_: But there totally is. [06:11] mscdex: yeah i saw that on engadget [06:11] mjr_: What a great role model? [06:11] mjr_: I guess? [06:11] mscdex: they could have at least put the droid on the phone's screen [06:11] quirkey has joined the channel [06:12] mscdex: maybe with a blonde wig on [06:12] tprice has joined the channel [06:13] aconbere: hmpf [06:13] aconbere: test-secure-pair is failing for me [06:13] aconbere: making it hard to test my latest changes [06:14] KeyboardWarrior: Is there a Madonna barbie? [06:14] aconbere: https://gist.github.com/724870 [06:16] richcollins: Ah finally figured how to get node working with launchd -- you have to specify the exe path in ProgramArguments, not Program [06:16] richcollins: o.w. the path to the exe is omitted from argv [06:16] richcollins: And node starts the repl [06:16] naturalethic: can a utf-8 string really contain null bytes in it? [06:17] mscdex: sure [06:17] mscdex: \u0000 [06:17] naturalethic: thats unicode [06:17] mscdex: well, you said utf [06:17] mscdex: ;-) [06:18] naturalethic: right ..hrm [06:18] jacobolus has joined the channel [06:18] naturalethic: hows oscar comin? [06:18] mscdex: slowly but surely [06:18] mscdex: there's so much stuff to implement [06:19] naturalethic: i started messing with pidgin a couple years ago, a few days into it and i was sick of it [06:19] naturalethic: *pigeon [06:19] jchris has joined the channel [06:19] naturalethic: wait is it pidgin? [06:19] mscdex: yeah [06:20] mscdex: libpurple has been one of my oscar protocol references heh [06:21] micheil: man. I wish cpplint and lint outputted stuff in columns [06:23] micheil: ryah: would you go for a jslint that does similar to the build tools? [06:23] micheil: like, only re-lints modified files? [06:23] hoodoos has joined the channel [06:24] hoodoos: hello guys, I have very strange things happen after upgrading from 0.2.0 to 0.2.5. resulting in hangins or stuff like: node: /usr/local/include/node/node_object_wrap.h:40: void node::ObjectWrap::Wrap(v8::Handle): Assertion `handle->InternalFieldCount() > 0' failed. [06:26] benburkert has joined the channel [06:27] naturalethic: hoodoos: find out which addon or builtin the failure is happening in [06:27] naturalethic: s/addon/module [06:28] jimmybaker has joined the channel [06:28] hoodoos: naturalethic, hmm, ah.. [06:28] langworthy has joined the channel [06:28] hoodoos: i got it I think.. [06:28] naturalethic: hoodoos, that is, what kind of object is the failure happening in [06:29] naturalethic: as it's a wrapped native object [06:29] hoodoos: maybe this is related to the mess of node versions I have [06:29] hoodoos: so my libs isn't compiled well for the current I use, right? [06:30] naturalethic: you should probably recompile any modules yeah [06:30] hoodoos: okaaay. thanks a lot! :) [06:33] micheil: ryah: hey, also, gjslint with -r flag is better. [06:33] cardona507 has joined the channel [06:48] o_o has joined the channel [06:48] Nimphious has left the channel [06:48] micheil: ryah: patched. https://gist.github.com/724904 [06:49] micheil: although, it's kinda late; I'll email through. [06:49] indutny has left the channel [06:49] abiraja has joined the channel [06:50] KeyboardWarrior: micheil: Patched socket? [06:50] micheil: patched socket, what? [06:50] KeyboardWarrior: Oh some python thing [06:51] micheil: no, the makefile [06:51] KeyboardWarrior: You guys are working hard, soon Node.js will have as many libraries as PHP :) [06:51] KeyboardWarrior: Is there a good XML parser built in now? [06:51] isaacs has joined the channel [06:52] mape: JimBastard: Does forever have any way of naming instances? Seems if I use it I would end up with 30 server.js instances [06:52] micheil: KeyboardWarrior: http://github.com/ry/node/wiki/Modules go for it. [06:52] micheil: mape: there is process.title, but uhh, yeah. [06:53] mbrochh has joined the channel [06:53] hamsterspider has left the channel [06:54] mape: micheil: Yeah that I use, but not sure if forever uses that [06:54] aconbere: I merged master a while back and now the test suite seems to be hanging on test-securepair-client [06:54] micheil: well, I wouldn't recommend using process.title, simply because it isn't the most reliable. [06:54] aconbere: am I crazy? [06:55] micheil: maybe [06:55] KeyboardWarrior: So would I load a module for XML parsing? I'm assuming JSON parsing is built in [06:55] mape: micheil: Would it break anything? I just add it for when I can use it. [06:55] micheil: well, it's not really the best feature, while it works, some os's don't like it, and it isn't always referred to by process managers [06:56] KeyboardWarrior: loadxml() right? [06:56] aconbere: micheil: it's hanging in master proper, so hopefully it's either a bug or my environment [06:56] aconbere: :P [06:56] micheil: aconbere: might be your env, but there's tonnes of work happening in that area at the moment [06:57] JimBastard: mape: i think so, if not it should. check it out, write an issue [06:57] aconbere: hmpf [06:57] JimBastard: we are using in prod now, so id want to see that [06:58] mape: JimBastard: Will do if I remember [06:58] mikeal: JimBastard: are you still in town? [06:58] JimBastard: mikeal: back in nyc atm [06:58] mikeal: cool [06:58] micheil: hmm.. I wonder when no.de is going to go fully public. [06:59] aconbere: ACTION recompiles and tries again [07:00] KeyboardWarrior: Can node.js haz loadxml()? [07:01] mjr_: Did recent nodes make node-inspector sad? TypeError: Cannot set property '_idlePrev' of null [07:04] aconbere: awwww [07:04] aconbere: [00:07|% 2|+ 9|- 0]: debug test-securepair-client [07:04] aconbere: the furthest I'll get tonight [07:05] micheil: mjr_: that's to do with changes to lib/timers.js [07:06] KeyboardWarrior: I guess xml is a bad word here :p [07:06] micheil: KeyboardWarrior: well, JSON's far better in most cases. [07:06] mjr_: Oh, nm. Looks like this timer bug got fixed yesterday and I didn't refresh. [07:07] V1 has joined the channel [07:07] kawaz_air has joined the channel [07:08] tyfighter has joined the channel [07:09] KeyboardWarrior: All modules are written in .js and because it's V8, they're all non-blocking :) [07:11] q_no has joined the channel [07:13] mjr_: XML helps you write Java. JSON helps you write JavaScript. [07:13] micheil: man. gjslint sucks with it's PYTHONPATH crap. [07:14] KeyboardWarrior: My xmlbuilder is printf() :) [07:14] KeyboardWarrior: <"%s **error = &v8::Handle::TypeError(v8::String::New("argument mismatch")); [08:08] v8bot: naturalethic: SyntaxError: Unexpected token : [08:08] SubStack: my submission doesn't have any upboats yet :/ [08:08] naturalethic: anyone help me with that, trying to pass back an exception through an argument [08:09] jwl: it has only been 18 months since node.js released? [08:10] isaacs has joined the channel [08:13] naturalethic: question: how do I pass back an exception through an argument rather than returning it with ThrowException [08:14] SubStack: naturalethic: have the function take a callback instead of returning a value [08:14] naturalethic: SubStack: i mean in C++ land [08:14] SubStack: oh hah [08:15] luke` has joined the channel [08:18] peutetre has joined the channel [08:21] delapouite_ has joined the channel [08:26] Jonasbn_ has joined the channel [08:27] mscdex: naturalethic: there is the generic v8::Exception class [08:28] naturalethic: yeah, i've modified my method to allow returning instead, this might work [08:28] mscdex: naturalethic: its constructor takes the error message as the only argument [08:29] naturalethic: they seem to be wrapped a little different than normal values [08:29] SamuraiJack has joined the channel [08:30] [AD]Turbo has joined the channel [08:32] hellp has joined the channel [08:33] daglees has joined the channel [08:33] daglees has joined the channel [08:35] stagas: anyone got a regexp to scrape urls from text? [08:39] isaacs has joined the channel [08:40] stagas: nevermind I had one :) [08:41] Druid_ has joined the channel [08:42] trave has joined the channel [08:42] stagas: here: https://gist.github.com/724995 [08:44] TomSlick` has joined the channel [08:47] teemow has joined the channel [08:49] margle has joined the channel [08:49] naturalethic: any C++ hackers tell me how to check if a v8::Value is a v8::ThrowException ? [08:49] viirya has joined the channel [08:49] naturalethic: be nice if there was a ->IsException method [08:52] qFox has joined the channel [08:53] mAritz has joined the channel [08:56] adambeynon has joined the channel [08:57] aklt has joined the channel [09:03] mikedeboer has joined the channel [09:05] sechrist: for net.stream, is the .length of the data buffer returned from the data event the size of the packet always? [09:06] jwl: JimBastard: hi .. its ajsie here .. you know who is behind https://github.com/cloudhead ? [09:06] mohiam has joined the channel [09:06] JimBastard: yeah, cloudhead [09:07] jvolkman has joined the channel [09:07] jwl: :) [09:08] jwl: just a regular guy? first i thought he had something to do with cloudant .. but then i saw Vows .. i thought you were behing vows.js? [09:08] jwl: or you were using it maybe? [09:09] isaacs_ has joined the channel [09:09] doffm: I have had a few issues using vows. Essenta [09:10] naturalethic: sechrist: packet? [09:10] doffm: Beleugh. Essentially the ability to pass values from an outer topic to an inner topic doesn't work for asyncronous tests. (When the value to be returned from the topic comes through the callback) [09:10] sechrist: chunk rather [09:10] sechrist: data chunk [09:10] doffm: Made it difficult for me to to some setup work. [09:11] ntelford has joined the channel [09:11] sechrist: is the Buffer() returned by that callback always allocated to the exact size of the data? [09:11] whyme: doffm: you must pass value as 2nd param to callback [09:12] doffm: whyme: Is that then passed down as a parameter to topics inside a subcontext? [09:12] doffm: It didn't seem to be. [09:12] whyme: cb = this; socket.on('message', function(msg){cb(null, msg)}) [09:12] whyme: instead of socket.on('message', this) [09:12] naturalethic: sechrist: no, you'll need to keep handling data events, growing your buffer until you've got all the data you expect [09:13] sechrist: naturalethic: so there's no length or anything to use as a metric? [09:13] naturalethic: sechrist: you'll have to create an outside buffer and copy each chunk into it, etc [09:13] sechrist: well I know that [09:13] sechrist: but what I'm saying is [09:13] sechrist: is buffer.length accurate to the size of that chunk [09:13] naturalethic: sechrist: oh, yes [09:18] agnat has joined the channel [09:22] svnlto has joined the channel [09:22] jwl: how do i set the current folder in node.js? [09:23] Aikar has joined the channel [09:26] ewdafa has joined the channel [09:27] SubStack: jwl: process.chdir [09:28] pdelgallego has joined the channel [09:28] springify has joined the channel [09:28] sechrist: SubStack: so I think I have a use case for bufferlist [09:28] sechrist: but I'm not entirely sure if it's exactly that [09:29] sechrist: basically I have packets that have frames around the data that have a length field, to handle individual things in a stream [09:29] sechrist: is bufferlist meant for me to just push each coming one and then count up based on that? [09:29] pietern has joined the channel [09:31] SubStack: sechrist: I do that in node-rfb [09:31] sechrist: I basically need to put incoming chunks into a buffer, parse it top down, and take off the parsed sections as they parse so the tmp buffer doesn't get huge [09:31] SubStack: and pretty much yeah [09:31] Yuffster has joined the channel [09:31] SubStack: it saves you having to re-allocate buffers every time you get a new packet [09:32] sechrist: but it looks like bufferlist is a list of buffers rather than one large buffer that I can just chomp and remove top from [09:32] sechrist: if that's how I can use it -- I don't see how clearly [09:33] SubStack: well you treat the list as if it were a continuous buffer [09:33] SubStack: instead of a bunch of fragments [09:34] SubStack: and then as you don't need stuff off the head you advance the byte offset and the unused buffers get GC'd [09:34] sechrist: hmm ok, and outside of your getWord functions -- how do I grab a random chunk of arbitrary size into another buffer (or a slice)? [09:34] sechrist: oh really? a sliding buffer size GC thing? neat! [09:34] caolanm has joined the channel [09:34] SubStack: well you get the GC for free since the objects aren't linked anymore [09:34] SubStack: one sec [09:34] virtuo_ has joined the channel [09:34] nooder: v8 +new Date [09:34] v8bot: nooder: v8 is no longer supported (except in PM). Try v8: or v8> [09:35] nooder: v8: +new Date [09:35] v8bot: nooder: 1291282504312 [09:35] sechrist: oic, as the chunk is no longer used -- gc just grabs it [09:35] sechrist: genius [09:35] nooder: how to get just seconds? mithout ms [09:35] sechrist: divide by 1000 [09:35] sechrist: v8: (new Date().getTime()/1000).toString(); [09:35] v8bot: sechrist: "1291282557.16" [09:35] SubStack: sechrist: so in binary there's getBuffer which reads up to an offset [09:36] sechrist: and round it btw [09:36] nooder: this is only way? [09:36] V1 has joined the channel [09:36] whyme: v8: Date.now() [09:36] v8bot: whyme: 1291282570657 [09:36] SubStack: you can also specify conditionals and even nest them [09:37] SubStack: then you can do .join() which takes two offsets and builds a single buffer [09:37] SubStack: basically a slice [09:37] sechrist: hmm [09:38] SubStack: check out https://github.com/substack/node-rfb/blob/master/lib/rfb.js from line 185+ [09:38] nooder: what is fastest way of merging 2 buffers? [09:39] chewbran1a has joined the channel [09:39] JimBastard: lol number 1 on HN [09:39] SubStack: sechrist: line 207-208 is what I would guess you are doing at least somewhere [09:39] JimBastard: people are hating [09:39] sechrist: JimBastard: <32 [09:39] sechrist: -2 [09:40] matjas has joined the channel [09:40] JimBastard: ? [09:40] sechrist: the HN hate [09:40] zinger has joined the channel [09:41] margle has joined the channel [09:41] sechrist: supervisor sucks [09:41] sechrist: well ok it doesn't suck but it's not trivial to deploy in 5 mins [09:42] JimBastard: ive used most of these tools [09:42] JimBastard: ive never used one that had a nice built in scripting env [09:42] JimBastard: ever [09:42] JimBastard: is it crazy to want that? [09:42] sechrist: bash dude [09:42] sechrist: bash is the best scripting language ever [09:42] JimBastard: yeah but like, in bash you dont get access to the leet node apis [09:43] sechrist: now can forever be placed in /etc/init.d? [09:43] sechrist: if so [09:43] sechrist: you win the game [09:43] SubStack: yeah this forever thing looks nice, I hate all the other tools I've tried to get running [09:43] JimBastard: hrmm [09:43] isaacs has joined the channel [09:43] SubStack: oh also I can tie forever to my irc bot doing browserling alerts [09:44] JimBastard: obviously the other tools are super battle hard. you cant deny that [09:44] sechrist: actually I need a fancy way to supervise services -- at work our cloud service is almost to the point where we have to do live migrations with drains on specific nodes with people using the clusters [09:44] sechrist: and this is what I am going to use. [09:44] SubStack: it already tells us when the network craps out between the API and the windows servers [09:44] naturalethic: nooder: what kind of merge, you mean append? [09:45] nooder: naturalethic, i can't append, because buffers are fixed in size. so i create new one and copy 2 in 1 [09:46] naturalethic: nooder: yeah i was just wondering what sort of result you wanted, yeah you need to create a new one big enough to hold both [09:49] sechrist: SubStack: so say that I don't have the entire length in my bufferlist required for parsing, do I just advance negatively to go back to before I started parsing my header? [09:51] SubStack: sechrist: getBuffer() won't continue until all the data arrives [09:51] SubStack: if you have a fixed-length [09:51] sechrist: wait.. seriously? [09:51] SubStack: yep [09:51] sechrist: that's ridiculously cool [09:51] SubStack: check out the blog post I did [09:51] SubStack: http://substack.net/posts/cb328d [09:52] slaskis has joined the channel [09:53] Fullmoon has joined the channel [09:53] liar has joined the channel [09:54] SubStack: sechrist: bufferlist/binary was made specially for parsing the rfb protocol so it's great at handling fixed-length buffers [09:54] zimbatm has joined the channel [09:55] SubStack: and Binary() can do loops and all kinds of crazy tricks [09:56] faust45 has joined the channel [09:56] Fullmoon has joined the channel [09:58] sechrist: SubStack: if forever just a tap that repeats after a flush? [09:58] sechrist: trying to make sense of rfb.js [09:58] sechrist: s/if/is [09:58] SubStack: sechrist: I think so, trying to remember [09:59] SubStack: aha looking at the code it's pretty much exactly that [09:59] SubStack: wait, after a flush though? [09:59] sechrist: what does flush do [10:00] SubStack: sets the offset to 0 [10:00] sechrist: oh [10:00] sechrist: noes [10:00] SubStack: oh wait [10:01] SubStack: not the whole story: it advances up to the offset and then sets that offset to 0 [10:01] SubStack: so it drops everything before the offset, effectively [10:01] sechrist: oh ok [10:01] sechrist: hmm [10:02] sechrist: SubStack: https://gist.github.com/725061 [10:02] sechrist: this loops the callback with the same data -- as it would look like it does in the code [10:02] sechrist: should the getWords be in the forever? [10:03] sechrist: this flow is crazy :) [10:03] SubStack: forever executes the block inside of it over and over [10:03] SubStack: so you can nest chains [10:04] SubStack: inside forever, start a new chain with `this` [10:04] sechrist: working [10:04] sechrist: holy crap [10:04] lmorchard has joined the channel [10:04] sechrist: this is amazing [10:05] sechrist: this is probably the most paradigm shifting nodejs module I've seen [10:05] SubStack: if you like this check out http://github.com/substack/node-chainsaw [10:05] SubStack: sechrist: nah it's just basically haskell's binary get monad translated to javascript ;) [10:05] cheney has joined the channel [10:05] SubStack: descriptive semantics! [10:05] SubStack: I likes them. [10:06] sechrist: haskell has been doing this kind of stuff? [10:06] sechrist: I should have learned haskell years ago -- this kind of handling of streams would have helped me write 3 gameservers and several video streaming servers [10:06] SubStack: haskell does nothing but this kind of crazy stuff [10:06] SubStack: anyways I'll get around to cleaning up bufferlist eventually [10:07] sechrist: I wonder how well this can handle h.264 [10:07] SubStack: which will probably entail splitting it off into a module named 'binary' [10:07] SubStack: well, I can make a 'get' module first to compliment 'put' [10:08] SubStack: and fully separate the chain logic with chainsaw from the streaming buffer logic from the encoding logic [10:09] SubStack: sechrist: oh right so in haskell pipeline-style is everywhere [10:10] SubStack: it helps that `do` is just sugar for folding operations over (>>) [10:10] SubStack: and then in pure code it's really common to compose lots of functions together with (.) or ($) [10:10] SubStack: just like in the shell with | [10:10] sechrist: does erlang do this too? [10:11] SubStack: haven't learned erlang yet [10:11] sechrist: thing that scares me about erlang, haskell, scala, etc is that you probably have to write C modules or something to do anything [10:11] sechrist: i've always thought they were for handling primarily text, a la TCL [10:11] SubStack: yeah that part sucks [10:11] SubStack: although hackage is pretty huge [10:12] nooder: is ther a way to simplify this code - http://pastebin.com/JU13Jsgt ? [10:13] SubStack: nooder: is that even javascript? [10:14] nooder: SubStack, i'm adding new buffer to the global one [10:14] isaacs_ has joined the channel [10:14] SubStack: nooder: globals are bad [10:15] SubStack: nooder: what problem are you trying to solve? [10:15] nooder: i need to make big buf from genereted in while ones [10:15] nooder: and push him out [10:18] SubStack: nooder: so you want to concatenate a bunch of small buffers together into a large one? [10:18] markwubben has joined the channel [10:19] nooder: yep, you can see it in code [10:19] SubStack: it's hard to see what's going on in that code [10:19] nooder: buf - is target, ipbuf generated each cycle [10:19] SubStack: since a lot has been left out and the syntx is invalid [10:21] q_no has joined the channel [10:21] nooder: so can you tell theory? can i merge them without so much copy and 2 new bufs? [10:21] SubStack: this is how I would approach that: [10:22] SubStack: var len = smallBufs.reduce(function (sum,buf) { return sum + buf.length }, 0); var bigBuf = new Buffer(len); var i = 0; smallBufs.forEach(function (buf) { buf.copy(bigBuf, i, buf.length, 0); i += buf.length }); [10:22] Anti-X has joined the channel [10:22] SubStack: except I have no idea where your buffers are coming from [10:24] nooder: SubStack, http://pastebin.com/NkyPg8zw [10:26] SubStack: nooder: I think the special case inside the loop for your startup code is needlessly confusing [10:26] SubStack: just do two passes [10:26] SubStack: one to count up how big the final buffer should be [10:26] SubStack: and another to copy the buffers into the final buffer [10:27] SubStack: the algorithm you have makes needless copies [10:27] markh1 has joined the channel [10:27] markh has joined the channel [10:28] Nohryb has joined the channel [10:34] aubergine has joined the channel [10:37] hecticjeff has joined the channel [10:40] margle has joined the channel [10:42] altamic has joined the channel [10:44] aliem has joined the channel [10:44] isaacs has joined the channel [10:45] nooder: SubStack, thx :) [10:46] davidc_ has joined the channel [10:47] svnlto has joined the channel [10:48] Anti-X has joined the channel [10:53] altamic has joined the channel [10:54] tmm1 has left the channel [10:55] mohiam has joined the channel [11:04] V1 has joined the channel [11:06] TomY has joined the channel [11:08] spetrea_ has joined the channel [11:12] flashingpumpkin has joined the channel [11:15] mohiam_ has joined the channel [11:15] zorzar_ has joined the channel [11:16] christophsturm has joined the channel [11:20] jamescarr has joined the channel [11:21] fly-away has joined the channel [11:29] zemanel has joined the channel [11:29] unomi has joined the channel [11:32] malkomalko has joined the channel [11:33] InsDel has joined the channel [11:35] romeo_ordos has joined the channel [11:39] isaacs_ has joined the channel [11:46] mies has joined the channel [11:48] d0k has joined the channel [11:48] d0k__ has joined the channel [11:48] d0k_ has joined the channel [11:48] erlnoob has joined the channel [11:49] d0k has joined the channel [11:50] Nohryb has joined the channel [11:50] samh_ has joined the channel [11:50] slaskis has joined the channel [11:52] Spion_ has joined the channel [11:52] matjas has joined the channel [11:53] SamHasler has joined the channel [11:53] marcostoledo has joined the channel [11:53] sonnym has joined the channel [11:56] DmMa has joined the channel [11:56] mohiam has joined the channel [11:57] matjas has joined the channel [12:02] adambeynon has joined the channel [12:09] ooooPssss has joined the channel [12:09] cheney has joined the channel [12:09] linac has joined the channel [12:09] nuba has joined the channel [12:10] isaacs has joined the channel [12:12] capndiesel has joined the channel [12:16] ivanfi has left the channel [12:21] unomi has joined the channel [12:29] kulesa has joined the channel [12:29] kulesa has left the channel [12:32] kulesa has joined the channel [12:34] dmma has joined the channel [12:38] matjas has joined the channel [12:46] isaacs_ has joined the channel [12:47] altamic has joined the channel [12:58] ivanfi has joined the channel [12:59] ben_alman has joined the channel [13:00] Ond has joined the channel [13:00] KOBA789 has joined the channel [13:00] booths has joined the channel [13:01] nooder: how do i grep just headers from remote web site? [13:03] killfill has joined the channel [13:03] stride: you could create a request with the http client and close it when the response event is triggered [13:04] nooder: oh thx, can get used to events :) [13:04] nooder: can=can't [13:04] naturalethic: HTTP specifies the HEAD action [13:04] stride: hehe :) [13:04] romeo_ordos: use node.http.Client.head(path, request_headers) function [13:05] romeo_ordos: isn't it deprecated? [13:06] stride: romeo_ordos: what's that? [13:06] romeo_ordos: http://nodejs.org/docs/v0.0.1/api.html#http_client [13:07] stride: ... :) [13:08] nooder: there really is head method [13:09] nooder: client.request('HEAD', …) might work :) [13:11] erlnoob: nooder: but depending on what you want and the remote server, HEAD method might return different headers than the usual get/post [13:11] hecticjeff has joined the channel [13:14] dnolen has joined the channel [13:14] Anti-X has joined the channel [13:16] proppy has joined the channel [13:16] trotter has joined the channel [13:16] isaacs has joined the channel [13:18] jvolkman-work has joined the channel [13:19] ianward has joined the channel [13:20] sclaflin has joined the channel [13:22] vineyard has joined the channel [13:22] KeyboardWarrior: What's the default HTTP server for node.js? [13:23] naturalethic: http://nodejs.org/docs/v0.0.1/api.html#http ? [13:24] V1: So far the forever module has been a pain in my arse, [13:24] KeyboardWarrior: If my code is always running, can I keep an array variable in Javascript that I use to generate HTML from? [13:25] KeyboardWarrior: V1: Why not just a while (1) ( run node ) [13:25] V1: Good Idea, lets try that [13:25] naturalethic: heh [13:26] V1: ACTION looks suspicious  [13:26] KeyboardWarrior: V1: Just a bash script [13:27] eee_c has joined the channel [13:27] naturalethic: screw it just go with Python on Planes [13:28] V1: ill create a php deamon and monitor node! [13:29] KeyboardWarrior: If I put a variable called sharedvar above http.createServer(function (req, res) {, will the code be able to access it and change it? [13:29] naturalethic: KeyboardWarrior: yep [13:30] KeyboardWarrior: I am managing both POST and GET requests from the same node. The POST requests augment the data in the shared variable (a big string), and the GET requests grab the contents [13:31] naturalethic: seems rational [13:32] KeyboardWarrior: Actually sense node processes each request sequentially rather than in paralle, commonvar is probably a more sensical name. [13:32] KeyboardWarrior: err since [13:33] naturalethic: i was gonna say [13:34] KeyboardWarrior: Only other thing is getting node.js to listen on port 80, but probably the way to do that is run node.js in a vps [13:35] naturalethic: you'll need root access somehow, or a reverse proxy if you have that option [13:36] KeyboardWarrior: I have an unmanaged dedicated server that I'll have to fly across the country to get to if I mess up bad enough that I can't ssh in :p [13:36] naturalethic: lol [13:36] micheil: naturalethic: other options would be to use something like upstart+monit [13:36] KeyboardWarrior: I suppose I can proxy through Apache pretty easily [13:37] KeyboardWarrior: But that adds a lot of overhead in terms of server utilization [13:37] naturalethic: i haven't got a chance to mess with upstart yet [13:37] bzinger: it will be a better option to use nginx as proxy [13:37] naturalethic: KeyboardWarrior: well, i only mentioned in case you're on a shared server where some admin can config their main server to rproxy to you -- if you own the machine do whatever you like [13:37] zomgbie has joined the channel [13:38] KeyboardWarrior: If I can run multiple vps instances on the same physical machine to get multiple IPs, that would be best I think [13:38] splashs has joined the channel [13:38] naturalethic: or vhost to one ip [13:39] webflo has joined the channel [13:40] KeyboardWarrior: Yeah, I have ten sites through s in Apache. I could use mod_proxy on an ad hoc to send the requests through to node [13:41] KeyboardWarrior: And if this needs to scale, it will be easy enough to get a separate machine entirely for node :) [13:41] matclayton has joined the channel [13:42] micheil: KeyboardWarrior: it's best not to assume that node will process request sequentially. [13:42] erlnoob: anyone here using connect-redis? [13:42] MattJ has joined the channel [13:43] erlnoob: I was wondering what's the default maxAge is.. I looked at the source and it seems to "setex sessid 0 sessvars" [13:43] erlnoob: if none is given [13:44] TomY has joined the channel [13:44] KeyboardWarrior: micheil, you mean it could be parallel? [13:44] erlnoob: but of course doing setex key 0 val on redis would give an error [13:45] webflo: i have a problem with sessions in connect. the session object is only available in some url-callbacks. not in everyone [13:45] micheil: KeyboardWarrior: possible, or that you could have two requests open at once. [13:45] jamescarr has joined the channel [13:45] KeyboardWarrior: Ah, kind of like Apache [13:46] jamescarr: hey guys [13:46] micheil: hey jamescarr, thanks for sanity. [13:46] ntelford has joined the channel [13:46] jamescarr: what are some really slick websocket demos out there? :) [13:46] jamescarr: micheil, huh? :) [13:46] micheil: jamescarr: it's been a long day. [13:46] KeyboardWarrior: ACTION needs to figure out how to get node.js installed on a crusty old CentOS box [13:46] jamescarr: ah [13:47] jamescarr: I hear you [13:47] isaacs has joined the channel [13:47] jamescarr: I've been up all night [13:47] micheil: jamescarr: just added JS Lint to my project.. [13:47] jamescarr: and a full day ahead [13:47] jamescarr: :) [13:47] jamescarr: mice [13:47] jamescarr: *nice [13:47] micheil: had fun fixing it and making code better. [13:47] jamescarr: hehehehe [13:47] micheil: need to add it to nws and watch it explode [13:47] jamescarr: I met Douglas crockford this week [13:47] micheil: oh, sweet. [13:47] jamescarr: I think he might still be around, any comments you want me to convey? :) [13:48] KeyboardWarrior: So is building node.js the installation method of choice? [13:48] micheil: uh, this is GJSLint [13:48] micheil: so, it's a python one written by google [13:48] jamescarr: micheil, offhand, know of any other cool websocket demos besides sketchpad? [13:48] micheil: oh, umm../ [13:48] Ond: How about scrabb.ly [13:48] micheil: I think bladderbock used them, and scrabbly [13:49] micheil: there's also hummingbird [13:49] micheil: and a few others [13:49] naturalethic: jamescarr: https://github.com/stephank/orona [13:50] arpegius has joined the channel [13:51] micheil: "Found 557 errors, including 0 new errors, in 7 files (1 files OK)." [13:51] micheil: added JS Lint to nws. [13:53] femtoo has joined the channel [13:53] kriszyp has joined the channel [13:54] jed__ has joined the channel [13:55] altamic has joined the channel [13:56] boaz has joined the channel [13:57] trotter has joined the channel [13:58] trotter has joined the channel [13:59] Aikar: KeyboardWarrior: i dont think i had really any issues building it on centos [14:00] nooder: is it possible to query google throw proxy? may be module? [14:00] stride: nah, except for the openssl and regular build dependencies it works on CentOS 5 out of the box iirc [14:00] V1: finally, i got the forever module to run. \o/ [14:01] naturalethic: good luck stopping it [14:01] Aikar: anyone know status of getting node-msgpack to compile on node 0.3.1? [14:01] Aikar: it throws errors about the Buffer code :( [14:02] V1: naturalethic: not that hard, just kill the main process [14:03] naturalethic: i was kidding man [14:03] V1: naturalethic: Iknow :$ [14:03] naturalethic: dammit [14:03] V1: muha haa [14:03] V1: Now i can finally continue building speedo 2.0 [14:04] romeo_ordos has left the channel [14:04] proppy has joined the channel [14:05] naturalethic: and what pray tell is that! [14:07] baoist has joined the channel [14:10] rope has joined the channel [14:12] slaskis has joined the channel [14:13] micheil: hmm.. odd. [14:14] matjas has joined the channel [14:15] micheil: jamescarr: can you recall the "proper" way to send binary data with node now? [14:16] micheil: https://github.com/ry/node/blob/master/TODO#L5-6 [14:16] micheil: after all that.. [14:17] [AD]Turbo: is there a Javascript equivalent for the PHP function filter_input ? [14:18] naturalethic: micheil: wouldn't you encode it to a buffer and send that? [14:18] micheil: naturalethic: buffer's are slow. [14:18] micheil: (generally) [14:18] ajpiano has joined the channel [14:18] stagas has joined the channel [14:18] micheil: or rather, not slow, but just not very efficient to create [14:18] micheil: and for sending messages over websockets, not something I'd want to be doing. [14:20] stride: [AD]Turbo: nothing built-in at least [14:20] tisba has joined the channel [14:21] [AD]Turbo: stride, I will be glad to find an external module/function, but browsing the web I didn't find such a function [14:21] jetienne has joined the channel [14:22] WhenRaptors has joined the channel [14:22] WhenRaptors: heya guys [14:22] WhenRaptors: nvm online repo listing URL? [14:23] WhenRaptors: *npm [14:23] stride: [AD]Turbo: haven't seen any implementation for that around, guess you'll have to do your own. the form libs I've seen so far didn't offer functionality for sanitizing the input data iirc [14:23] WhenRaptors: nevermind, found it (http://npm.mape.me/) [14:27] [AD]Turbo: ok stride, thx for the information [14:29] stride: one of the web frameworks might have something like that for their parameter parsing / routing though if you need a starting point [14:30] WhenRaptors: @NovaDesu : I recommend inspecting the client object [14:31] altamic has joined the channel [14:31] WhenRaptors: otherwise http://socket.io/ + the github page [14:31] isaacs has joined the channel [14:34] corntrace has joined the channel [14:36] corntrace has left the channel [14:39] davidsklar has joined the channel [14:40] masahiroh has joined the channel [14:41] wattz: good morning [14:44] rnewson has joined the channel [14:44] EyePulp has joined the channel [14:44] chrischris has joined the channel [14:44] cronopio has joined the channel [14:45] proppy: http://nodejs.org/docs/v0.3.1/api.html broken :( [14:46] proppy: is error argument 'null' or 'undefined' when there is no error ? [14:47] rnewson has left the channel [14:48] TomY_ has joined the channel [14:50] micheil: there is no api.html [14:50] micheil: see: http://nodejs.org/docs/v0.3.1/api/ [14:50] micheil: where did you find the link to that page proppy? [14:54] proppy: micheil: go to http://nodejs.org/, click API Documentation, click v0.3.1, click API Documentation again [14:54] proppy: this looks broken [14:54] jmar777 has joined the channel [14:55] micheil: uhh, yeah. That's just cruft. Not much we can do there, because they are historical indexes. [14:56] micheil: can I rage? https://github.com/miksago/node-websocket-server/issues#issue/46/comment/583579 [14:56] amacleod has joined the channel [14:57] mies has joined the channel [14:58] noahcampbell has joined the channel [15:00] Aikar: lol @ this http://www.makeuseof.com/tech-fun/fun-with-the-neighbors/ [15:03] mies has joined the channel [15:04] erlnoob: connect-redis sessions doesn't play well with handler chaining! [15:06] micheil: best. commit. message. https://github.com/miksago/node-websocket-server/commit/9ce46989cb6546909889e8afa88d8f0b7c4006de [15:06] jmar777: so is there any word on when v0.3.x might be considered "stable"? is there some sort of an issue queue governing that? [15:07] bentruyman has joined the channel [15:08] micheil: 0.3.X will never be stable [15:08] micheil: 0.4.0 will be the next stable release [15:09] chrelad has joined the channel [15:10] jmar777: micheil: thanks. what's the reasoning there? has it just been decided that once it seems stable, we'll call it 0.4.0? [15:10] paulrobinson has joined the channel [15:10] nooder: anybody tryed querying google throw proxy? is there a module for proxy? [15:11] micheil: umm, just that it's easier to know that if the release is an even number, then it's a stable build [15:11] micheil: so, 0.2.X is always stable [15:11] ceej has joined the channel [15:12] micheil: 0.4.X is always stable [15:12] micheil: 0.1.X is always unstable [15:12] micheil: 0.3.X is always unstable [15:12] stride: huh? [15:12] jmar777: micheil: ahh - wasn't familiar with the convention. guess that is easy enough to remember [15:12] micheil: jmar777: I'm pretty sure that's right, anyway. [15:12] micheil: stride: ? [15:13] akahn has joined the channel [15:13] stride: micheil: nothing, that just sounds pretty unintuitive to me [15:13] cferris|afk has joined the channel [15:14] micheil: a lot of unix projects do use that though [15:14] stride: hmkay, just have to put a mental node of that in my head :) [15:14] MattJ: mental nodes, mmm [15:14] chrelad: micheil: Should that convention be explained somewhere on the website? [15:14] micheil: maybe [15:15] stride: MattJ: uh, damn :) [15:15] micheil: hmm.. anyone know what unix error code 32 is? [15:15] hij1nx has joined the channel [15:16] MattJ: micheil: EPIPE? [15:16] jmar777: stride: was new to me too. according to wikipedia, it's also used by the linux kernel and GNOME (as well as others): http://en.wikipedia.org/wiki/Software_versioning#Modifications_to_the_numeric_system [15:16] micheil: hmm, sounds about right [15:16] stride: jmar777: okay, thanks for the link [15:16] cwo has joined the channel [15:19] jmar777: I think the next project I do I'm going to do a hat-tip to Knuth and make stable releases fall on increasingly accurate representations of pi [15:19] jmar777: plus I get to start at "3", which will fool everyone into thinking it's already a mature project.... :p [15:21] micheil has joined the channel [15:23] pt_tr has joined the channel [15:23] spetrea__ has joined the channel [15:23] naturalethic: "The developers also humorously joked that they skipped version 4 because "nobody wants to see a Winamp 4 skin", referencing the foreskin of a penis." [15:26] amacleod: Which penis's foreskin were they referencing? [15:26] naturalethic: good question [15:28] spetrea_ has joined the channel [15:28] Adamb0122 has joined the channel [15:29] jmar777: i'm so glad wikipedia clarified the 4 skin reference. that joke was nigh-undecipherable [15:33] naturalethic: i feel like i remember reading that statement before like a million internet years ago [15:36] hunterloftis has joined the channel [15:36] Adamb0122: Hey everyone! Got a quick problem / question for ya. I'm trying to install nodeJS on CentOS 5 x64 (fully updated, with th e "Development Tools" installed, gcc-c++, curl-devel, yadayada yada) Goes through the whole process online and *looks* to compile correctly, however when i run make test, I get an error reguarding curl, and I'm trying to figure out how to resolve that. http://pastebin [15:36] Adamb0122: .com/fn1VpX51 is a log of my commands during installation, as well as the error (errors start around line 1742) [15:36] hunterloftis: a server.js that was working fine last night is suddenly giving me "ECONNREFUSED, Connection refused" - never seen this before. Any ideas? [15:36] naturalethic: hunterloftis: wild guess, your mongo server isn't running [15:37] hunterloftis: naturalethic: Thanks, I'll test [15:37] hunterloftis: thought it was daemonized but maybe not [15:39] softdrink has joined the channel [15:39] hunterloftis: naturalethic: Beautiful, thanks. That's a cryptic message deep in node.js [15:39] naturalethic: haha, good guess i guess [15:39] isaacs has joined the channel [15:40] jetienne: Error: Command failed: /bin/sh: shasum: command not found <- Adamb0122 install shasum [15:41] naturalethic: hunterloftis: just fyi, that's the message you'll get whenever your program tries to connect to any unavailable service, i just guessed mongo [15:42] hunterloftis: gotcha [15:42] hunterloftis: thanks for the tip, I'll look out for it [15:42] Adamb0122: jetienne > I thought the same but i can't seem to find any package or source for compiling shasum. [15:43] jpld has joined the channel [15:43] jetienne: Adamb0122: what about sha1sum ? [15:43] Adamb0122: also "sha1sum" is installed, think if i just create an alias from "shasum" to sha1sum it'll work? [15:43] Adamb0122: sha1sum is, yes. [15:43] jetienne: Adamb0122: try [15:44] jetienne: Adamb0122: btw what is failing is testing... you dont care much, you just want it installed [15:44] jetienne: Adamb0122: so skipping the test may be even easier [15:45] kevwil has joined the channel [15:45] robotarmy has joined the channel [15:45] tobie has joined the channel [15:46] kevwil has joined the channel [15:47] hunterloftis: This might be a crazy question but did express or the jade renderer just get an update to look for partials in "_partial" rather than in the "/partials" dir? [15:47] jpiche has joined the channel [15:49] ivanfi has left the channel [15:50] nsolsen has joined the channel [15:50] Jonasbn_ has left the channel [15:51] naturalethic: hunterloftis: there's this https://github.com/visionmedia/express/commit/9e337faa3306d65a82fade5f6f0ebb7bec6aba82 [15:51] hunterloftis: Yeah I just saw that in gitk [15:51] hunterloftis: I guess that must be why [15:51] hunterloftis: more like ruby [15:51] tanepiper: nodejitsu blog down? [15:51] Anti-X: www.downforeveryone.com [15:52] jpld has joined the channel [15:52] tanepiper: indeed it is [15:52] mizerydearia has joined the channel [15:53] mizerydearia has joined the channel [15:54] jpiche: when running test with http with node.js, i get the error "(node) Hit max file limit. Increase 'ulimit -n'." Any idea what might cause that? [15:55] matt_c has joined the channel [15:55] micheil: yeah [15:55] micheil: ulimit is too low [15:55] micheil: ulimit -n 512 [15:55] micheil: should fix it. [15:56] jpiche: um.. okay. what does that do? [15:57] Anti-X: set the max file limit to 512 [15:57] micheil: that increases the number of file descriptors or ports that your machine can have open port process [15:59] springmeyer has joined the channel [15:59] jetienne: jpiche: close some connection [15:59] jetienne: jpiche: you open too many connections. the kernel is complaining [16:00] jetienne: because the amount of connection is *hardcoded* in the kernel. dont laught :) we are in 2010 :) [16:01] Anti-X: is it? [16:02] stagas: anyone knows what this error is? https://gist.github.com/725565 [16:02] dguttman has joined the channel [16:03] stagas: I can't debug it as it doesn't return a line number [16:03] jpiche: jetienne, so, if i wanted ensure that an instance of node.js could handle 10k simultaneous connections, I'd have to set the ulimit to 10k ? [16:03] sonnym has joined the channel [16:03] BillyBreen has joined the channel [16:03] Anti-X: stagas, do console.log(err.stack) i think [16:04] jetienne: stagas: seems like your ondata callback is raising an exception. [16:04] stagas: Anti-X: it's there already [16:04] jetienne: jpiche: yes [16:04] Anti-X: stagas, that json structure is just log(err) [16:04] Anti-X: not err.stack [16:04] jamund has joined the channel [16:04] hunterloftis: lol damn it express has changed how it renders partials but no doc updates [16:04] stagas: it's err.stack.split(' [16:04] stagas: \n') [16:04] stagas: after the err [16:04] jpiche: jetienne, wow... okay, thanks [16:04] Anti-X: stack: [Getter/Setter], [16:04] hunterloftis: so partial('something', whatever) no longer automatically puts a 'something' object in your partial view [16:05] hunterloftis: Anybody know what it *does* put in your partial view to be rendered? [16:05] Anti-X: you need the content of stack, which is now just prettified to [Getter/Setter] [16:05] stagas: Anti-X: no no, after the } the array is err.stack splitted [16:05] stride: stagas: maybe an internal error of the http client class, do you have the request / response that triggered it? [16:05] Anti-X: oh [16:05] Anti-X: heh [16:06] Anti-X: didn't notice [16:06] stagas: I do console.log(err, err.stack.split('\n')) something like that [16:06] Anti-X: facepalm [16:06] hellp has joined the channel [16:06] jetienne: stagas: do a simple return in the ondata and see [16:06] deepthawtz has joined the channel [16:07] stagas: jetienne: hmm I use a couple of modules that all have data listeners it could be from anywhere [16:08] stagas: I just hoped it might be a common error so someone would know what it was :) [16:08] stagas: back to debugging [16:08] Anti-X: it's probably something to do with socket.io [16:08] Anti-X: i think i've had something similar [16:09] stride: might as well be an error in the parser or an invalidly formed http response looking at the error stack [16:09] Anti-X: but i can't remember what it was exactly [16:09] deepthawtz has joined the channel [16:09] stagas: it occurs only when the response is large [16:09] stagas: now that it's over >10k [16:09] jetienne: printf for the good debug :) [16:09] stagas: it happens [16:09] Me1000 has joined the channel [16:09] stagas: when it was small it didn't happen [16:09] jetienne: 10kbyte ? [16:10] stagas: yeah [16:10] Anti-X: that's not even a lot [16:10] jetienne: stagas: this is hint... but i dunno which :) [16:11] stride: strange, the size of the body data normally shouldn't matter for the parser, and callbacks would appear in the stack trace, won't they? [16:12] stride: wouldn't they, even.. heck, what's wrong with me today.. :) [16:12] aconbere has joined the channel [16:13] Anti-X: they would appear as "anonymous function" [16:13] Anti-X: unless they're actually named [16:13] Anti-X: which is rare [16:13] stagas: the strange part is that nothing breaks [16:14] stagas: it's handled by uncaughtException and everything works [16:14] stagas: as usual [16:14] Anti-X: well [16:14] stagas: just that it throws an error [16:14] stride: can you dump the http response? [16:14] Anti-X: if you know that it breaks on 10k, then you know which data breaks it [16:14] Anti-X: so you can know which ondata handler [16:14] stride: Anti-X: ondata is the internal handler in lib/http.js I believe, nothing he wrote [16:15] Anti-X: oh and which node version [16:17] eazyigz has joined the channel [16:18] isaacs has joined the channel [16:18] confoocious has joined the channel [16:18] confoocious has joined the channel [16:18] eazyigz has joined the channel [16:22] stagas: hm [16:23] stagas: I was doing res.send(a_string) that broke it [16:23] stagas: I had to res.send(new Buffer(a_string, 'utf8')) [16:23] stagas: strange [16:24] Anti-X: isn't res.write? [16:24] Anti-X: it* [16:24] stagas: I use meryl it's the same thing it just writes the headers as a shortcut and then does res.end() [16:24] stagas: I think express has it too [16:25] marcostoledo has joined the channel [16:25] Anti-X: yeah now i remember why i got a parse error [16:26] Anti-X: it was on a static server [16:26] Anti-X: i think [16:26] Anti-X: and i opened files as utf8 and send as buffers [16:26] eee_c has joined the channel [16:26] Anti-X: so now we know what parse error means [16:26] sid3k: hi all. I've written a new nodejs library. what steps should I follow now to make it usable for the community? for example, is there any installation or package management script should I use? [16:27] sid3k: and by the way, I also want to make it accessible as library, like require('mylibrary/foobar' [16:27] Anti-X: check out npm [16:27] stagas: oh no, forget what I said. I was refreshing another tab [16:27] stagas: :P [16:27] stride: sid3k: isaacs npm, he also has an article in the wiki on github or the documentation on how to publish it I think [16:28] stagas: still a mystery error [16:28] Anti-X: well it's still encoding related i think [16:28] Anti-X: i'm pretty sure me remembering my error was correct [16:28] ysynopsis has joined the channel [16:28] sid3k: stride: thanks, I'm going to check it [16:28] stagas: Anti-X: strangely enough yes! [16:29] stagas: Anti-X: it fixed it. wow [16:29] tilgovi has joined the channel [16:31] stagas: Anti-X: it was meryl's fault after all, res.write() didn't have a problem [16:31] Anti-X: women. [16:31] stagas: :P [16:32] broofa has joined the channel [16:32] tmpvar has joined the channel [16:34] cronopio has joined the channel [16:35] Anti-X: v8: /abc/.test(null) [16:35] v8bot: Anti-X: false [16:35] kulesa has joined the channel [16:35] Anti-X: v8: /abc/.test() [16:35] v8bot: Anti-X: Error: No input to /abc/ [16:36] blowery_zzz has joined the channel [16:36] tisba has joined the channel [16:36] yonkeltron: if i want to start non-blocking execution of a function, is it best to use setTimeout with 0 delay or to use an event emitter? [16:37] Anti-X: nextTick [16:38] Anti-X: process.nextTick(cb) [16:38] yonkeltron: oh really? [16:38] yonkeltron: interesting [16:39] Anti-X: it's essentially setTimeout with 0 delay, except it's more descriptive [16:39] Anti-X: and apparently more efficient [16:40] stagas: it's a lot faster [16:40] stagas: I don't know if that changed now that setTimeout is handled differently [16:40] yonkeltron: more efficient than setting up a separate listener? [16:40] Anti-X: it's really efficient [16:41] Anti-X: it's basically just putting the callback next in line [16:41] Anti-X: executes the current block and then that [16:41] yonkeltron: gotcha [16:42] Anti-X: not sure how it behaves if there are other blocks waiting [16:43] Anti-X: i guess it trumphs them all [16:43] jherdman has joined the channel [16:43] stride: nope, it's written to the end of the queue iirc [16:44] Anti-X: so nextTick isn't descriptive at all? [16:44] yonkeltron: but even listeners aren't on that queue, right? [16:44] Anti-X: they are [16:45] yonkeltron: but are given higher priority? [16:45] Anti-X: no [16:45] muk_mb has joined the channel [16:45] Anti-X: if anything should be given priority it's nextTick, but seems it is not [16:46] stride: doesn't emit just call the listeners sequentially? [16:47] Anti-X: good point [16:47] Anti-X: lol [16:47] Anti-X: so essentially emit would not make it non-blocking [16:48] MikhX has joined the channel [16:48] yonkeltron: try this: http://pastebin.com/4j4UaNNu [16:48] yonkeltron: put it in a script [16:48] yonkeltron: and see what you think would happen [16:48] yonkeltron: vs. what actually happens [16:48] isaacs has joined the channel [16:48] yonkeltron: it looks to me like events get run first [16:48] marcostoledo has joined the channel [16:49] yonkeltron: and when i say first, i mean before everythang [16:49] stride: that makes sense [16:49] Anti-X: yes [16:49] Anti-X: but [16:49] Anti-X: they are executed once you call .emit [16:49] Anti-X: not after the block [16:50] yonkeltron: i don't understand what you mean [16:50] stride: first callback is scheduled, emit is called (with your panda), the other stuff is scheduled, repeat the emit [16:50] yonkeltron: so the emits happend immediately, right? [16:50] Anti-X: yes [16:50] yonkeltron: that's the takeaway [16:50] yonkeltron: but emits block or don't block? [16:51] Anti-X: the first emit happened before the 1-5 nextTicks were even scheduled [16:51] yonkeltron: not true [16:51] Anti-X: they block [16:51] yonkeltron: first callback [16:51] Anti-X: it doesn't move past the emit line until all the panda callbacks are called [16:52] yonkeltron: the second emit line, you mean? [16:52] stagas: ok it's done: http://hwknd.com [16:52] Anti-X: then it schedules the 1-5, puts them in queue, then it executes the second emit, which then runs through all panda callbacks [16:52] stagas: basically now scrapes twitter for github repos references [16:52] stagas: and checks if they're <1 week old [16:52] beawesomeinstead has joined the channel [16:52] stagas: so that page will always have this week's new github projects [16:53] stagas: that are announced on twitter [16:53] stagas: or you can add one manually [16:53] zinger_ has joined the channel [16:55] altamic has joined the channel [16:55] Anti-X: yonkeltron, here's what happens http://pastebin.com/uxeWQHPu [16:56] Anti-X: sorry [16:56] Anti-X: http://pastebin.com/qwiuV9Qu [16:56] stagas: the scraping part of the source isn't on github yet [16:56] Twelve-60 has joined the channel [16:56] Anti-X: forgot the second emit [16:56] stagas: what do you think? [16:56] jetienne: stagas: why do i get 2 face icons ? [16:57] stagas: jetienne: on the right is the repo owner, and the small ones are actual contributors [16:57] stagas: jetienne: some times it's not the same. do you think I should check if the owner is a contributor and not show him? [16:58] Anti-X: does it check bit.ly's and all that? [16:58] stagas: yeah with HEAD [16:58] jetienne: stagas: not sure. but yeah the layout is not compact engouth. it seems the screen is full of void [16:58] Anti-X: how many filtered tweets per sec? [16:58] Anti-X: :P [16:58] stagas: Anti-X: it does a search and it gets everything up to 1500 tweets back in history [16:58] jetienne: stagas: maybe narrower container + larger font [16:59] Anti-X: so it's not even real time? [16:59] stagas: Anti-X: and then every 5 minutes it searches again with the 'refresh' part [16:59] stagas: Anti-X: it's almost real time. I throttle all the connections so I don't spam twitter or github cause of their rate limits [17:00] stagas: Anti-X: and I have another firehose running on another project http://hots.stagas.com [17:00] blowery_zzz has joined the channel [17:00] stagas: I don't think I can run 2 from the same ip :) [17:00] ben_alman has joined the channel [17:01] stagas: it'll take max ~10 minutes for a new one to show up [17:01] benburkert has joined the channel [17:02] jetienne: hots is a better product :) [17:02] stephank has joined the channel [17:03] cardona507 has joined the channel [17:03] mizerydearia has joined the channel [17:03] Anti-X: well in 10 minutes there's going to be a lot more than 1500 tweets [17:04] Anti-X: meaning that you'll miss a few [17:04] stagas: Anti-X: with a github link? [17:04] Anti-X: well how do you filter it by github link when it's a bit.ly link [17:04] jakehow has joined the channel [17:04] stagas: Anti-X: twitter does it for me :) [17:04] Anti-X: ah [17:04] Anti-X: you could have just said that [17:04] stagas: twitter search goes in deep to the title [17:05] stagas: of the links [17:05] stagas: and the url [17:05] Anti-X: my github has been dead for a month [17:05] Anti-X: probably time to do something [17:06] V1 has joined the channel [17:07] Anti-X: last update was the day after my bday, with commit msg 'minor insignificant changes'.. which ironically is a perfect description of what it's like to turn 25 [17:07] Anti-X: :p [17:08] stagas: lol [17:12] liar has joined the channel [17:12] aheckmann has joined the channel [17:12] stagas: jetienne: the container is fluid but yeah the layout needs some tweaking [17:13] sclaflin has joined the channel [17:14] iganapolsky has joined the channel [17:14] prettyrobots has joined the channel [17:15] quirkey has joined the channel [17:15] altamic has joined the channel [17:16] webflo has left the channel [17:17] webflo has joined the channel [17:17] webr3: ryah, any thoughts on adding e4x :: style namespaces to node? as per ecmascript-357 but for all js, not just xml [17:17] ryah: webr3: that's v8's decision [17:18] jetienne: v8 said "no plan to add e4x" no ? [17:18] jetienne: http://code.google.com/p/v8/issues/detail?id=235 this is what i remembered [17:18] jetienne: may be old tho [17:21] webr3: ryah, cool - and web workers for node? (in node, not as a lib) [17:21] CIA-54: node: 03Micheil Smith 07master * ra1138c6 10/ Makefile : Cleanup Makefile for JSLint, CPPLint - http://bit.ly/htzRwR [17:21] micheil: ryah: thanks :) [17:21] tanepiper: webr3: there are already 2 or 3 implementations webr3 [17:22] ryah: micheil: thank you [17:22] micheil: heh heh [17:22] ryah: webr3: https://github.com/pgriess/node-webworker [17:23] jY has joined the channel [17:23] ryah: only about 1 million lint errors to go [17:23] micheil: ryah: I also have a few changes I've made to a JSlint version I'm using at my current company, that fixes a few things in the gjslint to be more like nodejslit [17:23] micheil: *node jslint [17:23] jY: I'm using child_process.spawn() is there anyway to get it to change to a new CWD? [17:24] daniellindsley has joined the channel [17:24] ryah: jY: i think there is a cwd option [17:25] banjiewen has joined the channel [17:25] prettyrobots: ryah: There is a cwd option. [17:26] prettyrobots: Indeed. [17:26] jY: ahh thanks its in the 3rd argument [17:29] rauchg_ has joined the channel [17:29] karboh has joined the channel [17:31] aconbere has joined the channel [17:31] Durl: any geddyjs folks lurking around? [17:32] aconbere: mde: ^ [17:32] jpick has joined the channel [17:33] aconbere: heh [17:33] isaacs has joined the channel [17:33] aconbere: well he's not online in XMPP so I bet he's not actually around [17:33] steffkes has joined the channel [17:33] noahcampbell has joined the channel [17:34] mookai has joined the channel [17:35] amerine has joined the channel [17:36] erlnoob has joined the channel [17:36] oal has joined the channel [17:36] cjmFloating has joined the channel [17:39] stagas: jetienne: you're right about the double avatar, it's looking better now http://hwknd.com I don't display it if it's === repo.owner [17:40] chrelad has left the channel [17:40] chrelad has joined the channel [17:40] tanepiper: WHOAA Double Avatar all the way! [17:40] stagas: :P [17:41] jetienne: stagas: thinking about the layout. i would say the user wants to know the name of the project, and the description. the author may be usefull but secondary. the langage is even more secondary. [17:41] chrelad: tanepiper: LOL :D [17:41] jetienne: stagas: so i would do a big: projectname: project description at the begining of the line on the left [17:41] chrelad: tanepiper: What does it mean!!?? [17:41] prettyrobots: OMG. How do I donate money to keep EX4 out of Node.js? [17:42] vineyard has joined the channel [17:42] jetienne: stagas: and then all commiters+twitter+language on the right. but smaller font than project info [17:42] chrelad: prettyrobots: :D [17:42] stagas: jetienne: I feel like the language is primary, that's the reason for the coloring too and the position [17:42] slloyd has joined the channel [17:43] stagas: jetienne: but you may be right again :) [17:43] stagas: jetienne: I'll try it [17:43] stagas: jetienne: I originally had the langs on the right [17:43] jetienne: stagas: ok lets say language is important. why not putting it bigger ? in a more noticable color [17:44] luke` has joined the channel [17:44] stagas: jetienne: once you notice your language color, you can spot other projects easily while scrolling without actually reading anything [17:44] jetienne: stagas: the color code requires the users to know it. who will care enougth to learn it ? [17:45] jetienne: stagas: i would add a way to filter the list by language. it is clearer and avoid the noise [17:45] jetienne: stagas: all suggestions here. i have been UI recently, so im in that mood :) [17:45] prettyrobots: jetienne: Really? I filter my GitHub interest on language. [17:45] Anti-X: also some people are color blind [17:45] Anti-X: a lot of people actually [17:45] prettyrobots: If something is C#, for example, it doesn't exist in the world I create for myself. [17:46] jetienne: prettyrobots: i dont use github to discover new stuff... maybe it is my own usage [17:46] banjiewen has joined the channel [17:46] stagas: Anti-X: still they distinguish by luminance. a dark purple is a lot different than an orange (ruby vs javascript) [17:46] necrodearia has joined the channel [17:47] smcq has joined the channel [17:47] stagas: and it's not like they see black and white only [17:47] Anti-X: yes, but imagine browsing in grayscale trying to distinguish 15 shades of gray [17:48] stagas: there are variations in color blindness, usually green and yellow are problematic [17:48] Anti-X: the best way to cater for color blindness is making stuff grayscale [17:48] Anti-X: and seeing how it looks [17:48] sprout has joined the channel [17:48] cagdas has joined the channel [17:48] stagas: there was a page that did that [17:48] Anti-X: yeah there are a few [17:48] stagas: showed you your page in the different types of color blindness [17:48] thear has joined the channel [17:48] stagas: hehe :) [17:48] Anti-X: most just take a screenshot and manipulate though [17:48] Anti-X: which makes weird images [17:49] davidascher has joined the channel [17:49] Anti-X: but of course if you use images on your page then that's the only way to change it [17:49] Anti-X: unless you do some complicated canvas operations [17:50] matjas has joined the channel [17:50] Anti-X: and background-images would be impossible.. [17:50] prettyrobots: Anti-X: After 20-odd Michigan winters, its not that hard to do actually. [17:50] prettyrobots: (distinguish between 15 shades of gray.) [17:50] Anti-X: heh [17:51] deepthawtz has joined the channel [17:52] msekimura has joined the channel [17:54] q_no has joined the channel [17:55] jtsnow has joined the channel [17:55] altamic has joined the channel [17:55] daniellindsley has left the channel [17:56] necrodearia has joined the channel [17:56] bartt has joined the channel [17:56] davidwalsh has joined the channel [17:58] meck has joined the channel [17:58] tisba_ has joined the channel [17:58] jY has left the channel [18:01] luke` has joined the channel [18:02] Twelve-60 has joined the channel [18:03] deedubs has joined the channel [18:04] jetienne_ has joined the channel [18:04] deedubs: anyone experience socket.io falling back to xhr-polling on chrome for no particular reason? [18:04] yozlet has joined the channel [18:05] jpld has joined the channel [18:06] dguttman has joined the channel [18:06] rauchg_: deedubs: are you behind a proxy ? [18:06] rauchg_: or some sort of firewall ? [18:07] deedubs: hmm the linode its on could possibly be [18:07] cafesofie has joined the channel [18:07] deedubs: hmm safari can make the connection via websocket [18:08] isaacs_ has joined the channel [18:09] deedubs: scratch that safari can't either [18:10] necrodearia has joined the channel [18:11] caolanm has joined the channel [18:11] mies has joined the channel [18:11] mjr_ has joined the channel [18:11] nooder: can anyone advise a proxy module for http request? [18:11] deedubs: rauchg_: It's interesting using the simple example form socket.io-node it works via websocket buy once its integrated into our app it falls back to xhr-polling everytime [18:12] rauchg_: deedubs: try removing your cookies [18:12] rauchg_: maybe websocket timed out for some reason [18:12] rauchg_: and it thinks you're not capable of websocket connections anymore [18:12] hamsterspider has joined the channel [18:13] deedubs: rauchg_: You rock! Thanks for the help and the great work [18:14] deedubs: hmm [18:15] softdrink1 has joined the channel [18:15] deedubs: ACTION fixed it for but a moment, then appears like the socket times out and it attempts to roll back to xhr [18:15] mjr_: nooder: mikeal added proxy to the "request" module last night I think. [18:15] mjr_: But he was drunk, so who knows. [18:15] mikeal: yeha, i hope it works [18:16] bingomanatee has joined the channel [18:16] rauchg_: deedubs: is there something particular about this server? [18:16] stagas has joined the channel [18:17] mikeal: there really aren't any good open proxies to test against [18:18] deedubs: ahh maybe nginx is killing the socket connections ! [18:18] nooder: can't find such commit [18:18] mikeal: https://github.com/mikeal/node-utils/commit/ee2776e1d0fc4bf3ef2110f9b6aaad45519e1154 [18:18] nooder: ah [18:19] nooder: looks easy :) [18:19] micheil has joined the channel [18:20] deedubs: rauchg_: That's the problem. Nginx doesn't support websockets [18:20] mikeal: if you're using node why do you need nginx? [18:20] deedubs: yeah [18:20] deedubs: don't really [18:20] aconbere has joined the channel [18:20] deedubs: just habit [18:20] rauchg_: deedubs: a-ha [18:20] rauchg_: :D [18:20] deedubs: what a pain in the ass [18:20] rauchg_: you should thank socket.io for falling back for you [18:20] rauchg_: :P [18:21] deedubs: haha yeah except I was trying to read things from the client that only exist when the client comes via websocket [18:21] deedubs: so it was killing my backend [18:22] mape: rauchg_: had any time to check the cookie issue related to path when defining the transport protocol? [18:22] rauchg_: couldn't look at it yet :'( [18:22] ezmobius has joined the channel [18:22] rauchg_: we're working on a massive release [18:22] rauchg_: so i've been busy [18:23] cjmFloating has joined the channel [18:23] m3nt0r^aw has joined the channel [18:25] davidc_: What's the location I have to symlink manually after installing using npm again? [18:25] mape: rauchg_: Ah k :/ Just a heads up, probly something to look at since that adds a lot of weight to cookies overall. And just not very neat. [18:25] davidc_: After installing socket.io I keep getting throw new Error("Cannot find module '" + request + "'"); when run it. [18:26] rauchg_: require('socket.io') doesn't work ? [18:26] vnguyen has joined the channel [18:26] davidc_: rauchg_, nop [18:27] davidc_: Oh right: Error: Cannot find module 'socket.io' [18:27] davidc_: I remember having to do something "after" npm install but can't remember what. [18:27] rauchg_: no, you shouldn't do anything [18:28] rauchg_: unless your npm installation is broken [18:28] rauchg_: did you install as root or your user [18:28] davidc_: user, then tried as root. [18:28] davidc_: I'm cloning now and symlinking into ~/.node_libraries [18:30] tlrobinson has joined the channel [18:34] micheil: ryah: so, yeah, I made a few changes to closure lint to make it more specific to node development, let me know if you'd like to look over them [18:37] davidc_: rauchg_, yeah I just cloned the git repo and ln -s socket.io/lib/socket.io/* into ~/.node_libraries/socket.io/ [18:38] fly-away has joined the channel [18:39] rauchg_: davidc_: that kind of defeats the purpose of using npm methinks [18:39] isaacs has joined the channel [18:41] saikat has joined the channel [18:42] sechrist has joined the channel [18:44] tmpvar has joined the channel [18:44] codehero has left the channel [18:45] mies has joined the channel [18:45] davidc_: rauchg_, completely. [18:46] matclayton has left the channel [18:46] langworthy has joined the channel [18:46] deedubs has left the channel [18:46] ryah: micheil: i'd rather stay on the main branch [18:47] ryah: micheil: what do your changes do? [18:47] micheil: ryah: mainly remove a few google specific things [18:47] micheil: supress/properly check doc warnings [18:47] micheil: implement things about inherit [18:47] ryah: inherit? [18:48] ryah: already disabling the doc checking [18:48] ryah: what are the google specific things? [18:49] twoism has joined the channel [18:49] mape: micheil: Is "lint" close and loved by the node community? Seems like most node people think of it as a not so hot standard to follow? [18:49] micheil: things like missing provide and require [18:49] romainhuet has joined the channel [18:49] micheil: util.inherit for constructors [18:50] bentruyman has joined the channel [18:51] ryah: micheil: hm - i haven't seen errors for those things [18:52] brianmario has joined the channel [18:52] ryah: i was pleasently surprised by how agnostic closure_lint was [18:52] agnat has joined the channel [18:52] mjr_: mape: linters are still controversial because nobody agrees what the best style is. [18:53] mape: mjr_: guess one needs a figure like chuck norris to follow the supposed conventions ;) [18:53] stagas: with lint you spend time fixing stuff that aren't really broken [18:53] svnlto has joined the channel [18:54] aconbere: the commit history for this week is going to be totally screwy because of lint [18:54] aconbere: :P [18:56] mjr_: stagas: yeah, "currently broken" is not what lint optimizes for. [18:56] stagas: I guess it's useful to client side js where you want to minify and obfuscate and make sure it won't break [18:57] hsuh has joined the channel [18:57] mjr_: I use jslint in my code, and it has found some tricky things that weren't currently broken, but were for sure incorrect and would likely cause problems in the future. [18:57] stagas: mjr_: like what? [18:58] mjr_: Like variables the were global, but I didn't realize were, vars that got hoisted and thus included in the scope of inner functions, etc. [18:58] mjr_: Mostly variable scoping things. [18:59] mape: mjr_: more or less not adding var? [19:00] dabtop has joined the channel [19:00] mjr_: yeah, or times when a var with the same name ends up shadowing something in the outer scope. [19:00] mjr_: because of an extra "var" [19:01] mape: hmm, yeah, shadowing vs being explict might be an issue [19:02] mjr_: Assuming the program actually works, lint just find minor stuff that would be sort of nice if you fixed. [19:02] mjr_: As the name "lint" implies. [19:02] stagas: mjr_: I use shadowing all the time :) I guess I don't make a good linter [19:02] dgathright has joined the channel [19:04] spetrea: heroes of the code [19:05] mjr_: Well, you know what they say, the beauty of standards is that there are so many to choose from. [19:06] hassox has joined the channel [19:07] cheney has joined the channel [19:09] isaacs_ has joined the channel [19:09] micheil: ACTION just closure linted node-websocket-server [19:09] mape: So am I the onlt one trying to figure out how the fu** nasa is trying to broadcast this supposed breaking news? [19:10] mape: *only [19:10] aconbere: ryah: test-securepair-client is hanging for me [19:10] mape: Using old windows media player graphics which fallback to flash which doesn't work >:< [19:10] ryah: aconbere: hm [19:11] stagas: mape: isn't it on tv? [19:11] mape: stagas: Welcome to sweden :) [19:11] stride: mape: potentially something on that arsenic-based bacteria that every major news site already reported on [19:12] hsuh has joined the channel [19:12] micheil: ryah: any files that aren't clean by the JS Linter, I'll probably go through on the weekend. [19:12] mape: stride: Please point me to something interesting that doesn't require prop plugins :) [19:12] micheil: so, if there is still files left by the weekend that don't pass through the JS Linter, expect a patch. [19:13] stride: mape: oh, I see you tried nasatv as well? :) http://blogs.discovermagazine.com/notrocketscience/2010/12/02/mono-lake-bacteria-build-their-dna-using-arsenic-and-no-this-isnt-about-aliens/ although it's a bit tl;dr :) [19:14] mape: stride: Thanks :) [19:15] mape: stride: So they pretty much found something that might work and went overboard with the news? [19:15] HAITI has joined the channel [19:15] stride: but really, they put rockets in space but have to use real/quicktime/wma plugins? [19:15] aconbere: ryah: I'm not sure what the best debugging steps to take are there :) I've tried debug and non debug builds and both hang the same way. [19:15] maushu has joined the channel [19:15] SubStack: I bet they thought they were being "media savvy" [19:16] mape: stride: Seems like it [19:16] ryah: aconbere: does it always hang? [19:16] aconbere: yep [19:16] aconbere: or at least [19:16] ryah: which os? [19:16] aconbere: in the 10+ times I've tried it, it never passes [19:16] stride: mape: they found a bacteria on earth that's composed of significantly different DNA than every other lifeform if I understood it correctly [19:16] mjr_: You guys should probably get multicast routing going on the "MBONE" where NASA sends their video. [19:16] aconbere: Linux opae 2.6.32-25-generic #45-Ubuntu SMP Sat Oct 16 19:52:42 UTC 2010 x86_64 GNU/Linux [19:17] stride: mjr_: as long as they didn't train that bacteria to write me a cover letter it's probably better this way :) [19:17] ryah: aconbere: you've built node with openssl, right? [19:17] aconbere: BAH [19:17] aconbere: quite possibly no [19:17] aconbere: :) [19:17] mjr_: stride: not sure what you are talking about, can you fax me some more info? [19:17] mape: stride: So ... In an universe that has infinitive places of possible earth life, they have found a flimce of hope somewhat close to earth? [19:18] tobie has joined the channel [19:18] aconbere: ryah: Checking for openssl : yes [19:18] aconbere: configure things I have ssl [19:18] beawesomeinstead has joined the channel [19:18] beawesomeinstead has joined the channel [19:19] CIA-54: node: 03Tom Hughes 07master * rb46f10a 10/ (4 files in 2 dirs): cmake: Add coverage support. - http://bit.ly/fdp4IG [19:19] CIA-54: node: 03Tom Hughes 07master * rcf1811a 10/ (Makefile.cmake README.cmake): cmake: Add valgrind support. - http://bit.ly/e9gIJC [19:19] CIA-54: node: 03Tom Hughes 07master * re681abe 10/ (4 files in 2 dirs): cmake: solaris fixes. - http://bit.ly/gWao4h [19:19] InsDel has joined the channel [19:19] aconbere: I'm not sure if there's a switch to force compiling with ssl, if so I haven't thrown it [19:19] CIA-54: node: 03Oleg Slobodskoi 07master * rc5c1dc5 10/ doc/api/assert.markdown : docs for assert.throws - http://bit.ly/ibLt8d [19:19] davidc_: Are there any documentation for socket.io? Say I want to make a back and forth interaction between two people on 2 computers ? I'm just looking for some pointers. [19:19] stride: mape: _on_ earth, in California [19:19] kriszyp_ has joined the channel [19:20] davidc_: Hmm I might be able to use the socket.io-node example [19:21] strmpnk has joined the channel [19:21] mape: stride: hmm yeah, so lessening the ods? [19:21] mjr_: stride: have you ever been to Mono Lake? It's a bit like being on another planet. [19:21] V1: davidc_: www.socket.io? [19:24] davidc_: V1, nah was looking for something a bit more elaborate with documentation but foudn ti :P [19:24] davidc_: was a simple "broadcast" [19:24] davidc_: #pebkac [19:24] altamic has joined the channel [19:24] rauchg_ has joined the channel [19:24] SubStack: illegal aliens, squatting in our lakes, using our toxins... [19:24] luke` has joined the channel [19:25] techwraith has joined the channel [19:27] swistak has joined the channel [19:28] slaskis has joined the channel [19:30] matjas has joined the channel [19:30] justin_ has joined the channel [19:31] ryah: aconbere: can you reorder your commits so that src/node.js lint comes first? [19:31] pifantastic has joined the channel [19:32] aconbere: probably, that sounds like some git fuu, I'll ask around the office [19:32] ryah: aconbere: git rebase -i HEAD^^^^^^^^^^ [19:32] ryah: then just reorder the lines [19:32] ryah: in your editor [19:33] aconbere: awesome [19:33] aconbere: thanks [19:33] siculars has joined the channel [19:34] mape: isaacs: Any progress on the mtime json fields? [19:34] isaacs: mape: nope, not yet [19:35] mape: isaacs: You should really come to Sweden so I could bribe you over a couple of bears [19:37] micheil: mape: that sounds dangerous. Mainly due to the bears involved. [19:39] mape: micheil: Beers aren't the issue in Sweden, taxes are. And I'm use to those so beer is pretty cheap ;) [19:39] micheil: mape: re-read. you said Bears. not Beers [19:39] SubStack: the bears collect the taxes? [19:39] isaacs has joined the channel [19:40] SubStack: no wonder they are so high [19:40] SubStack: bears probably take a lot off the top for themselves [19:40] dabtop: lol [19:40] baoist has joined the channel [19:41] teemow has joined the channel [19:43] mape: micheil: re-read, don't be a wuss when it comes to fighting bears alongside a party, that is what we do in the north south. Polar pear fighting is a hobby in sweden. [19:43] sclaflin has joined the channel [19:44] luke`_ has joined the channel [19:44] admc has joined the channel [19:44] mape: I'm not saying beers aren't involved, but fighting polar bears is so much easier without alcohol. But then again it is more fun. [19:45] isaacs: mape: yes, bribing with bear-boxing would make it a lot more compelling. [19:45] isaacs: especially while drunk [19:46] mape: isaacs: If you pass by I'll make sure you get extra node boxing-gloves. More of an even fight [19:46] isaacs: have you seen the fighting joyent octopus? [19:46] isaacs: ACTION wearing his node knockout shirt [19:47] mape: I've seen it, even got someone to sneak me an extra tshirt but I'm to worried to be an hassle to ask the person to ship me the awesome tshirt [19:48] Anti-X has joined the channel [19:48] tanepiper: ACTION wants a nodejs tee for christmas [19:49] gkatsev: tanepiper: I read that as nodejs tree [19:50] ryah: last year someone did a nodejs christmas tree [19:50] mape: isaacs: But yeah, the tee was really nice. At least I ordered a nice github black tee for holidays. [19:50] gkatsev: ryah: like a node.js script that showed a christmas tree? [19:50] tmpvar has joined the channel [19:52] luke` has joined the channel [19:52] ryah: yeah [19:52] isaacs: ryah: that was me. [19:53] gkatsev: is it like that perl thing? [19:53] Gregor has joined the channel [19:53] isaacs: ryah gkatsev: node <(curl -s https://github.com/isaacs/node-playground/raw/master/xmas.js) [19:54] CIA-54: node: 03isaacs 07master * r7c57eb2 10/ lib/url.js : lint url.js - http://bit.ly/geCs4q [19:54] V1: omg tshirts? where [19:54] ryah: isaacs: nice [19:54] vineyard: if i have an edge node.js build on my machine and i want to upgrade it [19:54] vineyard: do i have to run "make" and then "make install"? [19:55] gkatsev: isaacs: nice, though, it's a very sparse tree [19:55] marcostoledo has joined the channel [19:56] erlnoob: hey guys, can socket.io's send/broadcast method be called with objects and arrays? [19:56] frodenius: also it leaves my terminal green [19:56] slaskis has joined the channel [19:56] isaacs: frodenius: that's a feature. it's festive :) [19:57] gkatsev: lol [19:57] matt_c_ has joined the channel [19:57] isaacs: frodenius: echo -e "\033[m fixed" [19:57] erlnoob: like socket.broadcast([1,2,3]) ? because it seems to only return the first element on the browser's socket.io on-message handler [19:57] strmpnk_ has joined the channel [19:57] frodenius: isaacs⸭ yea, did that already :) [19:57] isaacs: frodenius: or just "reset", i guess [19:57] erlnoob: or do I need to always JSON.stringify and parse messages always? [19:58] V1: which version of socket.io are your using? [19:58] gkatsev: isaacs: make the tree less sparse. [19:58] gkatsev: isaacs: you should submit it to js1k xmas [19:58] erlnoob: V1: the latest 0.6 [19:59] frodenius: gkatsev ⸭ not enough animation [19:59] jesusabdullah: aww, cute tree [19:59] V1: Socket.io does not stringify it for you by default. It does encode it with a socket.io specific encoding [19:59] jesusabdullah: though for some reason half those unicodes don't work for me [20:00] yozlet has joined the channel [20:00] jesusabdullah: insufficient font I guess [20:00] gkatsev: frodenius: that too. [20:00] twoism has joined the channel [20:00] V1: erlnoob: How ever, the latest experimental trunk build of Socket.io does feature automagical JSON stringify ( thats why I asked the version number ) [20:01] erlnoob: V1: oh I see. so the best way is to stringify/parse them then. Just curious though, I was sending objects (not arrays) and everything seems to work [20:01] boaz_ has joined the channel [20:01] V1: erlnoob: Yup. [20:01] erlnoob: but not arrays [20:02] devinus: isaacs: what happened to the object literal style? [20:02] erlnoob: V1: we're on the subject, do you know of any benchmark on socket.io's broadcast method? like how many clients can it serve in a specific amount of time? [20:02] jpld has joined the channel [20:02] Yuffster has joined the channel [20:03] erlnoob: I seem to have stumbled upon it some days ago but can't dig it up... [20:03] V1: erlnoob: I'm not aware of any benchmarks but I did notice the latest trunk build features a new broadcast / parsing method that is much faster than the current protocol [20:03] isaacs: devinus: huh? [20:03] devinus: isaacs: the whole comma before argument [20:04] davidascher has joined the channel [20:04] devinus: isaacs: now it's flipping back? [20:04] V1: erlnoob: There aren't any benchmarks available in Socket.io at this time. But I'm sure it will be added once the latest experimental builds are completed [20:04] isaacs: devinus: last xmas i hadn't adopted that style yet [20:04] pifantastic_ has joined the channel [20:04] micheil: devinus: we're starting to follow google's js style guide in a way. [20:04] bingomanatee has joined the channel [20:04] micheil: so, comma's afterwards [20:04] isaacs: oh, or are you talking about node itself? [20:05] micheil: but I might mod the js lint tool to force comma's in front [20:05] erlnoob: V1: thanks for the tip, off to get the latest of the latest then :) [20:06] Max-Might has joined the channel [20:06] V1: erlnoob: The latest is also the most unstable as it does feature almost a complete rewrite of the a internal system. So if you are just going to toy with it, it would be fine, but I would not advice to use it any production evn. at this point. [20:07] MikhX_ has joined the channel [20:08] altamic has joined the channel [20:09] pdelgallego has joined the channel [20:09] aconbere: ryah: would it be easier if after reordering I made anew branch and pull request? (just thinking that after rebase I'll have to force and update of the branch) [20:10] isaacs_ has joined the channel [20:10] ryah: aconbere: yes [20:12] saikat has joined the channel [20:13] aconbere: ryah: pull request sent [20:15] booths has joined the channel [20:16] chrelad has joined the channel [20:16] booths: I have a potentially stupid question, as I feel all my questions are. I noticed that when I'm pushing a bunch of post requests to my http server it seems to stop responding after around 10. Is this some sort of protection or a limitation? [20:17] kriszyp_ has joined the channel [20:18] micheil: booths: hmm, it shouldn't stop responding [20:18] ryah: aconbere: it seems your lint patch still removes traverser [20:18] MikhX has joined the channel [20:21] robotarmy has joined the channel [20:22] ryah: how about i lint it - you rebase your changes onto me [20:24] micheil: ryah: I don't think it removes traverser, quite [20:24] micheil: well, it removes the function of it, but there's additions elsewhere [20:25] drudge: isaacs_: is there a bandwidth issue with the npm registry atm? [20:25] micheil: ryah: see: https://github.com/ry/node/pull/488#L29R146 [20:25] micheil: there's extra code in there that looks like the traverser [20:27] CIA-54: node: 03Ryan Dahl 07master * r558e5ba 10/ (Makefile lib/util.js src/node.js): lint util.js and src/node.js - http://bit.ly/eChCVq [20:28] ryah: aconbere: rebase your changes onto master [20:28] pifantastic_ has left the channel [20:28] ryah: i've linted node.js [20:28] pifantastic_ has joined the channel [20:28] micheil: ryah: how much is left? All the tests. [20:28] brianmario has joined the channel [20:28] ryah: just the tests now [20:29] ryah: which i will not touch. feel free to take that. [20:29] micheil: okay. It'll have to wait until the weekend though. (another day) [20:29] booths: micheil: After about 8 hits back to back it seems to say "not available" [20:30] micheil: could you share your code? [20:30] micheil: and does the node server crash? [20:30] booths: no the server doesn't show any errors [20:30] booths: and it's just a post request, even w/ no data it's after 8-10 [20:31] micheil: okay, it'd be best to see your code then. [20:31] micheil: and also to know which node version you are using [20:33] techwraith: Ryah: what version of lint did you use? [20:33] micheil: google closure lint [20:33] micheil: latest [20:34] booths: I'm running 2.4 on cygwin, i can duplicate w/ just creating a server using the demo on the docs, and sending it post requests. [20:34] micheil: ah [20:34] micheil: booths: node isn't known to be 100% stable on cygwin, you'll more then likely get better performance by running node in a linux vm [20:37] techwraith: micheil: gjslint doesn't choke on commonJS stuff? [20:37] micheil: not really [20:38] micheil: I want to fork to add support for missing require() rules, but it's not really necessary [20:38] micheil: and to add in support for some other stuff [20:38] techwraith: Yeah, that would be cool [20:38] cwo has joined the channel [20:39] micheil: also actually want to write it in javascript itself. [20:39] micheil: just to be totally meta and recursive [20:39] dguttman_ has joined the channel [20:39] V1 has left the channel [20:39] micheil: like, js lint linting itself. [20:40] kjeldahl has joined the channel [20:40] isaacs has joined the channel [20:40] cjmFloating has joined the channel [20:41] stagas: micheil: no actually performance is a lot worse in a vm than on cygwin [20:42] jpld has joined the channel [20:44] micheil: stagas: but it probably doesn't just randomly break [20:46] V1 has joined the channel [20:46] boaz has joined the channel [20:47] altamic has joined the channel [20:47] stagas: I haven't seen any random breaking. There are more pros running cygwin, it uses the native filesystem, no need for port redirecting, the terminal starts instantly, the windows are native, speed etc [20:48] micheil: well, randomly not responding to requests every 8-10 requests sounds like a random breakage [20:49] booths: it's only if they're back to back [20:49] booths: if they are spaced out it's fine [20:49] micheil: could you share your code? [20:50] booths: It's just an http server that does res.writeHead(200); res.end() [20:51] booths: i declare var http = require('http'); http.createServer(function(req, res) { res.writeHead(200); res.end(); }); [20:52] V1: I just notice something amazing, after speedo.no.de got switched from the no.de alpha servers to the no.de beta servers, the response time of the app decreased by 100% [20:52] V1: Amazing :) [20:52] Gregor has joined the channel [20:55] stagas: decreased by 100%? [20:57] dguttman has joined the channel [20:58] dguttman has joined the channel [20:58] mr_daniel has joined the channel [21:00] jetienne has joined the channel [21:02] V1: yes decreased, not increased [21:02] jpld has joined the channel [21:02] codehero has joined the channel [21:02] stagas: I was pointing out the 100% :) It would mean it went down to 0 [21:03] V1: Good point, 200% than ;) [21:03] stagas: that would mean it responded before the request! :P [21:04] codehero: Hi all, I am writing out a CSV file line by line using sys.puts [21:04] V1: I give up :( it went from 400ms to 200ms ;( [21:05] codehero: when writing to file the output speed is pathetically slow [21:05] Nohryb has joined the channel [21:05] codehero: cannot figure out why [21:05] frodenius: V1㇀ that's 50% [21:05] codehero: output speed is much faster when going to console [21:05] V1: ACTION fails [21:05] zum has joined the channel [21:06] Fullmoon has joined the channel [21:06] matt_c has joined the channel [21:06] linnk has joined the channel [21:07] V1: Anyways, is there a sync way of checking if a directory exists? Without having to use try {}catch(){} for ENOENT / EEXIST errors [21:07] V1: I need to check if my log directory exists for my application bootup [21:07] stagas: V1: fs.statSync maybe [21:07] bmizerany has joined the channel [21:08] tlrobinson_ has joined the channel [21:08] V1: I tried that and it throws a ENOENT error [21:08] codehero: that function throws exceptions if the file is not found [21:08] jetienne: codehero: maybe you are not buffered when you writed [21:08] codehero: the problem is it is buffering [21:08] codehero: and not writing [21:08] codehero: what goes on is a I read a ton of source data [21:08] codehero: as a read each line, I output a CSV line [21:09] stagas: V1: readdirSync the parent dir and indexOf ? [21:09] V1: That might work. [21:09] V1: Good idea [21:09] codehero: but the line output trails way behind the input [21:09] codehero: the output file size does not increase continuously as I would expect [21:09] jetienne: codehero: buffer 10 line and do a single write. and see the efffect on perf [21:10] codehero: according the docs node is supposed to buffer but I will try it now [21:10] jetienne: codehero: code that fast as a kludge, not meaning to stay [21:10] sonnym has joined the channel [21:10] rfranknj has joined the channel [21:10] isaacs has joined the channel [21:11] V1: Works like a charm, thanks stagas [21:11] dgathright has joined the channel [21:11] codehero: buffer 100 lines, working much better now [21:11] codehero: so the node.js buffering code is shit [21:12] stagas: V1: anytime [21:12] codehero: thanks jetienne [21:13] jetienne: i think node.js got "nobuffering" as policy [21:13] codehero: so basically DIY buffering [21:14] jamund_ has joined the channel [21:14] codehero: so when writing to a stream [21:15] codehero: the docs indicate that stream.write will indicate immediate writing if flushed to kernel buffer [21:15] codehero: but also seems to queue the request for later [21:15] jetienne: codehero: i think stream.write has been write with tcp in mind [21:15] codehero: and not buffer [21:16] codehero: TCP is stream, all data should go into the same buffer [21:16] jetienne: codehero: and tcp is buffered by definition [21:16] tmpvar has joined the channel [21:17] jetienne: codehero: sys.puts is about tty output. maybe there is a fwrite(stdout) or a write(1) [21:17] codehero: so my question would be why would my own buffering strategy be better than what node uses [21:17] codehero: since stream.write promises to write out the data you passed it anyway [21:17] jetienne: codehero: because we dunno if node got one :) [21:17] aconbere has joined the channel [21:17] jetienne: codehero: you use sys.puts correct? [21:17] codehero: it has to buffer somehow, the data eventually goes out [21:17] codehero: yes was, switched to process.stdout [21:17] codehero: .write [21:17] jetienne: codehero: none of that is stream.write [21:18] codehero: process.stdout is a a Writable Stream [21:18] matjas has joined the channel [21:18] codehero: sys.puts just goes right to process.stdout [21:20] tj- has joined the channel [21:21] bingomanatee has left the channel [21:21] jetienne: https://github.com/ry/node/blob/master/src/node.js#L479 [21:21] bingomanatee has joined the channel [21:21] bingomanatee: Is there a way to send raw body data using node's http module? [21:21] SubStack: res.write [21:23] rauchg_ has joined the channel [21:23] aconbere: ryah: okay, rebased against master, merged linting work, and I think we're getting closer :) [21:23] aconbere: thanks for your patience [21:23] bingomanatee: okay, and is it cool to send headers AND to send a raw body? [21:23] jetienne: https://github.com/ry/node/blob/master/lib/fs.js#L965 <- not sure how to interpret this one. the flush() mean sync with fs ? [21:24] jacobolus has joined the channel [21:25] isaacs: drudge: not sure if there's a bandwidth issue atm. what are you seeing? [21:26] bentruyman has joined the channel [21:26] jetienne: bingomanatee: i dont understand. this is always a 'raw body' [21:26] tlrobinson has joined the channel [21:27] _numbers has joined the channel [21:27] jacobolus has joined the channel [21:27] _numbers has left the channel [21:27] jakehow has joined the channel [21:27] isaacs: ryah: what's the status of socketpair? can i start uploading stuff with https yet? the couchone guys made the registry work with https, i wanna get rid of those warnings. [21:28] jashkenas has joined the channel [21:30] ianward has joined the channel [21:30] ianward has left the channel [21:30] Wizek has joined the channel [21:30] necrodearia has joined the channel [21:31] Wizek: hi [21:31] Wizek: What is the easyest way to delete variable objects (multilevel) based off a string? Like, I have a string: "foo-baz-bar", that means, I want to delete obj.foo.baz.bar in the first turn, then eliminate all remaining objects on that way which left empty [21:35] isaacs: Wizek: so, delete obj.foo.baz.bar, and then, if obj.foo.baz has no keys, delete that, and so on? [21:36] Wizek: isaacs: exactly [21:36] Wizek: isaacs: I'm posting my current code on git [21:36] Wizek: isaacs: https://gist.github.com/726126 [21:36] cafesofie has joined the channel [21:37] Wizek: so there is where I could get so far [21:41] isaacs_ has joined the channel [21:44] ossareh has joined the channel [21:44] Wizek: isaacs: So far my tests show creating and deleting works fine, but it has difficulties with cleaning up. [21:46] stride: aaand welcome back rainbow unicorn.. meh.. [21:47] UHMA has joined the channel [21:47] dnolen has joined the channel [21:47] mscdex: but delete sends v8 into a slow case! [21:47] mscdex: :p [21:48] UHMA: who runs nodejitsu ? [21:49] jdalton has joined the channel [21:49] jdalton has left the channel [21:50] tapwater has joined the channel [21:50] derren13 has joined the channel [21:51] mscdex: UHMA: JimBastard/indexzero [21:51] mscdex: afaik [21:52] aubergine_ has joined the channel [21:52] mies has joined the channel [21:53] robmason has joined the channel [21:54] cheney has joined the channel [21:54] aubergine has joined the channel [21:58] Alex3000 has joined the channel [22:00] bingomanatee: I noticed there are a few statements in node code that are comma seperated - what is the virtue in this? [22:02] frodenius: v8: var last = ("of", "the", "comma", "seperated", "values", "e.g.", 42); last [22:02] v8bot: frodenius: 42 [22:02] bingomanatee: ex: var Db = require('mongodb/db').Db, [22:02] bingomanatee: ObjectID = require('mongodb/bson/bson').ObjectID, [22:02] bingomanatee: Server = require('mongodb/connection').Server; [22:02] _numbers has joined the channel [22:03] _numbers has left the channel [22:03] frodenius: oh that, well, that is just to not repeat the var keyword over and over again [22:03] isaacs: Wizek: Why not just do it with a stack and 2 loops? https://gist.github.com/726165 [22:05] mizery has joined the channel [22:06] davidascher has joined the channel [22:09] yonkeltron has left the channel [22:10] isaacs: mape: so, it looks like "put the mtime in separate couchdb" is a pita. [22:10] stagas: omitted 'typeof' is one of the hardest bugs to spot [22:10] isaacs: mape: maybe not possible. [22:10] isaacs: stagas: yeah, it is [22:10] stagas: I was just doing blah === 'undefined' [22:10] isaacs: if (foo === "string") .... [22:10] isaacs: aww, man [22:10] stagas: :P [22:10] stagas: it was right in front of my eyes! [22:11] isaacs_ has joined the channel [22:11] mape: isaacs: Awww, guess I'll just randomize it so people keep thinking it is useful ;) [22:12] rpflo has joined the channel [22:12] hsuh has joined the channel [22:13] stagas: mape: you could get the pushed_at from github api [22:14] mape: stagas: initial thoughts would be that the github api doesn�t like that many calls, but guess I could space them out [22:14] mape: But that only works on the ones who linked their git repos [22:15] hassox has joined the channel [22:15] isaacs: mape: the only way to do that would be to have your site listen on the _changes feed, and keep track of that yourself. [22:15] mape: which is less then a potent solution [22:15] stagas: mape: it's 60/min or 1/sec look here how I do it: https://github.com/stagas/hwknd.com/blob/master/server.js [22:15] isaacs: mape: or, i guess, we could write a node program that listens on _changes, and PUTs into a /jsregistry-publishtime db [22:15] isaacs: and keep it out of your app [22:16] mape: stagas: jup, still a lot of packages who don't link their git repo [22:16] isaacs: actually, that's the way to do it... [22:16] stagas: actually I was thinking feeding it with the npm registry, everything is in place already [22:17] rauchg_ has joined the channel [22:18] mape: stagas: so how would you reliably link projects to git without having them do it manually? [22:20] stagas: mape: url.parse on the repositories link and a bit of hacking would get me the repo owner and repo name [22:21] mape: aconbere: yeah, but a lot of packages don't have a repo link [22:21] stagas: if they aren't on github, they won't show up :) [22:22] mape: well I'd rather have more packages show up then neglect those who haven't added a repo link yet [22:23] stagas: they could be put at the bottom with just the npm registry info [22:24] isaacs: stagas: no, sorting by git push date is disingenuous [22:24] isaacs: stagas: because what's in github is often way more recent than what's actually installed if you do npm install foo [22:24] mape: guess that would have to be linked to tags [22:24] isaacs: i think this line of inquiry is a mistake. [22:25] mape: and well, meh [22:25] aconbere: ACTION thinks mape meant someone else [22:26] mape: aconbere: if you would pass that along to stagas I would greatly appriciate it. [22:26] jchris has joined the channel [22:26] aconbere: stagas: mape: "yeah, but a lot of packages don't have a repo link" [22:26] bluegene has joined the channel [22:27] mape: thanks [22:27] bluegene has joined the channel [22:27] bingomanatee: is there a simple way in javascript to merge a set of defaults with a sparse object that may or may not have overrides for properties? [22:27] aconbere: ACTION bows [22:28] bingomanatee: i.e., var def = {foo: 0, bar: 1}; [22:28] bingomanatee: var value = {bar: 3, vey: 5} [22:28] aconbere: bingomanatee: take a look at for in [22:28] aconbere: https://developer.mozilla.org/en/JavaScript/Reference/Statements/for...in [22:28] stagas: bingomanatee: for (var k in def) { value[k] = def[k] } [22:29] aconbere: from there writing your own merge is simple [22:29] bingomanatee: thankx [22:30] prettyrobots: Does anyone [22:30] prettyrobots: Does anyone here feel E4X is missing from Node.js? [22:30] rauchg_ has joined the channel [22:30] frodenius: no, not at all [22:30] prettyrobots: That makes zero. [22:31] prettyrobots: Anyone else? [22:31] isaacs_ has joined the channel [22:31] broquaint has joined the channel [22:33] aconbere: prettyrobots: there was a post to the mailing list a week or so ago about a guy that wrote a module to do E4x on node [22:33] twoism_ has joined the channel [22:34] prettyrobots: Really? Without hacking into V8? [22:34] micheil: ryah: you about? [22:35] aconbere: prettyrobots: I'm pretty sure he ran a preproccesor [22:35] prettyrobots: aconbere: Nice. Nice hack. [22:35] aconbere: https://github.com/laverdet/e4x-bump [22:36] stagas: wow $5 a month for tweet throttling http://bufferapp.com/pricing [22:36] losing has joined the channel [22:37] [[zzz]] has joined the channel [22:37] stagas: I'll write one and offer it for $2 :P [22:37] prettyrobots: stagas: I wrote one a while back. [22:37] aconbere: prettyrobots: http://groups.google.com/group/nodejs/browse_thread/thread/713067d9d9db64e7/ [22:37] prettyrobots: It will take you all afternoon to get it right. [22:37] saikat has joined the channel [22:38] prettyrobots: (Maybe not *all* afternoon.) [22:38] jwl: anyone knows what the "pids" directory is for in expressjs? [22:40] bluegene has joined the channel [22:42] mikeal has joined the channel [22:44] wilmoore has joined the channel [22:44] prettyrobots: aconbere: Thanks for the discussion. [22:45] softdrink has joined the channel [22:46] evanmeagher has joined the channel [22:47] saschagehlich has joined the channel [22:47] saschagehlich: is tim-smart round here? [22:49] rauchg_ has joined the channel [22:49] herbySk has joined the channel [22:51] hamsterspider has left the channel [22:51] tlrobinson has joined the channel [22:58] fallsemo has joined the channel [22:58] micheil: saschagehlich: not at the moment [22:58] micheil: he's in NZ, so, should be soon, I would think. [22:58] [[zz]] has joined the channel [22:59] davidascher has joined the channel [22:59] mikeal: not everyone on that end of the world keeps micheil's hours :) [23:00] aconbere: prettyrobots: http://groups.google.com/group/nodejs/browse_thread/thread/713067d9d9db64e7/ [23:00] aconbere: bah [23:00] aconbere: sorry wrong term [23:00] micheil: mikeal: haha, yeah, I'm in normal time atm [23:01] mikeal: rauchg_: you in town? [23:01] rauchg_: mikeal: yup [23:01] mikeal: i'm in the city today [23:01] mikeal: we should get dinner or something [23:01] mikeal: you over at dogpatch? [23:02] rauchg_: yep [23:02] losing_ has joined the channel [23:02] bingomanatee: Is prototype comparison the best way to discriminate between an Array and an object? [23:03] isaacs: npm package authors: put a "keywords" array in your package.json, if you don't already. And a description. [23:04] ysynopsis has left the channel [23:07] Wes- has joined the channel [23:08] MikhX has joined the channel [23:08] isaacs has joined the channel [23:10] herbySk has joined the channel [23:12] caguilar has joined the channel [23:12] Tobsn has joined the channel [23:15] hsuh has joined the channel [23:15] aconbere: what value do people find in JavaScript the definitive guide [23:15] aconbere: I picked it up ages ago, and recall that it's almsot entirely documentation [23:16] AAA_awright has joined the channel [23:17] tobie has joined the channel [23:17] JimBastard has joined the channel [23:17] aconbere: boggles [23:17] aconbere: my [23:17] aconbere: mind [23:17] JimBastard: yeah wow, i just added google analytics to our blog, we are getting 5k uniques a day [23:18] warz has joined the channel [23:18] JimBastard: i think the best site i ever had was getting 30k uniques a day, but that was retardbox [23:21] mikew3c has joined the channel [23:22] tanepiper: aconbere: good book [23:22] tanepiper: 6th Ed it out early next year [23:22] tanepiper: should cover Harmony stuff and probably cover off some server side js stuff i hope [23:22] ysynopsis has joined the channel [23:24] tmpvar has joined the channel [23:25] er1c_ has joined the channel [23:25] zzo has joined the channel [23:25] jchris has joined the channel [23:26] tanepiper: http://js1k.com/2010-xmas/submit [23:26] deedubs has joined the channel [23:26] wattz: hey, is there away in v8/node/C++ land to get the directory a js file that's being executed, lives? [23:27] prettyrobots: aconbere: Yes. I read through it. [23:27] pquerna: rauchg_: hey, i was wondering, do you konw of anyone using socket-io over ssl yet? [23:27] prettyrobots: I read it before too. [23:27] cjmFloating has joined the channel [23:27] fallsemo has joined the channel [23:27] deedubs: wattz: __dirname [23:27] wattz: that's in js land [23:27] prettyrobots: I'm not sure, but I commented in a thread today on adding EX4 to V8 in the issue tracker. I felt like a lone, rude voice against code bloat. [23:28] sonnym has joined the channel [23:28] rauchg_: pquerna: yep [23:28] rauchg_: saikat: [23:28] rauchg_: ^ [23:29] rauchg_: gomockingbird's mastermind [23:29] saikat: hey [23:29] saikat: pquerna: we're doing it through stunnel though [23:29] rauchg_: yep [23:29] pquerna: saikat: ah. right. [23:29] saikat: not current node.js SSL stuff [23:29] rauchg_: is node's ssl there yet ? [23:29] rauchg_: like it could actually work for wss:// ? [23:29] saikat: i've seen a lot of patches recently but haven't been keeping up - actually i thought pquerna was working on it? [23:30] pquerna: some issues fixed, there is a branch that improves it, but I've not worked on it for a month [23:30] techwraith has joined the channel [23:30] zzo: mongoose madness: http://pastebin.com/gubVFvJV [23:30] pquerna: due to other priorities for $work happening. [23:30] zzo: program hangs & won't quit [23:31] zzo: unless i manually Item._connection.close() or do the item.js require within a block [23:31] pquerna: saikat: so, if its via stunnel, are you doing it cross domain? like html from www.exmaple.com, socket.io on something.example.com? [23:31] saikat: pquerna: yep [23:31] saikat: gomockingbird.com to sing.gomockingbird.com [23:31] zzo: is that ok or is there a better way - the docs say: mongo.load('./models/') but that doesn't work/exist thanks! [23:31] pquerna: cool [23:31] jwl: how do i render json in expressjs? [23:32] tjholowaychuk: jwl: res.send({ what: 'ever' }) [23:32] jwl: tjholowaychuk: thanks [23:32] jwl: you changed name today? [23:32] jwl: you are tj? [23:32] tjholowaychuk: yeah [23:32] tjholowaychuk: its in use apparently [23:34] jwl: someone who wants to take over express [23:34] tjholowaychuk: haha [23:37] jwl: they are coming for you [23:38] zzo: does the 'require()' call cache so if i call it twice w/the same thing it'll return pretty immediately? [23:38] SubStack: yes [23:38] zzo: sweet [23:38] jwl: its synchronous code right? [23:38] isaacs has joined the channel [23:39] deedubs: in ref to zzo so its okay to include the same file multiple times instead of passing the object around? [23:39] evanmeagher: isaacs: glad to see the completion stuff pushed to master :) [23:39] isaacs: evanmeagher: yeah, thank you so much for helping out. [23:39] isaacs: it's cool. [23:39] evanmeagher: isaacs: np at all. glad to help out. [23:39] isaacs: npm cache ls and clean aren't quite right, though. there are definitely some bugs, but we'll get more eyes on it with the next version hopefully. [23:39] jwl: i read that there is an urge making it asynched...but i dont get how that would be beneficial .. if i require files and its asynched and i have lines afterwards they would not be able to run [23:40] jvolkman: deedubs: sure, but convention is to require things once per file and store the result in a local variable. [23:40] isaacs: deedubs: yes, that is fine. [23:40] isaacs: deedubs: but it is better not to do that. [23:40] isaacs: zzo, deedubs: modules are cached based on filename. require("foo") does the require.paths walk *every time*, even if it ends up returning the same file it resolved to last time. [23:41] isaacs: so, there are a bunch of (likely cached) stat calls, but it skips over the file read and javascript execution bit [23:41] evanmeagher: isaacs: let me know if i can help in any way to the upcoming npm refactoring you mentioned [23:41] isaacs: evanmeagher: yeah, that's a late-2011 thing, most likely [23:41] evanmeagher: isaacs: oh, I didn't realize it was that far out [23:42] isaacs: it's a bit bloated right now, but i think it'll be good to get to feature-complete status before worrying about how to break things up into sub-modules and add-ons and such. [23:42] rpflo has joined the channel [23:43] zzo: isaacs: thx [23:43] isaacs: ideally, i want to get it down around 3000 lines by the end. (it's at 7205 on my mac at this moment) [23:43] evanmeagher: isaacs: yikes, i didn't realize [23:44] isaacs: so like, you'll do "npm install npm-completion" to get that feature. "npm install bundle" to get that feature, etc. anything non-essential will be a plugin. [23:44] dmma has joined the channel [23:44] rauchg_: npm install vim [23:44] rauchg_: to install vim [23:44] evanmeagher: isaacs: oh, cool. would they be treated as regular modules or would there be some sort of special "npm extension" type of pkg? [23:44] isaacs: and then just for bare-bones install-and-remove stuff, you can have `npm install npm-core`, and the default `npm install npm` will get you everything. [23:45] isaacs: evanmeagher: not sure. [23:45] isaacs: evanmeagher: i mean, they'll be just normal packages (so that anyone can write one easily), and a few will be blessed/default somehow, but i have no idea how that's going to work, really [23:46] isaacs: evanmeagher: also, it'd be nice to have some kind of structure like that for all the express-* and connect-* pacakges. [23:46] isaacs: maybe a way to actually have them expose a plugin api and then code against that or something. i dunno. [23:46] evanmeagher: isaacs: yeah, some way to abstractly tie modules together would be great [23:46] isaacs: maybe something just simpler and hacky. [23:46] isaacs: :) [23:46] ossareh has joined the channel [23:47] evanmeagher: isaacs: any pointers on package.json keywords? [23:47] evanmeagher: isaacs: your inclusion of "install" and "package.json" in npm's keywords is kinda confusing [23:47] isaacs: evanmeagher: yeah... i'm not sure. [23:47] isaacs: with a good description and title, you don't really need them much [23:47] isaacs: but it's good if there are synonyms [23:48] isaacs: they'll just be tacked onto the `npm ls` output and used for searching [23:48] dmma has left the channel [23:51] ryah: can i remove process.ENV ? [23:52] eee_c has joined the channel [23:53] Spion has joined the channel [23:54] jakehow has joined the channel [23:54] zk has left the channel [23:54] gf3 has joined the channel [23:55] langworthy_ has joined the channel