[00:00] pquerna: mjr_: it doesn't help that some apache modules are pretty terrible, but I wish people would blame those terrible modules, rather than apache itself [00:00] elliottcable: maqr 3» I envy you. I hope this gets videoed. [00:00] pquerna: but oh well [00:00] maqr: elliottcable: i'm not there, just following on the twitter [00:00] maqr: elliottcable: me too though [00:00] elliottcable: maqr 3» hah, where? [00:01] mjr_: pquerna: what's the origin of that apache vs nginx :: threads vs events thing I hear people quoting all the time? [00:01] maqr: elliottcable: oscon where sh1mmer's talking? i'm not exactly sure where it is, but i hope someone does video the talk [00:01] elliottcable: maqr 3» I meant, where are you following it? [00:01] maqr: elliottcable: just on the twitter in here, you're not missing anything :) [00:02] elliottcable: maqr 3» I meant, which Twitter. I’m not follwoing anybody talking about it. [00:02] elliottcable: ARGH LAG. I swear, I’m an intelligent person who can type without errors if he can freaking see what he’st yping! [00:02] maqr: elliottcable: oh, just search #nodejs [00:02] elliottcable: … *typing. [00:02] jesusabdullah: suuure [00:02] elliottcable: jesusabdullah 3» stfustfustfu )-’: [00:02] maqr: elliottcable: it's cool, i can't see half your characters anyway... unicode, remember? ;) [00:02] jesusabdullah: C'mon fhqwhgads [00:02] elliottcable: `#nodejs -RT` [00:03] jesusabdullah: I see you jockin' me, tryin' to play like [00:03] jesusabdullah: u no me [00:03] elliottcable: maqr 3» you’re the one who can’t get Unicode working? [00:03] isaacs: fhqwhgads! http://www.homestarrunner.com/fhqwhgads.html [00:04] maqr: elliottcable: yeah, i followed your screenrc, but i haven't restarted screen yet... it might be related [00:04] pquerna: mjr_: apache can be eventd too, thats what the event mpm is for, if you configure it to be. But most people were benchmarking prefork mpm with mod_php loaded... great, it uses lots of ram and is slow. [00:05] mjr_: pquerna: yeah, benchmarks are hard, I guess. [00:05] pquerna: mjr_: in th end, as long as they are all making the same basic system calls, your weberver shouldn't be your bottleneck [00:05] jesusabdullah: It's relatively trivial to make node serve static files, right? [00:06] jesusabdullah: ACTION has never tried it tbh [00:06] maqr: ACTION detaches for a little bit [00:06] elliottcable: oh hey [00:06] elliottcable: who did I ask to try some code for me? [00:07] elliottcable: satori_ 3» you! :D still around? [00:07] mtodd has joined the channel [00:07] elliottcable: also, Astro, where do I know you from? Your nick is familiar… [00:09] _announcer: Twitter: "Understanding node.js: http://debuggable.com/posts/understanding-node-js:4bd98440-45e4-4a9a-8ef7-0f7ecbdd56cb #oscon #mkx" -- The SWAT team. http://twitter.com/mihswat/status/19294884845 [00:10] saikat` has joined the channel [00:10] sh1mmer: hi maqr [00:10] andym has joined the channel [00:11] andym: ACTION waves at sh1mmer from the crowd [00:11] sh1mmer: I'm talking about you in a talk [00:11] brianleroux: sh1mmer: .break was what ur lookin for [00:11] andym: do i get a donut now? [00:11] pquerna: andym: never [00:11] brianleroux: where's my fuckin donut?! [00:11] _announcer: Twitter: "http://bit.ly/bcjNtN <- Sheesh this is cool. How did I not see this yet. Built using Node.js" -- Charl van Niekerk. http://twitter.com/charlvn/status/19295009557 [00:11] satori_: elliottcable: not here for much longer.... nearly time to go see Inception [00:11] andym: wtfdonut? [00:12] derferman: satori: I N C E P T I O N [00:12] statico has joined the channel [00:12] derferman: satori: Seriously though, enjoy it. It's a great movie [00:12] mshadle has joined the channel [00:12] mshadle: yeah! [00:12] satori_: yeah, that's what i heard. Respected reviewers in Aus said it's an instant classic on par with blade runner and 2001 [00:13] satori_: Sounds like my kind of film [00:13] mshadle: i'm looking at wargames [00:13] statico: which movie? (just joined) [00:13] satori_: inception [00:13] derferman: satori: Personally, I didn't think it was as good as those movies. However, it's so much better than the current tripe in the theaters [00:13] mshadle: but it must be um. for specific folks? [00:14] jesusabdullah: whoa, fs has a lot of methods [00:14] jesusabdullah: AWESOME [00:14] voodootikigod_ has joined the channel [00:14] mjr_: sh1mmer: so did you tear it up at your oscon talk or what? [00:14] mshadle has left the channel [00:16] andym: sh1mmer: is still talking [00:16] mjr_: well then, WTF is he doing on IRC? [00:16] mjr_: oh, demoing wargames. I get it. [00:16] satori_: So he just popped in to say hi from the podium? lulz [00:17] mjr_: I should code more and pay attention to IRC less. [00:17] ryah: war gamez isn't very presentation friendly [00:17] ryah: you can't see it well [00:18] jesusabdullah: :( [00:18] softdrink has joined the channel [00:20] satori_: wargames needs an invert colors button. [00:21] ChrisPartridge has joined the channel [00:22] bean0r1___ has joined the channel [00:25] khug has joined the channel [00:25] khug has left the channel [00:26] elliottcable: satori_ 3» heh [00:26] elliottcable: satori_ 3» okay [00:27] elliottcable: satori_ 3» can you clone this? git://github.com/elliottcable/from.git [00:28] elliottcable: satori_ 3» then copy this file: http://gist.github.com/raw/484790/09513d05962bacc744316f1d565447ef9444182c/test.js [00:28] elliottcable: satori_ 3» and run it [00:28] andym has joined the channel [00:29] satori_: elliottcable: I'll be back in 2 1/2 hrs. happy to help then if u r still here [00:29] jesusabdullah: elliottcable: You're from anchor? [00:29] _announcer: Twitter: "anyone wanna hire me to write a node.js streaming video/media server? :)" -- Kyle Simpson. http://twitter.com/getify/status/19296117216 [00:29] satori_: !tweet @getify Do it anyway! [00:30] rauchg_: whose user is !tweet ? [00:30] satori_: nodejsbot [00:30] aheckmann: the nodebot [00:30] rauchg_: nice [00:30] rauchg_: that's amazing haha [00:30] bmizerany has joined the channel [00:30] aheckmann: it has no followers haha [00:32] maqr has joined the channel [00:33] bmizerany has joined the channel [00:34] tyfighter has joined the channel [00:35] _announcer: Twitter: "yay, first node.js page running on my server #nodejs" -- Andy McKay. http://twitter.com/andymckay/status/19296504810 [00:38] isaacs: aheckmann: i followed it for a minute, then i realized that it was nothing but out-of-context @-replies. [00:38] isaacs: it'd be good to make it @-reply properly [00:38] aheckmann: i just checked it out yesterday [00:38] aheckmann: its kind of silly really [00:39] aheckmann: why would anyone follow it? [00:39] aheckmann: its a toy [00:39] isaacs: maybe even something like !reply Blah blah blah [00:39] elliottcable: jesusabdullah 3» what? [00:39] isaacs: aheckmann: well, it's kind of neat to see the responses from in here to what people are saying about node [00:39] aheckmann: yeah definitely [00:39] isaacs: aheckmann: it's really kind of neat that whenever anyone anywhere tweets about node, they get a response from one of us. [00:39] isaacs: i've seen it bring in users and start conversations in here. [00:39] aheckmann: that is cool, but it's not something one would follow [00:40] isaacs: yeah, totally [00:40] akahn has joined the channel [00:40] ryan_gahl: I'm following it [00:40] ryan_gahl: just now [00:40] aheckmann: hah [00:40] isaacs: ryan_gahl: you'll stop eventually. [00:40] isaacs: it's inane and out of context [00:40] ryan_gahl: so am i [00:40] isaacs: haha [00:40] ryan_gahl: lol [00:40] aheckmann: nie [00:40] isaacs: maybe you guys will hit it off, then [00:40] aheckmann: nice [00:40] elliottcable: lol. [00:41] careo has joined the channel [00:41] aheckmann: who wrote announcer? [00:41] aheckmann: does it look for anything with nodejs in it? [00:42] ryan_gahl: #node, #nodejs, node.js, etc... don't know the complete list [00:43] ryan_gahl: I'm going to start replying to nodejsbot [00:43] ryan_gahl: no i'm not [00:43] aheckmann: i'm wondering how log it takes for the bot to pick up tweets [00:43] aheckmann: so we'll see shortly... [00:44] aheckmann: or not [00:45] pquerna: mjr_: i think i've figured out the best reply about nginx benchmarks: "you are holding wrong" [00:47] creationix: aheckmann: when it works, it's instant [00:47] aheckmann: i guess it filters somehow [00:48] _announcer: Twitter: "buzz buzz buzz buzz #node.js buzz buzz buzz buzz" -- Aaron Heckmann. http://twitter.com/aaronheckmann/status/19297304802 [00:48] aheckmann: ha! [00:48] ryan_gahl: instant-ish [00:48] aheckmann: i think if you mention irc it filters it [00:48] _announcer: Twitter: "looking into node.js. highly impressed." -- Ben Rowe. http://twitter.com/ben_rowe/status/19297333760 [00:48] aheckmann: or maybe msg length [00:52] jesusabdullah: elliottcable: Are you from Anchorage like your github says? [00:53] _announcer: Twitter: "@Jerub Have you played with #nodejs yet? It's lovely for whipping up quick scripts, feels cognitively lighter than Twisted." -- Jeff Waugh. http://twitter.com/jdub/status/19297635121 [00:54] elliottcable: jesusabdullah 3» indeed [00:54] elliottcable: jesusabdullah 3» http://elliottcable.name [00:56] elliottcable: jesusabdullah 3» you up here? [00:57] _announcer: Twitter: "SenchaTouch Node.js CouchDB SproutCore Objective-J" [de] -- soomtong. http://twitter.com/soomtong/status/19297875271 [00:59] jesusabdullah: elliottcable: Squarebanks [01:00] steadicat has joined the channel [01:01] elliottcable: FUck yeah, Xcode 4! I didn’t realize it was available to Mere Mortals now :O [01:01] elliottcable: jesusabdullah 3» awesome. I’m leaving in a few days, though… roadtrip to NC, where I just bought a house. [01:01] jesusabdullah: *nod* [01:03] polotek has joined the channel [01:03] argon_ has joined the channel [01:05] creationix: http://howtonode.org/deploying-node-with-spark [01:06] bcurren has joined the channel [01:06] bcurren: how do most people deploy node in production? do you just run a node process or do you run several and balance with something like haproxy? or some other choice [01:06] bcurren has left the channel [01:07] creationix: ask a question and then leave? [01:07] bcurren has joined the channel [01:07] creationix: bcurren: usually you don't need something like haproxy [01:08] creationix: a single node process is often quite powerful [01:08] ryah: bcurren: just run one [01:10] aheckmann: ive got nginx running for static files but that's going away soon [01:10] bcurren: i'll try it out and use start-stop-daemon on debian [01:10] aheckmann: just going with straight up node [01:10] elliottcable: I put node behind NginX [01:10] elliottcable: because there are many things running on the server; it’s inacceptable to eat up port 80 for a single little tool [01:11] elliottcable: but if you are actually dedicating a single machine to a particular task, and actually using node for the entirety of that task… you can easily handle it with a single node on port 80, I’d think [01:11] bcurren: thanks for the responses. node will be collecting metrics and exposing a web service that is consumed by a static html5 site [01:11] elliottcable: neat :3 [01:13] bpartridge has joined the channel [01:14] bcurren: does ext or some other module have something like Thread.join. not sure this makes sense but I'm running 3 separate queries and need to join them before responding. we rolled something on our own buts it's not reusable or very pretty. [01:16] creationix: bcurren: you saw the article I just posted right? [01:16] creationix: oh, no you joined right after [01:16] creationix: http://howtonode.org/deploying-node-with-spark [01:16] bcurren: thanks for the pointer. i'll check it out [01:17] bourne has joined the channel [01:17] creationix: upstart it nice for keeping uptime [01:17] mjr_: Has anybody ever tried to establish 65535 HTTP connections to a single node before? [01:17] creationix: mjr_: isn't that the theoretical limit [01:17] mjr_: I'm trying it not, and I'm amazed at how long it takes just to complete all of the TCP round trips. [01:17] mjr_: and make it through the accept cycle on the other end. [01:17] creationix: yea, that's a lot of connections [01:18] pnewhook has joined the channel [01:18] creationix: what client are you using? [01:18] mjr_: a node-based client as well [01:18] mjr_: Oh, I'm running out of ephemral ports. Bah. [01:18] creationix: mjr_: on another machine? [01:18] creationix: http client is fairly cpu heavy [01:18] mjr_: Yeah, two computers talking to each other, one opening, the other accepting. [01:18] creationix: or are you using raw tcp [01:18] mjr_: No, http client. [01:19] mjr_: Server is what I care about though. [01:19] creationix: yeah, well you're on two machines, so that will help [01:19] mjr_: Anyway, even at 20K connections, memory usage is surprisingly low. [01:19] mjr_: Pretty great. [01:19] meder___ has joined the channel [01:19] creationix: nice [01:19] bourne: anybody got a second? I have a question about changing variables outside of a callback function [01:20] mjr_: If you have more than one IP, you should be able to go over 64K connections. [01:20] bourne: or outside of a callback function's lexical scope* [01:20] bcurren: creationix: thanks for that. i haven't heard of spark [01:20] mjr_: Anyway, time to go home. [01:20] creationix: bourne: sure, got a code snippet [01:20] bourne: creationix: ya, let me pull one up real quick =) [01:21] phiggins has joined the channel [01:21] Yuffster_ has joined the channel [01:22] bourne: path.exists(filename, function (exists, variable) { return variable; }); [01:22] bourne: return variable isn't the correct code in this case obviously [01:23] bourne: looking how to do that though [01:23] creationix: not sure I understand the question [01:23] emerleite has joined the channel [01:23] emerleite: . [01:24] _announcer: Twitter: "damn, node.js is amazing. lots of fun." -- Nicholas Wieland. http://twitter.com/ngw/status/19299606269 [01:24] wilmoore has joined the channel [01:24] bourne: creationix: hmm, so i call the path.exists function, but anything inside the callback is a new scope... if I try to change a global variable within the callback scope, JS won't allow that [01:24] creationix: bourne: sure it will [01:25] creationix: you can access and modify anything from the outer closure [01:25] kodisha has joined the channel [01:25] creationix: function scopes are nested closures [01:25] creationix: 100% lexical [01:25] bourne: the outer closure being.. the path.exists or the anonymous function [01:25] elliottcable: damn [01:26] bourne: i may have my terms incorrect [01:26] Yuffster has joined the channel [01:26] elliottcable: I wish V* supported Mozilla’s neat function-syntax extension )-: [01:26] bourne: could you please explain? [01:26] elliottcable: V8* [01:26] kjeldahl has joined the channel [01:26] creationix: bourne: I still don't know what you're trying to accomplish [01:26] elliottcable: `function(x) x * x` == `function(x) { return x * x }` [01:26] elliottcable: implicit returns *and* no brackets :O [01:26] creationix: var exists = false; path.exists(filename, function (result) { exists = result;}); [01:27] creationix: elliottcable: yeah, that's a nice one [01:27] aheckmann: creationix: just read your article. what does --comment do? [01:27] bourne: var global_var = filename; path.exists(filename, function (exists, variable) { global_var = filename + string; }); [01:28] bourne: ohhh exists = result [01:28] bourne: got ya [01:28] bourne: I'll give that a try, thanks creationix! [01:28] creationix: aheckmann: nothing [01:28] aheckmann: haha [01:28] aheckmann: why? [01:28] creationix: aheckmann: but htop picks it up and labels your process [01:28] creationix: as "spark --comment foo" [01:29] _announcer: Twitter: "So Tornado 1.0 is ready (http://github.com/facebook/tornado). Hard choice between it and Node.js" -- Brandon Titus. http://twitter.com/bjtitus/status/19299931875 [01:29] aheckmann: gotcha [01:29] aheckmann: good stuff [01:34] creationix: ok, time to take wife out for dinner [01:43] ChrisPartridge: oo, Tornado.. what do we have here [01:45] elliottcable: :O [01:46] elliottcable: “FATAL ERROR: v8::Object::SetInternalField() Writing internal field out of bounds” [01:46] elliottcable: … that’s a new one on me [01:47] ryan_gahl: peace out room [01:49] bourne: hmm, too bad creationix left, it didn't work =( [01:49] bourne: anybody else have a long day? [01:52] ludde_ has joined the channel [01:53] elliottcable: bourne 3» hm? [01:58] ryah: http://blog.std.in/2010/07/22/nodejs-more-intelligent-routing/ <-- nice [01:58] ryah: been thinking about doing that :) [01:58] polotek: what's the v8 equivalent of hasOwnProperty? [01:59] aheckmann: hasOwnProperty is available - what do you mean? [01:59] aheckmann: if (a.hasOwnProperty('b')) [01:59] polotek: in the v8 api I mean [02:00] polotek: C++ [02:00] aheckmann: ok. sorry not sure [02:01] ChrisPartridge: So.. tornado is python? [02:02] jesusabdullah: It is! [02:02] ceej has joined the channel [02:04] meso has joined the channel [02:04] EyePulp has joined the channel [02:05] sh1mmer has joined the channel [02:05] ChrisPartridge: Ewww [02:07] polotek: ChrisPartridge: what's wrong with python? [02:08] ChrisPartridge: polotek: Nothing :) I'm just enjoying writing purely in JS too much! [02:10] jesusabdullah: I'm thinking about trying tornado actually, if only because I have a python background <_< [02:13] sh1mmer: yo [02:13] bourne: elliottcable: hmm, what? [02:13] pydroid has joined the channel [02:13] jesusabdullah: sh1mmer: Comic Sans? >:O [02:13] sh1mmer: yeah [02:13] jesusabdullah: For shame! [02:13] sh1mmer: node is so good it offsets comic sans [02:14] sh1mmer: does anyone know where beer.js is? [02:14] ChrisPartridge: inside pub.js ? [02:14] polotek: wow [02:15] careo: now that'd be a rad bar. [02:17] sh1mmer: I found it [02:17] sh1mmer: yays [02:17] jesusabdullah: node beer.js [02:20] bpot has joined the channel [02:21] elliottcable: bourne 3» what? [02:22] victorstan has joined the channel [02:25] nrstott: kriszyp, how's the best way to get started using pintura? ive looked at the wiki example, where should I go next [02:25] bourne: elliotcable: lol, you said hm... nvmd [02:28] confounds has joined the channel [02:30] JimBastard has joined the channel [02:31] _announcer: Twitter: "Even came out of Node.js in Action!" [ja] -- Toshihiro Shimizu. http://twitter.com/meso/status/19304020110 [02:35] rgl has joined the channel [02:36] JimBastard has joined the channel [02:42] JimBastard: can anyone remember the name of the project that allowed you call node.js stuff from inside ruby? [02:42] mattly has joined the channel [02:42] pavan_ has joined the channel [02:43] donspaulding has joined the channel [02:45] mde: JimBastard: You might be thinking of TheRubyRacer -- it embeds V8 in a Ruby process. [02:45] bradleymeck1 has joined the channel [02:45] mde: Not actually Node -- it's just V8. [02:45] JimBastard: naaah [02:45] jsilver has joined the channel [02:46] JimBastard: hrmmm [02:46] JimBastard: i think it was a slidedeck [02:46] SamuraiJack has joined the channel [02:46] JimBastard: talking about using node instead of delayed job or something [02:46] mde: Maybe like using Curb, or shelling out. [02:47] JimBastard: Curb? [02:47] _announcer: Twitter: "#Node.js and #Ruby http://www.slideshare.net/mbleigh/nodejs-and-ruby #EventMachine #Cramp" -- Julius. http://twitter.com/julionc/status/19305031704 [02:47] JimBastard: ?!?!?!?! [02:47] mde: http://curb.rubyforge.org/ Curl bindings. [02:48] JimBastard: wtf [02:48] bradleymeck1: what are we talking about? [02:48] JimBastard: who the fuck tweeted that [02:48] JimBastard: the tweet was EXACTLY what i was talking about [02:48] JimBastard: did _announcer just become self aware? [02:49] JimBastard: am i tripping out? [02:49] jsilver: yes [02:49] jsilver: trippa [02:49] mde: It's turning into SkyNet. [02:49] JimBastard: is julionc lurking in here? [02:49] jsilver: node.js > eventmachine [02:49] jsilver: :P [02:49] JimBastard: tmm1 might agree :p [02:49] jsilver: ACTION knows and likes ruby [02:49] jsilver: coming from a ruby supporter... fuck ruby [02:49] jsilver: :P [02:50] bradleymeck1: need to get more libraries for node then fuck ruby [02:51] JimBastard: !tweet @julionc woah dude, i was JUST talking for that slidedeck in the IRC, i think we just became self-aware.... [02:51] JimBastard: engrish flail [02:51] JimBastard: yeah they want me to do a ruby project at work [02:51] JimBastard: i figured i could try and do something with node [02:54] mde: JimBastard: You're all up in the dual-sided code stuff. Embedded V8 is yet another fun fucked-up environment to make your JS run in. [02:55] _announcer: Twitter: "http://bit.ly/d03Cy5 is quite interesting. /cc #nodejs" -- Jacob Rothstein. http://twitter.com/jacobrothstein/status/19305535294 [02:55] JimBastard: mde: so use the rubyracer to do stuff? [02:55] JimBastard: is there anything i could do that would help kill ruby and promote node? [02:56] JimBastard: sounds like a shitty rabbit hole [02:56] mde: We're using TheRubyRacer as a stepping stone, but I guess it's kind of subversive. [02:56] jbr has joined the channel [02:56] _announcer: Twitter: "@marshallk so write a series, JBOSS, Twisted, node.js ..." -- Kevin Marks. http://twitter.com/kevinmarks/status/19305626371 [02:56] mde: You just end up doing more and more in JS-land. [02:57] mde: We use it for server-side rendering of what look like client-side EJS templates. [02:57] mde: Eventually all that shit will be in Node. [02:57] manveru: JimBastard: write a 0mq binding :) [02:57] JimBastard: http://stratifiedjs.org [02:57] JimBastard: ehhhhh [02:58] creationix has joined the channel [02:58] JimBastard: im too lazy to implement a protocol [02:58] JimBastard: thats work for real programmers [02:58] jbr: JimBastard: thanks. hate when tweetie shortens links it doesn't need to [02:58] manveru: JimBastard: binding [02:58] JimBastard: that looks bad ass jbr [02:58] manveru: it's implemented already... [02:58] polotek: anybody using http://traitsjs.org/ in node? [02:58] statim has joined the channel [02:58] careo: has anyone seen this from npm? http://gist.github.com/486942 [02:58] jbr: JimBastard: agreed. no idea who did it, but it's awesome [02:58] careo: trying to get it installed, but no such luck [02:59] JimBastard: i think ill just make reddit in node [02:59] isaacs: careo: yes!! [02:59] JimBastard: that will be more fun [02:59] isaacs: careo: how did you do that!? [02:59] JimBastard: and no one will ever be able to ban me [03:00] isaacs: careo: can i guess? you used homebrew to install npm. then, you wanted to update npm. so you did "npm install npm@latest" [03:00] manveru: a highly unethical reddit with JimBastard as admin... just what the world needs :) [03:00] careo: isaacs: half right [03:00] isaacs: careo: ok [03:00] JimBastard: http://stratifiedjs.org/par-fork-join.html [03:00] careo: I used homebrew to install it. but haven't been able to do anything with it [03:00] isaacs: careo: great. [03:00] JimBastard: manveru: i use to run retardbox.com, that was a wikimedia install with no rules, no registration, and encouraged abuse [03:01] JimBastard: i had a bunch of alias's like sexcrmininaldatabase.org [03:01] JimBastard: so you could create abritrary pages [03:01] JimBastard: sexcriminaldatabase.org/marak [03:01] isaacs: careo: so, adamv in the homebrew crowd is trying to fix this. in the meantime, install npm using the method in the readme. curl http://npmjs.org/install.sh | sh [03:01] JimBastard: tons of alias's [03:01] careo: isaacs: great as in "I know how to fix it" or "great... he's really hosed" [03:01] careo: ah cool [03:02] gwoo has joined the channel [03:02] isaacs: careo: you may want to install node in the standard way, too [03:02] bradleymeck1: stratified is interesting, but i hate continuation style with the passion of a thousand sons [03:02] careo: isaacs: ok [03:02] isaacs: careo: and blow away your .npmrc if you have one. [03:02] JimBastard: bradleymeck1: it looks badass for UI [03:02] JimBastard: i think it does, i dunno if i'd use it though [03:02] isaacs: careo: homebrew makes some assumptions about how node and npm should work. node and npm have other ideas. [03:03] bradleymeck1: it does look nice for ui, but continuation leads to chunky code that gets hard to mix and match / reuse [03:03] careo: hehe [03:03] mscdex: a thousand sons? talk about a busy father [03:03] JimBastard: isaacs: is it a problem that could be solved by patching homebrew? [03:03] bradleymeck1: then again i never wanna use flag coding again, ugg [03:03] isaacs: JimBastard: yes. adamv is working on it [03:04] voodootikigod__ has joined the channel [03:04] isaacs: JimBastard: i started to, but then i remembered that ruby is a read-only language. [03:04] isaacs: JimBastard: and i didn't feel like learning the innards of how homebrew does things [03:04] careo: I wonder what it's doing wrong [03:04] bradleymeck1: like perl [03:04] isaacs: careo: paths, mostly [03:04] isaacs: bradleymeck1: perl's the opposite. it's write-only. [03:04] isaacs: creationix: where can i find spark? [03:05] creationix: senchalabs [03:05] creationix: http://github.com/senchalabs/spark [03:05] creationix: isaacs: or use Ivy ;) [03:05] isaacs: ohh... LABS [03:05] careo: isaacs: ahh yeah. it's replacing '/usr/local' with the homebrew prefix in paths and swapping '/opt/local/lib' with '/usr/lib' [03:05] isaacs: careo: it's more than that. [03:05] creationix: hmm, not sure spark is in npm [03:05] creationix: it should be [03:06] isaacs: creationix: very much not. not even a package.json [03:06] isaacs: incoming pull req shortly [03:06] creationix: hehe [03:06] creationix: isaacs: I'll just copy paste the code if that's ok [03:06] creationix: can't take patches untill you sign the cla [03:06] careo: isaacs: that's all that's in the node formula. it mangles wscript and configure then does ./configure [03:06] careo: (with --prefix of course) [03:07] isaacs: creationix: well, it's the same liability if i write the code then you copy and paste it. more, actually. where's the cla? i'll sign. [03:07] creationix: err, I guess technically copy-paste is the same huh [03:07] bradleymeck1: isaacs too true got confused for some reason [03:07] isaacs: creationix: yeah, worse. [03:07] bradleymeck1: anybody got a clipboard module out yet? [03:07] JimBastard: polotek: you coming out sat? [03:07] isaacs: careo: yeah. and npm's libs end up in PREFIX/Cellar/node/0.1.101/lib/node [03:07] polotek: JimBastard: trying to figure out my transportation [03:08] isaacs: creationix: i can just say "go write a package.json!" and then you can do it, and that's not any kind of problem ;) [03:08] careo: isaacs: yep. that's because of the sub and prefix. [03:08] JimBastard: polotek: acela train ? [03:08] creationix: isaacs: http://github.com/senchalabs/connect/blob/gh-pages/Connect%20Individual%20CLA.pdf [03:08] creationix: but I know how to write them [03:08] JimBastard: or just the train [03:08] creationix: I can do one real quick [03:08] polotek: is that the best way to go? [03:08] polotek: bolt bus was also recommended [03:10] isaacs: creationix: ew, paper? [03:10] creationix: isaacs: yeah, we're working on getting an electronic one like node [03:11] isaacs: creationix: ok. if either of us don't forget, maybe i can sign it the next time i come up that way for a node meetup [03:12] creationix: isaacs: I hear there might be on in Mountain View next week [03:12] isaacs: oh, cool. [03:12] creationix: and then at Sencha a couple weeks after that [03:12] isaacs: yeah, i saw the one in august since griess and someone else will be in town [03:12] creationix: that will be fun [03:13] creationix: isaacs: so spark doesn't have any libraries, just a bin file [03:13] polotek: man you guys on the left coast have all the fun [03:13] isaacs: creationix: i'd like to have a "deploying apps with npm" example soonish. there are two big features that it needs first, though, and i'm playing with this memory_bank server as an example. [03:13] isaacs: creationix: that's fine [03:13] isaacs: creationix: just name, version, bin [03:13] creationix: is bin an array? [03:13] isaacs: creationix: bin is a hash that maps the desired executable name to the file relative to the project root dir. [03:13] isaacs: creationix: and i can't tell you any more until i sign that CLA ;) [03:13] creationix: bin: {spark: "./bin/spark"} [03:14] creationix: lol [03:14] isaacs: if that was valid json, sure [03:14] creationix: ok [03:14] polotek: fyi, HasRealNamedProperty is the v8 equivalent of hasOwnProperty on the C++ side [03:14] isaacs: i have a feeling what you write might be exactly the same as what i just wrote. [03:14] isaacs: in which case, i'm going to claim that i contributed via ESP, and sue sencha [03:15] isaacs: (CLAs are just a little silly sometimes) [03:16] isaacs: creationix: shouldn't connect require spark? [03:16] creationix: isaacs: no, they are seperate technically [03:16] isaacs: ok [03:16] isaacs: module.exports = require('connect').createApp(require('./memory_bank')); [03:16] isaacs: ^ [03:16] isaacs: TypeError: Object # has no method 'createApp' [03:16] creationix: spark is part of the connect project [03:16] isaacs: i see [03:17] creationix: isaacs: need a newer connect [03:17] isaacs: publish dude! [03:17] creationix: can I push to npm, or does tj have to do it [03:17] isaacs: hrm. only one user per thing atm. i can add you manually, hold on... [03:17] creationix: ok, got a package for spark [03:17] creationix: npm publish ./ spark [03:17] creationix: or something like that? [03:17] isaacs: just "npm publish" [03:17] isaacs: when you'er in the root dir [03:18] creationix: ahh, the my npm is broke [03:18] creationix: just a sec... [03:19] creationix: isaacs: interesting npm warning bins installing to /Users/tim/ivy/ivy-bin, outside PATH [03:20] isaacs: creationix: yeah, if the binpath isn't in process.env.PATH, you get that warning [03:21] creationix: where does it get binpath [03:21] creationix: that's the path to my real node binary, but not the symlink in my path [03:21] isaacs: creationix: it defaults to where node lives [03:21] isaacs: creationix: but you can do this: npm config set binpath /where/ever/you/want [03:21] creationix: npm ! Error: Cannot insert data into the registry without authorization [03:21] creationix: I lost my config it seems [03:21] isaacs: creationix: npm adduser [03:22] isaacs: creationix: username: creationix, email tim at your domain [03:22] isaacs: creationix: and if you remember the password, then enter that, too :) [03:22] mjr_ has joined the channel [03:23] adrienf has joined the channel [03:23] creationix: now it says my password is wrong [03:23] kriszyp: nrstott: I suppose the next step would be to read the docs the included packages (pintura, perstore, tunguska, etc.) [03:24] isaacs: creationix: hold on, i'll blitz your user acct, and you can recreate it [03:24] voodootikigod__ has joined the channel [03:24] isaacs: ok, go nuts [03:24] creationix: isaacs: hmm, adduser worked, but I still can't publish [03:25] isaacs: creationix: what happens when you try to publish? [03:25] isaacs: creationix: timeout bs? [03:25] creationix: npm ! Error: Cannot insert data into the registry without authorization [03:25] isaacs: oh... hm... [03:25] isaacs: check your ~/.npmrc. there should be an "authCrypt" line in there, yes? [03:25] creationix: yep [03:25] isaacs: ohhh... kay [03:26] creationix: I really need npm integrated with Ivy [03:26] creationix: this should "just work" [03:26] isaacs: creationix: yep. [03:26] creationix: but that's impossible without rewriting ivy in node [03:27] isaacs: ivy should sit on top of npm. [03:27] isaacs: and use it [03:27] creationix: then it wouldn't be ivy anymore ;) [03:27] isaacs: but come with a nice self-installer [03:27] isaacs: sure it would. [03:27] mjr_: isaacs: is the homebrew install of node + npm totally broken right now? [03:27] isaacs: it'd be a bundle of things around npm [03:27] isaacs: mjr_: yes. [03:27] mjr_: I tried putting it on a couple of machines today, and it failed badly. [03:27] isaacs: mjr_: but they're working on making it good. [03:28] isaacs: mjr_: yeah. it's... not good. [03:28] mjr_: Then I tried adding npm manually to a homebrew node installation, and that, too, failed. [03:28] isaacs: mjr_: ye. [03:28] isaacs: yep [03:28] mjr_: multi-fail [03:28] isaacs: compile node. curl npm. they're both broken atm. [03:28] isaacs: (in homebrew) [03:28] isaacs: but adamv is working on it. [03:28] mjr_: ok, cool [03:29] isaacs: he's a smart chap. he'll get it figured out, i'm sure of it [03:29] isaacs: creationix: ivy could be a bundle that includes a few things: 1. built copies of node for your env, 2. npm, 3. a startup script that moves things into place for your env/path/etc. [03:30] creationix: maybe [03:30] creationix: isaacs: how do I specify a config file for npm? [03:30] isaacs: creationix: i do not recommend getting into the package management business. it is a dirty business, a black hole of people complaining to you about stuff not working. [03:30] isaacs: like that for instance ;) [03:30] isaacs: creationix: you put it at ~/.npmrc ;) [03:31] isaacs: creationix: but that's planned. [03:31] creationix: no way to override that? [03:31] isaacs: not atm [03:31] pquerna: isaacs: sounds like RPM :) [03:31] creationix: ok, I think I already have a ticket on this [03:32] isaacs: but i'm thinking this hierarchy of configuratorixes: {prefix}/etc/npmrc, {package}/.npmrc, ~/.npmrc [03:32] creationix: sounds good [03:32] isaacs: and, have ~/.npmrc configurable with a cli flag. [03:32] creationix: what's {package} [03:32] isaacs: creationix: the root of whichever package you're installing. [03:32] isaacs: creationix: but that might be overkill [03:33] jherdman has joined the channel [03:33] isaacs: but the thinking is to work basically like .gitconfig. so you can have one for the project, one for the user, and one for the system [03:33] creationix: that might work [03:34] isaacs: creationix: the issue is that i might do something like this in my package: registry = http://evil.com [03:34] isaacs: then when you do something with my package, it sends your auth info to an evil place. [03:34] creationix: yeah, that's no good [03:35] creationix: package configs need to be sandboxed to only mess with their stuff [03:35] isaacs: so maybe just global/user is enough [03:35] isaacs: global/user/cli [03:35] isaacs: also, i'd like to only make users have to worry about the package.json the vast majority of the time [03:35] isaacs: packages should bend to the user's whims, not the other way around. [03:36] isaacs: that's my problem with debian [03:36] isaacs: too religious [03:37] creationix: isaacs: https://gist.github.com/18032ee3efa5d553eea2 [03:38] isaacs: creationix: the world is broken. [03:38] isaacs: wtf, srsly [03:38] creationix: any idea? [03:38] tlrobinson has joined the channel [03:38] elliottcable: if (typeof(blueprint) !== 'undefined' && blueprint) for (key in blueprint) if (blueprint.hasOwnProperty(key)) [03:38] isaacs: npm config get username [03:38] isaacs: what's that say ^? [03:38] elliottcable: hell yeah, bracket omission [03:39] isaacs: elliottcable: <3 that. [03:39] creationix: creationix [03:39] elliottcable: isaacs 3» ikr [03:39] isaacs: elliottcable: reminds me of guards, the least insane thing about erlang. [03:39] elliottcable: and then alone on the following line [03:39] elliottcable: this[key] = blueprint[key] [03:39] elliottcable: isaacs 3» that reminds you of the *least* insane about erlang? [03:39] isaacs: hehe [03:39] elliottcable: isaacs 3» also, why aren’t you in ##Paws? :O [03:39] creationix: elliottcable: because we need him [03:39] hassox: isaacs: you don't like erlang? [03:40] elliottcable: creationix 3» “npm it worked if it ends with ok” whaaaa [03:40] isaacs: elliottcable: consider this: blueprint && Object.keys(blueprint).forEach(function (k) { this[key] = blueprint[key]}, this) [03:40] isaacs: er, function (key) even [03:40] elliottcable: isaacs 3» won’t work. [03:41] isaacs: ACTION likes erlang. just thinks it's crazy [03:41] elliottcable: isaacs 3» at least, the first part; blueprint may be *undefined* [03:41] elliottcable: sorry, *undeclared* [03:41] isaacs: elliottcable: ahhh [03:41] hassox: isaacs: anything in particular? [03:41] elliottcable: it’s some odd code :O [03:41] elliottcable: ACTION is sad that isaacs and creationix are boycotting Paws )-: [03:41] elliottcable: isaacs 3» scratch that; I just realized that by now blueprint is guaranteed to be declared if not defined. Thanks :D [03:42] zapnap has joined the channel [03:42] bmesh has joined the channel [03:42] elliottcable: as for Object.keys as opposed to `for…in`… hrm. [03:42] creationix: elliottcable: it's faster in node [03:42] ncb000gt has joined the channel [03:42] isaacs: elliottcable: it's just that i only have room in my mind for 3 languages. if i learn another one, i'll have to forget english, and then i'd have to speak to my gf in asl [03:42] elliottcable: I’m sold. [03:42] elliottcable: hahaha [03:42] creationix: not sure what runtime you're using [03:42] elliottcable: isaacs 3» you can totally squeeze another one in there :O [03:42] creationix: elliottcable: something about my node seems wonky [03:43] creationix: or I found a bug in your server [03:43] creationix: scratch that [03:43] creationix: isaacs: ^ [03:43] isaacs: orly? [03:43] elliottcable: although, mind you, I’m sad … I don’t want to get rid of that *awesome* line of code [03:43] elliottcable: I mean, seriously, if, for, if in one line? :D [03:43] isaacs: elliottcable: it's faster because the .forEach is only iterating over own properties [03:44] isaacs: elliottcable: for/in has to look up the whole prototype chain [03:44] JimBastard: english and javascript, thats all i speak now [03:44] elliottcable: yeah, makes sense [03:44] isaacs: elliottcable: and (as evidenced by the following if), that's not necessary [03:44] elliottcable: but… so sexy ;_; [03:44] isaacs: it is, it is. [03:44] isaacs: you'll get to use it again [03:44] isaacs: ;) [03:44] elliottcable: maybe [03:44] elliottcable: I’ll just leave that as a comment [03:44] elliottcable: :D [03:44] isaacs: creationix: try this: npm config set registry http://registry.npmjs.org/ [03:44] isaacs: (note the lack of httpS) [03:44] elliottcable: REAL PROGRAMMERS NEVER THROW AWAY CODE: THEY JUST COMMENT IT OUT. [03:45] isaacs: creationix: it's failing to upload even the initial doc [03:46] elliottcable: the other problem with forEach and keys is that I’ll have to wrap it in a function then :x [03:46] isaacs: creationix: nvm, i'm totally reproducing this. wtf? [03:47] elliottcable: inarru 3» I’m going to guess that this sucks :x [03:47] phiggins has joined the channel [03:49] isaacs: creationix: AHA! [03:49] isaacs: creationix: you're using the latest HEAD npm, aren't you [03:49] isaacs: ? [03:49] creationix: isaacs: yep [03:50] isaacs: thank you very much for that! this would have been a very pesky bug. [03:50] isaacs: fixing it now [03:50] creationix: yay [03:50] creationix: I just might use npm after all [03:51] creationix: still not convinced it's the way to go, but I'm getting closer [03:51] isaacs: don't judge it based on the bugs on its head [03:51] isaacs: ACTION applying lice shampoo.. [03:51] polotek: creationix: seriously? what's your beef with npm? [03:51] polotek: besides the lice [03:52] creationix: It's just not my style at all [03:52] creationix: nothing personal [03:52] creationix: I [03:52] creationix: I'm very much anti-dependence-on-tools [03:52] elliottcable: ;((From = function(blueprint){ super.apply(this, Array.prototype.slice.apply(arguments, [1])) [03:52] elliottcable: if (blueprint) Object.keys(blueprint).forEach(function(key){ this[key] = blueprint[key] }) }) [03:52] elliottcable: .prototype = (function(){var F;(F=new(Function)()).prototype=super.prototype;return new(F)()})()) [03:52] polotek: what alternative are you looking for? [03:52] elliottcable: .constructor=From [03:52] elliottcable: … ack >,< [03:52] elliottcable: sorry, guys [03:52] polotek: elliottcable: gist maybe? [03:53] creationix: polotek: I love how ivy works [03:53] elliottcable: polotek 3» heh, I didn’t mean to paste that in here, sorry [03:53] creationix: but it's not near as powerful as npm [03:53] elliottcable: I’m not a fan of npm either… [03:53] elliottcable: but everybody knows I just hate everything everywhere, so… eh. No biggie. [03:53] polotek: I love npm [03:53] polotek: simple, stays out of the way [03:54] creationix: it's quite opaque [03:54] elliottcable: it just uses require(), correct? [03:54] creationix: my installed stuff is hidden layers deep behind a hidden folder [03:54] elliottcable: can it be hacked externally to replace require() with something else? [03:54] creationix: elliottcable: I assume so [03:54] polotek: that's a minor thing though. once you know it's there it's no very different from it being directly in .node_libraries [03:55] polotek: plus if you're actively hacking on something you should just use link [03:55] polotek: and it'll stay in your source folder and just get linked in [03:55] creationix: maybe that's my problem [03:55] creationix: 99% of the libs I use are things I'm activly hacking on [03:56] polotek: npm link is your friend [03:56] creationix: nvm linklib is the same thing [03:56] creationix: and ivy has only "link" like capability [03:56] elliottcable: creationix 3» same here [03:56] polotek: creationix: what's the recommended way to install remote libs with ivy? [03:56] elliottcable: creationix 3» except it’s 100%, not 99% >,> [03:57] creationix: polotek: submodule add [03:57] creationix: and then run ./utils/relink [03:57] creationix: but it ignores package.json [03:57] polotek: creationix: so it depends on git right now [03:57] creationix: just assumes binaries are in /bin and libs are in /lib [03:57] polotek: not that that's bad. just haven't looked at ivy yet [03:57] creationix: polotek: very much [03:57] polotek: I like that npm lets me not care about modules that I'm not actively working on [03:58] isaacs: polotek: but creationix uses the creationix software stack... [03:58] isaacs: ;P [03:58] isaacs: so he cares about everything. he's very caring. [03:58] isaacs: creationix: speaking of caring, new npm on HEAD, just pushed to gh [03:58] creationix: isaacs: sweet, thanks [03:58] isaacs: creationix: you'll want to put an _ in front of your authCrypt setting in your .npmrc file. [03:59] isaacs: er, wait, actually, nvm [03:59] isaacs: it'll do that for you [03:59] polotek: valgrind reports lots of memleaks in node core [03:59] polotek: or v8 [03:59] polotek: hard to tell [03:59] jakehow has joined the channel [04:00] elliottcable: creationix 3» really? [04:00] elliottcable: creationix 3» you write all your own stack? [04:00] elliottcable: creationix 3» crap, you’re pretty much me. [04:00] elliottcable: cloudhead’s the same way; he and I are the only people we can agree with about everything, so we only really use eachothers’ code [04:01] isaacs: cloudhead's all over npm. he totally pwns the registry [04:01] isaacs: him and nrstott [04:01] nrstott: I try :) [04:01] isaacs: though there's like a 100 new things on there since last i checked, so who knows. [04:02] creationix: isaacs: still not working [04:02] creationix: should I delete my config file [04:02] elliottcable: heh [04:02] elliottcable: Alexis <3 [04:02] nrstott: I'm finally rewriting bogart to run on node.js [04:02] isaacs: creationix: still saying that you dont' have auth? [04:02] elliottcable: should I put my stuff on npm? [04:02] nrstott: so been packaging a lot for npm to support that [04:02] elliottcable: I have no idea how to do that [04:02] pquerna: ACTION hugs expresso + node-jscoverage [04:02] elliottcable: I’ve been away from Node since it was created… [04:02] creationix: isaacs: npm ! Error: 401 Could not create user Error: unauthorized Name or password is incorrect. [04:02] creationix: and I tried add user and got the same error [04:03] isaacs: creationix: um.. you're already there, though? [04:03] isaacs: creationix: you shouldn't have to adduser again [04:03] isaacs: oh, or... it's sending auth, but the wrong auth? [04:04] creationix: isaacs: I deleted my rc file and did adduser and publish without a problem [04:04] isaacs: creationix: oh, ok [04:04] isaacs: d [04:04] nrstott: is it wrong that I'm considering packaging nodules for npm [04:04] isaacs: nrstott: well, kriszyp should, really, since he's the owner [04:04] isaacs: but if he's ok with it, i don't mind, sure. [04:04] nrstott: I meant because its also a package manager ;0 [04:04] elliottcable: what? [04:05] derferman has joined the channel [04:05] isaacs: nodules is actually a really handy thing. plus, then you can just say that your app requires nodules, and then not worry about it, and be installable with npm but run nodules' module includer [04:05] elliottcable: … nodules? [04:05] elliottcable: I thought that was a typo [04:05] elliottcable: wtf is nodules [04:05] creationix: elliottcable: I like my stack [04:05] isaacs: elliottcable: it's a module loader that uses package.json files [04:05] creationix: elliottcable: another pm type thing [04:05] elliottcable: creationix 3» you’re using Node, you’re not hardcore enough yet :O [04:05] programble has joined the channel [04:05] nrstott: elliotcable, a package manager for node that implements mappings [04:05] elliottcable: creationix 3» I said ‘screw that,’ and wrote my own programming language. [04:06] creationix: elliottcable: yeah, I've got kids to play with [04:06] isaacs: nrstott: it's not properly a "package manager" [04:06] creationix: no time for that [04:06] dnolen has joined the channel [04:06] elliottcable: trade ’ya )-: [04:06] elliottcable: or you could just let *me* write it, and use it :D [04:06] nrstott: isaacs, what is the distinction [04:06] isaacs: nrstott: it runs at run time. it's a module loader. [04:06] nrstott: ok [04:06] elliottcable: Yeah, I wrote a module loader too [04:06] elliottcable: it’s better than require() )-: [04:06] nrstott: i stand corrected [04:07] elliottcable: I wish ryah’d’ve accepted it )-: [04:07] isaacs: nrstott: it also takes over the require() function. like, it's *literally* a module loader. [04:07] isaacs: nrstott: implements require.ensure, even [04:07] elliottcable: wait, isaacs, you made npm? [04:07] isaacs: elliottcable: yeah [04:07] nrstott: I just saw it as a way I could depend on the version of jack from dean instead of the one from 280north [04:08] nrstott: I love npm, as youve noticed, but mappings do seem useful in some scenarios [04:08] creationix: isaacs: ok, so I need to tag spark now? [04:08] isaacs: creationix: nah, that's old timey stuff. [04:08] isaacs: creationix: nevermind tagging. [04:08] elliottcable: isaacs 3» ah! [04:08] isaacs: creationix: tagging's for wussies. [04:08] creationix: isaacs: really? [04:08] isaacs: yeah [04:08] elliottcable: isaacs 3» so, npm is nothing to do with Node itself? Just a command-line packaging system? [04:08] isaacs: everything just installs @latest now [04:08] isaacs: elliottcable: yeah. [04:08] elliottcable: isaacs 3» i.e. it should work with a system that is completely incompatible with `require`? [04:08] isaacs: elliottcable: it's not official. just widely used. [04:09] polotek: isaacs: I think the @stable tag is still useful [04:09] elliottcable: isaacs 3» yeah, I know; heh [04:09] polotek: of course getting people to tag stuff never works [04:09] isaacs: polotek: npm config set tag stable [04:09] nrstott: isaacs, do you keep stats on package installations? [04:09] elliottcable: isaacs 3» I meant, it has no runtime; nothing is required of the code *in a package*? [04:09] isaacs: polotek: to go back to the old default [04:09] polotek: isaacs: yeah I know how to do it. saying it's useful [04:09] isaacs: elliottcable: nope. you could install anything with it. [04:09] elliottcable: is :D awesome [04:09] elliottcable: … is ** ^^ [04:09] isaacs: elliottcable: if you had a package.json, you could do npm install paws. [04:09] elliottcable: … wat the hell [04:09] creationix: isaacs: ok, now how about updating connect [04:09] isaacs: elliottcable: of course, npm itself runs on node. [04:10] isaacs: creationix: bump the version, and publish. [04:10] elliottcable: isaacs 3» I was more asking for Node libraries that aren’t compatible with the rest of the ecosystem (i.e. all of mine) [04:10] isaacs: nrstott: nope. i have log files from couchdb, but i don't parse them regularly [04:10] isaacs: nrstott: i figure one of these days, someone will care enough about that to write a munger for me. [04:10] creationix: isaacs: hmm, tj seems to have some magic scripts on his machine that do changelog and stuff [04:10] creationix: not sure I want to break that [04:11] nrstott: isaacs, im assuming the packages are stored as _attachments? [04:11] isaacs: nrstott: yeah, the tarballs are attached [04:11] isaacs: creationix: can you point me at a tarball, then, and i'll just install it that way? [04:11] nrstott: hm... yeah i guess parsing a log file would be the best way to do that. no good way to increment a count on access with couchdb [04:11] isaacs: creationix: like, i'm guessing this: http://github.com/senchalabs/connect/tarball/master ? [04:11] creationix: that should do it [04:12] isaacs: kewl, worked. still 0.2.2, but overwrote the old one [04:12] creationix: nice [04:12] polotek: anybody else in here maintaining a node C/C++ addon? [04:12] creationix: Ivy works great for my workflow where I write everything [04:13] creationix: but I don't think that will work for everyone [04:13] creationix: the packages all need to conform to the ivy format (very much like rubygem format) or it won't work [04:14] isaacs: creationix: hey, feature request for spark. would you prefer an issue or email or just irc? [04:14] creationix: issues [04:14] creationix: that way I don't lose it [04:14] isaacs: creationix: ^ you're more conservative than i am. [04:15] isaacs: kewl [04:15] isaacs: (re: packages need to conform) [04:15] isaacs: you just need to be in CA longer, liberal ya up a bit. [04:15] creationix: heh [04:16] nrstott: creationix, you use ivy with your node packages?! [04:16] creationix: isaacs: I assure you, I've seen your facebook group memberships, we're polar oposites [04:16] creationix: nrstott: yep [04:16] nrstott: _and_ you think ivy is like ruby gems?! [04:16] nrstott: I don't get you :) [04:16] creationix: nrstott: not hardly [04:16] creationix: it's convention for file structure [04:17] creationix: npm on the otherhand assumes nothing and gets all information from package.json [04:17] nrstott: yeah I know a little about Ivy... like that it sits ontop of Maven [04:17] nrstott: and that you have to write XML files [04:17] creationix: nrstott: different icy [04:17] creationix: *icy [04:17] creationix: *ivy [04:17] nrstott: ohhhh [04:17] nrstott: ok [04:17] elliottcable: creationix 3» what about you and I, or isaacs and I? *is curious* [04:17] nrstott: so not Apache Ivy [04:17] nrstott: what Ivy are you referring to? [04:17] creationix: nrstott: no [04:17] isaacs: npm lets you do anything. it's not only liberal, it's libertarian. [04:17] creationix: nrstott: http://github.com/creationix/ivy [04:18] isaacs: package management is the very definition of politics. [04:18] creationix: isaacs: yes, but at the cost that you have to buy into it's control [04:18] isaacs: creationix: no you don't. npm doesn't mind strangers. [04:18] _announcer: Twitter: "What ports do Node.JS was captured early Sugidaro ww JK" [ja] -- KOBA789. http://twitter.com/koba789/status/19310985150 [04:18] polotek: creationix: indeed, you can still install other packages/modules any way you want [04:18] isaacs: creationix: that is, you can have stuff in your node root that wasn't installed with it. [04:18] nrstott: ok creationix, for a minute I thought you were totally insane [04:18] isaacs: creationix: once its done installing something, it ducks out and you never hear from it again [04:19] polotek: I have another src folder of modules with no package.json [04:19] isaacs: ACTION has a "node_playground" project with nothing installable, just little one-off scripts [04:19] polotek: I just link that in with NODE_PATH [04:19] nrstott: I was imaginign a former hardcore Java developer drinking mountain dew while figuring out a way to make Java toolsets work with node ;0 [04:19] creationix: well, time to tuck kids to bed [04:20] isaacs: have fun! [04:22] _announcer: Twitter: "That just turned under nodeJS of git log, it is high degree of development of active ah!! From 1 to 2 weeks will release one version, 7 / 16 has been rushed to 0.1.101 ... about two days to change the bar 102 ...: Q http://plurk.com/p/6i71hb" [zh-TW] -- ericpi. http://twitter.com/ericpi/status/19311210907 [04:22] _announcer: Twitter: "I Node.js momentum coming out? What a classic Framework → How do I why switching from Ruby / Sinatra to Node.js http://bit.ly/cprH8o" [ja] -- Ken Nishimura. http://twitter.com/knsmr/status/19311223263 [04:22] JimBastard: okay, im trying out ivy now [04:26] adrienf: creationix: i'm working on a minimalist templating engine and came across grain, I was wondering what was the rationale behind data providers, could you shed some light on that ? :) [04:32] mikeal has joined the channel [04:33] polotek: adrienf: I believe creationix stepped away [04:33] polotek: might be back [04:35] visnup has joined the channel [04:35] creationix: I will [04:35] creationix: not yet [04:36] eely: Is there an Orbited equivalent for node.js? [04:36] mscdex: a wha [04:36] _announcer: Twitter: "So wait, if #nodejs is for the web server, what runs on the client browser?" -- Steven Soroka. http://twitter.com/ssoroka/status/19312112664 [04:37] mikeal: creationix: is Manning going to get a little more official with this book announcement or what? [04:38] creationix: mikeal: no clue [04:38] mikeal: btw [04:38] creationix: meh, kids don't want to sleep [04:38] mikeal: do you wanna write for ? [04:39] creationix: mikeal: sure, what's that? [04:39] mikeal: a javascript magazine [04:39] mikeal: michael kimsal runs it [04:39] mtodd has joined the channel [04:39] creationix: mikeal: sounds like fun to me [04:39] mikeal: he's an old friend [04:39] JimBastard: TypeError: Cannot call method 'split' of undefined at Object. (/Users/Marak/dev/ivy/examples/github/app.js:83:27) at pass (/Users/Marak/.node_libraries/connect/middleware/router.js:66:27) [04:39] JimBastard: any idea creationix ? [04:39] creationix: adrienf: wheat isn't exactely a framework, but an early attempt at a full app in node [04:39] JimBastard: im trying out ivy right now [04:40] creationix: JimBastard: cool [04:40] JimBastard: any idea about that error? [04:40] creationix: JimBastard: is that in tj's code? [04:41] JimBastard: it could be, ill debug it [04:41] creationix: JimBastard: yeah, not sure [04:41] adrienf: creationix: I was talking about grain (your templating spec/framework), not wheat [04:41] mikeal: creationix: sent [04:41] creationix: adrienf: any questions? [04:41] mikeal: he actually pays for contributions [04:41] creationix: oh, sorry [04:42] creationix: mikeal: awesome [04:42] mikeal: it's not a lot [04:42] adrienf: np, confusing names ;) [04:42] mikeal: but hey, it's more than nothing [04:42] creationix: mikeal: thanks [04:43] creationix: adrienf: what is a data provider [04:43] creationix: did I call them that? [04:43] dnolen has joined the channel [04:43] creationix: ACTION goes to read my own code from last week [04:44] adrienf: cf section Inversion of control [04:44] creationix: adrienf: ahh yes, the helpers [04:44] adrienf: yep [04:44] creationix: my thinking is that it simplifies the control flow syntax by being declarative [04:44] creationix: you simply state what you want [04:44] creationix: and the function takes care of it [04:45] adrienf: but it puts some “logic” in the template, right ? [04:45] creationix: adrienf: quite the opposite actually [04:45] adrienf: in fact, my question is more or less: do you allow those helpers to have arguments, or not? [04:45] creationix: adrienf: I leave it up to the language implementors [04:46] creationix: but if they don't allow arguments, then it's quite pure [04:46] creationix: and I don't think I've even enabled arguments [04:46] adrienf: in that case, i guess i'll conform to your API :) [04:46] creationix: not in the grain helper code [04:46] creationix: adrienf: what language are you writing? [04:47] adrienf: a really really minimal templating language with very few features [04:47] creationix: adrienf: did you see corn? [04:47] creationix: in the examples folder [04:47] creationix: maybe too minimal [04:48] wilmoore has joined the channel [04:48] adrienf: creationix: a first draft is here : http://github.com/afriggeri/node-swift [04:48] mjr_: polotek: why did you ask about maintaining C++ addons? [04:48] adrienf: but it's not async for the time being [04:49] adrienf: (and I know the code is ugly, but I *really* didn't want to use regex, would be an overkill) [04:49] polotek: mjr_: been looking for someone with the same problem as me [04:49] mjr_: polotek: what's your problem? [04:49] polotek: also been thinking about the best way to organize them [04:49] mjr_: I'm counting on npm being able to organize them for me. [04:50] polotek: well the original one I had I figured out [04:50] mjr_: Otherwise it's really awkward. [04:50] polotek: mjr_: I mean architecture really [04:50] creationix: adrienf: neat [04:50] polotek: right now libxmljs wraps everything up into one dynamic module [04:50] polotek: libxmljs.node [04:50] _announcer: Twitter: "@b_sted heroku is now offering experimental support. but if you want to try Node.js, any VM host + http://bit.ly/baFLC4 should do the trick" -- Kyle Simpson. http://twitter.com/getify/status/19312966297 [04:50] adrienf: creationix: thanks [04:51] polotek: I want to refactor it so there's only a small core C binding module [04:51] polotek: and then more stuff is written in js [04:51] polotek: using that base api [04:51] _announcer: Twitter: "Great video of the server side JS engine Node.js by its creator. Why you would use it, and live demonstrations - http://tinyurl.com/2blwtlu" -- 619Cloud. http://twitter.com/619Cloud/status/19313013465 [04:51] polotek: so essentially you can get at more of the code [04:51] cha0s has joined the channel [04:51] cha0s has joined the channel [04:51] isaacs: polotek: +1 to that idea [04:52] mjr_: Yeah, totally. [04:52] polotek: it would also make it easier to maintain [04:52] mjr_: Use native code just to bind JS things into C calls that you couldn't do from JS. [04:52] polotek: the way the v8 api is structured, all addon methods end up with a dual function structure [04:53] bpot has joined the channel [04:53] polotek: one is the public facing v8 method that takes an v8::Arguments object [04:53] polotek: and then you have to do all the ugly parameter checking there [04:53] _announcer: Twitter: "@b_sted once you have a VM host, a much simpler option than Node.js is my http://github.com/getify/BikechainJS -- very stripped down" -- Kyle Simpson. http://twitter.com/getify/status/19313113023 [04:53] _announcer: Twitter: "Also looking forward to pick up Node.js in Action. Nice job from #manning." -- JanVanRyswyck. http://twitter.com/JanVanRyswyck/status/19313117135 [04:53] polotek: then you pas sit off to a lower function that takes C/C++ data types as parameters [04:53] polotek: and that does all the work [04:54] mscdex: lol a neighborhood node competitor! [04:54] mjr_: What about that doesn't seem right to you? [04:54] polotek: I would instead like for that first function to be as small as possible. Pull the params out of Arguments and pass them directly into the lower function. [04:54] polotek: do the actual parameter checking in js [04:54] mjr_: oh right [04:54] mjr_: mscdex: they have node in Ohio? [04:55] isaacs: creationix: dude, i've got a memory_bank npm package that restarts now. this is badass. [04:55] creationix: awesome [04:55] mscdex: mjr_: no, i meant "BikechainJS" ... it's based on V8 too [04:55] mjr_: mscdex: oh, that makes more sense than node in Ohio. [04:55] mscdex: haha [04:55] creationix: I think the memory_bank example is actually a pretty good server too [04:56] isaacs: creationix: if spark could start/stop based on a key, it'd be even more fantabulous [04:56] isaacs: creationix: but i really should figure out a way to deal with that smartly in npm [04:56] hassox: isaacs: what's memory_bank? [04:57] isaacs: hassox: http://howtonode.org/deploying-node-with-spark [04:57] isaacs: hassox: right next to the giant picture of tim's face. [04:57] creationix: ok, time to tuck kids in again, maybe this time it will work [04:57] creationix: isaacs: hopefully you're still around when I get back [04:58] mjr_: creationix: you gotta get some bigger avatar images on howtonode. Seriously, I can hardly see that one. [04:58] jakehow has joined the channel [05:00] polotek: mjr_: do you have an addon? [05:00] mjr_: polotek: yeah, node_pcap is mine. [05:00] _announcer: Twitter: "@ssoroka depends what you're doing. Nothing, js that hits your node API, the browser's websockets implementation, etc" -- Daniel Jackoway. http://twitter.com/jackowayed/status/19313534671 [05:00] mjr_: My C++ layer does absolutely the minimum. [05:00] mjr_: But it does do arguments sanity checking. [05:01] polotek: word [05:01] polotek: do you have to handle internal references at all? [05:01] mjr_: you mean V8 objects created in C++, and then refered to elsewhere in C++? [05:02] bpartridge has joined the channel [05:03] mjr_: I don't know what I'm doing on the C++ side, mostly with the V8 things. I just kind of cobbled that part together based on looking at other people's code. [05:04] mjr_: There is a pretty awesome multi language stack that happens though: http://github.com/mranney/node_pcap/blob/master/pcap_binding.cc#L32-39 [05:04] polotek: mjr_: hehe [05:04] polotek: libxmljs isn't originally mine [05:04] satori_: mjr_: worked for me [05:04] polotek: so I started there [05:04] polotek: learned a lot about v8 the last few months [05:04] mjr_: V8 seems super badass. [05:04] polotek: still have one major issue in libxmljs though [05:04] polotek: right now it's *patched* [05:04] polotek: but I need a more elegant solution [05:05] mjr_: Like, way better than they needed it to be for just the JS engine in a web browser. [05:05] satori_: trying to deal with classic c++ OO and js prototype OO at once can be a headfuck [05:05] polotek: mjr_: there's a bunch of crazy code in v8 [05:05] polotek: it's fairly well organized too [05:06] mjr_: satori_: yeah, it is pretty crazy. Try following the path of an node http server from lib/http.js, all the way down into the super bit twiddly state machine of deps/http_parser. [05:06] satori_: heh. yeah been down that path. [05:06] satori_: while trying to learn c++ and v8 too [05:07] mjr_: That sounds exciting. [05:07] polotek: mjr_: incorrect [05:07] polotek: C/C++ sucks [05:07] polotek: I don't know why anyone would do it on purpose [05:07] polotek: :p [05:07] mjr_: I don't mind C, but I've been burned so many times now by C++. [05:07] satori_: hehe. Yeah, I never understood the vitriol for c++ until I started using it. [05:07] mjr_: But if you want to wring every last bit of performance out of a computer, C can be a reasonable thing. [05:08] polotek: C++ actually isn't that bad [05:08] satori_: My bg is with window and c#. I assumed it would be more or less the same with c style syntaxx.........wrong. [05:08] polotek: until you add in templates [05:08] polotek: then you're effed [05:08] mjr_: I didn't realize that there was such big community of C++ haters. Here I was suffering all these years in isolation. [05:09] satori_: other languages manage to use templates ok. But c++ template voodoo is beyond me still. too damn meta [05:09] mjr_: ACTION flips off templates [05:09] polotek: I don't mind c#. If it wasn't tied to MS crap it would be a decent replacement for java [05:09] ncb000gt: polotek: C# is the same thing as Java [05:09] satori_: well MS took everyone elses best ideas when they were behind the game [05:09] ncb000gt: it just runs on the clr [05:09] polotek: satori_: take a look in libxmljs. I had to learn that shit [05:09] satori_: I have already :P [05:10] satori_: I looked at *everyones* binary addons. [05:10] satori_: :) [05:10] mjr_: heh [05:10] _announcer: Twitter: "Node.JS try to force the source to play around with building building it does not pass" [ja] -- KOBA789. http://twitter.com/koba789/status/19314138288 [05:10] mjr_: The docs for writing an addon are... sparse. [05:10] satori_: I agree with what you guys were saying before... re: simple c++ bindings, and API done in js [05:10] JimBastard: !tweet @koba789 #node.js irc.freenode.net [05:10] satori_: I have gone down that route too. [05:11] mjr_: That's why I love writing programs for node so much. Writing JS code that can interface with system stuff is a fantastic abstraction. [05:11] mjr_: It's just fun. [05:11] eely has joined the channel [05:12] polotek: ncb000gt: yeah that's what I meant [05:12] polotek: if it wasn't made by MS C# would be alright [05:12] satori_: Yeah. Honestly c# is ok. Visual Studio is a superior IDE on windows too. [05:13] polotek: mjr_: I was hoping somebody more qualified than me would contribute some docs on addons to the community [05:13] polotek: but looks like it might have to be me [05:13] satori_: but it doesn't generate any excitment for me [05:13] mjr_: polotek: How many total people are there who have written node binary addons? 10? [05:14] polotek: it's on my long list of node stuff to do [05:14] pquerna: i owe some docs on it [05:14] satori_: I am not confident enough with my knowledge to write any docs. I have learned heaps by reading everyone elses code and writing my own, but I am probably making embarassing elemenary mistakes too. [05:14] polotek: satori_: where's your lib? [05:15] mjr_: pquerna: I nominate you to write the docs [05:15] pquerna: great [05:15] mjr_: Then it's settled. [05:15] satori_: http://github.com/satori99/node-udt ... git version is broken atm....I haven't pushed anything for ages actually. [05:15] polotek: what's the last stable version? [05:16] satori_: I have it working, but mytifying stuff is still happening. I need to learn how to debug properly instead of using puts and printf's everywhere [05:16] polotek: "Status: Currently Broken Again" [05:16] polotek: heh [05:16] satori_: Don't really have a stable. Haven't realeasd anything yet. [05:16] polotek: satori_: gdb is your friend [05:16] satori_: yeah.... learning all about it. [05:16] polotek: it's a pain in the ass. but it's invaluable [05:16] satori_: What IDE do you use for c++ node stuff? [05:17] polotek: none. anything other than emacs makes me want to smash my keyboard [05:17] satori_: I am working mostly under windows 7 with notepad++ and using a centos vm with ssh.... [05:17] satori_: debuging is not simple without an IDE. [05:17] ncb000gt: satori_: the udt stuff seems interesting. i'll probably have a project, down the road, that could use it. [05:18] ncb000gt: assuming i get around to said project. [05:18] polotek: ncb000gt: then you should help him fix it [05:18] ncb000gt: there are so many [05:18] ncb000gt: polotek: see my statement about "so many projects" [05:18] satori_: I think I have memory leak issues.... not something I have ever had to deal with in .NET land. [05:19] ncb000gt: you can produce memory leaks in any language...it's just easier in C/C++ [05:19] polotek: way easier [05:19] ncb000gt: :) [05:19] polotek: valgrind --tool=memcheck --leak-check=full --show-reachable=yes node test.js [05:20] polotek: valgrind is also awesome [05:20] ncb000gt: win [05:20] ncb000gt: yes it is [05:20] satori_: I knwo about it, but haven't used it yet. One more thing to learn about. [05:20] JimBastard: ncb000gt: you coming up on sat? [05:20] satori_: Honestly I thought this would be sooo much easier... [05:20] ncb000gt: I used valgrind to debug an apache module a while ago [05:21] ncb000gt: JimBastard: can't make it, headed out this upcoming week on vacation and have to prepare for it [05:21] ncb000gt: wish i could tho [05:21] ncb000gt: polotek: did you decide to go up? [05:21] polotek: satori_: what gave you that impression :) [05:21] polotek: there's a reason dynamic languages have become so popular [05:21] polotek: ncb000gt: yeah most likely going up [05:21] satori_: Well I am not a programming newb, I understand JS and classic OO, I know the theory.... thought it would be a matter of learning some syntax and off you go :P [05:21] ncb000gt: JimBastard: what do you guys have planned? drinking, pillaging, and node? [05:22] JimBastard: its usually quicker to code in a dynamic lang [05:22] polotek: JimBastard: is barbecuing [05:22] JimBastard: ncb000gt: EPIC BBQ [05:22] ncb000gt: fuck [05:22] JimBastard: im not bbqing, we going to this insane spot [05:22] ncb000gt: ... [05:22] _announcer: Twitter: "Pictures on howtonode.org not big enough? Use this handy bookmarklet! http://gist.github.com/487051 #nodejs #havingtoomuchfunwiththis" -- Ⓘⓢⓐⓐⓒ. http://twitter.com/izs/status/19314817362 [05:22] polotek: JimBastard: ah, word [05:22] JimBastard: http://www.hillcountryny.com/menu.php [05:22] JimBastard: i think i posted [05:23] pdelgallego has joined the channel [05:23] satori_: The things I thought would be hardest turned out to be the easiest. That is making the UDT sync API methods async. [05:23] polotek: oh, nice [05:23] ncb000gt: polotek: that's cool, enjoy and bring stories. I told @thegreatape you were probably going up there. not sure he'll un-hermit himself and go tho. [05:23] polotek: satori_: are you using eio_custom? [05:23] ncb000gt: JimBastard: sounds delicious. [05:24] mjr_: isaacs: I love your problem solving attitude, but how do I turn that URL into a bookmarklet? [05:24] tk: whose evers crazy idea it was to push the version to .100.... very annoying :P always makes me think make didnt build the latest version [05:24] isaacs: mjr_: new bookmark: paste that into the "url" section [05:24] satori_: yeah.... but I'm using it with ev_async_send() and pthread locking primitives so I don;t need to exit the thread to get result [05:24] polotek: tk: I totally called it [05:25] ncb000gt: tk: you can probably blame the BDFL [05:25] polotek: everyone was all excited after 0.1.99 [05:25] tk: polotek: heh [05:25] polotek: I was like we're not ready for 0.2.0 and semver will destroy everyone's hopes and dreams [05:26] polotek: mscdex: ping [05:26] mscdex: polotek: pong [05:27] polotek: looking at your libxmljs bug [05:27] polotek: about text [05:27] polotek: from a looooong time ago [05:27] mscdex: ACTION looks [05:27] mscdex: 6? [05:28] polotek: http://github.com/polotek/libxmljs/issues#issue/7 [05:28] mscdex: oh [05:29] mscdex: yeah? [05:29] jakehow has joined the channel [05:30] polotek: yeah, have you come across it lately? [05:30] polotek: I assume so since I haven't fixed it :) [05:30] polotek: but what are you doing for a work around? [05:31] mjr_: isaacs: I can't manage to install that in Safari, but in Chrome it works like pure fucking magic@ [05:31] mjr_: ! [05:31] isaacs: heheh [05:31] isaacs: cuz... that's a real problem! [05:31] isaacs: sometimes i can barely see the headshot [05:31] mjr_: I know, seriously [05:32] Neil__ has joined the channel [05:32] nj_dancer has joined the channel [05:32] mscdex: polotek: i admittedly haven't used libxmljs much since that time. i mainly whipped that xml2json script up for someone who was looking to convert some data [05:32] creationix: isaacs: that bookmarklet is scary [05:33] nj_dancer: hey guys when using child_process.exec can you pass the env in through the options hash? [05:34] polotek: mscdex: word [05:34] nj_dancer: actually sorry its arguments i need to pass in but the same question applies [05:35] _announcer: Twitter: "The good callback function does not contain the functions of the old road. Should be registered as an event in itself. http://ow.ly/2eP8S # nodejs" [id] -- Teman Macet. http://twitter.com/temanmacet/status/19315530910 [05:35] mscdex: polotek: i think libxmljs users are most concerned about the memory errors though [05:35] polotek: mscdex: I know. which is unfortunate because they are bogus [05:36] polotek: they don't do anything [05:36] mscdex: i know [05:36] maqr: polotek: i thought one of the issues said it actually was leaking, in addition to those errors? [05:36] mscdex: but they don't when they pick it up for the first time [05:36] mscdex: :-\ [05:36] polotek: maqr: yeah there are still a few leaks [05:36] polotek: but nothing drastic [05:36] maqr: btw, sax-js seems very fast also [05:36] maqr: isaacs's lib [05:37] polotek: haven't looked at it [05:37] polotek: isaacs is way smarter than me so I'm not surprised [05:37] satori_: most of this channel is smarter than me! [05:37] polotek: I wish I could get rid of the memory errors [05:38] polotek: but right now I don't see a way [05:38] ncb000gt: JimBastard: do you know when the next node meetup in NYC is going to be? [05:38] JimBastard: ncb000gt: end of month [05:38] JimBastard: 30th i think [05:38] JimBastard: then we doing something for nodeknockout [05:38] ncb000gt: usually at the end of the month? [05:38] ncb000gt: cool [05:39] creationix: isaacs: still there? [05:39] isaacs: creationix: yep [05:39] ncb000gt: polotek myself and a couple others are doing a project for node_knockout [05:39] ncb000gt: down here in VA [05:39] maqr: polotek: what actually causes those errors? i don't see why you can't just hack it out [05:39] creationix: isaacs: what were you saying about keys and spark? [05:40] isaacs: creationix: so, i want to be able to start spark, and have it run in the background. [05:40] isaacs: creationix: then, i want to restart that server that i started [05:40] creationix: ahh, tj originally started down that path [05:40] creationix: but node doesn't background well [05:40] polotek: maqr: [05:40] polotek: so I had to enable memory tracking function in libxml2 [05:40] creationix: so we removed the functionality [05:40] isaacs: creationix: i've got it working fine; [05:40] polotek: so at any given time I can ask it how much memory is currently allocated [05:41] isaacs: but it's a bash script that echoes $! into a pid [05:41] polotek: because I need to pass that info to v8 [05:41] creationix: isaacs: wrapped it? [05:41] polotek: see my blog post for a longer explanation of why [05:41] polotek: http://marcorogers.com/blog/06-17-2010/updating-libxmljs-for-nodejs-or-how-to-suck-less-at-google-v8 [05:41] polotek: But anyway [05:41] isaacs: creationix: http://gist.github.com/487067 [05:41] isaacs: yeah [05:41] maqr: polotek: so the error is actually in libxml2? [05:41] polotek: those memory tracking functions are what spit out the memory errors [05:41] creationix: isaacs: oh, that's clever [05:42] creationix: I like [05:42] polotek: maqr: I'm sure there is a reason for them at a lower level. But the mailing list says "don't worry about it" [05:42] isaacs: creationix: so, what i want to do is to hook *npm* into upstart (or whatever is appropriate for that env) [05:42] creationix: that would be neat [05:42] isaacs: creationix: and then any thing that you "npm start"ed, will be started up again when the machine starts [05:43] creationix: very cool [05:43] maqr: polotek: you can't like redirect stderr or something? [05:43] polotek: and I can't catch them because they only happen when the libxml context is unloaded [05:43] isaacs: creationix: so, here's the thing... and i think this might be a bit of the reason why you're not sold on package managers... [05:43] polotek: maqr: how am I supposed to d that on someone else's system :) [05:43] isaacs: creationix: everyone at yahoo using yinst for almost everything that is installed on every server. that is not an exaggeration. [05:43] maqr: polotek: well your code is C, right? [05:44] isaacs: creationix: including your own programs. it's simple, and gives you all these huge benefits for free. [05:44] pquerna: hmm. there isn't an expanduser is there? [05:44] polotek: yeah [05:44] isaacs: creationix: and if you publish your package, you can install it on production servers, do dependency resolution with circular links, browse the source, etc. [05:45] isaacs: it's frickin amazing. ask any yahoo, and the'll tell you that yinst blows every other package manager out of the water. [05:45] maqr: polotek: do you know where in the source it's happening? just so i can take a quick peak at it [05:45] creationix: isaacs: and that's why I don't like package managers? [05:45] isaacs: you put any other package manager next to yinst, it's like comparing notepad to vim [05:45] maqr: isaacs: it's not public? [05:45] isaacs: nope. [05:45] polotek: maqr: it's not in my code. it's in the bowels of libxml2 [05:45] polotek: which I don't touch [05:46] isaacs: creationix: i think you don't like package managers because you see them as an impediment to development that is only worthwhile in teh case of publication, because that is what the open source communities tend to make of package managers. [05:46] creationix: isaacs: I'll be convinced when it both fits my workflow and and workflow of people using my libraries [05:46] isaacs: creationix: exactly! [05:46] maqr: polotek: nothing in particular seems to cause it? just starting up? [05:46] isaacs: the goal of a package manager should be to make almost every workflow possible, and even easy [05:47] creationix: sounds good to me [05:47] isaacs: and everythign that you alwasy need should be trivial to hook in. [05:47] isaacs: like starting a server. i mean, come ON. you shouldn't have to write extra code to tell your server to stay alive. [05:47] mjr_: let's all hold hands and sing a song now. [05:47] polotek: maqr: http://github.com/polotek/libxmljs/blob/master/src/libxmljs.cc#L160-161 [05:47] maqr: isaacs: i just learned how to use inotify today, and it is neat :P [05:47] polotek: those are the only two lines that are relevant [05:47] isaacs: like, upstart is great, but... still. [05:47] isaacs: the pm should do that for you [05:47] isaacs: (if it can) [05:48] creationix: I really like the idea of self contained folders that just work [05:48] isaacs: totally [05:48] creationix: that's one next step for right [05:48] isaacs: that's planned. [05:48] polotek: those two lines make this function work [05:48] polotek: http://github.com/polotek/libxmljs/blob/master/src/libxmljs.cc#L138-142 [05:48] creationix: I know that osx does crazy stuff behind the scenes, but for the most part, you just drop an app in /Applications and it's installed [05:48] _announcer: Twitter: "Going to work on Node.js integration with our application this weekend....seriously looking forward to it." -- GiveFoo. http://twitter.com/givefoo/status/19316270077 [05:48] isaacs: creationix: in some cases, yeah [05:48] maqr: polotek: hmm, i wonder if you can somehow suppress output from those functions [05:49] isaacs: creationix: a LOT of programs come with package that gets run [05:49] creationix: things that install "frameworks" [05:49] isaacs: creationix: that's only when a program has its dependencies included, which not all do [05:49] polotek: maqr: it doesn't happen on those functions [05:49] isaacs: or if it has to hook into system stuff [05:49] polotek: those functions just enable the memory tracking [05:50] polotek: the errors only output when the program exits [05:50] creationix: isaacs: yes, but node libraries are likely quite small in terms of drive space [05:50] polotek: when the libxml context is unloaded [05:50] polotek: which I have no control over [05:50] creationix: including the version you need inline is great then [05:50] maqr: polotek: are you sure there's no way to control that? i mean, you are including the library and linking against it [05:50] maqr: polotek: i suspect you can control that [05:50] isaacs: creationix: that's why i have a plan to do something like "install that thing at this location" [05:51] isaacs: creationix: you can *kind* of do that now, actually. [05:51] polotek: maqr: oh I can [05:51] polotek: but I shouldn't [05:51] polotek: because it stays alive until node exits [05:51] isaacs: creationix: mkdir deps; cd deps; npm install spark --root $(pwd) [05:51] maqr: polotek: oh no, you shouldn't, of course... but you could [05:51] polotek: the only place it might be safe to manually unload the context is in the "exit" event [05:51] isaacs: er... npm install connect --root $(pwd) [05:51] creationix: isaacs: something like that [05:51] maqr: polotek: i just meant to redefine stdout and stderr... they should never be outputting anything anyway, right? [05:51] polotek: but I'm don't want to eat the stderr in that function [05:52] _announcer: Twitter: "@getify Does it count if I have Node.js installed on a VM? It's next in my list, but I need to find a project to build it." -- Peter Wooley. http://twitter.com/peterwooley/status/19316447249 [05:52] polotek: cause it may not all be my output [05:52] isaacs: creationix: if it didn't use absolute urls :) [05:52] isaacs: creationix: because that's kind of a dealbreaker atm. [05:52] creationix: yeah, it will get there [05:52] polotek: maqr: not true [05:53] polotek: console.error and console.warn output on stderr [05:53] polotek: and sys.debug [05:53] maqr: polotek: i mean from libxml [05:53] polotek: maqr: clearly I'm not following your point [05:53] maqr: polotek: your module should be able to output to stdout and stderr, but if you could squelch libxml2 itself from outputting to those, would that be a temporary solution? [05:55] creationix: wow, console.assert, when did that get added [05:55] creationix: still console.log, console.error, and console.dir are my favorites [05:56] tyfighter has joined the channel [05:57] polotek: maqr: perhaps [05:59] creationix: g'night everyone [05:59] creationix: long day of node coding tomorrow [05:59] maqr: night creationix [05:59] maqr: :) [06:00] polotek: maqr: the libxml api is massive [06:00] polotek: if I could find a function to replace the stderr pipe maybe I could do something [06:00] maqr: polotek: that's what i was thinking [06:01] maqr: polotek: btw, does it still do this with the master libxml? [06:01] maqr: from their git [06:03] polotek: maqr: I'm using the latest stable [06:03] polotek: can't imagine they've fixed it recently [06:03] _announcer: Twitter: "at node.js:253:10" -- elliottcable. http://twitter.com/elliottcable/status/19317064968 [06:03] maqr: polotek: hmm, i'm looking at the source now [06:07] tk: hmm what is the more common used websocket impl in Node right now? [06:07] polotek: tk: node-websocket-server or socket.io [06:07] polotek: heard good things about both [06:08] maqr: polotek: hmm, it all seems to go through xmlGenericError [06:10] holydevil has joined the channel [06:12] polotek: I haven't gone into libxml code very much at all [06:12] polotek: there be dragons [06:12] polotek: I have a dumb nagging feeling that those errors are actually valid memory leaks in my code though [06:12] maqr: polotek: heh, any idea why libxml is even tossing thosee errors out? other than wanting to suppress them? [06:13] maqr: yeah, i was gonna say, is that possible? :/ [06:13] polotek: well maybe not in my code [06:13] polotek: but I'm not handling the libxml initializers correctly [06:13] polotek: they bring out even if I run a test script that doesn't do anything but load libxmljs [06:13] polotek: bring = print [06:15] jbr has joined the channel [06:15] maqr: polotek: i'm gonna build libxml from their master and give it a poke [06:17] polotek: maqr: please do. I always appreciate input [06:18] maqr: compiling libxml now :) [06:19] ddollar has joined the channel [06:22] Dmitry has joined the channel [06:23] _announcer: Twitter: "Got node.js working with the new Facebook SDK & Canvas; deployed on Dreamhost PS. Can't tell you how much fun I have working w/ node.js...!" -- Clint Andrew Hall. http://twitter.com/clintandrewhall/status/19318060101 [06:26] JimBastard: !tweet @clintandrewhall go go node.js! [06:26] micheil has joined the channel [06:26] satori_: Watching node get more popular with every passing hour is quite interesting. [06:27] satori_: I haven't seen this happen up close b4 [06:27] elliottcable: um [06:27] elliottcable: odd. [06:27] maqr: satori_: same :) [06:27] elliottcable: I’m using Script to evaluate some code [06:28] elliottcable: but `console` isn’t available inside that code [06:28] elliottcable: where is `console` defined, and how is it made available to Node code? [06:28] elliottcable: I checked `Module.prototype._compile` where some other stuff like `require` is made available [06:28] elliottcable: but… no luck [06:29] satori_: elliottcable: don't you have to pass your own global objects when using scripts? [06:29] elliottcable: satori_ 3» I know, right? [06:29] satori_: r u using runInNewContext? [06:29] elliottcable: satori_ 3» when I found Node, the room had 20 people, and the version number was still sane [06:29] elliottcable: satori_ 3» and now … this, lol [06:29] satori_: hehe [06:30] elliottcable: satori_ 3» you don’t have to, but I am… [06:30] elliottcable: satori_ 3» point is, I’m trying to figure out where it gets added to the global object in normal Node [06:30] satori_: ahh k [06:30] satori_: I went down that route when I was experimenting to see if I could embed scripts in a binary addon in the same way node does... [06:30] elliottcable: Node code is compiled the exact same way [06:30] elliottcable: but I can’t figure out where… [06:31] satori_: I gave up because i couldn't work it out either [06:31] elliottcable: giving up? [06:31] elliottcable: blasphemer!! [06:32] satori_: It was a case of over-engineering for me :P [06:32] satori_: I just wanted to see if I could do it. [06:33] satori_: Well, actually i thought It might make more sense to have a single binary file instead of having an addon plus a js lib. [06:33] satori_: I assume i ran into similar prblems to you [06:34] elliottcable: arrgh [06:34] nicholas__ has joined the channel [06:35] elliottcable: ryah 3» awake? [06:39] _announcer: Twitter: "Node.js, you are silly but I like you." -- TD Mackey. http://twitter.com/tdmackey/status/19318848870 [06:39] mscdex: lol ^ [06:40] elliottcable: mscdex 3» wat [06:40] mscdex: that tweet [06:40] elliottcable: which tweet? [06:40] mscdex: <_announcer> Twitter: "Node.js, you are silly but I like you." -- TD Mackey. http://twitter.com/tdmackey/status/19318848870 [06:40] satori_: lol. node.js - Like crack cocaine for programmers. [06:40] elliottcable: ah, I have _announcer on ignore [06:40] satori_: they all get hooked [06:40] rgl has joined the channel [06:41] maqr: !tweet @tdmackey hey you! we're not silly! #freenode #nodejs [06:41] mscdex: man i really hate debugging growisofs output... it means wasting a dvd every time something goes wrong [06:42] maqr: mscdex: eh? virtual drives don't cut it? [06:42] mscdex: there is no virtual burner driver for linux [06:42] satori_: really? [06:42] mscdex: only virtual dvd/cd-rom [06:42] maqr: mscdex: just write in test mode? [06:42] maqr: you can make the drive do the exact same thing with the laser off [06:42] mscdex: there is no test mode, onl "-dry-run" which does everything up to writing [06:43] elliottcable: this is an impossibly awesome list [06:43] elliottcable: http://stackoverflow.com/questions/500607/what-are-the-lesser-known-but-cool-data-structures [06:43] maqr: hmm [06:43] mscdex: s/onl/only [06:43] muhqu has joined the channel [06:43] maqr: polotek: heh, well, i made the errors go away [06:44] maqr: mscdex: what burning software? [06:44] mscdex: maqr: growisofs... heh [06:44] polotek: elliottcable: did you figure out your console problem? [06:44] polotek: maqr: do tell [06:44] maqr: mscdex: oh i see, i thought that was just for building isos [06:44] elliottcable: polotek 3» no [06:44] elliottcable: polotek 3» )-: [06:44] maqr: polotek: i compiled libxml2 --with-mem-debug and suddenly no more errors [06:44] mscdex: growisofs burns isos, but it passes options to mkisofs underneath too [06:45] elliottcable: polotek 3» I’ve poked around everywhere, I can’t figure out where console gets defined and exposed to the user’s code! o) [06:45] pdelgallego has joined the channel [06:45] maqr: polotek: i was expecting more errors, you know, like debugging errors, but i actually get no errors now [06:45] mscdex: elliottcable: it's in src/node.js [06:45] polotek: what does that flag do? [06:45] elliottcable: ah, I was grepping under lib/ [06:45] maqr: polotek: makes your errors go away, but other than that, i'm not sure... [06:45] polotek: elliottcable: node/src/node.js [06:45] polotek: grep for console. it's pretty basic [06:46] elliottcable: mscdex 3» how can it get exposed to the user that way? Nothing in the node.js namespace is exposed to the programmer unless lib/module.js exposes it, so I don’t see how it gets *exposed*… [06:46] polotek: the reason you can't find it when compiling is because compiling gets a new clean context [06:46] mscdex: it's attached to the global object isn't it?.... *checks* [06:46] maqr: polotek: it says it "adds the memory debugging module" [06:46] maqr: polotek: so, i was expecting more debugging info, to try and trace this... but it actually seems to have suppressed any error [06:46] mscdex: elliottcable: yep... global.console.* [06:46] polotek: maqr: awesomely vague [06:47] elliottcable: mscdex 3» … what the hell [06:47] maqr: polotek: yea, i'm thoroughly confused, but hey, it's something :) [06:47] elliottcable: I copy everything from `global` into my object… [06:47] elliottcable: I can’t understand why it wouldn’t be available [06:47] mscdex: ACTION shrugs [06:47] polotek: global.console does nothing for me [06:48] polotek: oh [06:48] polotek: I bet they're all unenumerable [06:48] maqr: polotek: also where does the NDEBUG define come from in your code? i'm a little confused how scons is getting that [06:48] polotek: stuff on global I mean [06:49] elliottcable: polotek 3» :O [06:49] polotek: it's too late for me to find it [06:49] maqr: elliottcable: console.log( sys.inspect(global, true)) ? [06:49] elliottcable: hold on [06:49] elliottcable: yeah that was it polotek [06:49] elliottcable: now I have to figure out how to enumerate those anyway… [06:49] elliottcable: for..in I suppose [06:50] polotek: elliottcable: nope. you'll have to inspect the property descriptors I think [06:50] polotek: non enumerable is specifically designed to defeat for..in [06:51] maqr: polotek: btw, there's seriously like 3000 lines of code in the C bindings... i hope some of this is autogenerated, it's huge [06:52] elliottcable: polotek 3» … arghm but for..in works on `global` in module.js ;_; [06:52] elliottcable: they must mark the m as non-enumerable *after* that… [06:52] elliottcable: ACTION cries quietly [06:52] elliottcable: programble 3» property descriptors? [06:52] programble: grr [06:52] programble: wut [06:52] satori_: v8voodoo [06:52] elliottcable: v88d88 [06:53] satori_: :) [06:53] elliottcable: the new official term for v8 magics. [06:54] maqr: i think i'm finally comfortable enough with node to start on a web project, that will begin tomorrow :) [06:56] tisba has joined the channel [06:56] polotek: maqr: use libxmljs. tell me if you run into issues [06:56] satori_: Anyone looking for a team member or project partner? [06:57] satori_: I need external motivation to actually finish things instead of experimenting all the time [06:57] elliottcable: ahhhh libxmljs [06:57] elliottcable: what was it I wrote using libxmljs… hmm… [06:57] elliottcable: I think I started on an XMPP server? or parser? or something? [06:57] elliottcable: it was neat :D [06:57] maqr: polotek: when i'm more awake, i'm going to take another look at it, something is very confusing about libxml :) [06:57] elliottcable: libxml ain’t *that* bad :3 [06:58] elliottcable: the stream parsers were especially intuitive and useful [06:58] elliottcable: (that’s mostly what I used) [06:58] polotek: elliottcable: there's no way to get the full list of properties including non enumerable [06:58] polotek: at least I can't find it [06:58] polotek: you can do it in v8 [06:58] polotek: but you'll have to write a little addon ;) [06:59] elliottcable: :X [06:59] elliottcable: unacceptable for this task [06:59] elliottcable: argh! [06:59] elliottcable: I might have to hardcode things into this… [06:59] elliottcable: damnit ;_; [06:59] elliottcable: why are they unenumerable? What is likely to be trying to enumerate `global`? ;_; [06:59] maqr: elliottcable: what are you trying to do exactly? :/ [07:00] elliottcable: maqr 3» update some old code for the latest Node.js [07:00] elliottcable: it’s a replacement for `require()` that doesn’t suck nearly as much™ [07:00] maqr: hmm [07:00] elliottcable: I have other Node.js code I found I need to come back and refresh; but it (like everything I write) used this code-loader… and I found it broken after my absence /-: [07:01] maqr: elliottcable: loading code from other javascript files is really easy with Script, from what i've seen [07:01] elliottcable: so, it looks like you simply *cannot* replace `require`, period… because doing so would require copying all the existing `global`s… which would require enumerating the `global` object… |x [07:01] elliottcable: maqr 3» that’s what I’m doing right now, ’course [07:02] maqr: hrm [07:05] polotek: elliottcable: what's wrong with require? [07:05] elliottcable: polotek 3» I wrote several paragraphs on it on the mailing list a while back, let me look around… [07:05] elliottcable: where’s the mailing list nowadays? :x [07:06] elliottcable: here we go [07:06] elliottcable: polotek 3» http://groups.google.com/group/nodejs/browse_thread/thread/32ac3f92142bfa41 [07:06] elliottcable: polotek 3» scroll down to my response [07:07] elliottcable: polotek 3» there’s also the commentary on my alternative: http://github.com/elliottcable/from/blob/f0bf49/lib/from.js#L1-135 [07:07] elliottcable: polotek 3» (that doesn’t mention `require()`, it simply speaks only of the benefits of my system instead of comparing it to extant systems) [07:08] polotek: word [07:08] polotek: will definitely read [07:08] elliottcable: hahah yeah it’s long [07:08] polotek: at a later time when my brain isn't mush [07:08] elliottcable: long story short: [07:09] elliottcable: hrm. Okay, maybe not. I can’t think of a way to summarize it without digging into all the points already brought up. [07:11] elliottcable: anyway, beyond the *problems* with `require()` and “securable modules,” mine is quite simply worlds more powerful [07:11] elliottcable: it gives you a Python-style “import a few bits but not all the bits” in `export()` as well as the inverse, which even Python doesn’t provide, of `import()`: drop values *into the context of the file you’re loading* [07:11] elliottcable: and it also preforms some extremely intelligent package/library negotiation on the paths [07:13] polotek: I don't like import. I like the exports system. creating a local variable is easy and helps to trace the code IMO [07:13] elliottcable: what? [07:14] elliottcable: no, my `export()` and `import()` are seperate from ‘exports’ [07:14] elliottcable: that’s a CommonJS thing [07:14] elliottcable: mine look something like `from('a_library').import('thing', 'other_thing')` or `from('a_library').import()` to import them all [07:16] elliottcable: and the same, but backwards, for `export()` [07:16] _announcer: Twitter: "Speaking of node.js, http://nodeknockout.com/ Aug 28-29. Fun times." -- TD Mackey. http://twitter.com/tdmackey/status/19320581037 [07:17] polotek: yeah I follow you [07:18] polotek: I don't see how that's different from var thing = require("a_library").thing; [07:18] shockie has joined the channel [07:18] polotek: other then you can import multiple at a time [07:19] polotek: but that's just a convenience method [07:19] jetienne has joined the channel [07:19] MattJ has joined the channel [07:20] trochala has joined the channel [07:22] elliottcable: it’s quite fundamentally different ;D [07:22] elliottcable: not the syntax, mind you; the system [07:22] elliottcable: what i just *typed* isn’t that different; it’s merely a different flavour  [07:22] elliottcable: and, uh, does JS have multiple assignment? I can’t remember… [07:22] javajunky has joined the channel [07:23] elliottcable: if so, you could do the same thing without import() fairly easily [07:23] elliottcable: just a matter of taste, for that [07:23] _announcer: Twitter: "Yahoo! hires for node. "Hack NodeJS for Yahoo! Mail" http://groups.google.com/group/nodejs/browse_thread/thread/91f964a0b81f1881" -- Kadir Pekel. http://twitter.com/kadirpekel/status/19320867042 [07:26] elliottcable: AHhah! [07:26] elliottcable: maqr, polotek 3» I got some of it working! :O [07:26] elliottcable: but, still bits missing… working on that now [07:27] elliottcable: :O [07:27] elliottcable: ACTION high-fives himself from fifteen minutes in the past [07:28] polotek: elliottcable: that's a neat trick ^ [07:28] elliottcable: ikr [07:28] elliottcable: I have mad skills [07:28] elliottcable: oh by the way [07:28] elliottcable: I didn}t ask in here [07:29] elliottcable: but, I’m driving through, well, most of the US in a week or twoish [07:29] elliottcable: anybody want me to drop by and say hi? maybe talk about Node? :D [07:29] mscdex: oh man.... growisofs just froze up [07:29] mscdex: and the process can't be killed [07:29] polotek: elliottcable: nice [07:29] polotek: what's your route? [07:30] polotek: mscdex: can't? [07:30] mscdex: epic fail [07:30] mscdex: nope [07:30] mscdex: not even unloading the isofs module helps [07:30] satori_: elliottcable: roadtrip huh? [07:30] mscdex: it's in uninterruptible sleep mode [07:30] mscdex: :o [07:30] isaacs has left the channel [07:31] polotek: pull the plug ;) [07:31] mw_ has joined the channel [07:32] mscdex: i just did heh [07:32] elliottcable: satori_ 3» yepyep, bought a new place in NC [07:32] elliottcable: satori_ 3» driving from Alaska to North Carolina. It doesn’t get longer than that, unless you’re driving across Russia. [07:33] satori_: hehe. you obviously haven't been to Australia [07:33] satori_: everything is far away from everything else here [07:33] polotek: NC is nice [07:33] polotek: I'm planning to live there when I'm so old the only thing that matters is good weather and cheap cost of living [07:34] hojberg has joined the channel [07:34] meder__ has joined the channel [07:34] elliottcable: satori_ 3» no, but might be visiting [07:34] elliottcable: polotek 3» … uh, thanks? [07:35] _announcer: Twitter: "The motivation is to get moving NodeJS better performance with existing infrastructure http://ow.ly/2eP99" [id] -- Teman Macet. http://twitter.com/temanmacet/status/19321383675 [07:35] polotek: maqr: http://github.com/polotek/libxmljs/issues#issue/13 [07:35] polotek: elliottcable: no i'm serious. wasn't being a dick [07:35] satori_: I'm guessing NC is the equivelent of Tasmania for us Aussies. Beautiful, Cheap, but fucking far away [07:35] polotek: NC is nice [07:35] polotek: maqr: can you comment there with any new info you have? [07:36] elliottcable: satori_ 3» fucking far away? I live *in Alaska*. That’s farther away than Hawaii for most people. [07:36] satori_: Well at least your in the popular hemisphere. [07:36] elliottcable: lol [07:36] stagas has joined the channel [07:39] mscdex: beam him up scotty! [07:39] _api has joined the channel [07:39] elliottcable: maqr 3» what the hell does your name mean? [07:39] maqr: polotek: will do [07:39] maqr: elliottcable: i don't even know anymore [07:39] mscdex: ha [07:40] elliottcable: maqr 3» what? [07:40] elliottcable: oops, that was meant for mscdex, but applies to you as well [07:40] elliottcable: mscdex 3» name? [07:41] mscdex: elliottcable: i take it you're not familiar with dos? [07:41] satori_: I knew ur name was familiar! [07:41] maqr: i don't get it :( [07:41] mscdex: heh [07:41] MattJ: Problem is, when I used DOS I didn't have a CD drive [07:42] MattJ: so I didn't meet mscdex until '98 or so [07:42] mscdex: huhu [07:42] maqr: elliottcable: nobody ever spells my irl name right, so one of my friends suggested i spell it 'marq', but maqr sounded cooler and looked way more web2.0, so i just kind of started using it [07:42] adrienf has joined the channel [07:43] maqr: elliottcable: afaik, i'm the only maqr (other than it means something in arabic that i haven't been able to translate), so google results are easy to find for me [07:43] maqr: mscdex: ohhh, *your* name, that is familiar, yeah :) [07:43] maqr: mscdex: you have to write it MSCDEX to get the full effect [07:44] satori_: maqr: You picked a unique 4 letter handle.. i am assuming that the first 4 or 5 google results are you? [07:44] maqr: satori_: yeah, they all are [07:45] maqr: there's a lot of arabic stuff too, which i have no idea what means [07:45] maqr: but everything english is me, i think [07:46] polotek: okay, that's all for me folks [07:46] polotek: take it easy [07:46] satori_: ciao [07:46] polotek has left the channel [07:47] maqr: i smell like solder and failure [07:47] maqr: i should sleep soon too [07:47] pkrumins: anyone knows if it's possible to call stack trace in a middle of function? [07:47] pkrumins: i can't understand how one particual piece of code gets called [07:47] mscdex: pkrumins: yes [07:47] pkrumins: mscdex: how would you do that? [07:47] mscdex: pkrumins: (new Error()).stack [07:47] pkrumins: mscdex: :) thanks! [07:48] mscdex: i'm pretty sure that's the property.... isaacs told me about it the other day [07:48] pkrumins: let's see. [07:49] mscdex: yep [07:50] maqr: http://ridiculousfish.com/blog/archives/2010/07/23/will-it-optimize/ [07:50] pkrumins: sys.log((new Error).stack) works! [07:50] mscdex: :-D [07:51] virtuo has joined the channel [07:53] aliem has joined the channel [07:53] maqr: tomorrow i'm going to try and learn how google does their html5 mobile magic [07:53] tpryme has joined the channel [07:53] maqr: the new image results look so badass on my android phone [07:55] tpryme: How do you specify a file for sys.debug(...) to write to? Is this possible with the API? [07:56] elliottcable: yeah, sys.log((new Error).stack) is extremely useful [07:56] b_erb has joined the channel [07:57] maqr: ok, nap time, g'night * [07:57] satori_: tpryme: You can do that with regular linux commands for stderr redirection i believe. [07:57] mscdex: tpryme: sys.debug always writes to stdout [07:57] satori_: ahh. forget that then [07:58] mscdex: i'm pretty sure it's stdout [07:58] mscdex: ACTION looks [07:58] tpryme: k, i'll try both, thanks [07:58] satori_: yeah. i think you are right. Debug just isn't async? yeah? [07:58] mscdex: nope, it's stderr [07:58] mscdex: hmm [07:58] mscdex: strange [07:59] derferman has joined the channel [07:59] elliottcable: yeah, that’s what it’s for [07:59] mscdex: you can always write to a file with fs.writeFile or fs.writeFileSync [07:59] elliottcable: tpryme 3» `node my_script.js 2>a_file.log` [07:59] mscdex: depending if you want to do it internally or not [07:59] mscdex: :-) [07:59] tpryme: thanks! [07:59] elliottcable: tpryme 3» np [07:59] elliottcable: What’s `root` defined for? anybody know? [08:00] elliottcable: seems a redundant copy of `global` [08:01] liesen has joined the channel [08:01] elliottcable: for (source in sources) for (variable in sources[source]) if (sources[source].hasOwnProperty(variable)) [08:01] elliottcable: woot! [08:01] beanie___: whats the best way to search memory leaks in my node app? [08:02] jetienne: beanie___: i remember seeing something like that recently [08:02] beanie___: jetienne: yay! [08:03] elliottcable: anybody know if `require()` exposes the filename of the current file anywhere? [08:04] jetienne: beanie___: cant remember where :( [08:04] teemow has joined the channel [08:04] elliottcable: beanie___ 3» um, valgrind? [08:04] elliottcable: or summat? [08:04] jetienne: http://gist.github.com/486093 <- there! [08:04] jetienne: chrome search in history :) [08:06] _announcer: Twitter: "@JanVanRyswyck node.js book, excellent." -- Colin Jack. http://twitter.com/colin_jack/status/19322761382 [08:07] TomY has joined the channel [08:07] _api has joined the channel [08:08] beanie___: oh cool [08:09] beanie___: elliottcable jetienne thanks [08:09] mscdex: ACTION shakes a fist at growisofs [08:10] elliottcable: urhrmmm. Hm. [08:10] elliottcable: I need to create a new Function-type [08:10] elliottcable: that is, it needs to be created via `new(Foo)()` [08:10] elliottcable: but it needs to be execuable. [08:10] elliottcable: executable*(?) [08:11] mscdex: heh i think i broked my dvd burner now [08:11] mscdex: well i didn't, growisofs did [08:11] elliottcable: objects created by `new` and handed to `Foo()` as `this` are `Object`s though [08:11] bpot has joined the channel [08:13] _api has joined the channel [08:14] xla has joined the channel [08:14] wao has joined the channel [08:14] tpryme: elliottcable: You can return any value from the constructor [08:15] beawesomeinstead has joined the channel [08:15] tbassetto has joined the channel [08:16] _api has joined the channel [08:17] elliottcable: tpryme 3» hrm [08:17] elliottcable: tpryme 3» that doesn’t seem acceptable; it doesn’t create me a new object, which is kind of the point of the `new` invocation pattern [08:17] tpryme: elliotable: What are you trying to do? [08:19] tpryme: elliottcable: what are you trying to do? [08:20] elliottcable: I’m not quite sure anymore :X [08:20] elliottcable: what you’ve told me helps; let me poke around [08:20] elliottcable: also, I’m quite surprised that the return value of the function overrides the `new` functionality [08:20] elliottcable: I didn’t remotely expect that to be the case [08:20] elliottcable: I suppose I’m too used to Ruby’s `#new` overriding whatever you return from `#initialize` :x [08:22] mitkok has joined the channel [08:23] mscdex: yay... finally done. a realtime backup monitor in the browser :-D [08:25] tpryme: elliotcable: yeah, you can also exploit the same feature to act as a safeguard against forgetting to call new (think that's in YUI). Not an uncommon practice from my experience. [08:26] stagas has joined the channel [08:29] _announcer: Twitter: "What is the most mature #nodejs framework ATM? #express ? #geddy ?" -- Lachy. http://twitter.com/supagroova/status/19323743021 [08:31] aliem_ has joined the channel [08:31] jsilver has joined the channel [08:35] mitkok: morning [08:35] mscdex: morning [08:37] frodenius has joined the channel [08:37] frodenius has joined the channel [08:40] elliottcable: morning [08:40] elliottcable: mitkok, mscdex 3» with your names the same length, I thought for a moment that you replied to yourself :O [08:40] jonathantaylor_ has joined the channel [08:40] mscdex: :-D [08:41] mitkok: haha [08:43] aliem has joined the channel [08:44] elliottcable: and again [08:44] elliottcable: >,< [08:45] mscdex: elliottcable: that's a sign of coffee deficiency [08:45] elliottcable: indeed, it’s nearly 1AM, and I’m exhausted [08:45] elliottcable: been hacking at unsane code all day [08:50] markwubben has joined the channel [08:51] jsilver has joined the channel [08:52] tpryme: Is there a benchmark tool for node.js to profile which parts of an app are consuming the most CPU cycles? [08:52] mAritz has joined the channel [08:52] aliem has joined the channel [08:54] jetienne: http://code.google.com/p/v8/wiki/V8Profiler <- tpryme you may try this [08:54] jetienne: i dunno it but seems close [08:54] tpryme: jetienne: thanks, i'll take a look [08:55] jsilver: hey guys [08:55] jsilver: i added codemirror to js2cs ^_^ http://jsilver.github.com/js2cs/example.html [08:55] elliottcable: tpryme 3» there’s been talk about shipping Node data to a client via a WebSocket or something, and then using Chrome’s debugger-APIs to inject Node’s data for profiling/debugging/etc into the inspector [08:55] jsilver: gonna do the bottom half too when i get around to it [08:56] jetienne: jsilver: how hard/easy it is to parse javascript ? [08:56] xla has joined the channel [08:56] jsilver: its very easy but pegjs parser contains some bugs and is slow [08:57] jsilver: some other issues i face are that coffeescript does not support all things from JS, but we have to do something withh it because its a recursive function [08:58] jsilver: it will be broken until coffee allows me to mimic JS for in style in coffee, which it may never [08:58] jsilver: :D [08:59] jsilver: but i might perfect a hack to translate to while() which i have been trying [08:59] jsilver: also might make a codemirror parser to make the bottom half of my program look kewl [09:00] kodisha has joined the channel [09:02] aliem_ has joined the channel [09:03] stagas: , first and no ; is so much better [09:04] mscdex: nein! [09:06] Gruni has joined the channel [09:07] tpryme: What are some observations of requests/sec on any apps you guys are working on? Trying to compare mine to an average. [09:07] caolanm has joined the channel [09:08] _sri has joined the channel [09:08] jetienne: i did 19k req/s on a hello world yesterday :) [09:09] mAritz: jetienne: multicore stuff? [09:09] jetienne: mAritz: yep. the one from yahoo. 19kreq/s on 4 core. 8kreq/s on 1 core [09:09] elliottcable: jetienne 3» I suggest you look at inimino’s parser [09:10] tpryme: any non-hello world numbers? With memcached or another memory store involved? [09:10] jherdman has joined the channel [09:10] mAritz: jetienne: hm.. could you do it with 2&3 cores as well for seeing how much the gain/cpu declines? [09:11] elliottcable: jetienne 3» i.e. http://boshi.inimino.org/3box/PanPG/ECMAScript_unified.peg [09:11] jetienne: elliottcable: ok [09:12] jetienne: mAritz: when time allow. my startup just went out of cash... need to find another project fast to put food on the table [09:13] mAritz: jetienne: oh. good luck! is it a node.js focused startup? [09:13] jetienne: im not sure i have been clear [09:14] jetienne: mAritz: it wasnt nodejs related. and now the startup is over [09:14] mAritz: :( [09:14] jetienne: btw if anybody hear about something cool ping me :) [09:15] wereHamster has joined the channel [09:15] markwubben has joined the channel [09:16] elliottcable: what’s the difference between `global` and `root`? [09:16] _announcer: Twitter: "temanmacet.com must have a sponsor in podcastnya enter. congrats! * Again listened nodejs *" [id] -- neofreko. http://twitter.com/neofreko/status/19325768665 [09:18] maushu has joined the channel [09:30] pkrumins has joined the channel [09:34] pkrumins_ has joined the channel [09:37] aliem has joined the channel [09:38] hellp has joined the channel [09:42] pkrumins has joined the channel [09:49] Gruni has joined the channel [10:04] jelveh has joined the channel [10:05] omarkj has joined the channel [10:06] mikemike has left the channel [10:07] jelveh: I'm trying to handle the connection refused error I'm getting from "connection = amqp.createConnection({ host: "localhost" });" when the rabbitmq/amqp server is not available [10:07] jelveh: how can I do that? [10:07] omarkj has joined the channel [10:07] jelveh: currently all I'm getting is this: events:12 [10:07] jelveh: throw arguments[1]; [10:07] jelveh: ^ [10:07] jelveh: Error: ECONNREFUSED, Connection refused [10:07] jelveh: at IOWatcher.callback (net:871:22) [10:07] jelveh: at node.js:266:9 [10:08] omarkj: Good day. [10:09] jelveh: hello [10:10] omarkj: I was wondering if you guys know of any good takes on making C/C++ addons to node? [10:10] omarkj: I need to create one for ZeroMQ.. [10:10] V1_ has joined the channel [10:10] V1_: :) [10:11] V1_: hmz seems like someone stole my nick again -_- [10:11] omarkj: You should register it. [10:11] V1: I did [10:11] V1: but you can't set a kill on a nickname [10:12] V1: So others can still take it when your not online [10:13] jelveh: I'm wondering why a try catch block doesn't work around that [10:13] omarkj: Oh, I didn't know that. [10:13] jelveh: the uncaughtexception event still bubbles up [10:14] omarkj: jelveh: I missed your code, do you have it at a pastebin somewhere? [10:15] aliem has joined the channel [10:15] jelveh: omarkj: http://pastie.org/1056765 [10:16] jelveh: what I'm wondering about is why the does the exception get caught by the uncaughtexception eventhandler [10:16] V1: jelveh: Try wrapping the try catch around the require aswell [10:17] V1 has left the channel [10:17] jelveh: no change V1 :( [10:17] sh1mmer has joined the channel [10:17] V1 has joined the channel [10:17] V1: -_- wrong button [10:18] omarkj: What version of node are you using jelveh ? [10:18] jelveh: I just updated to the latest version [10:18] jelveh: v0.1.101 [10:18] omarkj: k [10:19] jelveh: sh1mmer: heard great things about your oscon talk :) congrats ;) [10:19] sh1mmer: thanks :) [10:19] sh1mmer: it went pretty well [10:19] sh1mmer: hopefully we inspired some people to try node [10:20] omarkj: Don't you need to add a listener to the connection? You can't catch the exception right there (I guess) since the connections isn't necessarily established? [10:20] omarkj: I wouldn't know, I haven't used amqp. :) [10:20] _announcer: Twitter: "cygwin already installed .. will tomorrow tried node.js: D" [id] -- wahyu sumartha. http://twitter.com/wahyusumartha/status/19328584585 [10:21] jelveh: omarkj: that's what I thought too - but - it crashes before I can add my listener [10:22] jelveh: omarkj: ahhh you're right [10:22] jelveh: :D [10:22] omarkj: Hm? [10:22] omarkj: Was that it ? [10:22] jelveh: when I tried it the last time I used the timeout listener [10:22] omarkj: Ah. [10:22] omarkj: Cool! [10:22] jelveh: should have listened on the error event [10:23] jelveh: d'oh [10:23] omarkj: hehe [10:23] jelveh: and you're also right the try catch wouldn't make any sense there since the amqp library connects asynchronously [10:24] omarkj: Yeah. I have that problem with working with asynchronous patterns as well. It gets confusing. [10:24] jelveh: :) [10:24] pydroid has joined the channel [10:24] gJ|Alex has joined the channel [10:25] omarkj: But, yeah. Anyone know any documentation about writing C or C++ addons ? [10:28] fermion has joined the channel [10:29] stagas: hmm how do you copy an array [10:30] Epeli: slice? [10:31] stagas: thanks [10:33] V1: Depending if you want to copy the properties as well [10:35] everton has joined the channel [10:36] blackdog has joined the channel [10:36] stagas: V1: what do you mean? [10:37] V1: if you array contains references to other variables or what ever they will not be "copied" they will stay references [10:37] muhqu_ has joined the channel [10:37] V1: So when you modify the contents of the array you will modify the references [10:39] mape: 2 spots left for the knockout [10:39] _announcer: Twitter: "and suddenly i see it. #nodejs #connect #spark" -- Miguel Coquet. http://twitter.com/mcoquet/status/19329405741 [10:39] V1: If you don't want references you can do a dirty JSON.parse( JSON.stringify( array ) ); [10:40] mape: Things are going down [10:40] V1: Team speedo ftw ! [10:40] stagas: V1: nice thanks [10:42] omarkj: That looks dirty. :) [10:44] _announcer: Twitter: "After writing a function to parse params, I scrolled down the docs and saw querystring. =.= #node.js" -- Kenny Shen. http://twitter.com/kenny_shen/status/19329628683 [10:46] ditesh|cassini has joined the channel [10:47] geeks_bot has joined the channel [10:49] liesen has joined the channel [10:51] keeto has joined the channel [10:52] _announcer: Twitter: "@rioter where are those node.js resources you showed at sydjs? imma play with it this weekend" -- William Parry. http://twitter.com/williamparry/status/19329993865 [10:52] jelveh: is there a way to have multiple listeners in one callback? e.g. process.addListener(['SIGINT', 'SIGKILL'], function(){}); or something similar? [10:54] V1: omarkj: Dirty, but small :p [10:54] omarkj: Yeah [10:55] V1: jelveh: Not really [10:55] V1: jelveh: Unless you create your own wrapper for them [10:56] jelveh: k [10:57] kassens has joined the channel [10:57] Ori_P has joined the channel [10:59] eee_c has joined the channel [11:00] ctp has joined the channel [11:01] tahu has joined the channel [11:02] ctp has joined the channel [11:02] ctp: j #rubyonrails [11:02] ctp: ups, sorry ;-) [11:02] satori_: hehe [11:05] ctp: btw, anyone here using node together with rails3? i wanna integrate some node stuff within a rails app (online status, simple chat etc.). are there any known approaches for such tasks? [11:07] BrianTheCoder has joined the channel [11:08] _announcer: Twitter: "[del] [from pnas] Multi-Core HTTP Server with NodeJS (Yahoo! Developer Network Blog): http://url4.eu/6GQN0" -- sldfjd ldajds. http://twitter.com/sldfjd/status/19330738920 [11:08] ctp: i mean asynchronous code only for some parts of the code. most part of the code should base on the traditional call stack [11:08] satori_: Node doesn't play well with sync code [11:09] satori_: *any* sync call will halt everything else as node is singlethreaded. [11:09] satori_: s/sync/blocking [11:09] ctp: satori_: yepp, i know. i thought of something like db layer for blocking mysql etc. in node manner [11:10] ctp: full async webapp is an absolute overkill in my case ;-) [11:11] satori_: What kind of task would node handle for your idea? [11:11] ctp: so i think i have to try eventmachine or something like cramp: http://m.onkey.org/2010/1/7/introducing-cramp [11:12] V1: You can process.nextTick for sync calls [11:13] ctp: satori_: i need a simple way to get e.g. user status for thousands of users, xmpp notifications etc. async would be fine in these cases [11:13] V1: So it doesn't block everything. [11:13] V1: can use( [11:13] satori_: If you want node to play nice with a sync API, you will either need to use some sort of HTTP async interface, or write some c++ code to run the sync calls in a threadpool [11:13] kassens has joined the channel [11:13] ctp: V1: ah, ok. this sounds cool. mni thx for info ;-) [11:14] ctp: ACTION never tried ruby's eventmachine but it seems to be cool stuff to 8-) [11:17] omarkj: Ok, guys. One question. I have a database that I'm querying with a callback function, but when the load gets high I have it calling the wrong callback (so, say I have a complex query that takes some time to finish, if another one finishes before it, that one is called and I return the wrong data). I guess I'm doing a silly mistake here. http://pastie.org/private/3khmfaz9nvbx4fjeojvyg [11:18] omarkj: So I'm calling 'fullbook' maybe ~100-200 times [11:22] phiggins has joined the channel [11:27] ewdafa has joined the channel [11:29] charlenopires has joined the channel [11:31] V1 has left the channel [11:32] V1 has joined the channel [11:32] mape: omarkj: and that is wrapped in a function? [11:33] c4milo has joined the channel [11:33] mape: btw I don't think you should open the connection every single time [11:34] omarkj: No, that's true. [11:35] omarkj: And no, I'm calling fullbook directly. The callback from that is normally just writing to the socket. [11:36] mape: when what is it returning from? [11:38] omarkj: Hm ? What do you mean ? [11:41] tyler_ has joined the channel [11:42] tyler_: im trying to use crypto signer and verify but verifier keeps returning '0'; here is my code http://gist.github.com/487331 [11:43] nicholas__ has joined the channel [11:43] frodenius has joined the channel [11:44] frodenius has joined the channel [11:52] Gruni has joined the channel [11:52] omarkj: mape: What did you mean ? [12:00] pavan_ has joined the channel [12:03] omarkj: Bah, I probably screwed up the scope in the loop. [12:05] dnolen has joined the channel [12:08] omarkj: What a missing var can do to my mental health. [12:11] _announcer: Twitter: "the race is on - Stackerflow: http://bit.ly/cSjAZC Quora: http://bit.ly/aXw13n #nodejs #linux" -- Tim Whitlock. http://twitter.com/timwhitlock/status/19334027521 [12:13] bradleymeck1 has joined the channel [12:14] aheckmann has joined the channel [12:15] _announcer: Twitter: "@kvz I messaged you about pack.js on github. looks like the error is a lower level problem in my build of NodeJS. see http://bit.ly/cSjAZC" -- Tim Whitlock. http://twitter.com/timwhitlock/status/19334277238 [12:16] phiggins has joined the channel [12:17] bradleymeck1: I return [12:17] BrianTheCoder has joined the channel [12:18] gJ|Alex has joined the channel [12:18] Gruni has joined the channel [12:18] gJ|Alex has joined the channel [12:19] mitkok has joined the channel [12:19] _announcer: Twitter: "@williamparry nodejs github wiki has a lot of links to projects." -- jared wyles. http://twitter.com/rioter/status/19334524644 [12:26] victorstan has joined the channel [12:26] bradleymeck1 has left the channel [12:29] liesen has joined the channel [12:30] kriszyp has joined the channel [12:30] tahu1 has joined the channel [12:31] tahu has joined the channel [12:37] tahu has joined the channel [12:39] _announcer: Twitter: "@jonezy and if you're already exploring "new" languages ... http://nodejs.org/ doubt it'll take you long to pick that one up." -- Paul Kalupnieks. http://twitter.com/kalupa/status/19335753178 [12:40] collypops has joined the channel [12:42] c4milo has joined the channel [12:42] _announcer: Twitter: "My 2 last articles about node.js hits 500 readers is few days : http://is.gd/dBRgz and http://is.gd/dDkup #nodejs #javascript :p" -- Vincent RABAH. http://twitter.com/itwars/status/19335965106 [12:43] jetienne has joined the channel [12:45] Gruni has joined the channel [12:45] omarkj has joined the channel [12:45] omarkj_ has joined the channel [12:46] confounds has joined the channel [13:01] chrischris has joined the channel [13:02] zapnap has joined the channel [13:02] omarkj has joined the channel [13:05] omarkj_ has joined the channel [13:05] behmann has joined the channel [13:05] bogadynamics has joined the channel [13:06] stepheneb has joined the channel [13:06] mw_ has joined the channel [13:07] bogadynamics: Does anyone know how to start a geddy app using the production env. settings? [13:08] chrischris has joined the channel [13:08] rsms has joined the channel [13:11] devongovett has joined the channel [13:11] devongovett has joined the channel [13:19] _announcer: Twitter: "@buyog get on the list for the heroku node.js support :)" -- Kyle Simpson. http://twitter.com/getify/status/19338451664 [13:20] ben_alman has joined the channel [13:22] davidsklar has joined the channel [13:22] gJ|Alex has joined the channel [13:26] SubStack: sqlite isn't in npm yet, annoyingly [13:29] bogadynamics has left the channel [13:30] satori_: substack: I'm trying to explain your app to a friend on another forum. Do have a one liner for stackvm? [13:31] SubStack: the app itself or the startup? [13:32] SubStack: the app is just a glorified vnc viewer basically right now [13:32] satori_: my friend fails to see the significance of your app, and I am having a hard time convincing him that it is novel and cool :P [13:32] riottaba has joined the channel [13:32] satori_: I think it is [13:33] satori_: The app and the startup I guess. [13:33] _announcer: Twitter: "@ssoroka I'm with you. I thought nodejs was a client thing. How terribly wrong I was." -- Ryan Neufeld. http://twitter.com/rkneufeld/status/19339412537 [13:33] SubStack: ah well the startup+app will make it super easy to do shit with vms that are huge pains to do right now [13:33] SubStack: like embedding vms in web pages for product demos, instructionals [13:34] satori_: Do you host the vm's? [13:34] wattz: Good morning [13:34] SubStack: satori_: we will be doing some of that [13:34] satori_: cool [13:34] SubStack: although people can also host copies themselves if they want [13:35] SubStack: we even have a crazy idea to leverage people's free self hosted copies to their and our benefit [13:36] confounds has left the channel [13:37] satori_: It would be really kind of cool for travellers etc....to have a virtual laptop, access via net cafe's [13:37] SubStack: indeed! [13:37] satori_: much more secure too [13:37] satori_: good for storing holiday snaps and new address data [13:37] kevm has joined the channel [13:37] satori_: don't need an expensive machine left in hotel rooms [13:38] satori_: ..and can be set up the way you like it still [13:38] SubStack: well I'm not so sure about those particular applications, since there are plenty of webapps that do stuff like that better [13:38] satori_: ...yeah, but this would be your machine, wiht your desktop, and your apps [13:39] SubStack: there are plenty of remote desktop companies at the same time [13:39] satori_: anywayz....I am just thinking out loud [13:39] SubStack: you could use stackvm for that, but there are far more interesting applications I think [13:39] satori_: 'spose [13:40] SubStack: like you could create a capture the flag hacking contest in a virtual network [13:40] SubStack: or embed an online demo of your desktop app right in your web page [13:41] satori_: re: the network comp... You will be creating tools to easily create whole networks? [13:41] satori_: of different os'es? [13:41] SubStack: yes [13:41] satori_: nice [13:41] SubStack: drag and drop type stuff [13:41] markwubben_ has joined the channel [13:42] satori_: So kinda like drawing a netwrok diagram, only actually creating a real network :P [13:42] SubStack: exactly [13:42] satori_: See now that is seriously cool. [13:42] aliem_ has joined the channel [13:42] pgriess has joined the channel [13:43] pydroid has joined the channel [13:44] SubStack: also you'll be able to integrate your virtual networks with real ones if you like [13:44] SubStack: or tie your self-hosted stackvm cluster to our servers to provide redundancy [13:45] SubStack: to pursue all these angles it really makes the most sense to just release everything as free software [13:45] satori_: So you will be service/consulting orientated? [13:45] SubStack: hopefully not consulting [13:46] SubStack: at least I hope not to be doing any of that [13:46] satori_: fair enough [13:46] SubStack: one idea I had would be to resell spare cycles [13:47] satori_: to? [13:47] SubStack: suppose a company has a stackvm instance running [13:47] SubStack: they could sell their spare cycles to us and we could use them to host vm instances [13:48] satori_: interesting idea. [13:48] SubStack: that would help a lot with latency too since we'd have a better geographic spread [13:48] SubStack: and less servers for us to buy ourselves [13:49] aliem has joined the channel [13:51] SubStack: also if stackvm were proprietary some open source project would just step up to do the same thing [13:51] SubStack: there are already a lot of them that come very close [13:52] satori_: I had not considered that. [13:53] SubStack: ACTION has thought about this a lot [13:53] satori_: heh. I bet. [13:55] mape: SubStack: are you putting any time into the design at this time or focusing on the tech? [13:55] aliem_ has joined the channel [13:56] SubStack: video #2 will have a much nicer ui [13:56] satori_: mape: Have you considered webgl 3D earth model for wargamez? [13:56] SubStack: design == tech [13:57] mape: satori_: not in the least, no one has webgl and I don't know gl [13:57] gf3 has joined the channel [13:57] mape: SubStack: well, meant the pretty stuff, not the product part [13:57] SubStack: mape: I don't follow [13:57] satori_: mape: hehe. i tried it out in a FF nightly. Has potential. some of the demos are quite impressive [13:57] SubStack: pretty stuff not in the product? [13:58] mape: I meant if you are spending time on design of the website/logo/profile rather then the actuall code of the product [13:58] davidwalsh has joined the channel [13:58] mape: but nm, how expensive/time consuming is it to spawn a new vm? [13:59] SubStack: ask pkrumins if he's awake [13:59] mape: k [13:59] satori_: mape: re: no-one has it... actually current Firefox has it right now, but it disabled in about:config [13:59] SubStack: depending on which vm tech we use on the backend, anywhere from a minute to a few seconds [14:00] mAritz: fucking festival outside my office... horrible music and i'm not allowed to work late because the police will use our building to scout the masses. (i suspect sniper action) [14:00] mape: SubStack: k, was thinking if it is possible to spawn one for the frontpage for your site, but that might not scale [14:00] mape: satori_: Yeah.. So no one has it :P [14:00] SubStack: mape: yeah, not ready for that yet [14:01] SubStack: we'll be doing that eventually thought [14:01] SubStack: s/t$// [14:01] SubStack: it took like 10 minutes to draw the logo in inkscape I think [14:02] SubStack: oh and there were some other drawings, but those were just for the launch [14:02] SubStack: s/launch/announcement/ [14:02] mape: The product is gonna have the cartoony look like your website? [14:03] mscdex: it wouldn't be web 2.0 if it didn't! [14:03] mitkok has joined the channel [14:03] SubStack: nah, the product is super minimalist [14:03] SubStack: for now [14:04] SubStack: I'm sure I'll get tired of hacking and make some doodles for it eventually though [14:05] akahn has joined the channel [14:10] _announcer: Twitter: "http://tinyurl.com/yefgaha Learning Server-Side JavaScript with Node.js | Nettuts+" -- onion_papa. http://twitter.com/onion_papa/status/19342079972 [14:11] mtodd has joined the channel [14:12] mtodd has joined the channel [14:13] tahu has joined the channel [14:15] siculars has joined the channel [14:15] bpot has joined the channel [14:18] mape: http://irclogger.com/ [14:18] mape: neat, but in Ruby [14:19] jesusabdullah: Hmm! [14:19] jesusabdullah: OH MAN the other day there was a practicing band of accordion players outside the student lounge, where I use the microwave [14:20] jesusabdullah: it was SURREAL [14:21] tjholowaychuk has joined the channel [14:23] MattJ: Accordians++ [14:24] omarkj: I never fell for that language, Ruby. [14:25] wattz: ruby... [14:25] satori_: That is surreal. I know a better surreal tale though. My flatmate once saw The Pope going down our street in his Pope mobile, while my friend was acid. Turned out it actually *was* The Pope. True story. [14:25] omarkj: (My last message was mostly written because I'm playing with wargamez) [14:26] pkrumins: what was the question mape? [14:26] pkrumins: i am here now [14:28] _announcer: Twitter: "Still, in node.js lacks errback'ov, instead of them going in eksepshn callback. How would it wrap something prettier ..." [ru] -- Devgru. http://twitter.com/Devgru/status/19343419452 [14:29] rwaldron has joined the channel [14:31] pydroid has joined the channel [14:32] ceej has joined the channel [14:33] Egbert9e9 has joined the channel [14:35] ajpiano has joined the channel [14:36] maushu: jesusabdullah: You were dreaming. If you have turned right before entering the student lounge you would've seen the female sweden gymnastics team. [14:39] ironfroggy has joined the channel [14:41] [[zz]] has joined the channel [14:42] bradleymeck_ has joined the channel [14:43] robotarmy has joined the channel [14:43] Egbert9e9 has joined the channel [14:44] kjeldahl_ has joined the channel [14:44] softdrink has joined the channel [14:45] kodisha has joined the channel [14:45] ajpiano has joined the channel [14:46] quirkey has joined the channel [14:49] _announcer: Twitter: "@WestDiscGolf @russhuntington good question. Possibly to use with node.js or just to see if they could ;)" -- Elijah Manor. http://twitter.com/elijahmanor/status/19344909086 [14:49] EyePulp has joined the channel [14:49] stepheneb has joined the channel [14:52] mscdex: maushu: lies [14:53] maushu: No, inception. [14:53] satori_: heh. [14:53] jesusabdullah: Hah :D [14:53] jesusabdullah: If only [14:53] jesusabdullah: if only ;) [14:54] dnolen has joined the channel [14:54] satori_: i think ryah is doing some inception... on all of us. [14:54] aurynn has joined the channel [14:54] _announcer: Twitter: "And here you are told about "XMPP-server VKontakte written by Oleg Illarionov on node.js" and about the competition on the river ... http://juick.com/827154" [ru] -- zet. http://twitter.com/vovka307/status/19345309044 [14:55] mscdex: pwnt [14:55] mscdex: the competition on the river! [14:55] satori_: wtf? [14:55] spoobie has joined the channel [14:55] mscdex: writing node programs from a canoe maybe? [14:55] bradleymeck_: the village! [14:56] spoobie: I'm trying to do some sequential event code, and my problem is that I don't know how to a removeEventListener on an anonymous function. How do I remove an anonymous function when the event is called? [14:57] tahu1 has joined the channel [14:57] satori_: this.removeListener("event", arguments.callee) ? [14:57] mscdex: spoobie: you can iterate over the listeners for a specific event and remove the function in question [14:57] spoobie: satori; thank you! [14:57] SubStack: spoobie: cow.on('moo', function f () { cow.removeListener('moo',f) }) [14:57] mscdex: oh, nevermind you said when the function is called [14:57] mscdex: :S [14:58] mscdex: i need my coffee [14:58] mscdex: brb [14:58] SubStack: you can name functions inline like that [14:58] gf3: named function expressions [14:59] spoobie: substack; that is what I was doing, and I ended up with very deeply nested code. the problem with moving the nest to linear code was losing the ability to know what the name of the function was. So "arguments.callee" solves that [15:00] SubStack: note that arguments.callee is deprecated [15:00] satori_: it is? [15:00] mscdex: since when? [15:00] satori_: new to me. [15:00] eely has joined the channel [15:01] SubStack: https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Functions_and_function_scope/arguments/callee [15:01] mscdex: SubStack: "retained it as a property of a function's local arguments variable" [15:02] mscdex: ;-) [15:02] SubStack: hmmm yeah [15:02] SubStack: anyways [15:02] donspaulding has joined the channel [15:02] SubStack: you can just name them :p [15:02] gf3: truth [15:02] satori_: so it's ok to use arguments.callee, but better to just use names if you can? [15:02] gf3: and avoid touching arguments altogether [15:03] mscdex: i'd prefer to keep it an anonymous function and use callee [15:03] gf3: if you can not use `arguments` at all, that is best :) [15:03] gf3: mscdex: it's still "anonymous" [15:03] satori_: ACTION uses arguments *alot* [15:03] victorstan has joined the channel [15:03] gf3: it's a named function expression [15:03] mscdex: meh [15:03] mscdex: why name a throwaway function when callee is available? [15:03] SubStack: ACTION wishes arguments were a regular array :( [15:03] gf3: because `arguments` is fucking dirty and slow [15:03] gf3: is there an eval bot in here? [15:03] mscdex: slow how? [15:04] bradleymeck_: there is i forget how to start him gf3 [15:04] bradleymeck_: js> 1+! [15:04] gbot2: bradleymeck_: Error: SyntaxError: syntax error: 1+! ..^ [15:04] gf3: slow because it doesn't exist until you touch it, and it can be expensive to generate [15:04] bradleymeck_: aha [15:04] satori_: How do you account for psuedo overloaded functions without it? [15:04] bradleymeck_: mscdex i name em cause its slightly faster [15:05] jherdman has joined the channel [15:05] satori_: I use arguments.length all the time [15:05] mscdex: i've never encountered any slowdowns? [15:05] mscdex: :S [15:05] gf3: mscdex: also -> [15:05] bradleymeck_: arguments.length is love [15:05] spoobie: since you lot are keen, how do I detect memory leaks from DOM and JS references? My issue is that I'm loading very large pictures and my iPhone keeps crashing. So I'm trying to string the loads out so that only one large picture is being swapped into the page at a time. [15:05] gf3: js> "lol".replace(/o/, function replaceor (m) { return m }); replaceor() [15:05] gbot2: gf3: Error: ReferenceError: replaceor is not defined [15:05] satori_: I never considered it might not be kosher [15:06] mscdex: ? [15:06] bradleymeck_: function expressions only have the reference inside them, function delclarations have them outside [15:06] gf3: bam [15:06] bradleymeck_: satori_ length is fine, callee is whats depr, but it still has uses! [15:06] mscdex: i know that, but i was just saying i prefer not to name throwaway functions [15:06] gf3: ^ [15:06] gf3: mscdex: why?> [15:06] bradleymeck_: plus naming throwaways can help me debug [15:06] mscdex: only Functions.callee is deprecated lol [15:06] SubStack: but you can name them inline [15:06] mscdex: er [15:06] mscdex: Function.callee [15:07] mscdex: er [15:07] mscdex: Function.arguments [15:07] bradleymeck_: cant set function.name [15:07] satori_: arguments.callee is ok still yeah? [15:07] mscdex: gah [15:07] SubStack: ACTION just calls them f,g,h... [15:07] gf3: if `arguments` is slow, and `callee` is insecure/slow, why not just name the function? [15:07] gf3: it's easy [15:07] spoobie: you can only name them inline if you nest the code, and that's really painful to read [15:07] teemow has joined the channel [15:07] bradleymeck_: satori_ its going to be supported a long time, but ecma ppl are trying to take it away [15:08] bradleymeck_: its not that its slow, its that it requires a lookup [15:08] satori_: Yeah, I understand. [15:08] SubStack: 'arguments.callee'.length > 'f'.length [15:08] bradleymeck_: callee is as secure as anything else [15:08] gf3: bradleymeck_: just touching the `arguments` object is slow [15:09] bradleymeck_: its around same speed as any other obj, so i guess so [15:09] bradleymeck_: ewww Function.length [15:13] satori_: the node code seems to use local arguments var alot too [15:13] bradleymeck_: yub, variable args would need it [15:14] satori_: Thats what I use it for. [15:14] gf3: bradleymeck_: the issue is that `arguments` is not created unless it's needed, because it is slow to create [15:14] gf3: bradleymeck_: e.g.: http://img.gf3.ca/c061fa3348ce9259cb20bfcc1d629fd6.png [15:14] satori_: point well made [15:14] spoobie: It really is necessary to have arguments.callee regardless as you can't name every function [15:14] bradleymeck_: gf3 that is odd since v8 will always make an arguments object [15:15] spoobie: for example, if I start off 6 different closures, each of those closures has its own function [15:15] spoobie: so I need arguments.callee inside of a closure [15:15] bradleymeck_: recursive constructors require it, other than that i tend not to use it [15:16] satori_: So node could see a perf gain by using generic named args of the max arg length instead of arguments? [15:17] bradleymeck_: possibly, but something seems odd about that test [15:17] bradleymeck_: i can see function contruction taking longer but execution? [15:19] bradleymeck_: gf3 take the function contruction out of the loop and i get same times [15:21] ntelford: any reason why the chunk sent to http.ClientResponse.on('data') would be an Object rather than a String? [15:21] satori_: yes, if you didn't use an ecoding. [15:21] gf3: bradleymeck_: http://img.gf3.ca/812d48abe8f36d4e483aa860bb7ee368.png [15:21] satori_: ? [15:21] _announcer: Twitter: "Nice @changelogshow on CoffeeScript. Nice to hear the Haskell shoutout and ubiquitous node.js! http://bit.ly/dcNJqz" -- Matthew Podwysocki. http://twitter.com/mattpodwysocki/status/19347278111 [15:22] bradleymeck_: even more odd [15:23] satori_: thats a fairly significant difference [15:24] gf3: bradleymeck_: yes, you are right though, it seems V8 creates it every time [15:25] bradleymeck_: http://img685.imageshack.us/f/screenshot20100723at102.png/ [15:25] tjholowaychuk: haha yay jade [15:25] tjholowaychuk: in thechangelog [15:25] gf3: bradleymeck_: those screens are from JSC [15:25] bradleymeck_: im looking at the chromium console [15:25] gf3: bradleymeck_: in V8 the times are identical (77ms - 80ms) [15:25] bean0r1___ has joined the channel [15:26] bradleymeck_: are those times from chrome or chromium? [15:27] derferman has joined the channel [15:27] bradleymeck_: tjholowaychuk which changelog? [15:27] gf3: bradleymeck_: my original times are from JSC in Webkit Nightly [15:27] bradleymeck_: webkit does not use v8 by default [15:28] gf3: bradleymeck_: Chrome 5 constantly gives me ~80ms [15:28] gf3: WK Nighlty uses JSC [15:28] gf3: s/constantly/consistently/ [15:29] frodenius has joined the channel [15:29] frodenius has joined the channel [15:29] donspaulding has joined the channel [15:30] bradleymeck_: i feel bad how far behind some of the other engines are starting to get % wise on edge cases [15:30] _announcer: Twitter: "Dear Node.JS framework developers, please duke it out amongst yourselves and decide on a winner then let me know. Thanks, bye." -- Andy Atkinson. http://twitter.com/webandy/status/19347933953 [15:31] _announcer: Twitter: "I think node.js, coffee and script-CouchDB (or MongoDB?) Could be an awesome combination ..." [de] -- Daniel ♪♫. http://twitter.com/cpt_joshua/status/19347967358 [15:31] bradleymeck_: !tweet @webandy nevar! geddy vs express forever! [15:31] polotek has joined the channel [15:32] tjholowaychuk: lol wtf [15:32] tjholowaychuk: geddy is kind of a clusterfuck (like express used to be) [15:32] tjholowaychuk: needs to thin out [15:33] bradleymeck_: yea i just had to respond [15:33] tjholowaychuk: oh i didnt even see the tweet :D haha [15:34] tjholowaychuk: there does not need to be a "winner" [15:34] tjholowaychuk: that would suck [15:34] polotek: tjholowaychuk: word [15:34] adamv has joined the channel [15:36] _announcer: Twitter: "Who would have thought that XMPP-server contact written node.js? or lie?" [ru] -- 1999. http://twitter.com/stay_positive/status/19348373833 [15:38] zmbmartin has joined the channel [15:43] mscdex: the guy's name is 1999? [15:44] devongovett has joined the channel [15:45] sh1mmer has joined the channel [15:45] polotek: anybody interested in this? http://gist.github.com/487611 [15:46] aliem has joined the channel [15:47] tjholowaychuk: polotek: are these little tokens even supported with other console objects? [15:47] ceej: tjholowaychuk: Where is express looking for jade etc... I have it in my support folder, tried requiring it but i keep getting http://local.cj.nu:3000/ [15:47] tjholowaychuk: seems weird to me to kinda conform to that [15:47] tjholowaychuk: but then change it [15:47] tjholowaychuk: ceej: ./support is for the tests [15:47] polotek: tjholowaychuk: yeah I wasn't in on the original console discussion [15:47] polotek: I just wanna add the ability to inspect an object [15:48] tjholowaychuk: polotek: console.dir() [15:48] ceej: it needs to be in the root ? [15:48] tjholowaychuk: ceej: express is not bound to jade, it doesnt ship with any template engine outof the box [15:48] tjholowaychuk: i dont want people to get that impression [15:48] _announcer: Twitter: "Node.js based porn sites are going to mark the beginning of Web 3.0" -- Stephan Seidt. http://twitter.com/evilhackerdude/status/19349220837 [15:48] tjholowaychuk: ceej: it just needs to be available to require.paths [15:48] ceej: I know that, I'm including it.... [15:48] mscdex: lol? @ that tweet [15:48] bradleymeck_: rails showed us what happens to winners, they get fat [15:48] polotek: didn't know about dir [15:48] tjholowaychuk: ceej: so that means you can $ make install-support, or $ npm install jade, or unshift to the support/jade lib [15:49] polotek: but would be nice if it was also part of the regular formatting options [15:49] ceej: ah k [15:49] ceej: ty [15:49] tjholowaychuk: polotek: IMO if you pass a non string to console.log() it should maybe console.dir() [15:49] tjholowaychuk: not sure [15:49] tjholowaychuk: but i dont think console.log supports format strings in other implementations [15:49] tjholowaychuk: so why do it now [15:50] ceej: there we go :) [15:50] polotek: by default it toString()s it [15:50] bradleymeck_: !tweet @evilhackerdud and it will bring about the 4 horsemen of the apocalypse [15:50] polotek: which is sensible for everything except objects [15:50] tjholowaychuk: ceej: yay :D [15:51] bradleymeck_: tj express is using the grain api right? [15:52] polotek: yeah I would much prefer it if console dropped the formatter [15:52] polotek: too variable arguments and did type checking to do something sensible with each one [15:53] mscdex: bradleymeck_: you misspelled his name, hope it didn't go to someone else lol [15:53] bradleymeck_: pfff [15:53] bradleymeck_: !tweet @evilhackerdude and it will bring about the 4 horsemen of the apocalypse [15:53] bradleymeck_: nope that one is a non-account url [15:53] polotek: if there is a dude that wants to be a dud at being an evil hacker, he deserves to get random tweets for no reason [15:54] tjholowaychuk: bradleymeck_: no, creationix just wanted to abstract some stuff from jade into a common library [15:55] mscdex: heh [15:59] tjholowaychuk: haha someone donated 5$ to jade [15:59] tjholowaychuk: sweet [15:59] tjholowaychuk: lol [15:59] tjholowaychuk: coffeee [15:59] demolithion has joined the channel [16:01] jpld has joined the channel [16:02] sh1mmer: morning [16:06] mscdex: afternoon [16:07] aconbere has joined the channel [16:08] Yuffster has joined the channel [16:08] beelzabub: morning [16:08] spoobie has left the channel [16:09] ceej: tjholowaychuk: how fixed is the jade syntax ? [16:09] paulwe has joined the channel [16:09] _announcer: Twitter: "Wow, it's so refreshing to be writing server-side code in JS! #nodejs" -- Lachy. http://twitter.com/supagroova/status/19350704573 [16:09] tjholowaychuk: ceej: what do you mean [16:09] tjholowaychuk: "fixed"? [16:09] ceej: is it going to change in the future [16:10] paulwe has joined the channel [16:10] creationix has joined the channel [16:11] tjholowaychuk: oh lol [16:11] tjholowaychuk: hmm [16:12] tjholowaychuk: id like to say no, but its a possibility, not much though if anything it would be some attr changes [16:13] ceej: k, just considering if i should use it for a project :) [16:13] tjholowaychuk: it wont be changing any time soon no worries [16:15] ceej: k :) [16:16] aho has joined the channel [16:17] beelzabub: ryah - you around? [16:18] _announcer: Twitter: "New node-msgpack-v0.1.2 supports packing NodeJS buffers to byte arrays directly #nodejs #msgpack" -- Peter Griess. http://twitter.com/pgriess/status/19351324916 [16:18] rwaldron has joined the channel [16:20] beelzabub: anyone know where "process.listeners" gets initialized? [16:22] polotek: src/node.cc [16:22] polotek: beelzabub ^ [16:22] bradleymeck_: beelzabub should be when process is created [16:22] beelzabub: I can't seem to find it though [16:22] bpot has joined the channel [16:23] beelzabub: the only mention of "listeners" is initializing the listeners_symbol [16:23] beelzabub: & that's in FatalException [16:23] polotek: I take that back [16:23] polotek: it's not actually initialized there [16:23] beelzabub: do you know where? [16:24] beelzabub: i can only think maybe events.js or node.js [16:24] beelzabub: events.js appears to only deal with the EventEmitter class [16:25] beelzabub: & node.js just makes use of that as well [16:26] bradleymeck_: beelzabub the EventEmitter class is up the chain from process, and has it on its prototype [16:27] creationix has joined the channel [16:27] beelzabub: sorry - my js foo on this topic is somewhat weak [16:27] beelzabub: what do you mean by 'up the chain' [16:27] polotek: beelzabub: can't find it off hand [16:28] polotek: I'll take a closer look in a bit [16:28] shimondoodkin has joined the channel [16:28] qFox has joined the channel [16:28] romainhuet has joined the channel [16:28] bradleymeck_: http://github.com/ry/node/blob/master/lib/events.js#L110-123 [16:28] ceej: man i love coffee :D http://pastie.textmate.org/private/iogg4hwi38killx6wwkidw [16:28] bradleymeck_: means it process inherits EventEmitter.prototype's properties [16:28] shimondoodkin: hello [16:28] _announcer: Twitter: "DNode: Asynchronous Remote Method Invocation for Node.js and the Browser: wow, that is very cool http://bit.ly/bTrPBY" -- goodlinks. http://twitter.com/goodlinks/status/19352082248 [16:28] beelzabub: i see that - i don't see how that initializes process.listeners [16:29] bradleymeck_: it inherits it [16:29] aliem has joined the channel [16:29] beelzabub: maybe i'm just not familiar with the notation? [16:29] bradleymeck_: do you know another programming language? [16:29] beelzabub: lol - funny [16:29] bradleymeck_: i can try to relate it [16:30] polotek: shimondoodkin: what's up [16:30] beelzabub: bradleymeck_ : i'm just trying to figure out where the process is made to inherit from EventEmitter [16:30] beelzabub: all i see is the EventEmitter's prototype being defined [16:31] creationix: http://news.ycombinator.com/item?id=1541634 vote it up [16:31] beelzabub: maybe that's the magic that happens in EventEmitter::Initialize ? [16:31] _announcer: Twitter: "Riak JS Lib, with implementations for Node.js & jQuery http://dlvr.it/2xrlp" [de] -- Tech & Friki Stuff. http://twitter.com/FrikiFeeds/status/19352262686 [16:31] mscdex: creationix: that's like asking someone to click on one's google ads! [16:31] bradleymeck_: http://github.com/ry/node/blob/master/src/node.cc#L1548 [16:31] polotek: also http://github.com/ry/node/blob/master/lib/events.js#L110-117 [16:31] aconran has joined the channel [16:31] creationix: mscdex: ;) [16:32] beelzabub: right - I see that for EventEmitter [16:32] shimondoodkin: polotec: i'm fine, thanx :D [16:32] polotek: beelzabub: that's the definition of the is listeners function [16:32] shimondoodkin: polotek [16:32] beelzabub: i'm trying to see how that gets back to the process [16:32] polotek: and the process object IS A EventEmitter [16:32] polotek: so it has that function [16:32] shimondoodkin: maybe somebody knows is the eclipse debugger supported in the last version of node? i cant get it to break [16:32] creationix: mscdex: maybe the article just isn't that good, but it did far worse that most of my articles so far [16:32] mscdex: i'm kidding [16:32] creationix: mscdex: I was thinking it's just bad timing [16:33] creationix: I usually get several retweets and some posts to hn for me [16:33] bradleymeck_: beelzabub it adds it to the prototype chain (kinda like an inheritance chain) [16:33] polotek: shimondoodkin: don't know about the eclipse debugger sorry [16:33] beelzabub: i understand the prototype chain [16:34] beelzabub: i'm just trying to trace where process is made to inherit from EventEmitter [16:34] bradleymeck_: so process gains EventEmitter [16:34] polotek: beelzabub: the line that bradleymeck_ linked to is in the C++ initializer [16:34] beelzabub: right [16:34] polotek: that is the way you inherit in C++ [16:34] beelzabub: i'm looking through the v8 documentation to figure out what setclassname does [16:34] beelzabub: i think that's the magic [16:34] bradleymeck_: no [16:34] mscdex: it's good to have articles on using node [16:35] mscdex: whether it's high or low level [16:35] beelzabub: no - it's not [16:35] beelzabub: ^ - bradleymeck_ [16:35] polotek: huh? where are you getting setclassname from? [16:35] beelzabub: node_events.cc - EventEmitter::Initialize [16:37] _announcer: Twitter: "reinstalling NodeJS, because this will magically fix my bug. (this is the second rule of IT, after "switch it off an on again")" -- Tim Whitlock. http://twitter.com/timwhitlock/status/19352690469 [16:38] c4milo: hi guys, what are you using to document the javascript code. [16:38] c4milo: ? [16:39] tjholowaychuk: http://github.com/visionmedia/dox [16:39] beelzabub: when process.EventEmitter is accessed - is that accessing the EventEmitter baseclass of process? [16:39] bradleymeck_: ryah does have that set up a bit odd he should probably change the names [16:39] mscdex: !tweet @timwhitlock what bug is that? [16:39] shimondoodkin: has anybody been successful debugging a node app? [16:39] tjholowaychuk: ^-- c4milo [16:39] polotek: process.EventEmitter === require("events").EventEmitter [16:40] polotek: it's just a reference to the constructor [16:40] beelzabub: ok - then i'm lost again [16:40] beelzabub: i don't see where the link is made to make EventEmitter a parent class of process [16:40] bradleymeck_: beelzabub the process_template is actually the place the function is made, rather interesting that it doesnt actually use a prototype chain, it just declares process's constructor as the EventEmitter function [16:41] polotek: process.__proto__ === process.EventEmitter.prototype [16:41] bradleymeck_: its not a parent [16:41] c4milo: tjholowaychuk: ? [16:41] beelzabub: polotek: i couldn't find either of the code snippets you posted [16:41] meder has joined the channel [16:41] tjholowaychuk: c4milo: http://github.com/visionmeda/dox is how I write / generate docs [16:41] polotek: they're not in node [16:41] polotek: they are meant to illustrate the relationshipo [16:42] c4milo: tjholowaychuk: yep ,thank you [16:42] tjholowaychuk: c4milo: combination of jsdoc and markdown [16:42] beelzabub: i'm trying to figure out in code where this happens [16:42] bradleymeck_: process_template is the constructor_template of http://github.com/ry/node/blob/master/src/node.cc#L1632-1633 [16:42] polotek: it doesn't happen in js [16:42] c4milo: tjholowaychuk: I did notice that, nice. [16:42] bradleymeck_: beelzabub ^ [16:42] polotek: it happens in the C++ v8 code that we have been pointing you to [16:42] polotek: it's difficult to explain without knowledge of the v8 api [16:43] beelzabub: polotek: that's what i thought. you confused me with the js snippet [16:43] _announcer: Twitter: "The server: node.js, Client: canvas in canvas-towerdifence and I move a server not rise; (" [ja] -- Masaki Komagata. http://twitter.com/komagata/status/19353096046 [16:43] beelzabub: i know the v8 API [16:43] beelzabub: i'm not finding where the prototype link is made [16:43] polotek: constructor_template is the C++ representation of a javascript function [16:43] bradleymeck_: process_template is set to EventEmitter::constructor_template in EventEmitter::Initialize then it is referenced again in http://github.com/ry/node/blob/master/src/node.cc#L1632-1633 [16:43] akahn has joined the channel [16:43] polotek: and in this case constructor_template is the EventEmitter constructor function [16:43] c4milo: bradleymeck_: what is your question ? [16:44] polotek: so basically node uses EventEmitter to create the process object [16:44] bradleymeck_: it isnt a question [16:44] polotek: it literally IS A EventEmitter in the OO sense [16:44] beelzabub: i don't see that though [16:44] bradleymeck_: polotek better put : process's constructor is EventEmitter [16:44] beelzabub: oh [16:44] beelzabub: crap [16:44] polotek: bradleymeck_: yeah, thanks [16:44] beelzabub: weird notation confused me [16:44] polotek: thats what this means [16:44] polotek: process.__proto__ === process.EventEmitter.prototype [16:45] bradleymeck_: i cant repeat myself in another way [16:45] beelzabub: no that's not what was confusing me [16:45] beelzabub: the process_template is actually made an event_emitter template [16:45] bradleymeck_: yes [16:45] beelzabub: then process is instantiated from process_template [16:45] beelzabub: after the conversion [16:45] beelzabub: i missed that part [16:46] bradleymeck_: its an odd way of setting that, i think he should rename process_template [16:46] beelzabub: i'd rather have EventEmitter return the functiontemplate [16:46] beelzabub: that would make the inheritance clearer [16:47] bradleymeck_: js side or c++ side we talking about now? [16:47] beelzabub: c++ [16:47] polotek: nah, you can't really do it that way [16:47] polotek: like I said, it's the way v8 is set up [16:48] beelzabub: Local process_template = node::EventEmitter::NewTemplate() [16:48] beelzabub: why not? [16:48] polotek: EventEmitter isn't a constructor template [16:48] aliem_ has joined the channel [16:48] polotek: it's a C++ class [16:48] beelzabub: EventEmitter has a constructor_template [16:48] polotek: you create a contructor_template from a C++ function with v8 [16:48] beelzabub: which it initializes from process_template [16:48] polotek: basically it's a mapping [16:49] polotek: it says "when you see this js function, call this C++ function instead" [16:49] beelzabub: you're misunderstanding my position [16:49] polotek: so there's a difference between EventEmitter and the EventEmitter constructor template [16:49] polotek: perhaps [16:50] beelzabub: i'm saying it's confusing to have the Initialize function of the EventEmitter actually take over the parameter [16:50] beelzabub: stylistically the code is initializing a singleton [16:50] beelzabub: rather functionally [16:50] bradleymeck_: beelzabub only problem i see is moving around the EventEmitter::Emit [16:50] beelzabub: but stylistically there's no such indication [16:51] mscdex: !tweet @timwhitlock look into using a Buffer instead of packing binary data into a string [16:51] beelzabub: bradleymeck_ : how do you mean? [16:51] beelzabub: polotek: My point is that EventEmitter::Initialize shouldn't take any parameters [16:51] beelzabub: it should be a singleton initialization of constructor_template [16:51] c4milo: beelzabub: process has a EventEmitter [16:51] polotek: beelzabub: I definitely not getting you [16:52] beelzabub: then EventEmitter should have a different function that returns a FunctionTemplate [16:52] keeto has joined the channel [16:52] polotek: you can create as many Event Emitters as you want [16:52] beelzabub: The constructor_template member variable of the C++ EventEmitter class is a singleton [16:52] kodisha_ has joined the channel [16:52] polotek: not in the traditional sense it's not [16:52] polotek: it's a variable representing the EventEmitter constructor [16:53] amerine has joined the channel [16:53] beelzabub: sure [16:53] beelzabub: the js EventEmitter constructor [16:53] c4milo: beelzabub: yes [16:53] bradleymeck_: polotek hes making sense, im just reading code to see if he is right [16:53] beelzabub: but within the C++ it's coded like a singleton - without making it obvious that that's the case [16:53] b_erb has joined the channel [16:54] EyePulp has joined the channel [16:54] beelzabub: so I think it should be node::EventEmitter::Initialize() [16:54] beelzabub: Local process_template = node::EventEmitter::ConstructorTemplate() [16:54] beelzabub: or something along those lines [16:55] bradleymeck_: seems reasonable to me since you dont want to override the constructor template for EventEmitter, throw up a patch? [16:55] beelzabub: i can't :( [16:55] bradleymeck_: emit doesnt seem to use the constructor [16:55] beelzabub: haven't gotten authorization from the lawyers [16:55] beelzabub: bradleymeck_ - how do you mean? [16:55] mikeal has joined the channel [16:55] polotek: bradleymeck_: I did notice that [16:56] polotek: basically emit is duplicated in C++ and js [16:56] polotek: not sure why that is [16:56] polotek: But I'm still not understanding the constructor change you guys are talking about [16:56] bradleymeck_: EventEmitter::Emit is a free standing function, i dont ever see it being used [16:56] mscdex: there's been discussion about that [16:56] polotek: or rather, the way I understand it, it doesn't buy you anything [16:56] beelzabub: the C++ version isn't used [16:57] mscdex: from what i remember/understand, the C++ version is there mainly for addons to easily emit events [16:57] c4milo: I don't see where it's duplicated in js [16:57] bradleymeck_: and you must have a terrible time coding in free time if you cant code submit patches to OS projects in free time [16:57] polotek: beelzabub: it can be if you're writing addons [16:58] derferman has joined the channel [16:58] beelzabub: bradleymeck_ : this isn't free time [16:58] beelzabub: otherwise, i do contribute patches [16:58] bradleymeck_: true but you havent written it [16:58] polotek: beelzabub: are you talking about whether you can sign the cla? [16:58] polotek: yeah I get that [16:58] bvleur has joined the channel [16:58] mscdex: iirc ryah has discussed moving eventemitter stuff entirely to js or c++ [16:58] bradleymeck_: you know like when you get off work [16:59] beelzabub: unfortunately my only laptop with me is my work laptop [16:59] bradleymeck_: mscdex i thought he decided on both a hard and soft duplication? [16:59] polotek: mscdex: I don't think all of it needs to be in C. But Emit is handy for addons [16:59] polotek: just doesn't make sense to duplicate it [16:59] polotek: when it's easy to expose it to js [16:59] beelzabub: also it's a pretty big grey area [16:59] beelzabub: i'd rather just push management to let me sign the friggen license agreement [17:00] bradleymeck_: sounds reasonable [17:00] c4milo: I would prefer that ryan move eventemittre to c++ . In that way, you can use it from c++ and js [17:00] beelzabub: why can't you just call the JS code from C++? [17:01] c4milo: o_O [17:01] polotek: beelzabub: you can also that, but it's a PITA [17:01] c4milo: yeah [17:01] polotek: it's already available on both sides, we're saying the code is actually duplicated [17:01] beelzabub: maybe, but it's not like the C++ signature is friendlier [17:01] c4milo: beelzabub: docs :) [17:01] polotek: so here's the deal [17:02] polotek: if it's a C++ function then you can put a v8 wrapper around it and expose it to js [17:02] rauchg_ has joined the channel [17:02] polotek: and call it like a normal js function [17:02] polotek: you just have to do the type conversions from js data to C++ [17:02] polotek: but if it's a js function and you want to use it in C++ [17:02] c4milo: js to C++ ? [17:02] beelzabub: but yes - it's a good idea to at least re-write the C++ version to call the JS version or vice-versa [17:02] bradleymeck_: you have to make Arguments , populate em, then Call mmm mmm good [17:03] polotek: you have to grab the function instance, convert all of your data to js handles and then call them [17:03] polotek: bradleymeck_: word [17:03] sudoer has joined the channel [17:03] beelzabub: you already have to do that [17:03] beelzabub: have you looked at the C++ signature [17:03] beelzabub: ? [17:04] polotek: beelzabub: no it's the difference between node doing it once and every addon dev having to do it themselves [17:04] c4milo: and C++ signature doesn't say nothing because Argument is wrapping all the params [17:04] beelzabub: polotek: my point is that there should be a convenience C++ API that is slightly easier to call from regular C++ [17:04] polotek: c4milo: yeah, you end up with two functions [17:04] polotek: one that is the js interface with Arguments [17:04] beelzabub: e.g. use stl string instead of Handle [17:04] polotek: then you break up Arguments into individual C vars and pass it to a lower function [17:05] polotek: you could also do all the work in the js Interface, but it's better to separate the concerns [17:05] beelzabub: polotek: i agree [17:05] beelzabub: anyways - my original problem is i'm seeing a segfault in FatalException [17:05] polotek: beelzabub: Handle is v8 [17:05] beelzabub: and i'm not seeing anything super-wrong there [17:05] polotek: you have to use those [17:05] polotek: they are pretty easy to unwrap if you know that data type [17:06] polotek: but many times you have to do some checking [17:06] polotek: that's the point of the js interface function I'm talking about [17:06] beelzabub: wrapping/unwrapping costs - i actually got rid of a lot of that unnecessary stuff [17:06] beelzabub: i suspect the crash is related to using the arm simulator [17:06] rwaldron has joined the channel [17:06] polotek: beelzabub: it's not that expensive. it's just a reference. and what I"m saying is you have to do that [17:07] polotek: that's the way v8 transfers between C++ and js [17:07] beelzabub: polotek: i meant wrapping/unwrapping to utf8 data [17:07] polotek: beelzabub: do you want to send a code snippet if your issue? [17:08] polotek: beelzabub: yeah you should work with C datatypes up until the very last minute you pass back to js. that's true [17:08] beelzabub: polotek: again - i can't :( [17:08] beelzabub: i really just want to put our thing up on github & do this properly [17:09] polotek: beelzabub: maybe create a contrived example that reproduces your problem [17:09] polotek: rather than sending proprietary code [17:09] beelzabub: oh - you meant the crash? [17:09] jansc has joined the channel [17:09] V1 has joined the channel [17:09] beelzabub: i'm trying to get that myself from the developer that reported it [17:09] beelzabub: i strongly suspect it's the ARM simulator [17:09] polotek: bradleymeck_: what's the status of node-overload? [17:10] bradleymeck_: until someone wants me to add something, stasis [17:10] polotek: I mean is it pretty stable? [17:10] bradleymeck_: i havent had it crash in a month or so [17:11] bradleymeck_: couple ppl are using its proxy api [17:11] polotek: word [17:13] mikeal: haha [17:13] kriszyp_ has joined the channel [17:13] mikeal: this thread about the Manning book is hilariuos [17:13] mikeal: so much unwarranted speculation [17:13] bradleymeck_: 10-1 its using old specs [17:14] jesusabdullah: What book? :/ [17:15] ThePub: Manning tends to jump into languages like Node early-on and evolve the book to a first stable release. [17:16] polotek: yeah I remember them soliciting feedback about this book months ago [17:17] polotek: beelzabub: so I finally understand the change you're proposing [17:18] polotek: it's small and more to make it easier to understand what's happening with process right? [17:18] polotek: doesn't change anything functionally [17:21] creationix: isaacs_home: ping [17:21] creationix: mikeal: agreed [17:21] _announcer: Twitter: "@paulrouget you mean node.js, right? that's the most common" -- Thomas Bassetto. http://twitter.com/tbassetto/status/19355758246 [17:22] polotek: creationix mikeal you guys were in on the discussion about adopting console.* right? [17:22] creationix: I think that was a ryah thing [17:22] mikeal: there was a discussion? [17:22] mikeal: :) [17:22] polotek: hehe [17:22] mjr_: Yeah, I think that was just done by fiat. [17:23] creationix: we talked about streams and pausing [17:23] mjr_: Which is often a fine way to do things. [17:23] mikeal: when i saw console.log i thought it was a good idea [17:23] polotek: maybe I'll be able to convince him to take out the formatter [17:23] creationix: I like the console stuff [17:23] mikeal: because i type sys.puts in my browser js all the time [17:23] mikeal: and would like to stop [17:23] mscdex: i never do :-D [17:23] polotek: and just have it handle variable arguments and join them [17:23] creationix: yeah console has almost become a standard in the browser [17:23] polotek: dont' wanna get rid of it [17:23] [[zz]] has joined the channel [17:23] polotek: just remove the string formatter [17:23] creationix: they're all implementing it now [17:24] tjholowaychuk: im with polotek [17:24] polotek: which also doesn't jibe with the emerging browser standard [17:24] tjholowaychuk: dont want my console.log to become printf [17:25] mscdex: i admit i'm not a twitter user, but is there some way to see the back and forth conversation between two users on one page? [17:25] polotek: we do need a printf module though :) [17:25] mjr_: Although I would really like a printf [17:25] mjr_: ha [17:25] tjholowaychuk: polotek: ive done it a few times [17:25] mjr_: Yeah, I think that's reasonable. The point of calling it console.log in the first place is to make the API more similar to that of the browser. [17:26] polotek: mjr_: there is http://twonvo.com/ [17:26] tjholowaychuk: but my "ext" lib printf is a little weak, and could be moved out [17:26] polotek: but it's limited [17:26] jakehow has joined the channel [17:26] polotek: I actually had the idea to do a better one [17:26] pquerna: tjholowaychuk: async exports are really cool. [17:26] tjholowaychuk: pquerna :D [17:27] polotek: mjr_: you can also search for the status on search.twitter.com [17:27] polotek: and there's a Show Conversation link [17:27] polotek: also limited, but works [17:27] pquerna: running into one issue now, I have one piece of code that relies upon a global value (yes, ugh, process.env.HOME)... so I kind of want an serial() layer in expresso... I've started using beforeExit as a hack to get the behavoir. thoughts? [17:27] mjr_: mscdex asked about twitter, BTW. [17:28] polotek: uuuh [17:28] polotek: yeah [17:28] polotek: sorry [17:28] pquerna: tjholowaychuk: http://github.com/cloudkick/cast/blob/master/tests/misc.js#L57 [17:29] mscdex: twonvo doesn't seem to work well... :-\ [17:29] mscdex: oh well [17:29] mostlygeek has joined the channel [17:29] Egbert9e9 has joined the channel [17:29] tjholowaychuk: pquerna: haha nice :) and it works fine? [17:29] pquerna: tjholowaychuk: i guess i can use an async.serial / step inside a normal assert, btu then all of my tests that need to use that need to be inside one serial() [17:29] pquerna: tjholowaychuk: yeah, it does :) [17:29] tjholowaychuk: nice lol [17:29] mscdex: there should be a way to show threaded conversations for all conversations, just by typing in a twitter user's name [17:29] tjholowaychuk: i will eventually add some helpers for serial stuff [17:30] mscdex: have it paged or something [17:30] aliem has joined the channel [17:30] mitkok has joined the channel [17:31] pquerna: tjholowaychuk: oh, one other question, on node-jscoverage, I couldn't seem to get the //#JSCOVERAGE_IF comments to ignore sections to work. is support just missing in the console outputer? [17:31] femto has joined the channel [17:31] tjholowaychuk: pquerna: hmm maybe I actually never used that [17:31] polotek: mscdex: agreed [17:32] polotek: doing that is harder than it needs to be with the api though [17:32] pquerna: simulating fs.unlink failing is difficult to test :) [17:32] ryan_gahl has joined the channel [17:32] mscdex: tinythread.com looks nice, but it requires you to actually be logged into the account [17:32] mscdex: :-\ [17:33] polotek: pquerna: don't use the real fs. mock it and have unlink return an err [17:33] pquerna: tjholowaychuk: ps, first round of beer on me if we ever meet, i really like expresso [17:33] tjholowaychuk: pquerna: sounds good man! [17:35] joshbuddy has joined the channel [17:36] mscdex: oh nice, i found something that is halfway decent [17:36] mscdex: http://www.designmeme.com/twitterscope/ [17:37] saikat has joined the channel [17:38] polotek: mscdex: that is pretty nice [17:38] polotek: they're all mixed [17:38] polotek: but it's a start [17:38] polotek: what I want is a service where I can give it any status message [17:38] mjr_: mscdex: Almost a year ago, I was working on an HTML5 twitter client that could assemble conversations, work offline, etc. [17:38] polotek: and it will rebuild all the threads that it is a part of [17:38] mjr_: But twitter makes this really hard to get right. [17:38] polotek: regardless of if it's the head or not [17:39] mjr_: By not encouraging the reply to links be used. [17:39] mscdex: polotek: i was actually looking for something that mixed all of them [17:39] polotek: word [17:39] _announcer: Twitter: "node.JS approach: world == events, software == callbacks. @timbray #oscon" -- Mark Masterson. http://twitter.com/mastermark/status/19356968577 [17:39] mscdex: i was mostly looking for one for the nodejsbot account ;-) [17:40] _announcer: Twitter: "Hmm. @timbray didn't go into much detail of node.JS "event machine" concepts, punted to videos by Ryan Dahl #oscon" -- Mark Masterson. http://twitter.com/mastermark/status/19357063541 [17:42] _announcer: Twitter: "http://jsconf.eu/2009/video_nodejs_by_ryan_dahl.html Video: Node.js by Ryan Dahl - JSConf.eu - 2009" -- Masaki Iwamoto. http://twitter.com/fulsat9/status/19357133893 [17:43] jashkenas has joined the channel [17:44] grahamalot has joined the channel [17:44] JimBastard has joined the channel [17:46] bvleur: I've got two network streams in node communictating. If one endpoint call "end()" the other gives "Stream error: Error: ECONNRESET, Connection reset by peer" [17:46] bvleur: Why is it considered an Error? How should I end a connection properly? [17:47] phiggins has joined the channel [17:47] JimBastard: bvleur: code paste? [17:48] bvleur: JimBastard, I currently don't have a seperate test-case, so it's quite huge :) [17:48] polotek: bvleur: you're using net not http right? [17:49] bvleur: net indeed. net.createConnection on one side, net.listen on the other [17:49] polotek: bvleur: which side is calling end? [17:49] mjr_: bvleur: listen for close or error on the other end, I forget which. [17:49] bvleur: createConnection side [17:49] mjr_: It's only a fatal exception because you aren't listening for the right event. [17:50] jashkenas has joined the channel [17:50] bvleur: Okay. I'm listening to close now, but now the connection doesn't seem to close. How do I ACK it? [17:51] mjr_: how are you telling that the connection doesn't close? [17:51] jashkenas has left the channel [17:51] polotek: new console format function [17:51] polotek: http://gist.github.com/487786 [17:51] _announcer: Twitter: "Gonna build full support for TJ's node.js "keys" tonight. Wouldn't be to hard as I got base utils done now." -- Arnout Kazemier. http://twitter.com/3rdEden/status/19357754874 [17:51] bvleur: mjr_ The close event doesn't seem to fire on the "createConnection" side [17:51] mjr_: You don't need to ACK anything at this level. It's all handled at a much lower level. [17:52] mjr_: It might be "end" and not close. [17:52] mjr_: I forget. [17:52] mjr_: The docs are conflicted on the matter. [17:53] mjr_: embarrassingly [17:53] polotek: there is both [17:53] Ori_P has joined the channel [17:53] polotek: end() sends FIN and close() actually destroys the file descriptor [17:53] victorstan has joined the channel [17:53] jashkenas has joined the channel [17:53] polotek: or at least that's how I understood it [17:54] bradleymeck_: mscdex what did you need off nodejsbot? [17:54] jashkenas: anyone know if NPM's "root" and "binroot" are documented anywhere, or how they should be used? [17:54] mjr_: polotek: I'm talking about events. Which are you supposed to listen for to tell that the connection has gone away? [17:54] mjr_: close or end? [17:54] polotek: mjr_: end [17:55] mjr_: bvleur ^^ [17:55] bvleur: When I'm calling close on the client-side I get: Notification: Stream.prototype.close has been renamed to end() [17:55] mjr_: Try listening for an "end" event on the client side. [17:56] polotek: hmmm. I don't know [17:56] bvleur: Now client-side is calling end(), listening to both 'close' and 'end'. Server-side is listening to 'end' [17:56] polotek: haven't used net in a while [17:57] bvleur: on calling end() client-side, server-side raises the 'end'- event.. which is fine [17:57] bvleur: but client side doesn't do raise / emit anything [17:58] bradleymeck_: mscdex ill add tweetbacks to _frankie soon [17:58] jashkenas has left the channel [17:58] mjr_: bvleur: if you can boil this down to two small programs, one for client and one for server, it'd be easier to help. [17:59] bvleur: mjr_, doing just that. Don't want to bother you with a node print-server parsing PJL and using ghostscript and stuff :) [17:59] bvleur has left the channel [18:00] bvleur has joined the channel [18:00] pnewhook has joined the channel [18:01] mape: Hmm node book, wouldn't it be better to do a open source kinda deal that is updated on the fly rather then have a book that is old when it is released? [18:02] quirkey_ has joined the channel [18:02] mjr_: mape: some people like to hold a chunk of tree in their hands. [18:02] technoweenie has joined the channel [18:02] mjr_: But I think an open source online thing would be great too. [18:03] mape: mjr_: And even better if the tree contains old info? [18:03] pnewhook: I don't think the two are mutually exclusive. But I'm all for having a printed guide. Plus, it's going to be at least a year and a half before the printed copy comes out. The platform will have cooled down by then [18:03] bvleur: Yeah, that's what symfony (php framework) does with their books too.. really like that and seems to work okay for them [18:03] rwaldron has joined the channel [18:03] mjr_: My mom has this huge book next to her computer that was printed in like 1999: World Wide Web Directory [18:05] sh1mmer has joined the channel [18:05] pnewhook: I always think of the Django book when I think of living online references that also exist as a commercial product. [18:06] _announcer: Twitter: "Tim Bray (http://bit.ly/c5aTY6) talking about concurrency, erlang and node.js at #oscon http://twitpic.com/27xmlr" -- Federico Cargnelutti. http://twitter.com/fedecarg/status/19358659041 [18:06] BrianTheCoder has joined the channel [18:07] sh1mmer: Maybe I should actually go to the conference. If only I wasn't wanting for LeRoux. That guy isn't to be trusted. [18:07] _announcer: Twitter: "Tim Bray talking about concurrency, erlang and node.js at #oscon http://bit.ly/c5aTY6 http://twitpic.com/27xmlr" -- Federico Cargnelutti. http://twitter.com/fedecarg/status/19358737356 [18:08] mjr_: sh1mmer: how did your talk go yesterday? [18:08] sh1mmer: Good [18:08] mjr_: The twitterverse seemed pretty active during and immediately after. [18:08] mjr_: Lots of people there? [18:08] rwaldron: are you planning on posting the presentation? [18:08] sh1mmer: Packed room, but people seemed really into it [18:08] mjr_: cool [18:08] sh1mmer: rwaldron: Yeah, today [18:08] rwaldron: rad [18:09] rwaldron: looking forward to it [18:09] sh1mmer: I guess I could do it now if I got off my iPad [18:09] sh1mmer: Its pretty introductory [18:09] rwaldron: no rush [18:09] tmedema has joined the channel [18:09] rwaldron: i'm still pretty "node introductory" :P [18:09] sh1mmer: If you want advanced node topics thats goming to be jsconf.eu [18:09] tmedema: anyone managed to run node on android ? [18:10] ThePub has joined the channel [18:10] sh1mmer: rwaldron: No i mean it's super introductory. If it were a book it would be cardboard and have teethmarks in it [18:10] rwaldron: no, but i have a "note to self" to try running on my palm pre [18:10] sh1mmer: Brb [18:11] mjr_: I'm more interested to see the audience reaction. [18:11] mjr_: I already know a lot about node. :) [18:12] mjr_: I'm also interested in heard how people explain node. [18:12] ThePub has joined the channel [18:13] sh1mmer has joined the channel [18:13] sh1mmer: yo [18:13] sh1mmer: ACTION on a computer now [18:13] mjr_: Didn't notice that you'd left. [18:14] mjr_: I'm interested in seeing the audience reaction and how people explain node. Was there video of your talk? [18:14] sh1mmer: I switched from my ipad [18:14] sh1mmer: mjr_: sadly no [18:14] sh1mmer: you can watch my txjs talk [18:14] sh1mmer: I've been revving some of the material [18:14] sh1mmer: because I lot of people don't grok it [18:14] sh1mmer: so if you dive in you leave them behind [18:14] sh1mmer: way behind [18:15] mjr_: yeah, totally. [18:15] sh1mmer: so this deck was a mix of why we do SSJS, some of ryah's stuff from jsconf.eu 09 and some other node JS stuff I have [18:15] mikeal: i want to talk about how Whisky is made [18:15] sh1mmer: and then I did some console demos [18:15] mikeal: that would be a good talk [18:15] mjr_: I've tried explaining it a few times to different people who are very comfortable in other languages, and it takes a long time to sort of click. [18:15] sh1mmer: mikeal: I'm writing for webstylemag about bike mechanics [18:15] polotek: mjr_: yeah, people get hung up on concurrency [18:16] sh1mmer: because I'm a fucking hipster douchebag that lives in the mission [18:16] polotek: even though there isn't any :) [18:16] mjr_: sh1mmer: please tell me you don't have any brakes on your bike [18:16] mikeal: hahaha [18:16] polotek: and then they get really pissed about the callback structure [18:16] polotek: even though they do it all the time client-side [18:16] sh1mmer: mjr_: I have a front brake on my bamboo fixie [18:16] rwaldron: i <3 evented callbacks [18:16] mjr_: I guess that cancels out. [18:16] sh1mmer: my road bike has brakes, obviously [18:16] mikeal: i didn't have breaks on my bike a few years back, but when I got back on this year I needed to stick a brake back on [18:17] sh1mmer: mikeal: I have a break just because I think it's the not stupid thing to do [18:17] sh1mmer: I literally flipped my bike the other week and landed on my head [18:17] sh1mmer: which is why I wear a helmet [18:17] mikeal: i rode for a year and a half with a brake and the last like 4 months I didn't even use it, so when i got my new bike i went without [18:17] mikeal: but then not riding for a year made me be like "i should get a brake, so that i don't die" [18:17] sh1mmer: mikeal: it just needs 1 time, man [18:17] mjr_: When I bicycle, I use both gear and dual brakes. [18:18] sh1mmer: mjr_: I'm into bikes, i have 4 bikes, and they all have different riding styles [18:18] mikeal: mjr is so hardcore he rides his motorbike with no brakes :) [18:18] sh1mmer: but I can stop the fixie on a dime [18:18] mjr_: awesome [18:18] V1: What kind of bikes do you have sh1mmer ? [18:18] blowery: ACTION finds a dime [18:18] sh1mmer: mjr_: it's all about leg strength [18:19] sh1mmer: V1: I have a bamboosero track frame [18:19] sh1mmer: which I built up with some random crap I had around [18:19] mjr_: I ride a motorcycle every day, so I can sympathize on how cars never see you, but that's about it. [18:19] creationix: I got a hard-tail 27 speed with disk brakes [18:19] blowery: mjr_: what kind of motorcycle? [18:19] sh1mmer: deep-vs a phil woods front hub and a velocity rear hub [18:19] creationix: it's great for commuting [18:19] blowery: mjr_: i found that a modulated headlight really helps [18:19] mjr_: blowery: Aprilia Tuono 139 [18:20] sh1mmer: and then I have an 80s road bike, a nice peugot [18:20] mjr_: blowery: The Aprilia has dual low beams, both H11 halogens that are pretty fucking bright. [18:20] sh1mmer: and an aluminium road bike and a bmx which I hardly use [18:21] mjr_: JavaScript programmers like 2 wheels I guess. [18:21] blowery: mjr_: nice bike. bright lights help, but flashing bright lights are even better. [18:21] sh1mmer: mjr_: I get biking too. My Dad was an instructor. So I grew up with that whole thing [18:21] blowery: mjr_: i had a honda shadow ace for a few years [18:21] creationix: http://creationix.com/piaggio_mp3.jpg [18:21] creationix: I need to rewite my lights to both light up [18:22] mjr_: Yeah, creationix needed an extra wheel. [18:22] V1: Not to bad, I got a Ducati 848 and a KTM 1190 RC8-R :) [18:22] creationix: I hardly have trouble being seen [18:22] mjr_: V1: euro bikes FTW [18:22] blowery: what's riding one of those like creationix? how's it turn? [18:22] polotek: creationix: that's awesome [18:22] creationix: blowery: just like a regular bike [18:23] creationix: the wheels shift when you lean [18:23] blowery: neat [18:23] creationix: and it's 500+ lbs dry [18:23] creationix: pretty heavy [18:23] sh1mmer: those are cool in town [18:23] blowery: on the bigger trikes you have to drive 'em like a car. it's bizarre. [18:23] V1: mjr_: Yeah :p [18:23] polotek: creationix: can you do wheelies and ramp off things? [18:23] sh1mmer: because they are way more stable in traffic [18:23] bradleymeck_ has left the channel [18:23] polotek: cause if so, I"m sold [18:23] ryan_gahl: my dream bike: http://www.motorcyclecruiser.com/newsandupdates/2004_honda_valkyrie_rune_1800/photo_02.html [18:23] ryan_gahl: hi all [18:23] blowery: ryan_gahl: totally. that's a great bike. [18:23] creationix: sh1mmer: I like mine because I don't get whipped by wind on the highway [18:23] technoweenie: fictorial: hey does redis-node-client do the new redis multi crap [18:23] _announcer: Twitter: "Having tried both node.js and EventMachine to fulfill a particular task this week, I have to say that both are awesome but way too young." -- Clint Tseng. http://twitter.com/dgtljunglist/status/19359623214 [18:24] mjr_: V1: I recently also had a Moto Guzzi Quota 1100. [18:24] creationix: polotek: not hardly, it's only 250cc [18:24] V1: Nicee [18:24] blowery: though we get a ton of awesome customs up here [18:24] creationix: polotek: but it can do stoppies if you stand up and lean forward [18:24] blowery: half of 'em look like they'd break in half on the highway :) [18:25] creationix: the double wheels with disks make for quick stops [18:25] _announcer: Twitter: "look at this http://riakjs.org/ # nodejs" [tr] -- Osman Tanrıverdi. http://twitter.com/webcii/status/19359688550 [18:25] V1: What i really would like to have is a Confederate P120 Fighter. They are so cool [18:25] sh1mmer: technoweenie: didn't you just land in San Fran? [18:25] technoweenie: 2 weeks ago [18:25] V1: http://www.asphaltandrubber.com/wp-content/gallery/confederate-quotblack-flagquot-p120-fighter/confederate-black-flag-p120-fighter-1.jpg <-- [18:25] mjr_: My MG Quota in the wilds of Baja a couple of years ago: http://ranney.com/mjr/photos/baja/Roll%2071/xga_CIMG2429.JPG [18:25] technoweenie: but yes i am here now [18:25] ThePub has joined the channel [18:25] technoweenie: here=sf, etc [18:26] mjr_: V1: WTF is that thing? Insane. [18:26] V1: I know, it's amazing [18:26] tjholowaychuk has joined the channel [18:27] aliem_ has joined the channel [18:27] V1: The details on that bike, is just jaw dropping: http://www.asphaltandrubber.com/bikes/confederate-black-flag-p120-fighter/ [18:27] sh1mmer: technoweenie: :) I missed the drinkup sadly but it's awesome you are here [18:27] sh1mmer: by here I mean where you are right now, not where I am right now :D [18:27] technoweenie: thanks, i'm happy to be here [18:27] polotek: http://groups.google.com/group/nodejs/browse_thread/thread/523f152b638fc9c8 [18:28] technoweenie: polotek: deleted? [18:28] joshbuddy_ has joined the channel [18:29] polotek: what's deleted? [18:29] V1: ^ that patch also fixes a bug when you are dumping large binary files in console log. [18:29] damienkatz has joined the channel [18:29] bvleur: mjr_: client server example in node with no client events on end: http://gist.github.com/487833 [18:29] jchris has joined the channel [18:30] mjr_: jchris: node welcomes you! [18:30] polotek: V1: you mean Buffer objects? [18:30] ThePub has joined the channel [18:30] damienkatz: is it possible to embedded multiple node.js instances, each with it's own thread, in a single OS process? [18:30] bvleur: mjr_: However, I can't seem to reproduce the error I'm actually after.. which probably means this isn't the problem. [18:31] _announcer: Twitter: "Just published my #oscon slides on "Node.js and How JavaScript is Changing Server Programming" http://bit.ly/ahDkPi" -- Tom. http://twitter.com/sh1mmer/status/19360001238 [18:31] V1: polotek: yup, and just output of Buffer.toString() [18:31] jchris: sup mjr_ [18:31] mjr_: bvleur: got a lot of stuff happening on my end right now, can't look at this just now. [18:31] mjr_: Hopefully someone else can though. [18:32] mjr_: damienkatz: node wants ot be able to start its own threads to deal with blocking OS calls. [18:33] polotek: damienkatz: are you thinking of something different than child.spawn? [18:34] _announcer: Twitter: "Since it like that, will install # J'm'en nodejs on my server (and put on WebSocket:)" [fr] -- Seb Courvoisier. http://twitter.com/LePhasme/status/19360176407 [18:35] damienkatz: I'm thinking about embedding node into couchdb [18:35] polotek: http://developer.yahoo.net/blog/archives/2010/07/multicore_http_server_with_nodejs.html [18:35] polotek: recent article discussing some good stuff [18:35] polotek: check out the webworker section [18:36] mjr_: damienkatz: node really wants to be its own process [18:37] joshbuddy has joined the channel [18:37] damienkatz: mjr_: yeah, I'm seeing that. [18:37] mjr_: But couchdb + node sounds like an awesome combination. [18:37] polotek: ah, you want essentially want a more "headless" node process [18:38] polotek: that would be awesome. above my paygrade though [18:38] damienkatz: a big obstacle we're facing is we want to run couchdb + nodejs on iphone too. But no subprocesses are allowed. [18:38] mjr_: oh, right. [18:38] mjr_: Does V8 build on the iPhone? [18:39] zerovirtual has joined the channel [18:39] blowery: btw, video on that p-120 fighter http://www.youtube.com/watch?v=KPw0qLOtI0g [18:39] damienkatz: mjr_: no sure. Don't know why it wouldn't, except for ARM jit. [18:39] polotek: mjr_: no, I tried once. got a pile of errors. didn't try harder [18:39] mjr_: I think ARM support is pretty new for V8. [18:40] beelzabub: you can run v8 under arm on the desktop [18:40] beelzabub: add simulator=arm to cmd_R in wscript [18:41] beelzabub: i filed a bug in upstream v8 because console.log is broken by the v8 (i suspect the optimizer) [18:41] mjr_: damienkatz: assuming you can link your iOS app with some sort of Erlang library (can you?) then you could have that open a WebUIView or whateve rit's called. [18:41] mjr_: It doesn't have to be visible. [18:41] mjr_: but then you'd get a pretty good JavaScript runtime. [18:42] mjr_: I gotta run. [18:42] _announcer: Twitter: "DNode: Asynchronous Remote Method Invocation for Node.js and the Browser :: The Universe of Discord http://ow.ly/18gm4A" -- Javascript News. http://twitter.com/del_javascript/status/19360582909 [18:43] SubStack: ^_^ [18:44] aliem has joined the channel [18:45] bweaver has joined the channel [18:46] SvenDowideit has joined the channel [18:48] beelzabub: hey - quick question about the file API [18:48] _announcer: Twitter: "Remember #oscon if you didn't rate my Node.js talk you should http://bit.ly/aCTeXb please let me know what was good and bad so I can improve" -- Tom. http://twitter.com/sh1mmer/status/19360903659 [18:48] beelzabub: how do I determine once the async read is over & the file has no more information? [18:48] _announcer: Twitter: "@mastermark node.js has been on my girlish for a while. Need 2 clone." -- Luke Biddell. http://twitter.com/biddster/status/19360918069 [18:53] polotek: beelzabub: there is an end event [18:53] _announcer: Twitter: "After testing, we plan to make open-code most XMPP-server VKontakte written by Oleg Illarionov on node.js" [ru] -- Gleb Arestov. http://twitter.com/YodaPunk/status/19361227284 [18:59] blackdog has joined the channel [18:59] beelzabub: how do i listen for it? [18:59] beelzabub: does it return an object i can add a listener for? [19:00] JimBastard has joined the channel [19:00] JimBastard: omg its damienkatz ! arent you the guy who wrote the jet engine for msaccess! [19:00] JimBastard: ^_^ [19:01] _announcer: Twitter: "Awesome sauce for my personal project. #Node.js + #riak, with a side of ruby." -- Edward Muller. http://twitter.com/freeformz/status/19361667923 [19:01] JimBastard: !tweet @freeformz go go node.js! [19:02] rwaldron has joined the channel [19:03] linkwright has joined the channel [19:03] visnup has joined the channel [19:04] jxson has joined the channel [19:04] aliem has joined the channel [19:04] polotek: beelzabub: uh, hehe, never thought about it [19:04] _announcer: Twitter: "200 teams registered for node.js knockout!" -- node knockout. http://twitter.com/node_knockout/status/19361893426 [19:04] polotek: you're using fs.read() right? [19:05] polotek: maybe bytesRead == 0 means it's done [19:05] polotek: beelzabub: you'd probably do better with fs.createReadStream [19:06] polotek: that returns a stream and you can listen for "data" and "end" events [19:06] jherdman has joined the channel [19:07] rwaldron has joined the channel [19:10] pavan_ has joined the channel [19:10] damienkatz: JimBastard: wasn't me! [19:11] ironfroggy: I've been using Faye, but i was wondering if anyone knew anything about its support or plans for authentication? [19:11] programble has joined the channel [19:12] ironfroggy: I'm worried now that anyone who looks at the faye host:port in my js could use it for as many channels as they want, since its all open. [19:12] ironfroggy: im not even sure how to get around that when the clients need direct connections, that being the whole point. [19:12] derferman: damn, I really wanted to do node knockout. I didn't know they were only going to accept 200 teams [19:13] _announcer: Twitter: "I'm glad to see that allot of developers from the Netherlands are adopting node.js #node.js #ned we can almost build a user group :)" -- Arnout Kazemier. http://twitter.com/3rdEden/status/19362358586 [19:14] wao: nice [19:14] visnup: derferman: you can try to get onto someone else's team.. we might also try to cull out not-real teams [19:14] visnup: derferman: you gotta be fast! [19:15] derferman: visnup: I had no idea there was a team limit [19:15] derferman: but really, it's no excuse [19:15] polotek: derferman, hit the mailing list and petition [19:15] visnup: derferman: true, probably should've made that way more apparent [19:15] polotek: can't imagine they would turn away eager contestants [19:16] joshbuddy_ has joined the channel [19:18] _announcer: Twitter: "node.js looks pretty intense.....I am in a trolling mood today :) http://bit.ly/aWKPxI" -- Evan Sparkman. http://twitter.com/esparkman/status/19362659218 [19:19] _announcer: Twitter: "Just finished the flush, delete and version command for #nMemcached http://is.gd/dDHoY getting closer to a stable release #nodejs" -- Arnout Kazemier. http://twitter.com/3rdEden/status/19362698902 [19:19] aglemann has joined the channel [19:19] aglemann has left the channel [19:19] _announcer: Twitter: "Multi-Core HTTP Server with NodeJS (Yahoo! Developer Network Blog): http://yhoo.it/cXWlkN" -- zweinullweb. http://twitter.com/zweinullweb/status/19362720642 [19:19] _announcer: Twitter: "via Del.icio.us : Multi-Core HTTP Server with NodeJS (Yahoo! Developer Network Blog): http://yhoo.it/blkICB #social #networking" -- Karen Kinnaman. http://twitter.com/KarenKinnaman/status/19362723085 [19:21] creationix: who's got some $PS1 fu? [19:21] creationix: I want to create a custom prompt for Ivy [19:22] ryah: yo [19:23] creationix: ryah: yo [19:23] CIA-64: node: 03Andrew Naylor 07master * re0d6f14 10/ (TODO src/node_crypto.cc): Buffer for Cipher, Decipher, Hmac, Sign and Verify - http://bit.ly/ctntji [19:23] CIA-64: node: 03isaacs 07master * rf0f247d 10/ (lib/module.js lib/path.js test/simple/test-path.js): [19:23] CIA-64: node: Fix dirname so that dirname('/a/b/') -> '/a', like sh's does. [19:23] CIA-64: node: Before there was this comment: [19:23] CIA-64: node: Can't strip trailing slashes since module.js incorrectly [19:23] CIA-64: node: thinks dirname('/a/b/') should yield '/a/b' instead of '/a'. [19:23] CIA-64: node: But now, such thinking is corrected. - http://bit.ly/clH4eU [19:23] CIA-64: node: 03Ryan Dahl 07master * r138593b 10/ doc/api.markdown : Fix case in docs - http://bit.ly/aG5Xrt [19:23] ryah: we need base64 from buffers. [19:23] polotek: creationix: I stole most of my stuff [19:23] ryah: didn't tj have a patch for that? [19:23] polotek: but my prompt is pretty BA [19:23] creationix: tjholowaychuk: did you? [19:24] ryah: foudn it [19:24] V1: I would rather see the crypto module support more checksums and algorithms ;p [19:24] polotek: [3030][polotek@Polotek][~/src/node(master)] $ [19:24] ryah: tjholowaychuk: ping [19:24] maushu has joined the channel [19:24] skampler: ryah: what's the de facto equivalent to pointer artihmetic for buffers? [19:24] V1: like CRC32 etc, as openssl only provides a few basic checksums. [19:24] fictorial: technoweenie: hey, sorry was away... no, the redis client needs some love that I don't have much time to give lately. new daughter is finally home from the hospital since a few days ago... [19:25] ryah: skampler: eh - what do you mean? [19:25] ryah: skampler: offsets :) [19:25] technoweenie: fictorial: congrats man [19:25] fictorial: thanks! good if not exhausting times :) [19:25] gwoo has joined the channel [19:25] mape: fictorial: Congratulations! :D [19:25] technoweenie: fictorial: no worries then, i'll add it. [19:26] mape: Lots of time to code late in the evening now then ;) [19:26] skampler: ryah: ok [19:27] ryah: tjholowaychuk: nevermind, i want to do it on the buffer [19:27] polotek: creationix: http://github.com/polotek/dot-files/blob/master/.bashrc [19:27] skampler: fictorial: do you have plans to make the redis client more streaming? like for example getting a callback for each bulk reply in a multi bulk reply [19:27] polotek: check out the prompt stuff. starts about half way down [19:28] fictorial: skampler: I don't think redis streams responses to clients so no. each client gets the full response for some command. [19:29] fictorial: mape: yes, that's what I'm noticing... night duty frees up some time but damn I'm tired :) [19:29] jansc has joined the channel [19:29] mape: hehe yeah [19:30] blackdog has joined the channel [19:31] bmizerany has joined the channel [19:31] maushu: fictorial, hmm, streaming in readis? [19:33] technoweenie: fictorial: holy crap man, dont try to do too much oss w/ a newborn. you need that rest [19:33] technoweenie: i had to put my oss on hold for a while [19:33] technoweenie: though it was php and not my job so it wasnt a big loss [19:35] grahamalot has joined the channel [19:38] fictorial: yeah... thing is I start to get a little stir-crazy if I don't code for too long. sounds like an addict heh [19:39] fictorial: it's been about 6 weeks now that I've been AFK :) [19:40] Ori_P_ has joined the channel [19:41] mw_ has joined the channel [19:41] shimondoodkin: i have problems debugging nodejs with eclipse node does segmentation faults, has any one succeeded debugging nodejs [19:42] _announcer: Twitter: "Working on my first node.js project! Involves Google maps and WebSockets! :)" -- Simon Ljungberg. http://twitter.com/styrisen/status/19364023912 [19:44] aliem has joined the channel [19:45] tjholowaychuk: ryah: hey sorry im back [19:45] teemow has joined the channel [19:45] tjholowaychuk: i was just exposing it in crypto [19:47] jakehow has joined the channel [19:53] ryah: ACTION bit twiddles [19:53] mape: >> [19:54] tk: ouch, linkinus is using almost 3Gb of memory :( [19:54] V1: o_o! I think I just finished the base for the node memcached client. Thanks to the rock solid base i have written i was able to add 8 new working functions in 32 min. Finally hard work pays off ^_^! [19:54] saikat` has joined the channel [19:55] rgl has joined the channel [19:56] _announcer: Twitter: "@jensarps How do you think Mozilla's impl will compare to a BerkeleyDB-based in terms of performance? Would like to use this in NodeJS..." -- kriszyp. http://twitter.com/kriszyp/status/19364816297 [19:56] bradleymeck_ has joined the channel [19:56] kodisha has joined the channel [19:56] kriszyp: shimondoodkin: I get a lot of seg faults as well :/ [19:57] cha0s has joined the channel [19:58] tjholowaychuk: V1: not that i dont think it will be handy for keys, but is there even much of a point for memcache these days [19:58] sechrist has joined the channel [19:58] _announcer: Twitter: "@deepthawtz Here's a thread with my patches for console.log in #node.js. Don't know if it'll get accepted though." -- Marco Rogers. http://twitter.com/polotek/status/19364960804 [19:59] pdelgallego has joined the channel [20:00] saikat has joined the channel [20:00] creationix: is there a way for a bash script to know if it's being sourced or executed? [20:00] bradleymeck_: sourced? [20:00] sechrist: sup guys [20:00] creationix: . script.sh vs ./script.sh [20:00] V1: tjholowaychuk: It depends on the service you are building. Sure somethings can just stay in "normal" memory, but the memcached allows you to scale across servers. [20:01] polotek: creationix: what's the difference? [20:01] tjholowaychuk: V1: for sure, i just meant compared to redis/riak/couch/mongo etc [20:01] polotek: sechrist: yo [20:01] sechrist: Anybody screwed around with XMPP services or daemonizing in node? [20:01] creationix: with source, it's executed in the current bash shell, otherwise it's in a subshell [20:01] sechrist: I need a desktop client for meebo and I'm thinking of xmpping it [20:01] tjholowaychuk: creationix: check the pid maybe [20:02] polotek: creationix: ah [20:02] voodootikigod__ has joined the channel [20:02] creationix: basically I want to throw a warning if its executed [20:02] tjholowaychuk: creationix: $$ [20:02] creationix: I'll not set the execute bit, I think that may be enough [20:02] V1: tjholowaychuk: I think that will depend on the queries you are executing agains your k/v for example it might be usefull to store results of map/reduce in memcached. So I think they can co-exist fine together [20:03] MattJ: sechrist: a desktop client in Node? [20:03] bradleymeck_: im still waiting for a static server that preloads data into memory to send out while waiting on the file to finish opening. something i can set easily [20:03] eck has joined the channel [20:03] eck has joined the channel [20:04] V1: tjholowaychuk: And the best part about memcached is, that it take be configured to only take small parts of memory where it's available. A few chunks of 128mb from the front-end servers and 512mb from the backends and you have created a large memcached pool. Without having to install allot of services. [20:04] V1: that it can be* configured [20:04] maushu: How about redis? [20:06] V1: Doesn't redis store all "keys" in memory? or was that riak [20:08] voodootikigod___ has joined the channel [20:08] V1: "In order to be very fast but at the same time persistent the whole dataset is taken in memory" -- redis. So in order to be fast you NEED a machine with a shit load memory. Which i think is a downside. [20:09] mitkok has joined the channel [20:09] mape: So in order to be fast you need a machine with a fast CPU, Which I think is a downside. [20:10] V1: If you don't optimize for cold cache, there will be no warm cache ;) [20:12] polotek: V1: you are looking to run a small memcache on each machine in your cluster, rather than one big redis cache. is that it? [20:13] polotek: man I am none too sharp today [20:13] V1: polotek: I'm just pointing out that it's possible to use it that way, and it's the most common use for Memcached. But you can have dedicated machines as well. Like facebook is doing, they have 6000 dedicated memcached machines. ( If i remember correctly ) [20:15] V1: And not everybody is in the position to use a k/v storage because a well tuned innoDB mySQL cluster can preform really well. [20:15] polotek: why would you be able to get memcache installed but not something else like redis? [20:16] tjholowaychuk: AFAIK memcached is mostly still around for legacy reasons [20:16] polotek: it doesn't matter. I'm not saying you're wrong. [20:16] polotek: like I said, sharp as a bowling ball today [20:18] isaacs has joined the channel [20:18] isaacs: lolz, srsly? http://nodeknockout.com/teams/0ddc214cae2512f11b2c0000 [20:20] rwaldron: thats hilarious [20:20] visnup: isaacs: I'm pretty sure that's http://furiousdingdong.com/ [20:22] mape: people and their funnies [20:23] V1: polotek: k/v usually requires more CPU and disk space to run and has persistent data. Memcached is .. Just a cache the only thing it utilizes is the memory. But if redis or a other k/v suites you better than a memcached server than I would certainly go with that ;) [20:23] tpryme has joined the channel [20:23] isaacs: visnup: HOLY CRAP HOW AM I JUST FINDING OUT ABOUT THIS NOW [20:23] JimBastard: http://nodeknockout.com/teams/8f9f1a4c9ede00044a170000 - FTW [20:23] isaacs: this is hilarious!! [20:24] visnup: isaacs: I think my favorite one is the last one with the recruiter, but mostly because that same recruiter has contacted me before [20:24] isaacs: visnup: stephenson? [20:24] JimBastard: LOL im reading that shit now [20:24] isaacs: yeah [20:24] polotek: V1: indeed. but fyi, you can turn off persistence in redis [20:24] isaacs: visnup: he's emailed me, too [20:24] polotek: so it essentially becomes memcache with a better interface [20:25] V1: Didn't know that polotek :) [20:25] visnup: isaacs: no, brianna rooney - recruiters gone wild [20:25] markwubben has joined the channel [20:25] isaacs: dude, this is totally my new way to deal with obnoxious recruiters. [20:25] ryah: base64 is a bit annoying... [20:26] JimBastard: isaacs: i was wondering if you had a chance to finish that 8=====D feature yet for npm [20:27] isaacs: JimBastard: yeah, i was going to, but there were some 8===D~ complications [20:27] JimBastard: got ya, well if you have any more issues let me know and ill reach out to 8=====D [20:27] isaacs: hahah [20:27] isaacs: i hear you reach out that way a lot. [20:28] JimBastard: mostly just around [20:28] isaacs: OH! [20:28] isaacs: nsfw in the #node.js room!! [20:28] JimBastard: ACTION sues ryah for a hostile work enviroment  [20:28] mape: what is the PG rating of this room? [20:28] ionfish has joined the channel [20:29] JimBastard: mape just hit CMD-W to turn on safe mode [20:29] mape: How about you hit 8======D~ [20:29] mape: Seems you like it [20:30] JimBastard: im sorry i cant find the 8====D key [20:30] isaacs: JimBastard: It's usually underneath the keyboard tray [20:30] mape: Its probly in your 8==D~ [20:30] jxson has joined the channel [20:30] JimBastard: penis [20:30] mape: HOW RUDE [20:30] isaacs: JimBastard: WELL I NEVER!~! [20:30] mape: Go away nasty person of not god [20:31] JimBastard: ahaha [20:31] JimBastard: well in that case [20:31] qschzt has joined the channel [20:32] qschzt: re [20:32] bradleymeck_: ah good ole mailing lists for ecmascript its like im in the 90s all over again [20:33] qschzt: so as you might I have a growing number of github dependencies.. some updates (express) break things.. should I just fork them [20:33] tjholowaychuk: bahah segfault [20:33] qschzt: then at least I could control what goes into production from github :D then there's npm [20:34] tjholowaychuk: just use submodules [20:34] tjholowaychuk: and pick a sha that works for you [20:34] tjholowaychuk: simple as that [20:34] tjholowaychuk: PM sucks [20:34] mjr_ has joined the channel [20:34] tjholowaychuk: for any kind of deployment [20:34] qschzt: so instead of master, sha-switching [20:35] qschzt: yeah [20:35] tjholowaychuk: yup just pick a tag [20:35] qschzt: if no tags, fork it [20:35] tjholowaychuk: mm cyclic requires [20:37] JimBastard has joined the channel [20:38] qschzt: tj, so right, thanks :) [20:38] cadorn has joined the channel [20:39] tjholowaychuk: np [20:44] pavan_ has joined the channel [20:45] polotek has left the channel [20:45] huyhong has joined the channel [20:46] jxson has joined the channel [20:46] omarkj has joined the channel [20:48] tahu has joined the channel [20:49] eee_c has joined the channel [20:51] sechrist: MattJ: not a desktop client in node. a xmpp server hack thing that interfaces with meebo so I can use any xmpp client [20:51] sechrist: I wrote partial libpurple bindings for meebo in glib but I'd rather have something more portable [20:51] sechrist: so I can use ichat perhaps [20:52] sechrist: it's all simple longpolling [20:52] markwubben_ has joined the channel [20:52] tjholowaychuk: anyone else interested in a higher level Path obj? w/getters for dirname/basename/blah blah [20:52] micheil: tjholowaychuk: did you listen to the latest changelog episiode? [20:52] huyhong has left the channel [20:52] CIA-64: node: 03Ryan Dahl 07master * r528015e 10/ (4 files in 3 dirs): Implement buffer.toString('base64') - http://bit.ly/9EiFet [20:53] tjholowaychuk: micheil: yup! [20:53] micheil: good? [20:53] markwubben_ has joined the channel [20:53] tjholowaychuk: didnt hear the whole thing [20:53] tjholowaychuk: i dont like coffeescript [20:53] tjholowaychuk: so i didnt listen to that stuff [20:53] micheil: oh; well, near the end there was a mention on jade [20:53] tjholowaychuk: whoop [20:53] micheil: ACTION was actually the guest host [20:55] creationix: micheil: changelog? [20:55] creationix: or something else [20:55] micheil: yeah [20:55] micheil: http://thechangelog.com/post/849754840/episode-0-2-9-coffeescript-with-jeremy-ashkenas [20:56] MattJ: sechrist: How do you communicate with Meebo? [20:56] sechrist: http? [20:56] micheil: or xmpp [20:56] sechrist: no, http [20:56] micheil: or their custom protocol. [20:56] MattJ: They have a HTTP API? [20:57] sechrist: "API" [20:57] micheil: yeah [20:57] MattJ: Oh, some comet thing? [20:57] sechrist: their web application has to talk to something.. doesn't it? [20:57] MattJ: Yes yes [20:57] sechrist: yeah I mapped out their comet crap [20:57] sechrist: it's really simple [20:57] sechrist: I asked sue for docs and her reply was to just reverse it [20:57] MattJ: Why would you want to go via Meebo? :/ [20:57] sechrist: I loled [20:57] micheil: hmm.. Anita's the only one at meebo I know. [20:58] sechrist: well I think she was forwarding the reply of an engineer [20:58] sechrist: either way it was funny that they said to reverse their stuff [20:58] sechrist: and not 'don't do that' [20:58] MattJ: If they said "don't do that" would that have stopped you? :) [20:58] sechrist: but yeah I prefer meebo because all of my services' sessions are kept online by them [20:58] sechrist: no [20:58] micheil: meebo's fairly open & sound like a good company [20:58] sechrist: and when my pc goes idle everything falls back to my iphone without any hiccups [20:59] _announcer: Twitter: "Microsoft should contribute to the Ruby and NodeJS projects to make Windows a first class OS for those platforms." -- Kevin Dente. http://twitter.com/kevindente/status/19368294052 [20:59] sechrist: if trillian did that I'd give cerulean $25 but they're fags [20:59] micheil: they've also been around for a fair while. [20:59] MattJ: ACTION uses Meebo in the early days, but not for some years now [20:59] MattJ: *used [20:59] sechrist: cerulean doesn't keep sessions theirselves on their servers except for the iphone app [20:59] sechrist: which means that there's no syncing between the two [20:59] sechrist: aka useless to me if signing on to both kicks one off [20:59] sechrist: so yeah [21:00] wattz: uhhh, isn't extending Object's prototype bad? [21:00] sechrist: making meebo more desktop compliant is the feasible solution here [21:00] sechrist: wattz: ;) [21:00] wattz: ACTION shudders.. [21:00] wattz: reworking some code at work [21:00] sechrist: extending Object's prototype with extend [21:00] sechrist: seems to be popular [21:00] wattz: sechrist: yeah [21:00] wattz: what im staring at [21:00] MattJ: sechrist: Fair enough [21:00] JimBastard: !tweet @kevindente lol you are either epic funny or a retard [21:01] sechrist: there's no defined way to do it except in later ecmascript revisions I think [21:01] wattz: I don't see a problem with Object.extend({}, {}); but not {}.extend({}) [21:01] sechrist: I'm not sure on that [21:01] sechrist: but it's definitely not browser friendly [21:01] bradleymeck_: wattz whats wrong w/ prototypes? [21:01] micheil: your extending an instance of Object [21:01] wattz: bradleymeck_: nothing, i extend string all the time [21:01] micheil: not Object [21:01] wattz: micheil: right [21:01] MattJ: sechrist: I ported some libs from my XMPP server to Node, in order to make a component library... wouldn't take much work to have it accept client connections [21:01] wattz: doesn't it break for loops? [21:01] micheil: where as when you do: Object.extend(String, ....); [21:01] micheil: that's where you hit problems [21:02] wattz: micheil: how so? [21:02] sechrist: MattJ: well I dont really care about actual xmpp functionality per se, I want something I can log into that is like a meebo proxy if that makes sense [21:02] sechrist: xmpp is just a nice protocol to use for that [21:02] micheil: generally where you're extending an object, generally it's say an Options hash [21:02] wattz: like i said i though extending the prototype broke for loops [21:02] sechrist: I've thought about making a xmpp transport but that makes everything funky [21:02] _announcer: Twitter: "@kevindente Dear Kevin, out shareholders are not interested in Ruby or NodeJS. x0x0 Microsoft" -- Milan Negovan. http://twitter.com/MilanNegovan/status/19368494392 [21:02] wattz: xmpp is killer for webservices [21:02] MattJ: sechrist: Indeed, that's why it probably makes sense to use my code... it's a server but (currently) without the server [21:02] sechrist: oh snap [21:02] aliem_ has joined the channel [21:02] bradleymeck_: wattz we got us Object.keys and Object.getOwnPropertyNames to avoid the for in loop trouble i think you are talking about [21:03] sechrist: so it's a skeleton that handles stanzas and shit? [21:03] micheil: wattz: it does, unless you do: if( prop && hash.hasOwnProperty( prop ) ){} [21:03] MattJ: sechrist: Exactly [21:03] wattz: micheil: ohhhhhh [21:03] sechrist: link2github plz [21:03] MattJ: sechrist: It has an XMPPStream object which you feed raw data, and it spits out stanzas [21:03] wattz: bradleymeck_: so you have to know to use those [21:03] MattJ: handling stream stuff for you [21:03] bradleymeck_: same w/ a for in loop [21:03] wattz: bradleymeck_: aye [21:03] wattz: MattJ: you going to release it? I was thinking of a C++ module for node for xmpp [21:04] MattJ: sechrist: http://github.com/mwild1/xmppjs [21:04] sechrist: hmm so I still have to sift through the docs and figure out how to handle the xmpp side of authentication and whatnot [21:04] sechrist: and events and priorities and shit [21:04] MattJ: sechrist: Yeah, auth isn't hard, but isn't implemented [21:04] micheil: I actually think jsonmpp [21:04] sechrist: connect to xmpp as a component [21:04] sechrist: meaning I need an xmpp server running? [21:04] wattz: sechrist: aye [21:04] micheil: similar to xmpp, but uses json syntax [21:05] wattz: i dev with openfire [21:05] sechrist: kraken is nice [21:05] wattz: s/with/against [21:05] wattz: never seen kraken [21:05] sechrist: kraken is a transport clusterfuck [21:05] MattJ: sechrist: Correct, I wrote it as a component library... but the libs are all there for making a server out of it, depending on how far you want to take it [21:05] sechrist: for openfire [21:05] MattJ: Most people I know are using http://spectrum.im/ now [21:06] wattz: you guys know who wrote meryl for node? [21:06] sechrist: i've wondered how to handle the multiservice nomenclature for xmpp names [21:07] sechrist: awesomefriend10@aim#awesomeguy20 [21:07] _announcer: Twitter: "BTW, I'm not even talking about deploying NodeJS and Ruby into production onto Windows. Just running well on the dev desktop would be a win" -- Kevin Dente. http://twitter.com/kevindente/status/19368752462 [21:07] qschzt: guys what xmpp do we have in node now? please [21:07] wattz: heh, my code style slightly changes when i go from metal to rap :D [21:08] MattJ: qschzt: I wrote xmpp.js, Astro then wrote one called node-xmpp [21:08] micheil: the biggest problem with XMPP is parsing that xml part. [21:08] MattJ: micheil: I wouldn't call it a "problem", any decent SAX parser will do [21:08] micheil: :/ [21:08] wattz: eh xml [21:08] sechrist: with streams? [21:08] MattJ: Sure [21:09] wattz: i will leave xmpp server to jabber guys [21:09] wattz: xmpp node clients aren't bad [21:09] sechrist: streaming tokenizers that don't suck turn me on [21:09] wattz: USE JQUERY [21:09] wattz: :D [21:09] mde: Do people still use strophe.js? [21:09] qschzt: I used strophe.js [21:09] MattJ: Sure, I use it all the time [21:09] sechrist: stropbleh [21:09] mde: I contributed to it. [21:09] qschzt: and xmpp .. now I'm using amqp and web socket :) [21:09] MattJ: mde: then thanks :) [21:10] mde: The code was a huge mess, but it worked well. [21:10] qschzt: it did. [21:10] wattz: are there any node 'frameworks' that don't hard code Content-Type to text/html? [21:10] MattJ: Yes, it's on my todo to give them a hand refactoring it (xmpp.js is a cleaner implementation of some parts of it) [21:10] micheil: qschzt: which websocket server? [21:10] MattJ: Like allowing it to go over websockets [21:10] mde: wattz: Geddy does content-negotiation. [21:11] qschzt: micheil, socket.io-node :) [21:11] micheil: :( [21:11] qschzt: hehe [21:11] MattJ: I've got the server-side XMPP websocket stuff done (though it needs updating for the latest spec probably now) [21:11] MattJ: Just need to get strophe working with it [21:11] mde: Based on path extension, and what you tell a controller to respond with. [21:11] MrTopf has joined the channel [21:12] mde: And accepts-header, of course. [21:12] MrTopf: good evening [21:12] mde: wattz: http://geddyjs.org/ [21:13] dgathright has joined the channel [21:13] wattz: mde: looking thanx [21:13] qschzt: is xmpp going to be obsoleted by web socket? [21:13] mde: wattz: Lemme know stuff that needs fixing. :) [21:13] MattJ: qschzt: That's like asking if SMTP is going to be obsoleted by TCP [21:14] MrTopf: qschzt: unlikely, it has different use cases [21:14] mscdex: heh [21:14] qschzt: BOSH etc is already looking lame-ish [21:14] qschzt: (it works though) [21:14] mscdex: xmpp would be a layer on top of websockets [21:14] wattz: mde: Im Wess btw [21:14] MattJ: BOSH is more deployable than websocket is right now [21:14] wattz: we talked over msg [21:14] wattz: Github msg [21:14] MattJ: and since the wheels are in motion for XMPP over websockets... [21:14] qschzt: mattj, true [21:14] mde: wattz: Ah, right on. :) [21:15] qschzt: xmpp over websocket would be useful, mainly for Presence [21:15] qschzt: and Roster [21:15] mscdex: bosh? [21:15] tpryme: who's working on xmpp over websocket? [21:15] wattz: mde: i like geddy btw, just don't like rails routing is all [21:15] mscdex: bourne on shell? [21:15] mscdex: :P [21:15] mape: micheil: never was a talk about websockets on the changelog? [21:16] micheil: mape: not in that episode. [21:16] qschzt: mscdex, http://xmpp.org/extensions/xep-0206.html [21:16] MattJ: tpryme: Me, kind of... [21:16] mape: micheil: ah k :) [21:16] mde: wattz: Right, sometimes stuff just doesn't sit well. [21:16] micheil: mape: I was just a guest host, not a guest [21:16] mde: Depends on the kind of app you're building. [21:16] mape: Usually it is the other way around? [21:16] MattJ: tpryme: though someone else contributed the server-side code [21:16] maqr: is it particularly costly to keep a socket open, either websockets or comet? [21:16] mde: If you have a bunch of different routes, then Sinatra-style can get really unweildy, really fast. [21:16] MattJ: maqr: Not really [21:16] wattz: mde: yeah, working on my own little framework for primarily services [21:16] micheil: mape: yeah [21:16] bradleymeck_: maqr it does cost though [21:16] wattz: mde: i don't like that either [21:16] wattz: lol [21:16] wattz: :D [21:17] MattJ: maqr: define "cost"... no bandwidth when not in use, but a small amount of RAM [21:17] micheil: maqr: just watch how you store things. [21:17] mde: wattz: The Geddy router is actually pretty pluggable -- you could write your own. [21:17] _announcer: Twitter: "@frsyuki_ha TypedArrays (http://bit.ly/9PXaCk) will speed up a pure-JS impl. Looking at building this interface into #nodejs." -- Peter Griess. http://twitter.com/pgriess/status/19369292593 [21:17] bradleymeck_: mattj the keepalive cost [21:17] mape: bradleymeck_: that is what node is good at :) keeping open connections open [21:17] qschzt: well it's a good direction to take xmpp, to web socket [21:17] MattJ: bradleymeck_: Keepalives in which protocol? [21:17] tpryme: MattJ: What's the branch on github? [21:18] bradleymeck_: if you are leaving websockets open you still have to tcp keepalive [21:18] maqr: MattJ: even that should be very little though, right? i mean, what happens if you tried to open 100k sockets and just let them sit there? would you see some massive amount of ram being used? [21:18] MattJ: tpryme: It's not on github at the moment [21:18] tpryme: MattJ: Gotcha [21:18] mape: the asian social media thingy hand insane amounts of open connections [21:18] MattJ: tpryme: the server-side code is in Prosody, but hasn't been tested for lack of clients [21:18] _announcer: Twitter: "riak-js - Extensible Javascript library for accessing Riak, with implementations for node.js and jQuery http://icio.us/3cdfqn" -- Alexander Zhuravlev. http://twitter.com/zaa/status/19369359601 [21:18] mape: *had [21:18] wattz: mde: can i send you a quick /msg? [21:19] MattJ: bradleymeck_: TCP keepalives are 1) tiny 2) very rarely sent [21:19] tjholowaychuk: mde: its not hard to do some metaprogramming to generate routes with something like express [21:19] tjholowaychuk: i do it often [21:19] bradleymeck_: true but they are there, not just ram [21:19] MattJ: bradleymeck_: The default on most systems afaik isn't to send keepalives for some hours [21:19] mde: wattz: IM me -- matthew.eernisse@gmail.com [21:19] qschzt: any amqp heads around? I need to flesh out a basicReturn pattern .. [21:19] bradleymeck_: mattj keepalives should be sent every 180s by tcp spec [21:20] wattz: mde: im thewattz@gmail.com [21:20] mde: tjholowaychuk: Would be nice to have a predefined way to do it. [21:20] MattJ: bradleymeck_: See tcp_keepalive_time in Linux [21:20] tjholowaychuk: mde: for sure, but express does not impose mvc directory structure or anything like that so it would be somewhat useless baked in [21:20] tjholowaychuk: unless some config was provided i suppose [21:21] bradleymeck_: mattj see my windows machine timeout that socket after 180s [21:21] _announcer: Twitter: "@kevindente What's the upside to MS for getting node.js running on windows vs. getting managed JS running on the DLR?" -- Scott Koon. http://twitter.com/lazycoder/status/19369493338 [21:21] MattJ: bradleymeck_: It's basically just used as a way to cull completely dead connections 2 hours old [21:21] mde: Ah, right. So it's kind of a question of structured vs.freestyle. [21:21] tjholowaychuk: BUT express as-is could easily be a foundation for an mvc framework [21:21] MattJ: bradleymeck_: pft ;) [21:21] MattJ: bradleymeck_: I agree it's better to send them sooner than 2 hours [21:21] blackdog has joined the channel [21:21] tpryme: Anyone participating in nodeknockout who could grow their team by 1? [21:21] MattJ: But hey, I'm just a lowly server dev, smart people work on the kernel networking stack ;) [21:22] mape: tpryme: didn't get a spot? :S [21:22] tpryme: mape: didn't know about it [21:22] micheil: i need some breakfast. bbl. [21:22] bradleymeck_: i send em at 180s like is expected, if another person wants to wait longer thats fine, but specs are specs, as long as one side is doing it so that the other doesnt timeout does it matter? [21:22] mape: tpryme: oh k [21:23] mape: tpryme: tweet about it with the proper tag and nodeknockout will most likely retweet it, has done that before [21:23] tpryme: mape: good idea; will do [21:24] qschzt: 180s is a long time to wait ... [21:25] mape: wondering how the mixed teams will work, coding with strangers can be somewhat of a challange [21:25] mape: *e [21:25] qschzt: mape, daily scrum :D [21:25] MattJ: qschzt: So is 2 hours :) [21:25] mscdex: the interwebz! [21:25] mape: qschzt: scrum that random strange that knows nothing/and or is a drunk? :P [21:26] _announcer: Twitter: "Faye: Simple pub/sub messaging for the web http://goo.gl/fb/X3vEN #nodejs" -- Delicious Over 50. http://twitter.com/readelicious/status/19369812376 [21:27] mscdex: there's nothing you can't accomplish with inspiration from The Crockford Files! [21:27] bradleymeck_: mape you gots into a party van w/ ppl yet? [21:27] mape: bradleymeck_: Making a rape joke with my name? [21:28] bradleymeck_: i used your name and it was a rape joke... yes? [21:28] mape: But yeah, I'm in the knockout, http://nodeknockout.com/teams/0ba0234cdb5a08064c0d0000 [21:28] qschzt: mape, ? [21:28] mape: qschzt: ? [21:28] markwubben_ has joined the channel [21:28] tpryme: mape: 1 man army, huh? :) [21:29] markwubben_ has joined the channel [21:29] mape: tpryme: Yeah, I fail alone. Much more fun that way. [21:29] qschzt: great. this is #node.js in 2010 [21:30] mape: qschzt: Oh, yeah still meetings won't help if the person you are meeting with is no good at what they do. [21:30] mape: At least not if it is a contest when every single line of code means something [21:31] mscdex: developers, developers, developers! [21:31] isaacs has joined the channel [21:31] qschzt: mape, yeah if you're fighting over every line of code.. [21:31] markwubben has joined the channel [21:31] qschzt: mape, it'll never work [21:32] sh1mmer has joined the channel [21:32] mape: qschzt: just don't see coding with strangers working out in something like the knockout unless you know the other person is good at what they do [21:32] qschzt: can't you make a twice-daily scrum [21:32] bradleymeck_: Developers developers developers [21:33] qschzt: this is what I did, these are the problems I'm having, maybe you can help with them; this is what's next [21:33] maushu: Mushroom, Mushroom. [21:33] mape: don't think the scrum thingymadoos help with crappy partners [21:33] mape: and if you need that you probly are better of alone anyway [21:33] qschzt: mmk [21:33] mape: at least in a 48 sprint [21:33] mape: different in a company [21:34] tk has joined the channel [21:34] qschzt: well good luck with the knock out :) [21:34] markwubben_ has joined the channel [21:35] mape: you too :) [21:35] mape: looking forward to it [21:35] mape: at least a couple of cool stuff have to make it out of the contest [21:35] mape: anyone know how many teams the ruby rumble have? [21:36] tjholowaychuk: mape: I should probably know im judging lol but i dont remember [21:36] tjholowaychuk: 30 rings a bell [21:36] gerad has joined the channel [21:36] mape: ah so tiny in relations, any cool projects came out of the ruby one? [21:37] mjr_: maqr: skimming the scrollback, are you trying to keepa massive number of connections open? [21:37] tjholowaychuk: no clue, i usually ignored it but i got asked to judge [21:37] mjr_: maqr: I'm actually working on that right now, trying to understand the memory impact of that. [21:37] mape: hmm k, so you are a ruby person? [21:37] tk: ugh apparently my ubuntu install is janky :( [21:37] tjholowaychuk: used to be yup [21:37] tjholowaychuk: php -> c -> ruby -> js [21:38] mape: hmm k, is the ruby rumble as star struck as the node knockout? [21:38] tjholowaychuk: what do you mean [21:38] mape: the knockout has some pretty big names [21:38] visnup: mape: judges or contestants? [21:38] mape: judges [21:38] gerad: we've got good connections:-) [21:38] maqr: mjr_: i was thinking about the possibility of open connections + ntp for syncing content between users in literally real-time [21:38] wattz: from php to C?! [21:39] wattz: eh [21:39] wattz: weird [21:39] visnup: mape: though, we were trying to get them to be contestants [21:39] mape: to make php faster? ;) [21:39] tjholowaychuk: mape: in the ruby world yeah, lots of big people [21:39] mape: visnup: hehe guess that is a tad harder [21:39] gerad: plus, we're not shy about asking people :-) [21:39] maqr: mjr_: i know of one site that does it, but it kind of sucks, and it's only youtube: http://www.synchtube.com/ [21:39] wattz: I know to many languages.. [21:39] technoweenie has left the channel [21:39] mjr_: maqr: I had about 30K open connections last night, and memory usage was quite reasonable. [21:39] mjr_: Shooting for 64K today. [21:39] maqr: mjr_: i think you've answerd my concerns :) [21:39] mape: so will you split stuff into as few judges as possible? or will each entry be judged by like 4 judges? [21:40] maqr: mjr_: oh, for the map thing? [21:40] maqr: mjr_: that's a *ton* of poeple, i can't believe that many people are interested in it [21:40] mjr_: No, this is just a prototype. [21:40] mape: gerad: btw, someone asked earlier about doing graphics pre the contest [21:40] tjholowaychuk: mape: I dont know most of the node knockout people [21:40] mjr_: I'm trying to understand how node will scale to different workloads. [21:40] maqr: mjr_: oh, i thought you meant 30k connections open on the map :P [21:40] gerad: mape: ugh, we need to get the rules up [21:40] mscdex: 640K is enough for anybody [21:40] mscdex: :-D [21:40] maqr: mscdex: someone named mscdex would say that :P [21:40] tjholowaychuk: mape: I was asked to judge 30-ish, maybe that is just a small chunk, not sure [21:41] mape: gerad: hehe yeah [21:41] mjr_: When I get to 640K, I'll let you know, Bill Gates. [21:41] gerad: mape: no digital assets prior to competition [21:41] mape: but re use of prior code is ok [21:41] gerad: we're shooting for > 40 judges [21:41] tjholowaychuk: gerad: for what? [21:41] gerad: probably will get around 150 valid entries [21:41] gerad: each judge does 5 − 10 [21:42] gerad: gets us at least 2-3 reviews per judge [21:42] gerad: we figure the best entries will get more [21:42] gerad: but everybody should get at least 2-3 [21:42] tjholowaychuk: for node? [21:42] gerad: basically, we'll assign each judge 5-10, and then ask them to choose to do more, and abstain from voting on people they know [21:42] mape: gerad: Thought about apps that need critical mass? [21:42] maqr: gerad: you guys should require the whole changelog, to prevent cheaters :P [21:43] gerad: yeah, for the knockout [21:43] gerad: yeah, we'll be on the github account [21:43] gerad: or have access at least [21:43] maqr: ah, everyone has to do it on github? [21:43] tjholowaychuk: gerad: you need more judges? [21:43] gerad: yes [21:43] maqr: that makes sense [21:43] bradleymeck_: i thought we were getting repos for each then you fork at deadline? [21:43] gerad: tj: yeah [21:43] tjholowaychuk: gerad: feel free to chuck me up there I should be able to make time [21:43] gerad: tj: awesome, will add you [21:44] visnup: tjholowaychuk: was the use of the word "chuck" a pun for your name? [21:44] mape: gerad: So if I redo EA's NHL97 in canvas and it is multiplayer, it kinda sucks if each player checks it out separatly. But if multiple people do it at the same time it is great. [21:44] gerad: mape: you should do NHL94 [21:44] tjholowaychuk: visnup: im ukranian :p [21:44] maqr: mape: ... you're porting that to html5? that's nuts [21:45] mape: gerad: actually prefer 93.. [21:45] bradleymeck_: no audio? [21:45] mape: but no.. more the general idea [21:45] gerad: mape: we did lazeroids for rails rumble last year, but same general idea [21:45] gerad: mape: it worked out :-) [21:45] visnup: bradleymeck_: what did you mean? [21:45] creationix: ryah: ping [21:46] gerad: mape: but we also wrote something that alerted us when anybody was playing alone [21:46] bradleymeck_: html5 audio is terrible [21:46] gerad: mape: then we joined up and played with them [21:46] mape: gerad: Well yeah, but if you do something like chat roulette and no one is using the service.. [21:46] mape: gerad: Ah k, sneaky [21:46] gerad: mape: so, be creative [21:46] gerad: :-) [21:46] mape: But there will be a list of all "active" submitted projects? [21:46] maqr: mape: chat roulette wouldn't even be possible with html5 websockets, right? [21:46] mape: And their urls and whanot [21:46] gerad: tjholowaychuk: excited to see the new express [21:46] gerad: ! [21:47] sh1mmer has joined the channel [21:47] tjholowaychuk: gerad: thanks :D [21:47] gerad: tjholowaychuk: btw, do you have a 2-3 sentence bio and photo you'd like us to use for the judges page [21:47] sh1mmer: I'm assuming someone mentioned it already, but you all know we are hiring a node developer right? [21:47] Blackguard has joined the channel [21:47] bradleymeck_: maqr the audio and video would have to be recorded from something outside of html5 and the audio stream would have to be played outside of html5 [21:47] mape: maqr: Well it is more the general idea, that some things don't make an impact unless you have multiple users using it, so hard to get the judges exited about it unless there is somekinda organization around it [21:47] bradleymeck_: the yahoo thing? [21:47] tjholowaychuk: gerad: sure, whats your email? [21:48] sh1mmer: bradleymeck_: yeah [21:48] creationix: gerad: that reminds me, I need a better bio lone for you [21:48] creationix: *line [21:48] ryan_gahl: huzah! finally got my eventEmitter.suppress/unsuppress API working - submitting patch to list shortly [21:48] mape: sh1mmer: Haven't gotten a lot of applications? [21:48] gerad: gerad@nodeknockout.com [21:48] sh1mmer: mape: I'm not saying that at all [21:48] bradleymeck_: just not going to move [21:48] sh1mmer: mape: I just want to make sure that people know [21:48] gerad: creationix: that reminds me, I need to get in touch with jimbastard [21:48] mape: sh1mmer: K, great :) Really nice to see companies supporting the use of node [21:49] maqr: mape: oh, i get your point now, sorry :) [21:49] sh1mmer: mape: well, Node supports us (or will soon) :) [21:49] creationix: sh1mmer: you should come to the node meetup we're having when pgriess is in town [21:49] mape: sh1mmer: For sure, but some companies rather use inferior stuff since it has been battle tested :) [21:49] sh1mmer: creationix: I will [21:49] creationix: sweet [21:50] mape: yahoo has an office in Sweden? [21:50] sh1mmer: mape: We have some search engineers in scandi but I don't remember where [21:51] sh1mmer: Trondheim [21:51] sh1mmer: so, NO, haha [21:51] mape: seems they scrapped it more then a year ago, guess we didn't produce enough [21:51] sh1mmer: mape: nah we consolidate most of the European offices a while ago [21:52] aliem has joined the channel [21:52] sh1mmer: Barcelona, Munich and some other places also were closed for engineering [21:53] mape: ah k, doubt I would be able to fill the position anyway but yeah, nice to see yahoo comitting to node [21:55] _announcer: Twitter: "@superthom Have you tried fooling around with node.js? It might not fit your needs, but it's fun to tinker with." -- DrWaffles. http://twitter.com/DrWaffles/status/19371395128 [21:56] markwubben_ has joined the channel [21:57] tpryme: creationix: what's the link to the node meetup group? [21:57] _announcer: Twitter: "Javascript! http://nodejs.org/ http://riakjs.org/ http://expressjs.com/ http://github.com/sixtus/node-couch http://howtonode.org/" -- jakescott. http://twitter.com/jakescott/status/19371506636 [21:57] creationix: tpryme: there is no group, I just host meetings from time to time and announce them on the mailing list [21:57] ryan_gahl: ryah: ping [21:58] beelzabub: has anyone tried building nodejs in debug with a shared v8? [21:58] tpryme: creationix: what's the mailing list? [21:58] creationix: tpryme: just a sec... [21:58] wattz: good night all, be on later! [21:58] wattz: miss you! <3 [21:58] creationix: tpryme: http://groups.google.com/group/nodejs/browse_thread/thread/6701c434500d5594 [21:59] ryah: ryan_gahl: pong [21:59] tpryme: creationix: thanks [22:01] ryan_gahl: hey dude, so I just sent a patch (I signed the CLA couple days ago) - do you need a usage writeup? this is a more robust version of the eventEmitter.suppress/unsuppress patch I submitted a while back - I know at that time you said you didn't want to add it because it was features, but i think now it's pretty relevant and wanted [22:02] ryah: ryan_gahl: i am not convinced this is a good idea [22:02] ryan_gahl: omg [22:03] ryan_gahl: it is! [22:03] ryan_gahl: there, now you convinced? [22:03] ryan_gahl: so, why not then? [22:03] tpryme: ryan_gahl: what is eventEmitter.suppress supposed to do? [22:03] ryah: pause should simply stop reading from the socket [22:03] ryah: not buffer stuff [22:03] ryan_gahl: no this is more generic [22:03] mscdex: yay! today is the Amiga's 25th birthday! :-D [22:04] ryah: i know - but what's the use case? [22:04] ryan_gahl: has nothing to do with sockets, but can be used as a NON-leaking way to do pause [22:04] ryan_gahl: many use cases [22:04] ryan_gahl: for instance, AOP stuff [22:05] ryan_gahl: also, helps with this type of pattern: http://github.com/senchalabs/connect/blob/master/lib/connect/middleware/staticProvider.js#L55 [22:05] creationix: yeah [22:06] _announcer: Twitter: "@brianarn aw damn it.. I wanted to do the node.js knockout too.. stupid procrastination.." -- markie. http://twitter.com/teampoop/status/19372015483 [22:06] ryan_gahl: just gives a ton of flexibility to control emitters, not sure why the hesitation to include [22:06] ryan_gahl: plus, i sort of put a lot of effort into this :) [22:07] ryah: i feel it encourages buffering [22:07] rwaldron has joined the channel [22:07] visnup: all of these people so far saying they didn't make it in makes me feel bad :( [22:07] ryan_gahl: it aids in buffering when buffering is called for [22:07] ryah: pgriess: what do you think? [22:08] pgriess: ryah: haven't looked at the patch yet; but i'm generally in favor of anything that allows for providing pause/buffer/unpause lifecycle to all emitters [22:09] ryah: meh [22:09] tilgovi has joined the channel [22:09] ryan_gahl: yay [22:09] pgriess: heh [22:09] tpryme: visnup: create 1 more team that acts a sink for any, and use it as a social experiment, lol [22:09] tpryme: visnup: *for any latecomers [22:09] pgriess: ryah: try not to get so excited ;) [22:09] derferman: visnup: It will be a super team! [22:09] ryan_gahl: maybe he doesn't like having another ryan *ahl get into the contributors list :( [22:09] visnup: lol that would be awesome [22:09] mape: visnup: perhaps a purge to get new peeps in? [22:09] ryah: ryan_gahl: how about as a compromise i fix http to work correctly with pause() [22:09] visnup: "all you latecomers. you're all on the same team. figure it out." [22:09] isaacs: ryah, pgriess, ryan_gahl: fwiw, i'm not a fan of encouraging buffering. [22:09] ryah: "correctly" [22:09] bradleymeck_: does pump work w/ buffers as an intermedium yet? [22:09] ryan_gahl: that's not a compromise [22:10] ryan_gahl: that's discluding my effort and NOT making emitters have this flexibility [22:10] isaacs: it'd be better to let data events happen even when paused, but not keep asking for them [22:10] creationix: hmm [22:10] ryan_gahl: so, defending a programmer from being able to easily do things he wants to do? [22:11] ryan_gahl: can't understand that [22:11] visnup: tpryme: thinking about upping the limit now [22:11] derferman: visnup: what about this. Have no limit, but any team that join nows will only be included in judging if one of the current teams doesn't show [22:11] visnup: derferman: then it's a gamble on if you really qualify [22:12] ryan_gahl: buffering is going to happen... it's needed at times... so why not just make it easier (also, buffering is not done by default) [22:12] isaacs: ryan_gahl: so, which patch is this that encourages buffering? [22:12] mape: visnup: have you thought about having people tag their projects with stuff that might suit a certain judge well? Like if a judge is a kernel dev and the project is a generate fancy buttons those will most likely not jive, but a pcap inplementation might be more interesting? [22:12] derferman: visnup: good point [22:12] tpryme: visnup: that would be awesome [22:12] ryan_gahl: it doesn't encourage buffering [22:12] pgriess: ryah/ryan_gahl/isaacs: what i like about buffering is that it actually provides useful pause semantics. right now, 'pause' doesn't really guarantee much -- its just a suggestion that you don't want to see more events. but some emitters will still emit them (e.g. http parser). ultimately unless you know about the impl of the emitter itself you still need to be prepared to consume events [22:12] ryan_gahl: buffering is one use case the patch makes easier to do though [22:12] isaacs: ryan_gahl: so, which patch is this that *allegedly* encourages buffering? [22:13] ryan_gahl: submitted it to the mailing list a few minutes ago [22:13] isaacs: pgriess: pause is like a red light. if you'er already in the intersection, get out of it, but don't let any more in. [22:13] ryan_gahl: eventEmitter.suppress/unsuppress [22:13] pgriess: isaacs: yeah i understand how it works now. its just not that useful. it doesn't actually guarantee that anything pauses [22:13] ryah: so, basically the problem is with http - which i can understand [22:13] pgriess: isaacs: why bother calling it all if you still need to handle any events? [22:13] ryan_gahl: right, so then pause() would simply use .suppress() and not specify buffering [22:13] isaacs: pgriess: that's not something that should be guaranteed. [22:13] ryah: but that doesn't need to be fixed in the statosphere, it can be fixed where it originates [22:13] ryan_gahl: but in cases like http://github.com/senchalabs/connect/blob/master/lib/connect/middleware/staticProvider.js#L55 it makes that pattern much easier [22:14] isaacs: ACTION puts +1 in ryah's bucket [22:14] zmbmartin has left the channel [22:14] visnup: mape: haven't thought that far ahead (hell, we added the actual code to cap it at 200 just two days ago), but I want to have a decent browse interface at the end so that judges can find projects they're interested in judging [22:14] isaacs: suppressing events in a general way is a bad idea, i think. [22:14] visnup: mape: along with the general public finding interesting things too [22:14] pgriess: isaacs: so that's what i'm missing. what is your philosophical objection to this? [22:14] mape: visnup: k neat, yeah for sure [22:14] creationix: as long as http pausing gets fixed, I don't care how [22:14] isaacs: pgriess: i want to be able to shunt HUGE amounts of data through node with the minimum amount of overhead. [22:15] visnup: mape: browse/search [22:15] ryan_gahl: this adds NO overhead, just capabilities [22:15] ryan_gahl: sheesh [22:15] isaacs: pgriess: the traffic-light analogy works for exactly that reason. [22:15] mape: with pic/summary and whatnot? [22:15] visnup: mape: yup [22:15] ryan_gahl: as in no overhead to you who may not choose to use it [22:15] isaacs: ryan_gahl: but that means that if you have 10 streams wired together with pumps, then you need to implement buffering at each point, because someone might pause. [22:15] mape: visnup: sweet pies [22:15] ryah: let's "fix" http-parser's outputs, then reconsider after everyone has taken some time to digest [22:15] isaacs: it doesn't encourage buffering, it requires it in many cases. [22:15] visnup: now I want a savory pie [22:15] ryan_gahl: this is crazy [22:16] mape: That people disagree? [22:16] isaacs: if pause propagates through the chain, then you'll only ever have one extra "data" event anyhow [22:16] creationix: ryan_gahl: what does your patch do? [22:16] mape: creationix: http://groups.google.com/group/nodejs/browse_thread/thread/d899bdc9bc7247df [22:16] ryan_gahl: here, i'll post the tests to gist so you can see some (contrived) usage [22:16] isaacs: i dig EventEmitter#once, though. tha'ts super handy. but -1 to suppress. [22:16] elliottcable: What’s the *appropriate* way to turn an asynch API into a synch one? [22:17] ryah: elliottcable: rewrite it [22:17] elliottcable: while true process.nextTick kind of thing? [22:17] ryan_gahl: http://gist.github.com/488127 [22:17] elliottcable: ryah 3» the entire internals of the library use the asynch APIs; I don’t want to write two whole copies of the library, but I want to expose a synch-abstraction version (foo and fooSync) [22:17] elliottcable: ryah 3» I used to use promises for that, but they’re gone :x [22:17] ryah: ryan_gahl: node.js is a jail where we only give people soft fuzzy tools [22:17] ryan_gahl: it supports any cases where it's useful to suspend events, and supports optionally buffering them while suppressed [22:18] ryah: ryan_gahl: i'm afraid your tool is rather sharp [22:18] ryan_gahl: it's pretty soft [22:18] mscdex: 50% cotton! [22:18] isaacs: ryan_gahl: it turns every event emitter into an event bufferer [22:18] _announcer: Twitter: "Quoth @ryah: “#nodejs is a jail where we only give people soft fuzzy tools”" -- elliottcable. http://twitter.com/elliottcable/status/19372703669 [22:18] isaacs: (glad someone tweeted that. thanks, elliottcable) [22:18] ryan_gahl: it allows every event emitter to buffer its events if the developer wants to, sure [22:19] ryah: i'm not not rejecting it - i just want to wait on it until we fix this http-parser thing [22:19] ryah: again "fix" [22:19] isaacs: ryan_gahl: it does more than that. it establishes it as the normal default pattern. [22:19] elliottcable: isaacs 3» no prob :D [22:19] ryan_gahl: no it doesn;t!! [22:19] ryan_gahl: wow [22:19] tk: ACTION sighs [22:19] tpryme: elliottcable: create an EventEmitter that emits nextTick? [22:19] ryan_gahl: have you looked at the patch? [22:19] mde: +1 to what creationix said, as long as http pausing gets fixed. [22:19] isaacs: ryan_gahl: what is e._buffer, then? [22:19] tk: go to install node.js on my ubuntu server only to find out that somewhere its got really f'd up and wont let me install jack shit :( [22:19] isaacs: i have, yes [22:19] elliottcable: tpryme 3» without wait(), that won’t work [22:19] mscdex: tk: what problem? [22:20] mape: visnup: btw might also want to add some info on the hosting part of the knockout, if I need to run on strange ports and whatnot what to do [22:20] visnup: true [22:20] ryan_gahl: that's the array that gets create IF and only IF you say emitter.suppress("someEvent", true); (the true param is what turns on buffering) [22:20] isaacs: ryan_gahl: i want "turn on buffering" to be almost impossible. [22:20] mscdex: visnup: especially what exact version of node will be available [22:20] tk: mscdex: ohhh configure cant find any compilers yet they are there, and apt wont let me install build-essential to attempt to fix it -- all kinds of apt-goodness [22:20] isaacs: it's almost always a bad idea. [22:20] elliottcable: tpryme 3» essentiallly, if there is no second argument (callback), then the function needs to block until the result is ready. I’m not sure how to do that without promises… [22:20] visnup: mscdex: that was a moving target last we talked about it :) [22:21] mscdex: tk: you can specify the path to your compilers by setting environment variables [22:21] ryan_gahl: isaacs: you are really assuming you're way smarter than all those lowly devs, eh? [22:21] elliottcable: ryan_gahl 3» that’s ’cause he is. [22:21] isaacs: ryan_gahl: no, it's not lowly devs i'm worried about, it's me. [22:21] isaacs: ryan_gahl: if pause and resume propagate, I'M much less likely to hurt myself. [22:21] ryan_gahl: you might accidently type ", true" ? [22:21] elliottcable: ryan_gahl 3» mind you, I have no idea what you guys are arguing about, but I’mma assume isaacs is right. :3 [22:21] tk: mscdex: still doesnt solve the underlying problem though which is my bigger concern than having node.js immediately available :P [22:22] ryan_gahl: the argument of "I don't want to accidentally use this feature" is BS [22:22] mape: visnup: also what about the rules of licenses and whatnot [22:22] isaacs: ryan_gahl: no, i might say "Oh, it's ok if I buffer it just this one time, i know what i'm doing" and then forget about it, and 3 months later, npm breaks in some obscure way and i spend a day tracking down that one flag as why i'm running out of memory. [22:22] mscdex: tk: i create .deb archives on my ubuntu server... do you have 32-bit or 64-bit server edition? [22:22] visnup: for third party libs? [22:22] visnup: mape: or for what people write? [22:22] elliottcable: so many conversations :X [22:22] isaacs: ryan_gahl: i also dont' want to have to guess whether or not a given Stream interface is ok to use or not. [22:22] creationix: isaacs: does the patch break propigation? [22:22] ryan_gahl: ?? [22:22] tk: mscdex: i forget what we installed I think its 64 let me double check [22:22] creationix: I thought it just buffered the event or two stuck in limbo [22:22] isaacs: creationix: no, but pause/resume propagation makes it unnecessary [22:22] mape: visnup: no for the code produced, does it have to be MIT, can it be any license? (As long as it works with the dependencies) [22:23] visnup: mape: any license [22:23] ryan_gahl: how does my patch affect your ability to choose a Stream interface, it has nothing to do with Streams [22:23] creationix: isaacs: for the case where you don't want to lose events, a single leaked event is just as bad as not pausing at all [22:23] visnup: mape: the code will be yours to do with however you want [22:23] mape: k [22:23] elliottcable: wasn’t there a new implementation of promises in JS? [22:23] elliottcable: where is that? [22:23] isaacs: ryan_gahl: i'm very wary of anything that's going to cause traffic pileups in the intersections, to continue the metaphor [22:23] elliottcable: maybe I can learn from how *they* implemented wait() [22:23] visnup: mape: we just need access to the repo to do some audits for cheating and whatnot and it'll be on joyent or heroku for however long too [22:23] isaacs: creationix: but if you don't ever assume that pause() means "no more data, i promise", then you're good. [22:23] ryah: elliottcable: they ? :) [22:23] creationix: isaacs: it's not a pileup, just holds the car that was in the intersection [22:24] mape: visnup: yeah [22:24] creationix: otherwise the semantics are the same [22:24] ryan_gahl: pause() can mean that... pause() is not this patch [22:24] ryah: elliottcable: there is no wait [22:24] ryah: elliottcable: what do you want to do? [22:24] ryan_gahl: this patch is .suppress(eventName, buffer), and .unsuppress(eventName, bypassRemission) [22:24] isaacs: creationix: but that's the reason why you shouldn't have buffering at each stage. streams should let data flow. only the very endpoints should ever be buffering anything, because they're chiefly concerned with that exact purpose. [22:24] isaacs: making buffering generic is a bad idea. [22:25] elliottcable: ryah 3» didn’t somebody else re-implement wait()? [22:25] ryan_gahl: .pause would be calling .suppress and NOT specifying buffering.. i.e. a wrapper [22:25] polotek has joined the channel [22:25] tk: mscdex: looks like its 64 -- ubuntu peeps are suggesting a clean install cause of some underlying issues it seems... this should be fun :( [22:25] ryah: elliottcable: no [22:25] elliottcable: ryah 3» I just need to block my `foo()` function until a result is available, if no callback is provided [22:25] isaacs: ryan_gahl: without providing buffering, though, it looks like the events just fall on the floor. [22:25] isaacs: er, the data [22:25] creationix: isaacs: yes, but sometimes you have an event stream that starts emitting events before you know who should be listening for those events [22:25] mscdex: tk: if you want, i can copy over a .deb of node head to my site for you to download and try [22:25] creationix: granted I've only seen this with http [22:25] ryah: elliottcable: that's not possible (for you) [22:25] elliottcable: :x seriously? [22:25] isaacs: creationix: http has a few issues. but, if you attach your data handler in the request event, you're good. [22:26] ryah: elliottcable: i/o must have a callback [22:26] creationix: isaacs: have you not seen my use case? [22:26] elliottcable: so there’s no way to write a sync version without writing a second copy of the library? [22:26] elliottcable: using xSync versions of every API call? [22:26] mape: visnup: tjholowaychukw pic is broke [22:26] elliottcable: maybe I can generate that with some sort of preprocessor… [22:26] tjholowaychuk: mape what? [22:26] creationix: sometimes you CAN'T attach till later [22:26] ryah: elliottcable: the fs.*Sync things are very special [22:26] mape: tjholowaychuk: on the knockout judge page [22:26] isaacs: creationix: then implement a buffer for your use case. it SHOULD be hard, because only experts should consider doing it. [22:26] tjholowaychuk: ohh [22:27] ryan_gahl: alright, so I think you're really confusing my generic suppression API with a specific place it could be used [22:27] isaacs: putting it in the core encourages this (usually bad) behavior [22:27] elliottcable: ryah 3» okay… yay. [22:27] creationix: isaacs: that's what I did, but I think it's more common and needed than you think [22:27] tjholowaychuk: mape: haha! nodeknockout is an Express app http://nodeknockout.com/images/judges/Tj_Holowaychuk.jpg [22:27] creationix: but like I said, I've only seen it needed for http requests [22:27] visnup: gerad is looking [22:27] mape: tjholowaychuk: hehe [22:27] elliottcable: ryah 3» what about require vs requireSync; just a copy using only *Sync FS APIs? [22:27] elliottcable: because that’s what I’m trying to duplicate, ’course [22:27] isaacs: at *least*, this should be some kind of inherited-from-Stream thing, not on the EventEmitter class. [22:28] mscdex: tjholowaychuk: omg! it exposes code! [22:28] tjholowaychuk: mscdex: its a setting [22:28] creationix: either ryah is going to fix http requests to buffer the right way, and then we'll see if there are enough valid use cases to add this utility generally [22:28] pgriess: for callers that would be calling suppress(), the lack of this api means that they would just need to implement this on their end anyway [22:28] polotek: creationix: what do I need to be able to contribute to connect? [22:28] mscdex: tjholowaychuk: i know i know, i'm kidding :p [22:28] mape: all your bases are in public and belongs to me [22:28] tjholowaychuk: :p [22:28] tjholowaychuk: lol [22:28] pgriess: why force all apps to implement specific logic for this if we could build something general that would work pretty well [22:28] ryan_gahl: no, that's wrong, this belongs on EventEmitter because it's useful for ALL emitters, as in I create some application level emitter that fires custom app-level events [22:28] ceej: I hate php ;( [22:28] pgriess: invoking this call means *i want buffering* [22:28] ryan_gahl: your stuck in a single use case [22:28] tjholowaychuk: gerad: apparently my pic is dead [22:29] creationix: polotek: sign the cla [22:29] ryah: pgriess: encourages them to buffer instead of handle data as it comes [22:29] isaacs: pgriess: that's kind of my point. [22:29] ryah: pgriess: the proper way is to actually pause [22:29] ryah: so the tcp stream gets back preasure [22:29] polotek: creationix: I heard something about snail mail earlier. and I was afraid [22:29] visnup: tjholowaychuk: is it Tj or TJ? [22:29] tpryme: elliotcable: what's a use case for having it block? [22:29] visnup: osx's case-insensitive fs has struck again! [22:29] elliottcable: do people not use tab-complete? You’d be surprised how often it’s spelled with one T [22:29] tjholowaychuk: visnup: either or, I prefer Tj long story lol [22:29] mape: its hosted on xserve? [22:29] isaacs: ryah: or the FileReadStream knows to stop reading, etc. [22:30] elliottcable: tpryme 3» um, not having to wrap *all of your library’s code* in a callback, for one thing [22:30] creationix: polotek: http://github.com/senchalabs/connect/blob/gh-pages/Connect%20Individual%20CLA.pdf A scan emailed is fine [22:30] isaacs: ryan_gahl: fine, then put it on some application-specific inherits-from-EventEmitter thing. [22:30] visnup: mape: no, the file is named TJ_ the html references Tj_ and we develop/test on osx so it shows up for us [22:30] mape: oh k [22:30] tjholowaychuk: ohh durr! [22:30] aheckmann has joined the channel [22:30] isaacs: ryan_gahl: it can still be mixed into your Streams, js is slick like that, of course :) [22:31] mape: well, what crazy person use uppercase in file names :S [22:31] ryah: i will finish base64 [22:31] pgriess: yeah, i understand that backpressuring the tcp stream is good. but if you really cannot handle an event, you need to buffer. always. whenther it happens in event emitter or in your app [22:31] ryah: then i will fix the http-parser [22:31] tjholowaychuk: mape: i always forge you *can* even have spaces n shit lol [22:31] ryah: pgriess: maybe [22:31] mscdex: tk: here it is if you want: http://mscdex.net/node/node_0.1.101-528015e-1_amd64.deb [22:31] mitkok has joined the channel [22:31] pgriess: i suppose this is getting less concrete/useful [22:31] pgriess: esp since the major use case that i cared about is http parser [22:31] pgriess: but i do think this is generally useful [22:32] mape: tjholowaychuk: that is like saying you can kill people, doesn't mean you should! Its bad in most ways [22:32] elliottcable: tpryme 3» without a sync version, libraries are going to look like this: http://gist.github.com/488149 [22:32] aliem_ has joined the channel [22:32] tjholowaychuk: mape: very true lol [22:32] ryah: i'll try to put out 0.1.102 today with the http-parser fix [22:32] creationix: ryah: thanks [22:32] tk: mscdex: FWIW, that works ;) [22:32] creationix: ryan_gahl: don't give up yet, let's just wait till we have more valid use cases [22:32] elliottcable: actually, crap: that won’t even work! [22:33] tk: mscdex: just doesnt solve the underlying problems :( [22:33] mape: visnup: random idea buy shuffling the judges might be neat [22:33] elliottcable: that means the return-value of the library doesn’t get out of the `from`s [22:33] polotek: elliottcable: why not use promises or something similar? [22:33] mscdex: tk: true, but in the meantime you have something to play with ;-) [22:33] elliottcable: polotek 3» they’re gone? [22:33] polotek: there's lots of userland implementations [22:33] visnup: mape: and shuffling the sponsors [22:33] elliottcable: polotek 3» ryah says there’s no way to re-implement wait [22:33] polotek: the node promises weren't special [22:33] creationix: polotek: yes they were [22:33] mape: visnup: yeah [22:34] mjr_: oh man, you guys are talking about backpressure and TCP, and I'm still in a meeting. [22:34] elliottcable: which would be the only way around this [22:34] mscdex: lol [22:34] isaacs: mjr_: SRSLY GET IN THIS [22:34] mape: not sure if that is a cake walk with the haml but yeah [22:34] isaacs: elliottcable: whoa, you're lamenting the loss of Promises [22:34] isaacs: ? [22:34] polotek: creationix: special how? [22:34] isaacs: elliottcable: where've you been? [22:34] elliottcable: polotek 3» could you hilight me when you reply? too many conversations in here, I can’t follow which replies are to me [22:34] tk: mscdex: I dont think creating a new XEN image is... very forgiving on time to spare :P [22:34] mscdex: WWDCD -- What Would Douglas Crockford Do [22:34] elliottcable: isaacs 3» I left months ago, dudeu [22:34] creationix: polotek: the node ones had wait() that implemented coros [22:34] mjr_: sadly I only have 25% brainpower available while on the phone. [22:34] mape: mjr_: just take a toilet break and bring a smart phone [22:34] creationix: with special v8 and libev hooks [22:34] elliottcable: isaacs 3» and I grasp why they’re gone; I just have no way whatsoever to create a sync API without wait(), that I can see [22:35] isaacs: elliottcable: you can also just take a cb as an optional last arg, and fork the logic inside your fn [22:35] gerad: tjholowaychuk: http://nodeknockout.com/judging#tj_holowaychuk [22:35] mscdex: tk: oh, i use virtualbox but i do have a physical ubuntu server [22:35] gerad: fixed the image [22:35] isaacs: elliottcable: but yeah. the easiest answer is usually to rewrite it. [22:35] tjholowaychuk: gerad: wahoo thanks! [22:35] polotek: elliottcable: the point lots of people here are trying to make [22:35] elliottcable: isaacs 3» that’s what I do here [22:35] elliottcable: isaacs 3» or want to do [22:35] polotek: is you shouldn't be trying to make a sync api [22:36] isaacs: elliottcable: ^ +1 [22:36] isaacs: elliottcable: polotek said it [22:36] elliottcable: isaacs 3» the problem is, I’ve got ~500 lines of async-FS specific code, that will have to be completely duplicated for sync APIs… [22:36] isaacs: elliottcable: why not just not have a sync api? [22:36] mscdex: hrm... [22:36] elliottcable: isaacs 3» the problem is tha’s not an option [22:36] elliottcable: isaacs 3» http://gist.github.com/488149 [22:36] mape: visnup: so what is the point separation between judges and public? 50-50? [22:36] isaacs: elliottcable: so chain those up into some kind of utility function that rolls up the callbacks. [22:37] elliottcable: isaacs 3» my system *depends* upon the return value of ‘libraries’ or ‘packages’ - however, in that example, the return value is *discarded*, and what `Script` will hand me back is the return value of `from` [22:37] tk: mscdex: CentOS -> XEN -> VMs (hardware limits are nice ;P) [22:37] mscdex: heh [22:37] polotek: elliottcable: oh is that it? [22:37] polotek: elliottcable: why not just have your lib return an initializer function that takes a callback? [22:37] visnup: mape: yeah, 50/50 [22:37] elliottcable: isaacs 3» point is, no matter what conveniences I use, I will *never* have that code at the root level, and thus returning to the `Scrip` processing that file, unless I have Sync APIs: because it will always be wrapped in at least one callbackl [22:37] isaacs: elliottcable: i see. [22:38] isaacs: elliottcable: my advice is this: [22:38] isaacs: elliottcable: 1: get an eraser. [22:38] isaacs: elliottcable: 2: rub it all over your whiteboard. [22:38] isaacs: elliottcable: 3: draw something different. [22:38] elliottcable: what whiteboard? o_O [22:38] mape: visnup: might want to make it 49/51 in favour for the public to give them more reason to vote [22:38] visnup: mape: and it happens all at once after it's over [22:38] isaacs: elliottcable: you know what i mean. throw away that idea, and do it differently, so that you don't depend on syncness [22:38] visnup: mape: with a couple hour cooling off go nap period [22:39] visnup: mape: you think the public will feel not empowered? [22:39] gerad: it's an average [22:39] creationix: isaacs: I still don't know what's wrong with making buffering easier [22:39] elliottcable: isaacs 3» I’m confused, what idea am I throwing away? [22:39] gerad: so the public voting up is meaningful [22:40] mape: guess it is unlikely that it will be a tie since there are so many, so it isn't really a big deal [22:40] mape: worse if it was like dancing with the stars ;) [22:40] elliottcable: oh, I’m thinking wrong. [22:40] elliottcable: Not *all* the code has to be wrapped in the callbacks. [22:41] elliottcable: You can create the return value outside of the callbacks, and then return it after them [22:41] isaacs: elliottcable: the idea that leads to "i need to syncify my api" [22:41] ryan_gahl: creationix: do you want this API for Connect? [22:41] elliottcable: isaacs 3» it’s *always* been that way; I’m just updating the code for node versions later than, eh, 0.1.21 :3 [22:41] creationix: ryan_gahl: it will make connect middlewares easier, but I'm talking more generally [22:41] elliottcable: which was when I was last around these parts [22:41] isaacs: elliottcable: ah, i recall that joy. [22:41] creationix: even after http requests get fixed to buffer internally, you still have to be careful [22:42] isaacs: elliottcable: embracing callbacks is nice. i use almost no synchronous APIs in npm. [22:42] creationix: you don't which event emitters will buffer internally and which will leak [22:42] isaacs: elliottcable: which is great, since then http and fs and child_process all just work the same. [22:42] elliottcable: this works acceptably: http://gist.github.com/488149 [22:42] ryan_gahl: creationix: it would make a lot of things easier :) I know you're being general, was just asking cuz if they're not going to accept this i'll just make it a module and through it up in it's own repo and you could include it [22:42] elliottcable: inarru 3» I love callbacks, don’t get me wrong [22:42] isaacs: creationix: well, http_parser should know what to do when it gets a pause message. [22:42] jherdman_ has joined the channel [22:42] elliottcable: oops [22:42] elliottcable: isaacs 3» ^^ that [22:43] elliottcable: isaacs 3» I’m building *a whole new language* oriented on them,* heh [22:43] creationix: isaacs: yeah, http_parser can probable pause better than a general buffer on event emitters [22:43] creationix: I agree with that [22:43] isaacs: creationix: but that should be a feature of *just that one thing*, not of streams in general [22:43] creationix: my only concern is about confusing apis [22:43] ryan_gahl: which is what isaacs is doing here [22:43] elliottcable: isaacs 3» it’s just that it’s *cruicial* to me that the return value of the file be the return value of the library; however, that’s no big problem, as the update to that gist demonstrated [22:43] riottaba has joined the channel [22:43] ryan_gahl: my API is generic, and it's being mapped to some specific issue [22:44] ryan_gahl: frustrating [22:44] isaacs: elliottcable: s/return foo/cb(null, foo)/ s/throw foo/cb(foo)/ [22:44] polotek: creationix: I know what you're getting at [22:44] isaacs: ryan_gahl: EventEmitter is a general API. changes to it need to be evaluated for their effect all over the damn place. it's a high bar. [22:44] polotek: creationix: you either buffer events or you need some kind of "start" mechanism on the eventemitter [22:44] creationix: If I remember right, most the stream providers don't leak events after pause, http is the exception [22:44] isaacs: ryan_gahl: i'm focusing on the specific case where this general change will cause problems. [22:44] polotek: to insure they don't start firing until you've hooked up listeners [22:45] creationix: polotek: start would be even better [22:45] ryan_gahl: it won't cause problems [22:45] isaacs: creationix: and if we propagate pause/resume, then that's even less of an issue. [22:45] ryan_gahl: show me how it causes a problem [22:45] creationix: of cours it will be propigated [22:45] creationix: *course [22:45] elliottcable: isaacs 3» what? [22:45] ryan_gahl: i've done the effort of making this work, and the test cases, show me how it causes proble [22:45] ryan_gahl: ms [22:45] isaacs: elliottcable: the "cb" arg in npm always gets called in one of two ways. [22:45] isaacs: elliottcable: cb(Error Object, Some Return Data) [22:46] isaacs: elliottcable: so, cb(new Error("foo")) is analogous to throw new Error("foo") [22:46] creationix: ryan_gahl: you patch propigates pause events right? [22:46] polotek: creationix: the problem with start is it has to be a stub. the actual application will determine what has to be done to "start". [22:46] isaacs: elliottcable: and cb(null, foo) is analogous to return foo [22:46] polotek: the base eventemitter has no idea [22:46] elliottcable: isaacs 3» yes, I get the (err, data, data) convention [22:46] ryan_gahl: creationix: not sure what you mean [22:46] polotek: creationix: I did this by the way. for evented-twitter [22:46] jakehow has joined the channel [22:46] elliottcable: isaacs 3» the problem is that that’s unacceptable here; but anyway, I need to get back to coding, now that I have a solution [22:46] isaacs: elliottcable: have fun [22:46] creationix: ryan_gahl: so basically there are two very distict use cases that we're trying to use pause for [22:47] ryan_gahl: if you say emitter.suppress("someEvent")... someEvent stops firing to outside listeners [22:47] creationix: one is data flow throttling [22:47] creationix: and the other is event buffering [22:47] elliottcable: isaacs 3» hahaha, yes, I am :D [22:47] isaacs: ryan_gahl: let's say you have a streaming api lib that does XML parsing. [22:47] elliottcable: isaacs 3» callbacks are sexy, I love the new API. It feels very raw and clean. [22:47] creationix: ryan_gahl: for throttling, it doesn't matter if an event or two leaks, but it's very important that the pause event gets propigates up the chain of streams [22:47] isaacs: elliottcable: poke around in npm's guts. there are some cool tricks in there. chain.js and promise-chain.js might interest you. [22:48] creationix: but for event buffering, it's worthless if a single event leaks [22:48] ryan_gahl: then simply don't suppress the pause event [22:48] elliottcable: isaacs 3» I might, later; I have an inordinately difficult time reading anybody else’s JavaScript code /-: [22:48] ryan_gahl: no events leak in this implementation [22:48] isaacs: ryan_gahl: this xml parser i hook up to an incoming xmpp feed, and then have it pipe out to some other hting [22:48] elliottcable: my style is *very* unorthodox >,> [22:48] polotek: creationix: http://github.com/polotek/evented-twitter/blob/master/lib/twitter-stream-parser.js#L41 [22:48] creationix: elliottcable: or try Step stuff if my code is closer to your style [22:49] isaacs: ryan_gahl: if the default/common way to do pause() is to suppress the events, then every thing on the chain is buffering data at each stage, and that increases the moving parts. [22:49] pavan_ has joined the channel [22:49] elliottcable: creationix 3» it might be, I’m not sure. *vaguely remembers it being the opposite of isaacs’s according to him* [22:49] isaacs: ryan_gahl: it's better to say that, after pausing, you might get one more data event, so handle that. [22:49] ryan_gahl: isaacs, give me code example [22:49] creationix: isaacs, ryan_gahl, how about we split the two use cases and not try to overload the meaning of "pause" [22:50] ryan_gahl: you are generalizing a use case without showing any real ways in which my API hinders you [22:50] isaacs: ryan_gahl: it's not that your api hinders me. it's that it makes it too easy to do things that are not a good idea. [22:50] isaacs: ryan_gahl: when designing a general API, that's the most important consideration. [22:50] ryan_gahl: show me code [22:50] isaacs: ryan_gahl: pump(upstreamXmlFeed, brokenXMLParser); pump(brokenXMLParser, httpResponse) [22:51] brianmario has joined the channel [22:51] isaacs: ryan_gahl: the user's browser can't download data fast enough and emits TCP backpressure on teh server. [22:51] creationix: isaacs: but pump's pause won't buffer [22:51] creationix: so nothing is broken there [22:51] ryan_gahl: exactly! [22:51] isaacs: creationix: no, but brokenXMLParser's does [22:51] isaacs: creationix: hence the name. (it's not JUST great marketing) [22:52] creationix: isaacs: how is it broken [22:52] isaacs: so, twitter keeps throwing data at me, and the brokenXMLParser keeps buffering it, because it's paused, and I have to spend a lot of extra time tracking it down. [22:52] mscdex: i wonder why github's "list commits" api doesn't include any tags associated with a commit [22:52] mscdex: :S [22:52] isaacs: pause should be ONE thing. [22:52] isaacs: for software streams, pause should be "propagate the pause event." that's *all* it should mean. [22:53] isaacs: making it easy to buffer events is a bad idea. [22:53] isaacs: you wanna do that? fine. write your own buffer. [22:53] ryan_gahl: isaacs: you are still confusing my API with one place it might be used, and the answer is simply DON'T USE IT THERE if that's not good [22:53] siculars has joined the channel [22:53] isaacs: ryan_gahl: my point is that having something on EventEmitter.prototype is an advertisement. [22:53] polotek: ryan_gahl: where's your api? [22:53] polotek: think I missed the link [22:53] isaacs: polotek: on the mailing list. [22:53] ryan_gahl: and, you're not showing code so I still think you're confusing the entire issue [22:54] isaacs: ryan_gahl: using EventEmitter#suppress is not safe. [22:54] isaacs: ryan_gahl: there's no limit to the amount that it'll buffer, and then it means that the user needs to know when it's ok and when it isn't, which means that they need to know what it's doing. [22:54] isaacs: i think that's a bad idea. [22:54] ryan_gahl: no... using EventEmitter#suppress IN CERTAIN CASES may not be the best use of it [22:54] isaacs: ryan_gahl: then it shoudl'nt be on EventEmitter.prototype. [22:55] creationix: isaacs: which is worse, having clear, concise apis that are powerful, or confusing ones that make it almost impossible to do certain bad things easily [22:55] isaacs: ryan_gahl: i'm not saying there's no use for it. i'm saying that it has this big dangerous warning sticker, which means it should be on something less general than EventEmitter. [22:55] isaacs: creationix: i think you know my answer. I choose javascript. [22:55] creationix: but bad programmers wanting to do those bad things will [22:55] creationix: might as well make it explicit what they're doing [22:55] creationix: not force them to write worse code [22:55] isaacs: creationix: the purpose of node is to make it hard to write bad programs, and easy to write fast programs by accident. [22:56] isaacs: creationix: ie, doing it wrong SHOULD be painful. [22:56] creationix: isaacs: of course, but there is a line [22:56] isaacs: and hard. [22:56] ryan_gahl: isaacs: i didn't know that was the purpose of node [22:56] sh1mmer: isaacs: +1 [22:56] ryan_gahl: where is that stated [22:56] creationix: ie, threads don't belong in js [22:56] isaacs: that's why you need to write C to use threads. [22:56] creationix: ryan_gahl: ryah has stated that several times [22:56] sh1mmer: ryan_gahl: if it isn't stated, it should be [22:56] creationix: I think on the node.js home page [22:56] isaacs: qv. "jail with soft fuzzy tools" [22:56] elliottcable: isaacs 3» +1 [22:57] _announcer: Twitter: "CoffeeScript and Node.js are by far the most exciting things I've seen in a while." -- Alexander Kern. http://twitter.com/CapnKernul/status/19374867973 [22:57] isaacs: like, things that aren't safe should have APIs that make you pause and go, "Whoa... ok... do I *really* need to do this?" [22:57] creationix: I'm not sure making api's clear and powerful makes it harder to write fast programs [22:57] ryan_gahl: agreed [22:57] isaacs: foo.suppress("data") is WAY too easy, and super dangerous. [22:57] sh1mmer: one of the problems we have is there are a couple of ways to write JavaScript [22:57] elliottcable: isaacs 3» I don’t know what the argument is [22:57] sh1mmer: a lot of people aren't sure about writing functional JavaScript [22:58] isaacs: at least, dangerous in any high-data-throughput situation, which is what node is for. [22:58] elliottcable: isaacs 3» but from that comment, I get the feeling that maybe his patch should be given a different API, not rejected/ [22:58] polotek: creationix: why can't this be userland thing? [22:58] creationix: isaacs: if it propigates the pause event, what's dangerous about it? [22:58] polotek: ryan_gahl: ^ [22:58] creationix: it's no worse than pause [22:58] isaacs: elliottcable: well, i actually really like .once(), and putting the other stuff in another place is fine. [22:58] ryan_gahl: isaacs: so this use case is bad eh? http://github.com/senchalabs/connect/blob/master/lib/connect/middleware/staticProvider.js#L55 [22:58] isaacs: ryan_gahl: yes, i think that is not a great bit of code. [22:59] elliottcable: isaacs 3» once()? [22:59] creationix: isaacs: it's horrible code, but required since pause leaks events [22:59] isaacs: ryan_gahl: and i think creationix would probably agree that it's only used because .pause isn't working right on the http client. [22:59] isaacs: right [22:59] ryan_gahl: .once == wire a listener that only executes once and then removes itself [22:59] elliottcable: ah *nods* [23:00] isaacs: creationix: if pause was gauranteed to at most ever leak ONE event, then it would be easier to do your buffering - trivial even - and the need for a .suppress would be lessened [23:00] jherdman has joined the channel [23:00] isaacs: ie, the main use case is something that is a bug which will be fixed properly, and this workaround would make it easier to do dangerous things. [23:00] creationix: isaacs: that's not a good compromise though [23:00] ryan_gahl: but .suppress leaks nothing and can be used anywhere for any events as needed [23:00] isaacs: ryan_gahl: not leaking anything is part of the problem :) [23:01] ryan_gahl: no dude, it leaks nothing WHEN BUFFERING [23:01] isaacs: ryan_gahl: makes it too easy to put the system into a "buffer everything" state. [23:01] isaacs: ryan_gahl: what's the use case for .suppress without buffering? [23:01] ryan_gahl: if you don't explicitly turn on buffering, the events just don't move on [23:01] creationix: isaacs: slow down and think, what's actually being buffered. Assume it propagates the pause event [23:01] ryan_gahl: it's SUPPRESS, it does what it says [23:01] isaacs: in a more general sense, there is an inversion of control happening. [23:02] isaacs: youmight not be the only listener. [23:02] polotek: isaacs: indeed [23:02] isaacs: so pausing WITHOUT buffering is also hazardous [23:02] ryan_gahl: right but you've reached logic that says "i want to stop this event from having effects" [23:02] isaacs: right. [23:02] isaacs: what if i'm listening to it? you just stopped my mail service. [23:03] _announcer: Twitter: "This is insanely cool http://jade-lang.com/ and http://github.com/visionmedia/jade successor to haml for node.js and express.js" -- jakescott. http://twitter.com/jakescott/status/19375222844 [23:03] ryan_gahl: because of some upstream logic that says your mail service should be stopped, sure [23:03] isaacs: my issue here is that EventEmitter is this super general low-level thing that should only have safe APIs. and suppress isn't safe. [23:03] ryan_gahl: suppress is not unsafe [23:04] isaacs: ryan_gahl: i mean, exposing .suppress to the *listener* logic is an inversion of the Observer pattern. [23:04] ryan_gahl: it's unsafe maybe in the same way a hammer is unsafe [23:04] ryan_gahl: you COULD drop the hammer on your toes, but the same is true of ALL code [23:04] isaacs: ryan_gahl: EventEmitter should be squishy and safe. [23:04] ryan_gahl: it doesn't detract from the general power of the hammer [23:04] creationix: squishy hammers [23:04] ryan_gahl: your fears are imaginary dude [23:05] isaacs: ryan_gahl: create a SuppressibleEmitter that inherits from EE and has this functionality, and i'm all kinds of +1 [23:05] ben_alman has joined the channel [23:05] isaacs: ryan_gahl: not entirely. [23:05] ryan_gahl: yeah, fine, i'll module it - i'll call it TheFuckingBoogyMan though [23:05] isaacs: ryan_gahl: they're not fears, they're design philosophy issues [23:05] mape: heh [23:05] mape: ryan_gahl: node-TheFuckingBoogyMan [23:06] mape: makes it easier to find [23:06] creationix: ryan_gahl: were you around when we had Promise.prototype.wait() ? [23:06] ryan_gahl: nope, shortly thereafter [23:06] isaacs: ryan_gahl: it's not .wait() hazardous, or eval() hazardous, but still. something as low-level as EventEmitter should be SUPER safe. [23:06] rauchg_ has joined the channel [23:06] isaacs: it should be almost *impossible* to hurt yourself with it [23:06] polotek: isaacs: +1 [23:06] ryan_gahl: i favor power over assuming stupid developers [23:07] ryan_gahl: but oh well [23:07] creationix: ryan_gahl: even though we labeled wait as super dangerous, it's power was too tempting and even ryah got burnt by it, hence it was removed [23:07] polotek: ryan_gahl: why is having it in userland less powerful? [23:07] isaacs: ryan_gahl: it's just as powerful if it's not on *every single* event emitter everywhere. [23:07] polotek: you said yourself it's good for CERTAIN usecases [23:07] mostlygeek_ has joined the channel [23:07] polotek: if you run into that use case, you look for a module that will hellp [23:07] polotek: oh look [23:07] isaacs: ryan_gahl: yes. we cannot avoid the power. [23:07] polotek: theres node-boogyman or whatever [23:07] polotek: done [23:07] ryan_gahl: oh it's not less powerful, just makes a lot of things easier [23:07] isaacs: ryan_gahl: the Precious... it is so tempting... [23:08] creationix: isaacs: I don't think suppress is wait [23:08] isaacs: ryan_gahl: maybe have a EnableSuppression(myEmitter) transformer that adds the function or something. [23:08] isaacs: i dunno [23:08] isaacs: something so it's not there by default, all tempting and shiny and hazardous. [23:09] creationix: isaacs: thanks to npm, the line between included and otherwise is dimming [23:09] isaacs: creationix: no, like i said, it's not as bad as wait() or eval or even with(){} [23:09] sh1mmer: ryan_gahl: if I can just give you some context [23:09] sh1mmer: ryan_gahl: Perl is what results when you trust developers [23:09] sh1mmer: and allow them to hang themselves and everyone else that shares their codebase [23:09] creationix: sh1mmer: I thought it was ruby [23:09] ryan_gahl: ok, could it live in core if it was harder to turn on? it's hugely useful if you can just get past this squishy/unsquishy thing [23:10] sh1mmer: creationix: ruby too, Matz thinks Larry Wall is the shiznitz [23:10] creationix: true [23:10] sh1mmer: ryan_gahl: document how to do it the hard way [23:10] sh1mmer: it's not that hard [23:10] ryan_gahl: what? [23:10] creationix: but once it's documented, the dumb programmers will copy paste it blindly [23:11] sh1mmer: I disagree [23:11] sh1mmer: if you have to compile it in [23:11] creationix: and us who have valid almost common use cases will have to use the same ugly code [23:11] isaacs: creationix: so put it in connect somewher.e [23:11] isaacs: creationix: function suppress (emitter, event, doBuffering) { ... } [23:11] creationix: well, my use case will be fixed by the http fix [23:11] isaacs: abstract it out [23:11] creationix: I'd rather keep conenct as close to node as possible [23:11] ryan_gahl: "hey, I have a powerful generic API that i spent nice chunks of time making work in a robust manner".. "cool, instead, you should write-up how to do it without your SPI" [23:12] satori_z has joined the channel [23:12] ryan_gahl: API* [23:12] polotek: I don't understand why you guys are arguing so hard for it to go into core [23:12] ryan_gahl: sounds stupid doesn't sh1mmer [23:13] ryan_gahl: it* [23:13] sh1mmer: ryan_gahl: yes and no [23:13] polotek: creationix says -> isaacs: thanks to npm, the line between included and otherwise is dimming [23:13] mitkok has joined the channel [23:13] polotek: npm install supressable-emitter [23:13] isaacs: yeah, that'd totally do it. one goal of a good pacakge manager should be to make userspace as robust as possible. [23:13] ryan_gahl: i'm not arguing for it to in core so hard as i'm arguing against the (IMHO stupid) reason it's not being included [23:14] dnyy: does npm have an update yet? i didn't see one in the list of commands, so i'm assumin' not. ;o [23:14] sh1mmer: ryan_gahl: I think until we have a way of abstracting userland from core dev land there is an issue [23:14] polotek: *sigh* [23:14] polotek: this is why we have a BDFL [23:14] isaacs: dnyy: npm install thing [23:14] isaacs: dnyy: that'll install the latest version of "thing" [23:14] dnyy: isaacs: ah, will it replace the current ver or keep 'em side/side? [23:14] isaacs: dnyy: a more full-featured update thing is planned but not there yet. [23:14] isaacs: dnyy: they'll be there side by side. [23:15] isaacs: dnyy: so, the thing that sucks is that this means that deps won't be automatically updated. [23:15] polotek: isaacs: --update-deps ? [23:15] dnyy: isaacs: yeah, i had that problem earlier this week, why i was asking. it's all good though, i can just keep up on GH to ese if anything needs updated. [23:16] isaacs: polotek: something like that. [23:18] polotek: creationix: why doesn't the connect static provider stream the files/ [23:18] polotek: ? [23:18] creationix: ryan_gahl: I'd just package it as a module that inherits from EventEmitter [23:18] creationix: polotek: because streaming is slower [23:18] creationix: though I need to fix cache to not buffer on the first pass through [23:18] isaacs: creationix: slower? [23:18] creationix: I guess it would be streaming then [23:18] satori_: sh1mmer: donuts for everyone today? [23:19] polotek: creationix: yeah wtf? [23:19] sh1mmer: satori_: hah. I'm not queuing for another 20 mins at voodoo. [23:19] satori_: :) [23:19] sh1mmer: nom [23:19] devongovett has joined the channel [23:20] ryan_gahl: creationix: doing it now, making a repo for "node core rejects" of mine [23:20] creationix: ryan_gahl: don't take it personal, I've had a lot of patched rejected [23:20] visnup: tpryme: upping node knockout to 222 teams [23:20] polotek: ryan_gahl: seriously [23:20] polotek: me too [23:20] creationix: and some I've had to hold for a month before we realized it was acceptable [23:21] tpryme: visnup: Cool, thanks. I think it'll fill up [23:21] ryan_gahl: not taking it personal: i just argue emphatically when i have a position on an issue [23:21] creationix: but every time with time, either ryah realized it was a good idea, or I realized it was a bad idea [23:21] softdrink has joined the channel [23:21] isaacs: creationix: hah. remember when i rewrote module.js [23:21] visnup: tpryme: and tried to make it obvious that there's a limit now ;) [23:21] creationix: isaacs: seriously [23:21] visnup: tpryme: you should be able to register now [23:21] isaacs: creationix: i still maintain that that'd be better. but oh well. [23:21] isaacs: i got the bug i wanted fixed, mostly. [23:22] tpryme: visnup: register button isn't working [23:22] tpryme: visnup: redirects me to home page [23:22] visnup: tpryme: ah right, security! [23:23] creationix: polotek: my thinking was that it's faster to send it all over the wire in a single end call, than several small write calls [23:24] visnup: tpryme: fixed [23:24] creationix: polotek: and that way, I'm able to set the Content-Length header automatically [23:24] creationix: polotek: but you're right, the staticProvider shouldn't be buffering internally [23:24] polotek: creationix: it is for smaller files, but there's an inversion somewhere around file_size == n right? [23:24] creationix: polotek: I would assume so [23:24] isaacs: creationix: can't you get contentLength from the stat? [23:25] murz has joined the channel [23:25] polotek: isaacs: I was thinking that too [23:25] polotek: it's already done [23:25] creationix: isaacs: I'm talking about two things [23:25] isaacs: oh, ok [23:25] isaacs: (sorry, only half here) [23:25] creationix: in the cache middleware (which is generic) you don't know the content length [23:25] creationix: just write and end calls [23:25] isaacs: it'd be cool to create a blackboard system for web server frameworks. [23:26] creationix: but in the static provider I do it all in one shot so I can create a single buffer [23:26] creationix: creating buffers is expensive [23:26] polotek: is it? [23:26] polotek: isaacs: ? [23:26] creationix: relativly [23:26] isaacs: so each thing in the stack is interested in request objects matching a specific pattern. the first one to take it can either respond or mutate the object and put it back on the board for someon other worker to pick up [23:26] creationix: but once the data is in a buffer, it flies to the client [23:27] creationix: isaacs: that would be a neat experiment [23:27] tpryme: visnup: Are we able to edit teams later - i.e., add new team members? [23:27] mscdex: blah, why doesn't github have a streaming api? [23:27] isaacs: so like, there could be a "content-length" worker that, if there's a filename attached to the request object, it sticks a "content-length" header on the response. [23:27] isaacs: etc. [23:27] creationix: I hate the way connect wraps calls to writeHead, write, and end [23:27] visnup: tpryme: yup. [23:27] creationix: (it's ok to hate my own code, that means I'm growing right?) [23:28] isaacs: creationix: if you don't hate your code, you'er Doing It WRong. [23:28] mde: isaacs: +1 [23:28] satori_: hating code you wrote last week/month/year is ok :P [23:28] creationix: isaacs, polotek, I'm just loath to change middleware apis again without good reason [23:28] creationix: it works well enough at the moment [23:29] isaacs: yeah, leave it alone, then [23:29] polotek: My it is to do with composition [23:29] creationix: though there is no support for throttling at all [23:29] polotek: new CacheResponse(req) [23:29] creationix: so serving large files with connect is a very bad idea [23:29] kriszyp_ has joined the channel [23:29] polotek: the problem with that js doesn't have a good way to delegate [23:29] polotek: method calls that is [23:29] mjr_: isaacs: I think you can love your code for a while and still be Doing it Right, but at some point your learn more and then you realize how ignorant you were when you wrote that old stuff. [23:30] isaacs: yep [23:30] creationix: mjr_: so true [23:30] creationix: ok, I think connect should buffer the body up till a certain threshold [23:30] creationix: and then stream the rest [23:30] creationix: and not cache it in ram [23:31] creationix: that's automatic and works well for all cases [23:32] creationix: polotek: what do you think? ^^ [23:32] polotek: creationix: +1 would like to take a look [23:32] confoocious has joined the channel [23:32] polotek: creationix: so can I scan this cla and send it to somebody? [23:33] creationix: polotek: yep, just send it to me [23:33] elliottcable: argh [23:33] micheil: creationix: more cla's? [23:34] elliottcable: oh hey kriszyp [23:34] elliottcable: kriszyp 3» you are relevant to my internets! :D [23:34] polotek: micheil: for connect, not nod [23:34] polotek: node [23:34] micheil: ah. okay [23:34] elliottcable: kriszyp 3» how did you re-implement promise.wait() without can haz origina coroutine-y implementation? [23:34] elliottcable: creationix 3» what’s connect? And why do you need a CLA for it? [23:35] polotek: elliottcable: there is lots of discussion on the commonjs and node mailing lists about promises [23:35] creationix: micheil: it's been around for a while [23:35] polotek: I will freely admit to not understanding it all [23:35] micheil: creationix: I didn't know about it [23:35] creationix: elliottcable: it's what I do for work, they pay me to write MIT software for node [23:35] polotek: micheil: it's the not-so-new-anymore hotness [23:35] polotek: in middleware stacks [23:35] elliottcable: creationix 3» :O [23:35] elliottcable: creationix 3» you are so damn lucky [23:35] creationix: :D [23:35] elliottcable: creationix 3» I would *kill* for a paid FOSS position :O [23:36] creationix: please don't kill me [23:36] creationix: ;) [23:36] isaacs: elliottcable: turns out, that usually doesn't help you get the job. [23:36] polotek: dammit [23:36] elliottcable: isaacs 3» ikr [23:36] polotek: isaacs is faster than me [23:36] creationix: didn't reiser try that [23:36] polotek: creationix: how did you fall into that? [23:36] elliottcable: isaacs 3» I just write a metric flying fuckton of OSS in the hopes that somebody somewhere will like some of it enough to pay me to maintain it eventually :x [23:36] creationix: polotek: not sure actually [23:36] _announcer: Twitter: "can't believe I haven't seen any @rails implementations in @nodejs. 'nails' just seems so painfully obvious." -- Keegan Watkins. http://twitter.com/keeganwatkins/status/19377184270 [23:36] elliottcable: creationix 3» try what, killing somebody? :O [23:37] satori_: lol [23:37] elliottcable: ACTION is confused, and a little apprehensive about the answer to that question [23:37] CIA-64: node: 03Ryan Dahl 07master * r2c1ca40 10/ (4 files in 3 dirs): [23:37] CIA-64: node: Implement buffer.write for base64 [23:37] CIA-64: node: There might be an off-by-one on the returned value. - http://bit.ly/9Xh285 [23:37] ryah: there. [23:37] creationix: elliottcable: http://en.wikipedia.org/wiki/Hans_Reiser#Murder_investigation [23:37] elliottcable: ACTION high-fives CIA-64  [23:37] micheil: ryah: neat [23:37] micheil: is there a buffer.toString("base64") ? [23:37] ryah: yes [23:37] satori_: ^ awesome [23:38] sechrist has joined the channel [23:38] jherdman has joined the channel [23:38] ryah: now to fix the http-parser emitting thing. [23:38] polotek: !tweet @keeganwatkins take a look at expressjs and connect for node.js. More like sinatra. Rails gets no love here. [23:38] ryah: btw - more tests for the base64 encoding/decoding are welcome. [23:38] micheil: ack. I thought that helped me.. oh well. [23:38] elliottcable: wait what the fuck [23:38] ryah: i'm sure there are some errors, i did it all by hand [23:38] micheil: ACTION needed md5.  [23:38] isaacs: ryah: hehe, "b_oob" [23:38] elliottcable: reiser, the maker of reiserFS, is actually convicted of murder? [23:38] statico: yes [23:38] statico: aka "murderFS" [23:39] micheil: lolwut. [23:39] elliottcable: OO_O_O__O_O_OO [23:39] satori_: elliotcable: You never hearrd about that??? [23:39] mape: elliottcable: its a killers fs [23:39] isaacs: satori_: elliottcable was like in second grade or something when that happened. [23:39] satori_: Ahh [23:39] mscdex: *it's a killer fs [23:39] isaacs: cut the dude some slack [23:39] isaacs: ;P [23:39] satori_: :) [23:39] mscdex: ;-o [23:39] elliottcable: isaacs 3» stfu [23:39] dnolen_ has joined the channel [23:39] ryah: groan. [23:39] mape: mscdex: sluta gn�ll [23:39] elliottcable: isaacs 3» third, foo’! [23:40] mscdex: a wha who huh? [23:40] ryah: the old 'killer fs' joke. sign [23:40] ryah: s/sign/sigh/ [23:40] elliottcable: damn. [23:40] polotek: micheil: md5 is in crypto right? [23:40] mscdex: i didn't even know it was old [23:40] micheil: yeah [23:40] elliottcable: and here I was hoping flipping out and killing a bunch of people after writing my programming language would garner it some attention! [23:40] elliottcable: looks like it’s already been tried )-: [23:40] ryah: hah [23:41] mscdex: ACTION goes back to coding [23:41] elliottcable: brb inventing a new way to cement my language’s reputation as a rallying-flag for insane people [23:41] elliottcable: oh hey. Any of you know how I can inject some variables into the scope of an anonymous function? [23:41] polotek: ryah: I have patch that isn't working. you have time to take a glance? [23:41] elliottcable: hacky solutions are Fine By Me™, so go wild… [23:41] mape: elliottcable: place it outside of the scope? [23:42] creationix: elliottcable: yes [23:42] elliottcable: mape 3» has to be programmtic [23:42] mjr_: ryah: I like how you committed a thing and then in the message said that it probably doesn't work. [23:42] mjr_: Take that, everyone who has been bugging me about base64! [23:42] creationix: ACTION goes to dig up my instanceEval for js [23:42] elliottcable: mape 3» my current best-case is to preprocess the file in question, exchanging `foo` for `SECRET_EXPORTS_VALUE.foo`, and then retaining a handle to `SECRET_EXPORTS_VALUE` so I can store things like `foo` on it [23:42] elliottcable: mape 3» but I’m hoping for something slightly cleaner [23:43] elliottcable: creationix 3» mmmm this has *gotta* be some sexy code. I can’t wait. [23:43] creationix: elliottcable: http://gist.github.com/199222 [23:43] creationix: elliottcable: and usage http://gist.github.com/199372 [23:43] elliottcable: hold on, reading [23:44] elliottcable: I have such a hard time reading anybody else’s code… )-: [23:44] creationix: nothing like with + eval + function decompilation [23:44] elliottcable: creationix 3» how portable is this? [23:44] creationix: elliottcable: pretty portable [23:44] elliottcable: damn, eval [23:44] creationix: it's old-school js evil [23:44] elliottcable: you weren’t kidding [23:44] mscdex: i wish github at least had a way to automatically sync a fork with the original repo [23:44] elliottcable: I was seriously considering going with pre-processing the file at require() time instead of using eval :X [23:45] elliottcable: but this looks pretty well done, hah [23:45] creationix: elliottcable: it's a first rate hack [23:45] elliottcable: mscdex 3» I used to use a bash script with their fast-forward button and cron [23:45] elliottcable: mscdex 3» but they isabled that )(-: [23:45] mjr_: mscdex: I know, it's kind of annoying to constantly pull in upstream changes and then push them back to your own repo completely unchanged, just to keep up to date. [23:45] elliottcable: creationix 3» waitwhat “Convert the function to a string so that we can rebind it” [23:45] creationix: elliottcable: though the fab technique is cleaner [23:46] creationix: elliottcable: yep [23:46] mscdex: the only reason i say that is because then i could get a live push stream for any github project [23:46] elliottcable: creationix 3» mind coming to ##Paws real quick, so I can ask you about some of this? I don’t want to stuff up the channel [23:46] mscdex: instead of having to poll github [23:47] ajpiano has joined the channel [23:47] mape: elliottcable: any change you can change the god awful � thing and use : like normal people? :P [23:47] elliottcable: mape 3» no. :3 [23:48] elliottcable: mape 3» hahah maybe some day. [23:48] rauchg_: mscdex: wish for the same thing [23:48] rauchg_: it's such a common task [23:48] mape: bah, almost a reason to ignore, having wonky random colors show up is awful [23:48] mscdex: -1 for wonkyness [23:48] polotek: creationix: yeah I've definitely seen this technique [23:48] mscdex: :P [23:49] polotek: we used it in our in-house ssjs stack [23:49] polotek: in the templating language [23:49] _announcer: Twitter: "hallucinating about the possibilities that occur to use http://nodejs.org/ open tabs can not stop looking for developments!" [es] -- fesja. http://twitter.com/fesja/status/19377913544 [23:49] polotek: I'm in the middle of porting it right now actually [23:49] ryah: polotek: ? [23:49] polotek: everyone will HATE it [23:49] ryah: mjr_: it mostly works [23:50] ryah: mjr_: i'll leave it to people to work out the details :) [23:50] n3v3le has joined the channel [23:50] ryah: having a first implementation there gets the ball rolling [23:50] pquerna: win 39 [23:50] ryah: polotek: what's your patch? [23:50] khug has joined the channel [23:51] khug has left the channel [23:51] polotek: ryah: http://github.com/polotek/node/commit/34488642c115366db65c2680ccc3c4d4138132b0 [23:51] mjr_: ryah: I'm sure they will. I thought it was funny how your BDFL status is showing a bit more today than other days. [23:52] polotek: remember a while back there was an ml thread about surfacing the number of io threads and allowing it to be runtime configurable? [23:52] polotek: all this is doing is surfacing an object that has the thread usage stats [23:53] polotek: but it definitely doesn't work the way I thought [23:53] damienkatz has joined the channel [23:53] damienkatz has joined the channel [23:53] ceej: if i'm mounting a server instance http://github.com/visionmedia/express/blob/master/examples/blog/app.js like blog does it inherit from the main configs ? [23:54] ryah: polotek: how about just getters and setters on process? [23:55] micheil: elliottcable: you need some really strong documentation and media on said programming langauge [23:55] elliottcable: micheil 3» heh [23:55] nrstott has joined the channel [23:55] elliottcable: micheil 3» it’s still in development; feel free to hang out in ##Paws if you like [23:55] polotek: ryah: yeah the api isn't set [23:55] polotek: this was "easy" and it mirrored memoryUsage() [23:55] polotek: easy to test [23:55] gerad has left the channel [23:55] ryah: polotek: also - i don't want to maintain a patch over libeio [23:55] creationix: ceej: I believe so [23:56] creationix: ceej: tj would know for sure [23:56] everton has joined the channel [23:56] polotek: ryah: I get that. the stats aren't necessary for surfacing the config functions [23:56] ceej: creationix: I'll give it a go [23:56] polotek: but they would be useful for profiling [23:57] polotek: not worried about that though [23:57] ryah: polotek: we can try to upstream to modify it [23:57] ryah: *try to get [23:57] polotek: all I care about now is I don't see the thread counts changing [23:59] polotek: ryah: here's a really dumb test