[00:12] tekky has joined the channel [00:14] isaacs: oh, so node-crypto was pulled in, but not the cipher stuff? that's weak [00:15] _ry: isaacs: i think that will come [00:15] isaacs: i got so excited [00:16] _ry: node_crypto wasn't pulled in directly [00:16] isaacs: ah, i see [00:16] _ry: rhys is doing a new set of patches [00:16] isaacs: what will go into getting that pulled in? [00:17] _ry: at the moment the crypto stuff is pretty heavily linked into net.js [00:17] _ry: but rhys is trying to untangle that [00:17] isaacs: is ee [00:17] _ry: and make it just a consumer of net.js [00:18] _ry: that would probably be most of the work [00:18] _ry: (have some BIO stream object) [00:18] isaacs: kewl. i'll leave a TODO and remain patient and insecure for the time being. [00:19] isaacs: _ry: speaking of sets of patches, get a chance to review the module stuff yet? [00:20] tekky has joined the channel [00:21] _ry: not yet, been gone all wekeend [00:21] _ry: but i'll curl up with a blanket by the fireplace soon [00:22] _ry: pull up the patch set :) [00:25] creationix has joined the channel [00:31] gf3 has joined the channel [00:33] fictorial has joined the channel [00:37] herbySk: _ry: maybe before big module system change, you may consider putting in this micto-system in, so there is no-module node as well as any other modules system node... kriskowal has been looking at it, but probably not tested it fully yet, byt afaict he liked the idea [00:39] herbySk: (i keep isaacs' new system rebased on top of ir, so he won't have many additional work) [00:42] mnutt has joined the channel [00:45] isaacs: hey, which key is better, id_dsa or id_rsa? [00:48] jedschmidt has joined the channel [00:51] kriskowal: isaacs, i believe that dsa is newer than rsa, for what it's worth [00:51] isaacs: okie dokie [00:51] isaacs: i'm actually using AES cipher anyhow [00:51] isaacs: just using the private key as the cipher key, since i figure you are only as safe as that thing's exposure anyhow [00:51] isaacs: and it's longer than a password and harder to forget [01:01] jedschmidt: _ry: would you consider allowing the Buffer constructor to take a utf8 string? [01:07] _ry: jedschmidt: yes [01:10] Yuffster has joined the channel [01:11] jedschmidt: _ry: cool, is this something a mortal like me has access to patch? (i'm not sure what/where process.binding('buffer') points to. i suspect it's not within my abilities...) [01:13] _ry: jedschmidt: lib/buffer.js [01:13] _ry: yes, should be easy [01:13] _ry: use write() [01:13] _ry: er, actually [01:13] mjr_: just like the example in the docs, probably [01:13] _ry: the constructor is in c++ [01:13] _ry: so - unfortunately you have to do it in c++ [01:14] _ry: src/node_buffer.cc [01:14] ditesh|cassini has joined the channel [01:16] jedschmidt: _ry: blarg, i was afraid of that. c++ is beyond my ken, alas. [01:17] jedschmidt: _ry: sorry i'm not of much help there... mind if i put in an issue instead? [01:18] _ry: jedschmidt: sure - i'e been meaning to do it [01:19] captainbenis has joined the channel [01:19] captainbenis: hey guys [01:19] jedschmidt: _ry: okay, i'll put it up. thanks! [01:19] captainbenis: is there a multipart class [01:19] captainbenis: that uses the buffer class? [01:19] captainbenis: im trying to upload binary data and getting inconsistent results [01:22] WALoeIII has joined the channel [01:22] jedschmidt: _ry: here ya go: http://github.com/ry/node/issues/issue/128 [01:24] _ry: captainbenis: i don't think so, unfortunately [01:24] captainbenis: ok thanks. [01:24] captainbenis: i'll need to use the buffer class to process binary data yes? [01:24] _ry: yes [01:24] captainbenis: i can't just set the string type to binary? [01:25] _ry: well, the 'binary' encoding is okay [01:25] _ry: but you have to be careful about making a utf8 string out of it [01:25] _ry: if you're just piping it to file or some other sock, it should be fine [01:27] captainbenis: ok. im using the original node.js multipart class [01:27] captainbenis: and getting different file lengths every time i upload [01:27] captainbenis: more investigation required [01:28] mkovacs has joined the channel [01:28] sudoer has joined the channel [01:34] gf3 has joined the channel [01:42] elliottcable has joined the channel [01:54] CIA-77: node: 03Ryan Dahl 07master * rc6248ef 10/ src/node_crypto.cc : Compile for beta versions of OpenSSL 1.0.0 - http://bit.ly/a1E2YV [01:54] kriskowal has joined the channel [02:03] captainbenis: okay making progress [02:03] captainbenis: using filewritestream is helping [02:10] JimBastard has joined the channel [02:11] hassox has joined the channel [02:11] JimBastard: roar [02:12] isaacs: captainbenis: if you run into any unresolveable snag, feel free to email me. i won't get back right away, but i'll take a look if you have some reduction that fails. [02:12] JimBastard: i think i need to rewrite some glue for hook.io >.< [02:13] PyroPeter has joined the channel [02:14] nsm has joined the channel [02:14] captainbenis: thanks iaacs [02:15] softdrink has joined the channel [02:27] manv has joined the channel [02:28] creationix has joined the channel [02:32] creationix has joined the channel [02:32] joshbuddy has joined the channel [02:32] mikeal has joined the channel [02:36] mikeal1 has joined the channel [02:37] sh1mmer has joined the channel [02:39] tmpvar has joined the channel [02:43] gwoo has joined the channel [02:47] creationix has joined the channel [02:48] joshr` has joined the channel [02:50] ncb000gt has joined the channel [02:53] gf3 has joined the channel [02:56] tekky has joined the channel [03:00] noonat has joined the channel [03:04] joshbuddy has joined the channel [03:11] tek has joined the channel [03:11] isaacs has joined the channel [03:15] mjr_ has joined the channel [03:17] creationix has joined the channel [03:17] mrjjwright has left the channel [03:22] towski has joined the channel [03:23] PyroPete1 has joined the channel [03:29] CIA-77: node: 03Ryan Dahl 07master * rc7b3c1e 10/ test/disabled/test-http-big-proxy-responses.js : Add more asserts to test-http-big-proxy-responses - http://bit.ly/aQEcpN [03:29] CIA-77: node: 03Ryan Dahl 07master * re235aae 10/ lib/net.js : [03:29] CIA-77: node: Fix bug in socket write optimization [03:29] CIA-77: node: Thanks to tlb@tlb.org for finding it! - http://bit.ly/9XxfeD [03:30] _ry: still a bug remaining... [03:30] _ry: but getting closer. [03:30] creationix: at least it's getting closer [03:33] creationix: _ry: I'm flying out to San Francisco on May 8th [03:33] mjr_: What for? [03:33] creationix: hopefully getting for work with isaacs for the summer [03:33] mjr_: oh, nice [03:33] isaacs: ACTION cheers [03:33] creationix: down in Santa Clara [03:33] mjr_: What work does isaacs do? [03:33] isaacs: ACTION writes javascript at a super stealth startup [03:33] creationix: works for a top secret startup called kakai [03:33] creationix: yep [03:33] ncb000gt: ps3/xbox. [03:33] ncb000gt: .. [03:33] isaacs: super extra stealth!! [03:34] isaacs: we're like ninjas. [03:34] mjr_: sweet [03:34] isaacs: i still don't even know where the office is. it's that stealthy. [03:34] isaacs: andi've been going there for 2 weeks now [03:34] mjr_: I guess they've outsmarted the best. [03:35] creationix: but even if it doesn't work out I'll still be flying in, I already bought the tickets [03:35] creationix: :) [03:36] joshr`: Well, we wish we could tell you more, but you'll just have to cool your jets. [03:36] mjr_: If you are interested and have time, you could swing by and have a coffee / beer with me in SF. [03:36] joshr`: zat it? [03:36] ncb000gt: Kakai eh? Concept sounds interesting. :) [03:37] creationix: I haven't signed an nda yet, but from what I heard in the interviews, it sounds really cool [03:37] _ry: creationix: cool - let's meet up [03:37] ncb000gt: nice bit of funding too [03:37] ncb000gt: lol [03:38] ncb000gt: you guys working on node there? [03:38] creationix: _ry: of course, all I know so far is that my family and I will be arriving at the airport Saturday night [03:38] ncb000gt: assuming you can say anything at all about it [03:38] ncb000gt: >=D [03:39] mjr_: The Kakai speculation makes it sound awesome. [03:39] _ry: creationix: they're all coming? [03:40] isaacs: if you all wanna set up a noders meetup, i'll try to make it. [03:40] creationix: yep, the plan is to live in santa clara or nearby for the summer [03:40] _ry: creationix: i was going to offer you a couch to sleep on but not sure if my one bedroom can fit more :) [03:40] mjr_: An SF noders meetup sounds like a great idea. [03:41] _ry: yeah - let's 3 get togther maybe mikeal and mjr would liket o come too [03:41] mjr_: Assuming it isn't too dumb to call it "noders" [03:41] creationix: _ry: thanks, we'll see what we need, we really don't mind sleeping on the floor though [03:41] creationix: I usually say noders [03:41] joshr`: heh i was going to say "hi noders" earlier [03:41] isaacs: i think noders is the official term, actually; [03:41] joshr`: but being a n00b i didn't want to sound like a, uh, n00b [03:41] joshr`: ok good [03:41] isaacs: like lispers and javascripters and waiters. blanker = "one who blanks" [03:42] creationix: heh, when I went up to nyc for a business trip we had a js meetup there, I'm liking this pattern :) [03:43] ncb000gt: voodootikigod had setup NOVAlangs some time ago, but interest kinda dwindled a bit [03:43] JimBastard_ has joined the channel [03:43] ncb000gt: NOVA being northern VA [03:43] ncb000gt: but if you head out here, we can sit around a table, drink, and talk about stuff [03:43] ncb000gt: :) [03:45] _ry: ACTION is going home [03:45] _ry: bye [03:45] creationix: bye [03:45] joshr`: is anyone by chance using gearman? [03:46] mjr_: creationix: how long will you be in Santa Clara? [03:46] creationix: If I get a job, three months [03:46] creationix: if not, maybe a week or so [03:47] ncb000gt: mape: you there? [03:47] mjr_: What is your family going to do the whole time? Also look for jobs? [03:48] ncb000gt: mape: nvm, you had the person on the list i was going to recommend anyway [03:48] creationix: mjr_: no, they will just hang out and have fun (wife and two little kids) [03:49] ncb000gt: santa clara is right one the beach no? [03:49] mjr_: ahh, no [03:49] mjr_: It is right in the middle of office park land. [03:49] ncb000gt: heh, shows how much of CA i know [03:49] ncb000gt: lol [03:49] ncb000gt: sounds...awesome? [03:50] joshr`: 45 minutes to santa cruz [03:50] mjr_: It is a fantastic place to work if you like computers and the Internet. [03:52] creationix: if kakai falls through, I'm looking at extjs or something else near there, there are computer jobs in that area I hear. [03:52] ncb000gt: that's cool [03:52] creationix: sure would be cool to get to work with isaacs or someone I know from node though [03:53] ncb000gt: we are using extjs for the full interface of a project at work [03:53] creationix: didn't they recently hire tjholowaychuck? [03:53] creationix: of course he's working remote from Canada [03:54] mnutt has joined the channel [03:59] kriskowal has joined the channel [04:06] steadicat has joined the channel [04:07] hassox has joined the channel [04:12] creationix: Grr, I'm tired of being burned by the "Error: ENOENT, No such file or directory" error [04:12] creationix: ACTION will create a patch, even if it's not accepted upstream... [04:13] ncb000gt: haha [04:17] mjr_: creationix: are you considering moving to the bay area then? [04:17] creationix: just for the summer [04:17] creationix: not sure I can handle moving there yet [04:18] creationix: I would like to finish my school some time [04:18] micheil has joined the channel [04:18] mjr_: Oh yeah, that'd also be good. [04:19] mjr_: There is a lot of cool stuff, work wise, going on here. If your first gig doesn't line up, there are many, many other good options. [04:21] creationix: that's what I figured, hence buying the plane tickets while they were cheap [04:23] bmizerany has joined the channel [04:24] creationix: I'm really burned out at my school, but If I transfer I'll loose 15 hours of masters credits (about half the degree) [04:25] ncb000gt: ouch [04:26] creationix: at least I finish my bachelors in a few weeks (I'll actually miss my graduation since its the week after I arrive in SF) [04:26] ncb000gt: ahh, depends on how much it means to you [04:26] mape: so how did I just wake up with a messed up hand.. [04:26] ncb000gt: and how much "closure" you need [04:26] mjr_: mape, WTF kind of time schedule are you on? [04:26] ncb000gt: mape: a lot of times i'll wake up and can't move my arm [04:26] tmpvar has joined the channel [04:27] ncb000gt: also, what mjr_ said. [04:27] ncb000gt: :) [04:27] creationix: heh, I just don't breathe when I'm sleeping [04:27] creationix: (sleep apnea) [04:27] mape: It is called Sweden [04:27] mape: And my fingers hurt like hell :/ [04:27] ncb000gt: WAT?!? there are places other than the US? [04:27] mape: Probly bent them to hell [04:27] mjr_: Yeah, but, you were on like 4 hours ago, weren't you? [04:28] ncb000gt: ACTION has had his mind blown [04:28] mape: Yeah it is a mad world [04:28] creationix: mape, did you decide on going to swdc, or was it too expensive? [04:28] mape: mjr_: Well, we don't have laws that keep us from staying up late :P But I do still have a job.. So yeah [04:28] ncb000gt: lol [04:28] ncb000gt: mape: I'm on a similar schedule, tho I bike to work, probably not the best long term plan [04:29] mjr_: mape, I have more questions [04:29] mjr_: You are from Sweden, but your typed text is filled with American-isms. Please explain. [04:30] mape: creationix: Can't really say I looked hard at going. [04:30] mape: mjr_: I was raised on doctor quinn, cartoon network and Fresh Prince [04:30] mape: And played Kings Quest at an early age [04:30] ncb000gt: mape: look at what you've done...now I'm going to have to get back seasons of Fresh Prince... [04:31] ncb000gt: son of a bitch! [04:31] mjr_: I guess I'm noticing more of a Cartoon Network, not so much the Medicine Woman. [04:31] mape: So I know all about yellow book shelves and whatnot [04:31] creationix: that's ok, I'm from Texas and I always say "You guys" [04:31] ncb000gt: mjr_: she was in wedding crashers [04:31] mape: ncb000gt: ;) [04:31] mjr_: I say y'all because it is a word that is missing from the language. [04:31] mape: mjr_: Aww :/ The Cartoon Network angle isn't so charming [04:32] mjr_: But yeah, people do sort of throw a NotFromTheSouth exception whenever I do. [04:32] mape: Owell, need to get ready for work, bbl [04:32] ncb000gt: later [04:33] creationix: mjr_: have you always been in CA? [04:34] mjr_: I grew up in western Michigan, where they also don't say y'all. [04:34] mjr_: But, like Texas, they like guns and pickup trucks. [04:35] creationix: yeah, when I visited NYC and met some noders there they were amazed at the open-cary laws in Texas [04:35] creationix: *carry [04:35] mjr_: Oddly, I think open carry is just barely legal in CA [04:35] mjr_: Although nobody does it [04:36] creationix: I find it strange that you need a special license to conceal, but it's perfectly ok to carry in the open [04:36] ncb000gt: Most of the non-obvious state laws tend to baffle me. [04:36] mjr_: When I go back home, there are guys in the grocery store proudly strapped. [04:36] ncb000gt: mjr_: you know, in case that tree decides it's time to fight back., [04:36] creationix: I guess you're more likely to do something nasty when you can sneak the gun in [04:37] ncb000gt: or in case that mtn lion and his crew corner you in a back alley? [04:37] creationix: so what's biking weather like in the SF area [04:37] mjr_: bicycle, or motorcycle? [04:37] creationix: I'm wondering if I need to bring my scooter, or if a mountain bike will be enough [04:37] mikeal has joined the channel [04:37] mjr_: Most of the bay area is very friendly to bicycles. [04:38] nsm has joined the channel [04:38] mjr_: Some parts more so than others. [04:38] creationix: http://static.creationix.com/piaggio_mp3.jpg [04:38] creationix: if it didn't cost so much to ship, I'd bring my scooter in a hearbeat [04:38] mjr_: You've got one of those crazy things? [04:39] creationix: it's a blast to drive around urban areas [04:39] Aria: wow. Nice. [04:39] mjr_: Motorcycling in California is fantastic. Lane-splitting is legal. [04:39] creationix: yeah, I used to live on Orange county [04:39] creationix: I just had a mountain bike then, but I rode in traffic [04:40] creationix: I would play leapfrog with the city busses for miles [04:40] mjr_: This is what I ride over the Bay Bridge every day: http://www.maxmoto.co.uk/images/Aprilia%20Tuono%202006%20800.jpg [04:41] creationix: mjr_: that's a fast beast I'll bet [04:41] mjr_: Yeah, it makes 139HP in a very small package. [04:41] mikeal: man, the node list is busy [04:41] mjr_: I see those MP3s in the shop all the time though. [04:41] mjr_: Anyway, speaking of node, here's mikeal. [04:42] creationix: mine is the 250cc so it tops out around 77mph [04:42] mikeal: this is the node channel :) [04:43] mjr_: The MP3 looks really curious when cornering. I'll wager that this relates to node in some tenuous way. [04:43] creationix: sure, they're both very strange and vastly misunderstood [04:43] ncb000gt: mikeal: it is busy [04:44] creationix: and the mp3's transmission is event based [04:44] creationix: well, I'm off to bed, I'll quit spamming the ndoe room [04:44] ncb000gt: later [04:45] sudoer has joined the channel [04:46] mjr_: Hey, actually speaking of node, can anybody tell me why there is ascii encoding when there is also binary encoding? [04:47] mjr_: I see that they are different, and call into V8 in different ways, but what does it mean to do a binary write vs an ascii write? [04:49] ncb000gt: basically it has to do with bits [04:50] ncb000gt: good explanation here: http://www.cs.umd.edu/class/spring2003/cmsc311/Notes/BitOp/asciiBin.html [04:51] Aria: ascii has no 8th bit set. [04:51] mjr_: I get that ascii is only 7 bits [04:52] mjr_: But what does node do differently with an ascii write vs a binary write of a string? [04:52] ncb000gt: why delineate between the two? [04:52] mjr_: The docs say: `'ascii'` and `'binary'` only look at the first 8 bits [04:52] mjr_: of the 16 bit JavaScript string characters. [04:53] mjr_: So uh, is that just wrong? [04:53] Aria: In theory, ascii will also set the top bit to 0, or error if it's set. [04:53] Aria: There's talk on the commonjs list about that right now. [04:54] mjr_: So what's the answer? [04:55] Aria: Lots of shoulds and no consensus [04:55] Aria: This is the commonjs list after all [04:55] Aria: Also some "node is weird" [04:56] ncb000gt: if they both essentially do the same thing, i'm not sure why there is a different mjr_ [04:56] ncb000gt: not essentially tho, if they do the same thing [04:56] ncb000gt: i haven't really looked at it [04:56] mjr_: I'm sure they do something different. I'm just trying to figure out what it is. [04:56] ncb000gt: sure [04:56] mjr_: Mostly because I want to update the docs, but partially because I just want to know. [04:57] mjr_: Right now the sentence that's in there isn't very helpful. [04:57] ncb000gt: heh [04:59] dgathright has joined the channel [05:00] Aria: Wow. Interesting. I'm not sure what it's doing. [05:00] Aria: The binary slice calls a C++ encode function. Ascii does not [05:01] isaacs has joined the channel [05:02] mjr_: yeah, I saw that too. So what does that mean? [05:02] Aria: I'm reading Encode and not seeing why yet. [05:02] mikeal: is there such a thing as knowing "too much" about HTTP? [05:02] mjr_: mikeal: yes, and still somehow no. [05:03] Aria: Oh. Byte ordering, I bet. [05:03] Aria: Ascii is bytewise, binary might be wordwise here. [05:03] mikeal: so often this week I've stepped back and thought "well, now that's just some other crazy thing I know about HTTP" [05:03] isaacs: mikeal: HTTP is to my religion what the holy trinity is to catholocism [05:03] Aria: Hehe, yep, mikeal [05:04] mikeal: isaacs: don't make that analogy [05:04] isaacs: it is mysterious, incongruous, and a puzzle which has no ultimate solution, but which provides a path towards enlightenment when one ponders its implications. [05:04] mikeal: that makes me *really* think I need to stop figuring out more HTTP [05:04] mikeal: hahahahahaha [05:04] mjr_: surely you must be able to get to the END of HTTP at some point. [05:04] mikeal: HTTP as religion [05:04] isaacs: rfc2616 is like my Song of Solomon [05:04] Aria: Oh, no, I see, mjr_. The "binary" mode puts the bytes in the low bytes of UTF-16 data. So that it can make a round trip without munging. [05:05] mikeal: there are a lot of quarks [05:05] isaacs: mikeal: it's not that HTTP is my religion. but it is canon [05:05] Aria: Yeah. But oddly sensical quirks. [05:05] mikeal: not always :) [05:05] isaacs: mikeal: the original 5 seasons of futurama are part of my bible, as well. [05:05] mikeal: my brain hurts [05:06] mikeal: i'm gonna watch some Burn Notice and try to make myself stupider before I can go to sleep [05:06] isaacs: see, in my religion, we go outof our way to make sure that no one takes the dogma too seriously. [05:06] mjr_: Aria: but how is that different from ascii? [05:06] isaacs: ohno, i hope i didn't broke mikeal's brains! [05:06] ncb000gt: lol [05:07] mjr_: Sounds like he's had a few too many internets today. [05:11] Aria: mjr_: Ascii just writes the bytes and hopes they're compatible. [05:12] markwubben has joined the channel [05:12] mape: Well that isn't nice [05:12] mjr_: So why not always use binary then? [05:13] Aria: Twice the RAM, more time to convert and stuff. [05:13] Aria: The opinion I'm starting to form here is that it's fugly. [05:16] mjr_: so doing a binary slice of a buffer into a string will use 16 bits for every 8 in the buffer? [05:17] Aria: That's kinda what I'm seeing. [05:17] Aria: Don't quote me on that, but it sure looks that way, staring at the Encode function [05:17] Aria: copying from a char* buffer to a uint16* buffer [05:19] ncb000gt: time for me to faceplant, later [05:19] ncb000gt has left the channel [05:21] mjr_: Maybe this will have to wait until the next party where I see _ry and corner him about my outstanding node questions. [05:23] Aria: That ++ [05:23] Aria: Or after he catches up on his email [05:24] mape: The one giant mail haunting him :/ [05:26] mjr_: Aria: after reading the code, do you have a suggestion for what the docs should say instead of the cryptic thing about first 8 bits? [05:31] Aria: I don't. [05:33] towski has joined the channel [05:39] charlesjolley has joined the channel [05:43] jwm has joined the channel [05:52] hassox has joined the channel [05:57] jwm: why does node.js use waf? [05:57] jwm: hehe [05:59] teemow has joined the channel [06:03] jwm: ok nm [06:03] jwm: waf uses python and python is more portable than sh/m4 :) [06:03] joshbuddy has joined the channel [06:03] joshbuddy has joined the channel [06:07] ahc has joined the channel [06:17] captainbenis has joined the channel [06:24] inimino: mjr_: both binary and ascii use one JavaScript character (which is 16 bits) per ASCII character or byte of data [06:25] inimino: mjr_: the difference is that ascii is faster, is optimized in V8, and will drop the high bit if it is set [06:25] mjr_: oh, ok [06:27] teemow has joined the channel [06:27] mjr_: I'll try to paraphrase those two sentences into my doc update patch, thanks. [06:30] micheil has joined the channel [06:44] nsm has joined the channel [06:45] nsm has left the channel [06:46] CodeOfficer has joined the channel [06:52] felixge has joined the channel [06:52] felixge has joined the channel [06:58] kjeldahl has joined the channel [07:07] SamuraiJack has joined the channel [07:15] SamuraiJack_ has joined the channel [07:25] martoche has joined the channel [07:27] CIA-77: node: 03Matt Ranney 07master * r2374e55 10/ doc/api.markdown : [07:27] CIA-77: node: More Buffer descriptions and examples. [07:27] CIA-77: node: Updated Script examples for New Script methods. - http://bit.ly/amEb09 [07:27] _ry: mjr_: thanks for the doc stuff [07:28] _ry: i squashed it into that commit [07:28] mjr_: cool [07:28] mjr_: The more narrow format makes many of the examples cut off. [07:28] mjr_: I broke up a few of the long lines, but I didn't get them all. [07:28] mjr_: The HTTP client example, doesn't fit, for example. [07:29] _ry: yeah - goign to try to get them under 60 cols for 0.2 [07:29] jwm: hehe [07:29] _ry: i'm going to * [07:29] jwm: we're racing up there in version numbers aren't we [07:29] jwm: :) [07:30] jwm: hadn't downloaded new node in a month or two [07:30] jwm: and thought I was dislexic for a second [07:31] jwm: I had 0.1.29 [07:31] mjr_: OK, I can try to keep them under 60 cols. [07:31] jwm: and 0.1.92 was available for download [07:31] jwm: heh [07:31] mjr_: (Although I still think even 70 cols would be nicer.) [07:31] jwm: standard 80 or greater [07:31] jwm: :) [07:33] _ry: i think keeping them skinny is a worthy contraint [07:33] _ry: force you to keep it simple [07:33] _ry: forces [07:33] _ry: (brushing teeth while typing :)) [07:34] mjr_: I can adapt. Although "script.runInNewContext" already uses 1/4 of the characters. :) [07:36] pkrumins: good reading http://sysoev.ru/prog/v8.html [07:36] pkrumins: why nginx doesn't use node.js [07:40] jwm: performance reasons [07:40] jwm: which are find and dandy [07:40] jwm: btw I love nginx [07:40] jwm: but I love the ease of javascript :) [07:42] tlrobinson_ has joined the channel [07:43] elbart has joined the channel [07:45] javajunky has joined the channel [07:48] _ry: mjr_: yeah - we should shorten those methods [07:48] _ry: runNewContext at least [07:48] mjr_: path for long lines almost ready [07:48] mjr_: er, patch [07:49] CIA-75 has joined the channel [07:51] mjr_: there you go [07:52] mjr_: How about runcx just like evalcx? [07:52] pdelgallego has joined the channel [07:52] _ry: yeah maybe [07:53] _ry: nice thanks [07:54] mjr_: Now it all fits in the boxes, at least on my machine. [07:55] CIA-75: node: 03Ryan Dahl 07master * r24931f8 10/ (47 files in 10 dirs): Upgrade V8 to 2.2.5 - http://bit.ly/9S4cxH [07:55] CIA-75: node: 03Matt Ranney 07master * rd1b352e 10/ doc/api.markdown : Shorten some long lines. - http://bit.ly/b9UunJ [07:55] mjr_: Looks like our CIA got upgraded by 2 CIAs. [07:55] mjr_: OK, now I must sleep. [07:56] _ry: me too [08:08] felixge has joined the channel [08:08] felixge has joined the channel [08:12] javajunky has joined the channel [08:17] SamuraiJack_: hello [08:18] SamuraiJack_: is it possible to do an "include(file_name)" in node? [08:18] SamuraiJack_: which will evalute the content of file in the current scope (w/o securing) [08:22] SamuraiJack_: oh, nevermind, seems I can just read the file content :) [08:23] SamuraiJack_: ACTION is a total newbie in SSJS world [08:28] N` has joined the channel [08:38] kjeldahl has joined the channel [08:43] maushu has joined the channel [08:49] javajunky has joined the channel [08:52] TomY has joined the channel [08:57] nsm has joined the channel [08:59] mythz has joined the channel [09:07] piranha has joined the channel [09:09] mjr_ has joined the channel [09:10] hellp has joined the channel [09:19] mjr__ has joined the channel [09:27] lobridge has joined the channel [09:32] lobridge: hi, ever since I upgraded from 1.33 to 1.9x I'm having all kinds of weird problems. My app that was running stable with 1.33 for weeks. But now it keeps crashing (with 1.91) and with 1.92 which I just updated I get loads of "node http server: Error: ECONNRESET, Connection reset by peer" [09:32] micheil: odd. [09:32] lobridge: way more errors than clients that are connecting [09:33] lobridge: Not sure if it's still crashing as I just upgraded but it used to crash with Error: Parse Error at Stream.ondata (http:524:30) at IOWatcher.callback (net:307:31) at node.js:748:9 [09:35] Roflrilla: So what do you guys use node.js for? [09:35] Roflrilla: As far as I know there is no database integration [09:36] Roflrilla: Unless you do ajax calls to "parsers" to fetch data [09:36] micheil: Roflrilla: there is database integration [09:36] micheil: Roflrilla: check the modules page [09:36] Roflrilla: whats the URL? Can't see a link on the website [09:37] micheil: Roflrilla: an example is dropular.net, it's built by the lead designer of spotify, and powered purely by node.js and couchdb [09:37] micheil: Roflrilla: http://wiki.github.com/ry/node/modules [09:38] Roflrilla: So does node.js handle 1000's of simultaneous connections? [09:39] micheil: Roflrilla: as far as I know, more. [09:39] Roflrilla: :D [09:39] Roflrilla: What about um, cgi? :P [09:39] Roflrilla: Or more specifically, php. [09:39] micheil: why would you want CGI, you've got node.js [09:39] Roflrilla: File system operations [09:39] Roflrilla: Mail. [09:40] micheil: I'm not sure on the benchmarks, but apache is usually slow with connections, and has limited concurrency due to the threaded nature [09:40] micheil: node is an evented webserver, like nginx [09:40] Roflrilla: yup [09:41] Roflrilla: Looks fun. [09:41] micheil: so, node is currently almost at comparison with nginx. [09:42] micheil: if concurrency=300, and you're serving 2^16 bytes, then the response times are about the same [09:42] micheil: http://nodejs.org/jsconf2010.pdf [09:57] pkrumins: jwm, no not performance reasons, it's that it exits when it's out of memory [09:57] pkrumins: jwm, and since nginx is single threaded, if nodejs exits, nginx exits. [10:02] TomY: dunno if anyone else has been having trouble untarring node releases, but the fix is this option for tar: --pax-option="delete=SCHILY.*" [10:02] TomY: took quite a bit of googling, so thought i'd share it here [10:19] rtomayko has joined the channel [10:34] kjeldahl has joined the channel [10:35] PyroPete1 has joined the channel [10:35] demolithion has joined the channel [10:49] MattJ has joined the channel [10:57] kjeldahl has joined the channel [11:04] hassox has joined the channel [11:05] sveimac has joined the channel [11:07] mythz has joined the channel [11:16] herbySk has joined the channel [11:18] dekroning has joined the channel [11:29] Nohryb has joined the channel [11:47] sztanpet has joined the channel [11:53] teemow has joined the channel [11:55] botanicus has joined the channel [12:01] diegomvh has joined the channel [12:01] diegomvh: hi [12:02] mape: hey [12:04] diegomvh: I do not speak good English [12:04] mape: Don't worry, I'm swedish ;) [12:05] diegomvh: For some time I'm seeing the evolution of node [12:05] diegomvh: and [12:05] jansc has joined the channel [12:05] diegomvh: whit a friend in argentina we create a similar project [12:06] diegomvh: el proyecto esta actualmente estancado [12:06] diegomvh: I'm using google translate to translate, sorry [12:06] mape: Hehe I'm doing as well [12:07] diegomvh: www.protopy.com.ar the project is currently stalled [12:07] mape: �por qu� se estanc� [12:09] diegomvh: I am interested in contributing to node, carrying part of the code of "doff" or other module from protopy [12:10] mape: �Has mirado a facilitar los m�dulos? [12:11] diegomvh: node.js has similar modules than protopy [12:11] mape: commonjs? [12:11] diegomvh: protopy has a "django-offline" [12:12] diegomvh: pero, me interesa saber si estan interesados en algo de esto? [12:12] mape: Y usted quiere ser capaz de utilizarlo con nodejs as�? [12:12] diegomvh: sorry [12:12] diegomvh: but I want to know if you are interested in any of this? [12:12] diegomvh: yes! [12:13] diegomvh: protopy has the concept of module and is similar to node [12:13] mape: No veo por qu� no ser�a una buena cosa. Pero habr�a que hablar de _ry [12:13] diegomvh: _ry? [12:14] mape: �l es el creador, pero si es s�lo un m�dulo no deber�a ser un problema. Supongo que es m�s una cuesti�n de si ser�a necesario integrar en la base. [12:15] mape: �l es de america por lo que est� durmiendo en este momento [12:16] pkrumins: hey, any ideas how to set timeout for http.createClient connections? [12:16] mape: pkrumins: setTimeout? [12:17] pkrumins: but on what? [12:17] pkrumins: var client = http.createClient(...); [12:17] pkrumins: client.setTimeout()? [12:17] pkrumins: k gonna figure it out [12:17] pkrumins: never mind. [12:17] mape: You want the client to keep the connection open even if the server closed? [12:17] mape: Or delay the callback? [12:17] pkrumins: no sir, let me explain. [12:18] pkrumins: i want to make a connection which the server keeps open, but reconnect every 5 seconds. [12:18] diegomvh: wanted to ask just that, what part interes to the community? [12:18] mape: diegomvh: Se ve muy bonito, as� que estoy seguro que la gente le gustar�a ver que funcione en nodejs. [12:18] mape: pkrumins: You are trying to do longpull from the servers side? [12:19] pkrumins: yep [12:19] diegomvh: basically the objetive was a offline django [12:19] mape: diegomvh: Really nice [12:21] diegomvh: but i dont like to much the way in protopy for load modules, and other things [12:22] mape: Don't like? [12:23] diegomvh: i see in node.js a good option to translate what the comunity wants or decide [12:23] kriszyp has joined the channel [12:24] diegomvh: somos solo dos personas trabajando en el proyecto [12:24] diegomvh: sorry [12:24] diegomvh: are only two people working on the project [12:24] diegomvh: and continuity is difficult [12:24] mape: It is gathering a lot of traction so unless you really need to do something different working ontop of node should be a good idea [12:24] ditesh|cassini has joined the channel [12:28] hellp has joined the channel [12:29] diegomvh: http://www.protopy.com.ar/api/api/doff-dbapi.html [12:30] sveimac has joined the channel [12:30] diegomvh: is django writing in javascript [12:31] mape: ORM? [12:31] diegomvh: yes [12:31] mape: Do you have any projects built on it yet? [12:31] mape: Sites or whatnot [12:32] diegomvh: a blog [12:32] diegomvh: :) [12:32] diegomvh: the screancast never published :( [12:32] mape: Would you say it is mature or still in early development? [12:32] screen-x has joined the channel [12:33] diegomvh: mmmmm I consider mature, but it is difficult to maintain: ( [12:34] diegomvh: sorry [12:34] diegomvh: the example is about a shoping car [12:34] kjeldahl has joined the channel [12:34] mape: I guess the not being in english decreases the amount of people that could help [12:36] KungFuHamster has joined the channel [12:36] diegomvh: roject's goal is to plug-off web applications [12:36] diegomvh: the project's goal is to plug-off web applications [12:36] diegomvh: sorry [12:36] mape: dont worry :) [12:37] diegomvh: yes [12:37] screen-x: Hi all, is there a channel for discussing the express framework? [12:37] diegomvh: this is the problem :( [12:37] JAAulde has joined the channel [12:37] JAAulde has joined the channel [12:38] diegomvh: but i understand english very well [12:38] diegomvh: the dificult is writing :( [12:38] mape: screen-x: The community is so small so most module talk happens here [12:39] mape: diegomvh: So is the idea to supply the entire project as a module for node? [12:39] diegomvh: yes [12:39] diegomvh: or part [12:39] diegomvh: orm? [12:39] mape: That would be really nice [12:39] diegomvh: temlates? [12:39] diegomvh: forms [12:39] diegomvh: generation [12:40] mape: Have you looked at http://github.com/simonw/djangode ? [12:41] diegomvh: i dont know wath parts [12:41] screen-x: mape: thanks. I'm attempting to include a partial in a haml file, I have =this.partial('foo'). The partial haml is rendered to html, but then all the <> are converted to < so not rendered by the browser. How should I be including partials? [12:41] diegomvh: i dont know waht parts interesting [12:42] mape: diegomvh: I would guess the ORM would be the most interesting, alongside forms [12:42] mape: Templates are already done I believe and if not there are a ton of different ones [12:42] xla has joined the channel [12:42] diegomvh: goood "http://github.com/simonw/djangode" :) [12:43] mape: screen-x: Hmm not really, sure, have you looked at the google group? [12:44] screen-x: yeah, no hits for "partial", may have to post a question there. Thanks anyway :) [12:45] diegomvh: found node looking up the word "require" in google:) [12:45] mape: Yeah might be the easiest way to get a good answer [12:45] N` has joined the channel [12:56] cruxst has joined the channel [12:59] davidsklar has joined the channel [13:05] screen-x: Found answer to my prob in haml docs, should have used != instead of = eg: !=this.partial('foo') [13:09] tekky has joined the channel [13:10] jedschmidt has joined the channel [13:15] jherdman has joined the channel [13:16] botanicus has joined the channel [13:17] KungFuHamster has joined the channel [13:18] markwubben has joined the channel [13:24] stepheneb has joined the channel [13:30] kjeldahl has joined the channel [13:33] kjeldahl has joined the channel [13:35] derbumi has joined the channel [13:36] noonat has joined the channel [13:40] kjeldahl has joined the channel [13:49] kjeldahl has joined the channel [14:00] gf3 has joined the channel [14:09] kjeldahl has joined the channel [14:11] joshr`: mornin [14:13] KungFuHamster: morning [14:15] javajunky1 has joined the channel [14:15] hsuh: http://wiki.github.com/ry/node/modules !!! [14:18] keeto has joined the channel [14:18] siculars has joined the channel [14:23] N` has joined the channel [14:24] javajunky has joined the channel [14:24] javajunky has joined the channel [14:25] alex-desktop has joined the channel [14:28] saikat has joined the channel [14:30] mape: ? [14:34] javajunky has joined the channel [14:34] creationix has joined the channel [14:36] creationix: anybody know how much work it would be to get node running on sun4u sparc [14:37] creationix: was it V8 that wasn't ported yet? [14:39] kriszyp: I wonder where to put Nodules on http://wiki.github.com/ry/node/modules... other, package management, or a new category (module loader)? [14:40] steadicat has joined the channel [14:40] demolithion has joined the channel [14:40] creationix: kriszyp: what does it do, I forget? [14:40] creationix: I was trying to figure out where to put nvm (node version manager) [14:41] kriszyp: http://github.com/kriszyp/nodules [14:41] kriszyp: module loader, but it kind of fulfills the role that a package management tool would proivde (auto dependency downloading) [14:41] creationix: wow, that's one ambitious project [14:41] kriszyp: yeah, categorization can be tricky sometimes :) [14:42] Yuffster has joined the channel [14:43] creationix: it's close to package management, not exactly though [14:44] kriszyp: right [14:44] kriszyp: so do you figure out where to put nvm? [14:46] sveimac has joined the channel [14:49] creationix: kriszyp: no, it's really hard since it's not even written in js [14:50] creationix: kriszyp: so what's the difference between a package and a module? [14:50] kriszyp: a package is a set of modules [14:50] kriszyp: usually a github project = a package [14:50] kriszyp: and a package can define a set of "mappings" [14:51] kriszyp: so that you can define that require("foo/bar") maps to a something like "http://github.com/somebody/foo/...../bar.js" [14:51] creationix: so my haml template engine would be a module, but my wheat blog engine would be a package? [14:51] mape: Anyone know of a persitant session store for express? [14:51] kriszyp: probably [14:52] mnutt has joined the channel [14:53] creationix: I like the reloader api, seem really simple [14:53] creationix: so the module cache keeps you from needlessly reloading stuff that didn't change? [14:53] kriszyp: so in nodules you could do var Haml = require("http://github.com/creationix/haml-js/raw/master/lib/haml.js"); and it would automatically download that file before starting up everything [14:53] kriszyp: right [14:54] kriszyp: yeah, it tracks dependencies [14:54] creationix: no concept of versions yet? [14:54] kriszyp: so if module a depends on module b, when you change a.js it only reloads a, but if you change b.js, it reloads the file from b.js and reruns the factory for a [14:54] kriszyp: versions are easy with URLs [14:54] creationix: nice, I like that [14:55] kriszyp: http://github.com/creationix/haml-js/blob/v0.2.4/lib/haml.js [14:55] kriszyp: for example [14:55] creationix: and the files are cached locally for when you want to develop offline right? [14:55] kriszyp: yeah [14:55] kriszyp: it only downloads if it doesn't have it [14:55] kriszyp: it doesn't download everytime you start up [14:55] kriszyp: that would be painful [14:56] jbrantly: I hope that takes off [14:56] kriszyp: it is a little better/faster if you specify things by archive: jar:http://github.com/creationix/haml-js/zipball/v0.2.4!/lib/haml.js (an example of versioned dependence on a module in an archive) [14:56] jbrantly: I really like the decentralized nature of Package/Mappings [14:58] kriszyp: and then of course it is more convenient to make a mapping in your package.json: "mappings": { "haml": "jar:http://github.com/creationix/haml-js/zipball/v0.2.4!/lib/haml"} and then can just do require("haml") in your code [14:59] joshbuddy has joined the channel [14:59] joshbuddy has joined the channel [15:01] kriszyp: yeah, jbrantly, that is kind of why I wrote this, after trying to register my modules in tusk, npm, and kiwi with conflicting formats, I got frustrated, and decided the decentralized nature of the web is better basis for packages/deps anyway. I am not opposed to the package management tools, and will still try to register my stuff in there, as they can be convenient, but I didn't want to... [15:01] kriszyp: ...have to bank on that. [15:08] pkrumins: suppose I receive response from the connection as JSON data, how can I turn it in NodeJS in the corresponding JavaScript data structure? [15:09] ncb000gt has joined the channel [15:09] pkrumins: eval or something? (i trust the input) [15:09] pkrumins: there is JSON global object but I didn't yet find what methods it has [15:09] pkrumins: gonna look in source now [15:09] jbrantly: JSON.parse [15:10] pkrumins: jbrantly: hey thanks [15:10] creationix: pkrumins: also, the node_repl is great for exploring, just type "Object.getOwnPropertyNames(JSON)" to get the properties of JSON [15:10] creationix: if you want to see what methods an array has, do the same for Array.prototype [15:10] pkrumins: wow that is nifty [15:10] pkrumins: I tried `for (x in JSON) sys.log(x)` but it didn't output anything! [15:11] pkrumins: definitely nice to know about those two techniques, trying them right now to memorize [15:11] creationix: correct, for..in only iterates over the enumerable properties [15:11] pkrumins: and what are those properties? [15:11] pkrumins: some kind of hidden ones? [15:11] creationix: and most the built-in stuff is not enumerable [15:11] pkrumins: aha! [15:11] pkrumins: Array.prototype is {} :) [15:12] creationix: Javascript properties have meta properties, enumerable is just one of them [15:12] pkrumins: btw, does Node have some functional programming methods such as map or foldr? [15:12] creationix: Object.getOwnPropertyNames(Object) [15:12] creationix: pkrumins: yep, on Array.prototype [15:13] softdrink has joined the channel [15:13] pkrumins: so Object.getOwnPropertyNames(Array) [15:13] tmpvar has joined the channel [15:13] creationix: also I documented most the ECMA5 stuff that node has that you can't use in the browser http://wiki.github.com/ry/node/ecma-5mozilla-features-implemented-in-v8 [15:13] creationix: pkrumins: you want Array.prototype for methods of Array instances [15:13] pkrumins: hmm, my Array doesn't have every and map [15:13] pkrumins: node> Array.prototype [15:13] pkrumins: {} [15:14] joshr`: wow, lots of stuff on that modules wiki [15:14] creationix: pkrumins: Object.getOwnPropertyNames(Array.prototype) [15:14] pkrumins: creationix: thanks a lot for documenting those! [15:14] pkrumins: creationix: oh, oh. thanks! :) [15:14] creationix: everything on Array.prototype is not enumerable, so the regular inspect won't show it [15:15] pkrumins: right [15:15] creationix: also I modified sys.inspect to optionally show hidden stuff [15:16] creationix: sys.puts(sys.inspect(Array.prototype, true, 0)) [15:16] mape: creationix: Did you have a module that allowed one to add a ton of async functions and when they all finished return the combined returns? [15:16] pkrumins: how would I use sys.inspect to inspect s... ah here we go. [15:16] creationix: mape: I have three [15:16] pkrumins: very nice [15:16] botanicus has joined the channel [15:17] mape: creationix: But don't they block the others from running since they depend on the others output? [15:17] pkrumins: creationix: are you developing node.js? may I suggest a feature for buffers? to have .tobase64 method to turn output into base64 encoded string. [15:17] creationix: pkrumins: good idea, _ry has the final say on what gets included though [15:18] creationix: mape: what's your use case? [15:18] creationix: pkrumins: if you submit a patch with the new feature and updated api docs he will probably accept it [15:18] pkrumins: oh nice [15:18] pkrumins: putting it on todo [15:19] mape: creationix: supply a list of names, fetch all their followers from twitter and return the ids, since twitter only returns 5k ids per user I need to fetch pages of users for each user, and do that parallized [15:19] creationix: pkrumins: I'd volunteer myself, but my todo is already way too long [15:19] N` has joined the channel [15:19] pkrumins: right [15:19] creationix: mape, Step would be my first choice for that [15:19] pkrumins: it should be easy, i saw V8 has some stuff for that [15:19] pkrumins: and node_crypto.cc uses it [15:20] pkrumins: void base64(...) in node_crypto.cc [15:22] tmpvar: yo [15:22] creationix: mape, I'm writing up a short gist for you, I'm not sure how good the Step docs are [15:22] creationix: tmpvar: aup [15:22] creationix: sup [15:23] mape: creationix: Awsome! [15:23] herbySk has joined the channel [15:23] creationix: mape, do you have some code already I can base it on? [15:25] mape: creationix: hmm I'll write up some psuedo code if that helps [15:26] mjr_ has joined the channel [15:26] creationix: it's alright, I'm assuming a call to get total number of followers, and another to get up to 5k followers at a given offset [15:26] creationix: is that close enough? [15:26] mape: Yeah exactly [15:27] mape: so one step for all the combined stuff, and steps within those for getting the ids [15:27] mape: If that is doable in it [15:28] creationix: yep [15:31] tmpvar: how you doing creationix [15:31] creationix: good, busy as usual [15:31] tmpvar: busy is good [15:31] creationix: It is, I get bored easy [15:34] devinus has joined the channel [15:34] devinus: i'm glad _ry joined the discussion on the commonjs mailing list [15:36] creationix: mape: I'm thinking I should make another kind of "parallel" for this kind of batch work [15:37] creationix: almost done with the gist, here's what I got so far http://gist.github.com/380875 [15:38] mape: creationix: Great! I'll have a look [15:38] cloudhead has joined the channel [15:38] creationix: what's a quick way to turn several arrays into one [[1,2,3],[4,5,6]] -> [1,2,3,4,5,6] [15:38] creationix: maybe fold [15:39] tmpvar: Array.prototype.push.apply ? [15:39] tmpvar: oh [15:39] tmpvar: sorry, misread [15:39] creationix: hmm, what's reduce [15:39] RayMorgan has joined the channel [15:39] creationix: ahh, it's fold [15:40] kriszyp: [[1,2,3],[4,5,6]].reduce(function(a,b){return a.concat(b);}) [15:40] mape: creationix: The getFollowers, will that really be parallel? Ie do multiple requests per user for their followers ids? [15:41] creationix: yes [15:41] creationix: that's what the this.parallel() callback generator does [15:41] mape: ah [15:43] mape: gah :& [15:43] RayMorgan: _ry: very delayed response: The Aves game engine uses Node.js for a backend for multiplayer connectivity and chat. [15:43] mape: Seems the twitter api has cursor, not offset [15:44] pkrumins: i am gonna do a blogpost tomorrow on how amazing nodejs is for prototyping ideas. [15:44] tmpvar: yay [15:44] pkrumins: i am working at a speed I have never experienced before [15:45] tmpvar: creationix, did you ever peek composer's source? [15:45] creationix: mape: alright, updated the example [15:45] creationix: so does a cursor mean you can't pull in parallel? [15:45] pkrumins: all just prototypes. iterate, prototype, iterate, prototype, ... [15:45] mape: Seems like it, since I need to fetch the page to get the next cursor [15:45] mape: :/ [15:45] creationix: tmpvar: no not yet, sorry [15:45] tmpvar: np, no hurry :) [15:46] creationix: mape, notice especially the Step.fn helper at the bottom [15:46] creationix: I'm not sure that's documented at all, but it's very helpful [15:47] tmpvar: its a pretty slick/optimized implementation of "window mangement" (focus model and partial redraw) [15:47] tmpvar: management* [15:47] creationix: tmpvar: nice [15:47] sudoer has joined the channel [15:47] creationix: people like responsive interfaces [15:47] nefariousD has joined the channel [15:47] creationix: mape: I think I will add a helper, I don't like writing out Array.prototype.slice.call(arguments, 1) all over the place [15:48] tmpvar: yep, its good. nice solid foundation [15:48] nefD_ has joined the channel [15:48] devinus: "random mailing list of users" rofl [15:49] mape: creationix: does var loadAllFollowers and function loadAllFollowers work together? [15:49] mape: Oh [15:49] mape: also [15:49] mape: duh [15:49] creationix: yeah, they're the same thing [15:49] creationix: I just noticed that it's much better to pull the number of followers in the second function, refactoring... [15:50] mape: as it is now, if 1 async call locks the entire fetch waits for that one right? [15:53] mythz has left the channel [15:53] creationix: mape, ok, updated the gist again [15:53] creationix: what do you mean by locks? [15:54] tmpvar: heh [15:54] creationix: the next step won't fire till all the callbacks generated in the first one finish [15:54] creationix: or there is an error [15:54] mape: ah you changed it :) In the first you fetched the followers in the second loop, ie waiting for all user info to be fetched no? [15:55] creationix: yeah, the original version first got the number of followers for the entire array before it started pulling the actual followers in chunks [15:55] creationix: now it's super parallel, it starts a parallel sub job for each user in the list, and each of those starts grabbing data as soon as it knows how many there are [15:56] mape: And in the end there is? Food and cakes? :D [15:56] creationix: but you see all the times I have to do arguments surgery, there needs to be a cleaner way for that pattern [15:56] creationix: where you have an arbitrary number of parallel actions [15:58] creationix: I think I'll call it group() [16:00] mape: Hmm 500 TypeError: Object function Step() [16:00] mape: perhaps I'm using an old step? [16:01] creationix: mape: maybe, I've never seen that one [16:01] mape: Btw what doe the callback(null arg do? [16:03] KungFuHamster: grumble grumble.. I wish I knew why node-mysql wasn't working [16:03] mape: KungFuHamster: Still having issues with it? :( [16:03] ewdafa has joined the channel [16:04] KungFuHamster: yeah.. no response on the mailing list and no update in the repo [16:04] lifo has joined the channel [16:04] creationix: mape: Step follows the node convention where the first argument to the callback is always the error [16:04] mape: Ah k [16:05] fizx has joined the channel [16:05] devinus: node style guide [16:05] mape: creationix: so yeah, using the old step you had in your "random stuff" git probly wasen't the best of ideas :P [16:05] devinus: previewURL or previewUrl ? [16:06] creationix: mape: that will do it [16:06] creationix: devinus: I like the second, but either is fine [16:06] fizx has joined the channel [16:06] javajunky: mape; did you sort outt your oauth issues in t'end ? [16:08] mape: javajunky: Jup, and now I'm trying to fetch stuff using the twitter api thingymados [16:08] javajunky: cool. [16:08] mape: creationix: loadData should return the dataset after all is said and done right? [16:08] javajunky: I threw an example in on my auth stuff, but I imagine you're long past that [16:09] mape: javajunky: I'll take a look at it, never bad to get another angle if possible [16:09] creationix: it will return (null, arr1, arr2, arr3...) [16:09] creationix: where arr1 is the array of followers for the first name in the original list [16:09] pkrumins: suppose at some point my application receives a list of taksts to do. to make it simple, let this list be just [1,2,3,4,...10000] for some tasks 1, 2, 3, ..., 10000]. Now when it receives this list, it clearly can't do a for (i=0;i options = args[0]->ToObject(); [16:39] diegomvh has left the channel [16:39] joshr: after checking IsObject [16:40] joshr: i'll go that route for this first iteration [16:40] joshr: thanks creationix [16:40] creationix: mape: updated [16:40] felixge has joined the channel [16:40] felixge has joined the channel [16:40] creationix: mape: can't use Step.fn anymore since you want to postprocess the data and need the original list of ids, but it's still not bad [16:41] indiefan has joined the channel [16:42] creationix: mape: now the result is (null, data) [16:42] mape: creationix: Nice, last issue is that it returns objects [16:43] mape: [ [Object], [Object], [Object], [Object] ] [16:43] creationix: actually they're arrays, sys.p just glosses over details sometimes [16:43] mape: oh [16:43] mape: hmm same with sys.puts(sys.inspect(arguments)) [16:43] mape: guess they are the same though? [16:44] mape: Ah there we go, works fine when doing it on arguments[1] [16:44] manv has joined the channel [16:44] creationix: yep [16:45] creationix: when sys.inspect got changed to use the new comma-first style, parts of it were sloppy [16:45] creationix: it really should say [Array] not [Object] [16:45] manv_ has joined the channel [16:45] creationix: but technically [Object] is correct, just not as precise [16:45] mape: Cool, now I just have to hook it into actually fetching from twitter and I'm a happy man [16:46] mape: creationix: Thanks a lot :) [16:46] creationix: no problem [16:48] Nohryb: creationix: wrt [Array] not [Object] , do you know the "miller device" ? [16:48] bpot has joined the channel [16:48] creationix: miller device? [16:48] Nohryb: yes.. [16:49] creationix: Nohryb: so are you saying inspect should use Object.prototype.toString? [16:50] creationix: which would give [object Array] [16:52] noonat has joined the channel [16:53] Nohryb: yes: function isArray (object) { return ({}).toString.call(object).indexOf("Array") > 0 } [16:53] Nohryb: the "Miller device"... [16:54] pkrumins: creatonix, there doesn't seem to be promises in nodejs anymore? [16:54] jbrantly: that is nasty for normal usage [16:54] creationix: pkrumins: correct [16:54] deanlandolt: pkrumins: they're just a require away [16:54] pkrumins: i see [16:54] isaacs has joined the channel [16:55] creationix: I personally don't like promises and that's why I wrote Step [16:55] creationix: but the node-promise library is way better than the built-in node promises ever were [16:56] isaacs: Nohryb: why not just use Array.isArray()? [16:56] pkrumins: looking at it now [16:56] creationix: Nohryb: ahh, I see. I think I would like to keep it simple and just use the Object.prototype.toString for the abbreviated case [16:57] CodeOfficer has joined the channel [16:57] creationix: Nohryb: http://wiki.github.com/ry/node/ecma-5mozilla-features-implemented-in-v8 [16:57] creationix: it's great to have a fixed javascript engine to work with [16:58] _ry: pkrumins: yeah setTimeout is broke [16:58] _ry: i'll try to fix it today [16:59] jwm: creationix: you're full of useful urls :) [17:00] joshr: wow [17:00] creationix: glad I'm good for something [17:00] joshr: some of that Array.prototype stuff is nice [17:00] jwm: now let's not take it that far creationix :) [17:00] joshr: having just spent a few months with scala [17:00] jwm: I actually convinced one of my friends to come over to javascript from ruby [17:01] creationix: jwm: sweet [17:01] jwm: he still wants to do a ruby syntax in javascript but heh [17:01] jwm: vm is much faster [17:01] creationix: jwm: did you show him coffeescript? [17:01] jwm: I think he's aware of it [17:01] creationix: express is pretty ruby like too [17:02] jwm: I'm just wanting to make a p2p system using nodejs :) [17:02] creationix: that sounds like fun [17:02] jwm: until a couple days ago I didn't know about anyone else doing the same [17:02] jwm: but I found joindiaspora.com [17:02] jwm: ticked me off [17:02] jwm: hehe [17:03] joshr: yeah its always a bummer when someone else beats you to your great idea [17:03] creationix: speaking of p2p, I should probably work on my distributed programming homework since it's due in a couple of days [17:03] creationix: I wish they would let me use node, but at least I get to use libev [17:04] martoche has joined the channel [17:04] jwm: hehe [17:04] jwm: joshr: it's my own fault [17:05] jwm: been wanting to get my project off the ground for 13 years [17:05] jwm: but been waiting to see where the net was going [17:05] SamuraiJack_: hello [17:06] jwm: hi SamuraiJack_ [17:06] SamuraiJack_: I'm doing baby-step with node [17:06] SamuraiJack_: just installed 0.1.92 [17:06] SamuraiJack_: can I do 'require' from node-repl? [17:06] SamuraiJack_: I'm getting "Cannot call method 'lastIndexOf' of null" [17:07] SamuraiJack_: basically I just copied the "circle" example to the file [17:07] mape: Error: ECONNRESET, Connection reset by peer [17:07] mape: What would cause that in express? Or might? [17:07] SamuraiJack_: then started node-repl in the same dir [17:07] SamuraiJack_: and trying require('./circle') [17:08] SamuraiJack_: could someone help? [17:08] martoche has joined the channel [17:08] kriszyp: require from node-repl is probably going to be relative to the node-repl module (so it would look for circle.js in the node lib directory) [17:08] mikeal has joined the channel [17:09] SamuraiJack_: but when I do require('circle') I'm getting: Cannot find module 'circle' [17:09] SamuraiJack_: so it looks it find the circle.js [17:09] creationix: SamuraiJack_: you can cheat and do "require(__dirname +'/circle')" [17:09] SamuraiJack_: let me try [17:09] isaacs: SamuraiJack_: try require(require("path").join(process.cwd(), "circle.js")) [17:09] isaacs: creationix: __dirname will be /usr/local/lib/node/ [17:09] creationix: really? [17:09] isaacs: creationix: yeah, it's lame [17:10] SamuraiJack_: that works [17:10] creationix: someone needs to write a better repl some day [17:10] mrjjwright has joined the channel [17:10] SamuraiJack_: strange.. [17:10] creationix: SamuraiJack_: also you can just set NODE_PATH to your current dir in bash before starting node-repl [17:10] isaacs: the repl should "pretend" to be in cwd [17:10] creationix: isaacs: agreed [17:10] isaacs: SamuraiJack_: or require.paths.push(process.cwd()); require("circle") [17:11] isaacs: SamuraiJack_: if you want to outrank the existing paths, you could use unshift instead of push [17:11] SamuraiJack_: isaacs: that also work [17:11] SamuraiJack_: thanks [17:12] Nohryb: creationix: well, yes, this is Node.js, not browser scripting :-) [17:13] creationix: ACTION is trying to write a generalized group generator that generates callback generator functions [17:13] creationix: very confusing... [17:13] charlesjolley has joined the channel [17:15] kriskowal has joined the channel [17:15] jwm: I'm thinking of getting the fastcgi code in nginx to be compatible with nodejs [17:15] jwm: hehe [17:15] pkrumins: creationix: do you still use Combo.js library? or did you merge it in some larger library? [17:15] jwm: though I guess I can proxy pass to it [17:16] creationix: pkrumins: Step is my latest [17:16] jwm: but that won't work for ssl :) [17:16] creationix: jwm: how does proxy_pass not work for ssl? [17:16] pkrumins: creationix: so Step can do everything Combo can? I am just reading the articles sequentially. [17:16] SamuraiJack_: if I'll declare the global in the module, it will be visible in the calling context (in the context which made 'require')? [17:16] creationix: pkrumins: and much more [17:16] jwm: creationix: nginx doesn't support CONNECT [17:16] pkrumins: creationix: great! [17:17] creationix: SamuraiJack_: no, only exports are visible to the caller [17:17] SamuraiJack_: hm.. experiment show it will [17:17] SamuraiJack_: again, I'm trying with REPL [17:17] SamuraiJack_: seems its broken? [17:17] creationix: SamuraiJack_: I mean top level variables aren't visible, if you mess with already existing globals like Object.prototype it will persist [17:18] SamuraiJack_: nope, I'm about simple FOO = 'bar' [17:18] MattJ: SamuraiJack_: declaring the variables with "var"? [17:18] inimino: I don't think node creates a new global context [17:18] MattJ: SamuraiJack_: don't do that :) [17:18] jwm: it might be easier to patch nginx to support connect than fastcgi to do keepalives hehe [17:18] inimino: but it's a bad practice [17:18] SamuraiJack_: can I rely on this behavior? [17:18] creationix: inimino: but it does wrap it in a function, so I guess leaving off var would make it global [17:19] MattJ: SamuraiJack_: I'd strongly recommend you find a better way [17:19] joshr: node-repl in emacs, fyi, is decent [17:19] SamuraiJack_: MattJ: actually thats my intention [17:19] inimino: creationix: right, the function wrapper won't prevent you from global pollution unless you use var [17:19] inimino: SamuraiJack_: export a function that returns whatever you need to have access to [17:19] mjr_ has joined the channel [17:19] creationix: are there any plans to switch to using something like process.evalcx for modules? [17:20] inimino: creationix: I don't think so currently [17:20] voxpelli-laptop has joined the channel [17:21] SamuraiJack_: inimino: well, my idea is to add perl-like modules system [17:21] SamuraiJack_: so thats my intention - create new global [17:21] CrabDude has joined the channel [17:21] SamuraiJack_: it will export a class [17:22] creationix: SamuraiJack_: also you may be able to just attach it to the "global" variable [17:22] deanlandolt: SamuraiJack_: hav ea look at nodules... [17:22] inimino: SamuraiJack_: then don't use modules [17:22] deanlandolt: "Nodules also supports modules that return a value or switch the exports." [17:22] deanlandolt: you can still use modules -- but do fun stuff there too [17:22] inimino: SamuraiJack_: if you're using require() you should stick to CommonJS modules, otherwise I'd suggest writing your own loader using eval [17:22] deanlandolt: http://github.com/kriszyp/nodules [17:23] inimino: ...or use something like that [17:23] SamuraiJack_: deanlandolt: thanks, its too commonjs-ish [17:23] SamuraiJack_: I'm aiming to share the code between browser and server side [17:24] SamuraiJack_: so can't use synchronous 'require' [17:24] deanlandolt: it's written to also support that EXACT use case [17:24] deanlandolt: it does a preprocessing step and /ensures/ all your modules are loaded up front, and then your requires can be sync [17:24] SamuraiJack_: commonjs promised to be "Common" but failed to produce a decent browser-orientied spec, unfortunately [17:25] deanlandolt: SecurableModules was written when it was called ServerJS ;) [17:25] SamuraiJack_: deanlandolt: nah, source filters are evil [17:25] deanlandolt: hey, do whatever ya want -- just offering the path of least resistence (plus you get hot code reloading in node!) [17:26] SamuraiJack_: ok, thanks for the help [17:26] kriszyp: I think requirejs runs on node now [17:27] martoche has joined the channel [17:31] stephenlb has joined the channel [17:32] dgathright has joined the channel [17:34] jbrantly: SamuraiJack_: may also be interested in http://github.com/jbrantly/yabble [17:38] SamuraiJack_: jbrantly: thanks [17:38] _ry: i want to add a load() function, i think [17:38] _ry: i.e. require into global namespace [17:39] _ry: loadScripts ? [17:39] SamuraiJack_: include [17:40] _ry: importScripts() [17:40] inimino: Workers API++ [17:41] deanlandolt: _ry: rhino uses load for that...seems reasonable [17:43] deanlandolt: i still don't see what's wrong with eval -- it's pretty terse :) [17:44] mjr_: So now that we have the Script object which can compile code and execute it multiple times, can we build hot code reloading on top of that? [17:49] sh1mmer has joined the channel [17:50] _ry: deanlandolt: http://www.whatwg.org/specs/web-workers/current-work/#importing-scripts-and-libraries [17:50] _ry: deanlandolt: i want that [17:50] mkovacs has joined the channel [17:51] MattJ: import has a more intuitive meaning than load (in this context) I think [17:51] deanlandolt: ooh, nice [17:59] konobi: brendan's talk at jsconf about import/export module stuff was pretty interesting [18:00] RayMorgan_ has joined the channel [18:02] _ry: ACTION is totally not in agreement with harmony [18:03] qFox has joined the channel [18:03] _ry: i don't imagine anything is going to come of that in the next couple years [18:04] deanlandolt: aren't they shooting for 2011 for es6? [18:04] botanicus has joined the channel [18:06] _ry: *shrug* [18:07] _ry: i think people need to consider browser js more highly [18:07] _ry: it is one of the most successful platforms ever [18:07] _ry: maybe it actually has a very good module system [18:07] deanlandolt: s/one of the/the [18:07] _ry: which is - no module system [18:08] deanlandolt: i know, but you have to admit, it's a freaking mess [18:08] _ry: it's the static linking vs dynamic linking [18:08] deanlandolt: (but yeah, maybe that's not so bad) [18:08] _ry: explicitly controlling what code you use leads to better programs [18:09] _ry: referencing some random string in the cloud to do some task for you leads to huge problems: ruby gems [18:09] deanlandolt: true -- but it also leads to a /ton/ of duplication [18:09] deanlandolt: are we really that concerned about duplication like we used to be though? probably not [18:09] _ry: but for throwing togther quick examples - gems is good [18:09] _ry: so maybe something in between is good [18:09] RayMorgan has joined the channel [18:09] deanlandolt: but isn't that what browser js's module system is? referencing some random string in the cloud? [18:10] _ry: gems for dev, static linking for production? [18:10] _ry: not really [18:10] tmpvar: _ry, yeah, that sounds appropriate [18:10] creationix: I like how nodules doesn't have versions, it just points to urls [18:10] _ry: you must explicitly bring stuff into your global scope [18:10] deanlandolt: creationix: which, if /you/ choose, can be versions [18:10] deanlandolt: which i think is kinda cool [18:10] creationix: yep [18:10] creationix: and that's perfect for http servers that want long cache headers [18:11] _ry: and in most cases you actually compile all your javascript into one file [18:11] kjeldahl_ has joined the channel [18:11] _ry: static linking ;) [18:11] deanlandolt: sure, i rather like the idea of static linking for production [18:12] creationix: _ry: you're not a fan of static linking are you [18:12] deanlandolt: the alternatives are scary [18:12] creationix: ACTION remembers discussions about using an external libv8 [18:12] _ry: creationix: i am a fan. i mean look at my build system [18:12] creationix: :) [18:12] _ry: i compile everything into node [18:12] binary42 has joined the channel [18:12] _ry: there isn't 10 ms of searching around the hard disk for DLLs every time you start node [18:13] deanlandolt: so nodules pulls things down in a run once setup -- caches the modules to a folder in your project and you can go in and change them from tehre... [18:13] _ry: all the code is in the binary [18:13] binary42 has joined the channel [18:13] deanlandolt: after it gathers the deps it's actually quite like node's build system [18:13] creationix: _ry: yeah, you even compiled in the lib folder [18:13] MattJ: I know it's bad, but I like it :) [18:13] MattJ: Dynamic linking is overrated [18:13] deanlandolt: it only gathers the deps once (unless you explicitly change your deps or remove a cached dep) [18:13] _ry: bad is slow and broke. good is fast and working :) [18:14] MattJ: :) [18:14] _ry: people often confuse that [18:14] creationix: _ry: I used git submodules for wheat as a type of static linking for dependencies [18:14] _ry: i use that too in my projects [18:14] _ry: git submodules sucks for independent reasons though [18:14] creationix: it would be a great solution if people better understood git submodules [18:15] creationix: and sadly I couldn't use them for the actual articles on howtonode [18:15] creationix: submodules only work on working trees, not bare repos [18:16] creationix: mjr_: I like the new Buffer docs [18:17] javajunky has joined the channel [18:20] mape: Anyone have time to take a look at improving an probly stupid simple algorithm? [18:20] sh1mmer has joined the channel [18:21] creationix: mape: I can try [18:22] mape: creationix: http://gist.github.com/381097 [18:22] mape: In essence it just finds the people that have the same followers [18:22] admc has joined the channel [18:23] mape: and well, when there are 500 people with 5k followers it doesn't scale [18:23] mape: Anything optimiziation 101 that pops into mind? [18:24] towski has joined the channel [18:25] creationix: hmm, that's a nasty one, not sure you can do much better without some better data structures [18:25] inimino: use an algorithm that isn't O(n^2) [18:26] mape: Well yeah.. That is what I'm asking [18:26] inimino: I'm thinking [18:26] mape: :) [18:26] gwoo has joined the channel [18:27] inimino: stand back :) [18:27] mape: hehe k [18:27] tmpvar: inimino, dont hurt yourself ;) [18:27] creationix: I can see the solution, but writing it seems difficult [18:28] inimino: I think I pulled a neuron [18:28] creationix: dang, my solution is still O(n^2) [18:29] inimino: well [18:30] konobi: mape: looks like you want a set intersection algo for that [18:30] mape: That old thing? [18:30] mape: ACTION googles [18:30] creationix: the problem is you need an intersection for n^2 pairs [18:30] inimino: it can be O(n*m) where m is the avg number of followers [18:31] elliottcable: damn [18:31] elliottcable: I mis-read that [18:31] elliottcable: as ‘* rape goggles’ [18:31] elliottcable: I was like “WTF, who would name themselves rape goggles?” [18:31] noonat: mape: you should be able to knock out a good portion of the inner loop [18:31] konobi: intersection([1,2,3,4],[3,4,5,6]); [18:31] noonat: the inner loop should be able to start at u = i + 1 [18:32] ncb000gt: shouldn't that second loop be on the keys in userData[key] anyway? [18:32] ncb000gt: regardless of the algo [18:32] mape: noonat: need to sort it first then I assume? [18:32] noonat: or.. wait.. i may have misread this [18:33] noonat: ah, it's the subkey loop that i was thinking of [18:33] mape: No you are right, if they are sorted and my lowest followerId is 1000 all his under 1000 should be thrown [18:33] noonat: so maybe they can both be optimized that way? [18:33] bmizerany has joined the channel [18:33] creationix: that will help, but it's still O(n^2) right? (just a smaller O) [18:34] mape: Yeah, less to loop through [18:35] drostie has joined the channel [18:35] noonat: it's not n^2 anymore, it's um... i don't know my big-o [18:35] kkaefer: is anyone of work that is happening on http://code.google.com/p/v8/issues/detail?id=235? [18:35] inimino: so you can make one pass over the data and construct an array... where a[1]=[], a[3]=[person1,person2] [18:36] ncb000gt: that's not n^2, that's n^2*m^2 [18:36] ncb000gt: because you're looping over the same keys twice and then the lengths of the inner arrays twice [18:36] inimino: then make another pass and for each follower, look up in the array, and collect the results [18:36] inimino: that's O(n*m) [18:37] inimino: (because both passes are O(n*m)) [18:38] ncb000gt: for yours inimino? [18:38] inimino: yes [18:39] ncb000gt: ahh ok [18:40] konobi: http://paste.scsys.co.uk/42793 [18:40] BinaryPie has joined the channel [18:41] devinus_ has joined the channel [18:41] ncb000gt: kkaefer: from the thread it looks like google is saying "get bent" unless someone wants to write it, i don't know of anyone actively working on it [18:41] inimino: konobi: using set intersection is still O(n²) isn't it? [18:41] confounds_ has joined the channel [18:42] inimino: mape: I don't think you can do any better than O(n*m) either, so I think that's asymptotically optimal... but I could be wrong [18:42] vipul has joined the channel [18:42] konobi: inimino: *shrug* [18:42] creationix: konobi: little things, but you should cache the call to .length, also convert seen to an array using Object.keys and it will be much faster to loop over [18:42] konobi: creationix: Object.keys is non-standard [18:42] konobi: iirc [18:42] mape: konobi: This is in node so that should be fine [18:42] inimino: not so, konobi, it's in ES5 [18:42] creationix: it's safe to use is node [18:43] creationix: but, yeah most browsers don't have it yet [18:43] inimino: it's standard now, we are just waiting for browsers to catch up [18:44] inimino: mape: does my approach make sense? [18:44] konobi: well... non-standard in terms of it's not there by default in all implementations [18:44] gf3: mmm SQX has it :) [18:44] mjr_: _ry: I generally agree that static linking and not having a module system is a win, but there are lots of great thing that we could do in the "mashup" area if only there were a more reliable way to dynamically pull different code together. [18:44] gf3: Object.keys in SQX: http://img.gf3.ca/06ebcfb9db63a4f532fdc15da9e49748.png [18:44] mape: inimino: Isn't that the same as [1,2,3,4].intersect([3,4,5,6]) ? [18:45] mape: Oh, nm [18:46] mape: inimino: seems your doesn't work? [18:46] mape: http://gyazo.com/16364a6b57c2465b0551029e915d15e7.png [18:47] inimino: mape: ah, that's not mine [18:47] mape: Oh yeah.. [18:47] inimino: mape: I didn't write any code, just was suggesting an approach... [18:47] inimino: the approach is to take two passes over the data [18:48] inimino: and I think it's the best asymtotic complexity you can get [18:48] konobi: mape: meh... i see the problem... damn psuedo code [18:48] konobi: it's an easy enough change [18:49] inimino: yeah, I think you need to iterate over seen, not b. [18:49] konobi: yeah [18:50] konobi: well... actually over b... but you need to store the results of wether it was "seen" again in a different variable [18:50] _ry: i was just htinking on the train ride [18:50] konobi: _ry: stop that! [18:50] _ry: i would like to get node to stop linking to libc [18:50] konobi: eh? [18:50] tmpvar: wow [18:50] mjr_: channeling djb. [18:50] _ry: unnecessary dependency [18:50] inimino: mape: I will make some pseudo-code [18:51] _ry: we don't really use anything [18:51] inimino: really? [18:51] _ry: we can make syscalls ourselves [18:51] mape: inimino: Well will it be faster then konobis code? Otherwise I'll try to fix the one he did so you don't have to waste time [18:51] inimino: o_O [18:51] creationix: _ry: sounds like fun [18:51] inimino: mape: yeah, I think it'll be considerably faster [18:51] _ry: wouldn't that be a rad feature [18:51] mape: inimino: Then I would love to see it [18:51] inimino: mape: I don't know how much data you have... [18:52] inimino: mape: ok [18:52] _ry: "does not depend on libc" [18:52] tmpvar: _ry, do it :) [18:52] mape: inimino: 500 people with max 5k followers [18:52] konobi: that sounds like a cross-platform nightmare [18:52] mape: So there is a tad of things to look through [18:52] mjr_: _ry: surely V8 depends on libc and some libstdc++, no? [18:52] _ry: mjr_: it does for "new Date()" [18:52] _ry: but not anything else [18:52] _ry: localtime() [18:52] _ry: or whatever [18:53] _ry: it doesn't use, like, stl [18:53] mjr_: thank god [18:53] _ry: i guess the debugger uses pthreads [18:53] _ry: which is hard to get rid of [18:53] mjr_: What about openssl, won't that require a bunch of libc? [18:53] _ry: well.. hmm [18:53] _ry: probably [18:54] _ry: but say you don't use openssl (it's going to be optional [18:54] _ry: question: does pthreads depend on libc? [18:54] _ry: because we're heavily linked to pthreads [18:54] _ry: can't get out of that [18:55] ncb000gt: _ry: it looks as though pthreads depends on libc [18:56] ncb000gt: lists.debian.org/debian-user/1996/06/msg00087.html it's old and not definitive, but suggests it [18:56] ncb000gt: err http://lists.debian.org/debian-user/1996/06/msg00087.html [18:56] ncb000gt: damn chrome [18:56] ncb000gt: ... [18:56] teemow has joined the channel [18:57] tmpvar: pthreads comes with libc, no? [18:57] _ry: bradfitz was bragging to me the other day about how perlbal doesn't depend on libc [18:58] tmpvar: heh [18:58] tmpvar: peer pressure [18:59] _ry: yeah - for drunken bragging purposes, i think node should at least reduce it's surface area exposure to libc [18:59] ncb000gt: haha [18:59] _ry: its [18:59] konobi: pppfffttt... bfitz [18:59] ncb000gt: good way to define features [18:59] ncb000gt: "when i'm drunk i wanna be able to say, SCREW LIBC!" [18:59] ncb000gt: ;D [19:00] _ry: but really, i think it's not far off [19:00] mape: The drunk bragging part? [19:00] ncb000gt: lol [19:00] _ry: unlinking libc [19:00] mape: hehe [19:00] _ry: v8 is just calculations (mostly) [19:00] mikeal has joined the channel [19:00] _ry: libev is direct syscalls [19:01] felixge: _ry: so your "Jugendbewegung" is going to be libc free? :) [19:01] _ry: node is just write and read [19:01] mjr_: Don't you allocate memory for Buffers and stuff? [19:01] mjr_: using the libc allocator? [19:01] _ry: yeah- but we could pull that in [19:02] _ry: malloc is probably too crude anyway [19:02] inimino: mape: http://gist.github.com/381140 [19:02] mjr_: Optimizing memory allocation is a whole different project. [19:03] ncb000gt: lol [19:03] mjr_: But hey, there will be plenty of time to remove libc and optimize memory allocation after we have reliable output buffering, right? :) [19:03] ncb000gt: there are quite a few projects dealing with memory management [19:03] mape: inimino: Index is just all users in a list? [19:03] _ry: node already does a lot of block allocs [19:04] _ry: v8 of course handles most of it [19:04] mape: inimino: nm I should read it through before asking dumb questions [19:04] _ry: anwyay [19:04] _ry: something for 1.0 :) [19:04] _ry: goal: remove libc dep [19:04] felixge: _ry: I might have some time to work on the coupling patch again tonight, would you be around for Q's? [19:05] ncb000gt: haha, if you can do it and maintain stability, more power to you. [19:06] felixge: ACTION doesn't get to do much node coding since he started unit testing, 95% of my code merely requires v8 :| [19:06] _ry: felixge: yeah i'l be around [19:06] felixge: cool [19:06] ncb000gt: _ry: is there any other reason to remove libc dependencies other than bragging rights? [19:06] ncb000gt: i assume so [19:06] ncb000gt: just curious as to what [19:07] _ry: ncb000gt: easier debian upgrades? [19:07] inimino: heh [19:07] ncb000gt: who uses debian anymore? <.< [19:07] inimino: I do. [19:07] ncb000gt: *cough*pointandlaugh*cough* [19:07] sudoer has joined the channel [19:08] inimino: ...and everyone that uses Ubuntu... [19:08] ncb000gt: meh [19:08] _ry: ncb000gt: yeah - actually the more i think about it - it's probably not worth the effort [19:08] ncb000gt: the ubuntu repos aren't dictated by people who can't decide to upgrade a package [19:08] _ry: especially since most people will link to openssl [19:08] ncb000gt: well they are, but they are more "risky" people i guess [19:09] ncb000gt: i agree that removing dependencies is always good, but when you do that you have to write the code, which means that it's far less "battle tested", which also leads to possible problems and edge cases [19:09] ncb000gt: but, sometimes it def is worth it [19:10] _ry: depends on how much code you have to write [19:10] _ry: i mean in the case of mallocs - we're already heavily optimizing it [19:10] _ry: we don't rely on it being fast [19:11] _ry: it'd definitely need a bit extra code though [19:11] _ry: i don't know.. [19:12] asdfasdf has joined the channel [19:13] ncb000gt: i guess it really depends on how many different things are using libc [19:13] nwhite has joined the channel [19:14] xavi_ has joined the channel [19:15] mape: inimino: http://gist.github.com/381097 had a stab at it, seems the results are off though, anything obvious? [19:16] mape: just gets [[1,2],[1,2],[1,2],[1,2]] etc [19:17] mape: when two people are used [19:17] mape: Ah, so those are the ones who have both? [19:20] inimino: mape: ah, for (n in userData[user]) is too direct a translation... [19:20] inimino: those need to be the actual values of the array, but for..in will give you the array indices [19:21] mape: Which one of them? :) [19:22] brapse has joined the channel [19:22] aceadi has joined the channel [19:23] inimino: mape: both of them [19:23] mape: Right now it is just adding everyone to everyone right? [19:24] inimino: right now 'n' takes the values of 0,1,... [19:24] inimino: which is completely useless [19:24] mape: hehe indeed [19:24] aceadi: JimBastard sent me!! [19:24] JimBastard: ohhh crap [19:24] JimBastard: let the noob rush begin [19:24] JimBastard: i totally posted the IRC info on the mailing list again [19:24] JimBastard: if you see people saying JimBastard sent me its my fault [19:24] aceadi: hah.. [19:25] tmpvar: bad Jim, bad. [19:25] inimino: js> a=[3,4]; for(n in a) print(n) [19:25] gbot2: inimino: 01 [19:25] inimino: mape: you could just use [].forEach or you could add a line to get the actual array element instead of the index [19:25] piranha has joined the channel [19:26] mape: so the index[n] n should be the value not the index? [19:26] inimino: yes [19:26] mape: so a straight for () should do? [19:26] inimino: yes [19:27] inimino: js> var a=[3,4],i,n; for(i=0;i.< [19:53] Yuffster_ has joined the channel [19:54] Nohryb: no videos ? not yet ? nowhere? :-( [19:59] aheckmann has joined the channel [20:01] isaacs: hey, cinco de node! [20:01] isaacs: http://www.meetup.com/BayJax/calendar/13308905/ [20:01] RayMorgan has joined the channel [20:02] gwoo: yes! [20:02] mjr_: neat [20:02] gwoo: im going [20:04] JimBastard: videos probaly up in a few more weeks Nohryb [20:06] gwoo has joined the channel [20:07] whoahbot has joined the channel [20:07] mjr_: Weren't we just talking last night about how we need to have a bay area node meetup? [20:07] mjr_: Or did I imagine that? [20:08] Nohryb has left the channel [20:08] aho has joined the channel [20:09] Nohryb has joined the channel [20:09] derbumi has joined the channel [20:09] Nohryb: ok, thanks, jimbastard [20:09] lifo_ has joined the channel [20:09] rektide: tmpvar: i had no idea until jsconf that jsdom has gotten so far [20:09] rektide: many many many thanks [20:13] JimBastard: yeah man tmpvar a lot of people were talking about your lib at jsconf [20:18] isaacs: mjr_: yes, and we still do, once creationix gets here. [20:19] isaacs: mjr_: bayjax is next week [20:19] javajunky: bayjax is an awesome conf. name ;) love it. [20:20] gwoo: JimBastard: last week was hellish for me [20:20] gwoo: JimBastard: not as much time to work on hook.io stuff [20:22] mrjjwright has joined the channel [20:22] fizx has joined the channel [20:23] JimBastard: hey gwoo [20:23] JimBastard: its cool [20:23] JimBastard: i decided to reglue hook.io two days ago [20:23] JimBastard: or last night [20:23] gwoo: i just noticed that [20:23] JimBastard: there were a few design flaws [20:24] JimBastard: i had the choice of working around them or rebuilding [20:24] JimBastard: the reglue should be a bit easier to grok [20:24] JimBastard: normally i wouldnt ever restart like that, but i thought about it a lot [20:24] JimBastard: and i think its the right choice [20:24] JimBastard: i got a shit ton of feedback this month [20:25] gwoo: awesome [20:25] gwoo: its worth it [20:25] gwoo: this early in the game [20:25] gwoo: follow node's lead [20:25] JimBastard: aye [20:25] JimBastard: also, Tim_Smart kinda dropped off the planet [20:26] JimBastard: he kinda lost interest in node for the time being [20:26] JimBastard: so a bunch of the framework glue was his, and unfinished [20:26] JimBastard: which was a bit problematic [20:26] quirkey has joined the channel [20:26] JimBastard: as there were no docs or specs [20:26] JimBastard: quirkey! huzaaah [20:26] digitalspaghetti: woop! i'm finally going to get my chance to play with node.js [20:26] quirkey: JimBastard: whats the deal, homie [20:27] JimBastard: so yeah, hopefully ill have something working nicely in the next few weeks.....as ive said several times before... [20:27] digitalspaghetti: gwoo - you jumped from cakephp to node.js ? [20:27] JimBastard: chillin at work quirkey [20:27] isaacs: JimBastard: tell me about it. "next few weeks" can stretch out to years easily. [20:27] JimBastard: yeah [20:27] isaacs: npm's been a few weeks away for months. [20:27] JimBastard: well with the reglue of hook.io im going to toss enterprisey stuff [20:27] gwoo: digitalspaghetti: yeah [20:27] JimBastard: so hopefully it will become simplier for now [20:28] gwoo: digitalspaghetti: i still work on lithium too though [20:28] JimBastard: im okay with losing a bit of power, as right now we can't even turn the lightbulb on [20:28] gwoo: hehe [20:28] digitalspaghetti: ahh :) [20:29] gwoo: everyone needs a mistress or two :) [20:30] digitalspaghetti: i'm about to re-write a whole booking engine in cakephp for my new job, as the current one is just a bunch of random PHP classes of mixed php/html [20:30] gwoo: digitalspaghetti: you should use lithium :) [20:30] digitalspaghetti: linky? [20:31] gwoo: #li3 http://lithify.me [20:33] digitalspaghetti: oh, looks very similar (which is good :) but you use php 5.3 namespaces i see? So is it production ready? [20:34] gwoo: digitalspaghetti: join #li3 :) [20:39] atmos: holy shit, php! [20:40] atmos: i thought you were suggesting he use a js framework :( [20:42] JimBastard: whats a php? [20:42] JimBastard: i need a web application, not a personal home page :-D [20:42] JimBastard: its cool, i heard PHP finally has namespaces, "/" [20:42] JimBastard: o.O [20:43] javajunky: [20:43] confounds: JimBastard: php can haz namespaces [20:43] JimBastard: "/" [20:52] RayMorgan has joined the channel [20:54] tmpvar has joined the channel [20:55] charlesjolley_ has joined the channel [20:59] whoahbot has joined the channel [21:01] devinus: JimBastard: it [21:01] JimBastard: sup [21:01] devinus: JimBastard: it's "\" [21:01] JimBastard: lol [21:01] devinus: lol [21:01] JimBastard: NO WONDER I COULD NEVER GET MY DAMN SHOPPING CART TO WORK [21:01] JimBastard: CAN I EMAIL YOU WITH FURTHER PHP ISSUES PLEASE [21:01] JimBastard: CAN YOU SEND ME CODEZ [21:02] noonat: i still can't believe they used \ for namespaces [21:03] JimBastard: you can't believe PHP picked a poor implementation for a key feature of their language? [21:03] JimBastard: o.O [21:03] noonat: JimBastard: they continually surprise me [21:03] confounds: they try, though. and that counts damn it [21:04] stepheneb has joined the channel [21:04] javajunky: atmos: finally got around to pulling in your changes to the express-auth stuff [21:05] noonat: i keep imagining some unassuming php user sending a php namespace into a php script with magic quotes on [21:05] noonat: and being sucked into a vortex of php judgment and pain [21:05] atmos: javajunky: oh that's who you are ! [21:05] atmos: yeah i saw the response, kinda swamped at work right now [21:05] atmos: fwiw i have working facebook stuff as a plugin now [21:06] atmos: i'll respond later this afternoon or this evening [21:06] atmos: basically i have a current_user plugin i'm using to wrap up the user which i think just needs to be adapted to the user stuff in express-auth [21:07] javajunky: the express-auth stuff is user agnostic, as long as 'something' is returned the framework doesn't care [21:08] technoweenie has joined the channel [21:11] aheckmann has joined the channel [21:15] bolson has joined the channel [21:20] joshholt_ has joined the channel [21:24] _ry: http clients are hard [21:25] _ry: like, a lot harder than servers. [21:25] mjr_: because they have to adapt to whatever crazy set of options any given server might happen to use? [21:25] mjr_: like trailers? [21:25] javajunky: _ry oooo does that mean a https client might be in the works ? :) [21:28] _ry: fuck trailers [21:28] _ry: just because it involves, like, more than one connection [21:28] _ry: it's not like you open a stream and just start speaking with the host [21:28] _ry: your opening and closing [21:29] _ry: using multiple streams [21:29] _ry: etc [21:29] _ry: http is an awful awful protocol [21:29] noonat: wow. i had no idea trailers even existed. [21:30] saikat has joined the channel [21:30] _ry: afaik no one uses them [21:30] inimino: oh, HTTP is full of wonderful surprises :) [21:31] _ry: i can't believe the internet even works [21:31] joshr: he [21:31] joshr: h [21:31] joshr: fortunately for most of us, though [21:31] mjr_: _ry: I've spent a couple of years doing backbone routing. If you think the Internet is brittle because of HTTP, never, ever, look at how routes are distributed. [21:32] _ry: i mean, i guess its not brittle - because you have to write these crazy parsers that handle any possible situation [21:32] _ry: but - man [21:32] TobiasFar has joined the channel [21:32] kriszyp has joined the channel [21:33] mjr_: Yeah, the corner cases are super annoying. This is why I think making HTTP a first class citizen in node is the right approach. HTTP is too hard for mere mortals to get right. [21:33] MattJ: What's SPDY like? [21:33] felixge has joined the channel [21:33] felixge has joined the channel [21:33] _ry: spdy is cool but kind of disappointing [21:33] MattJ: I ought to have looked at it closer by now [21:34] _ry: like you take your http headers and gzip them [21:34] _ry: that sucks - now you have to bring in libz [21:34] _ry: i guess the main goal is backward compatibility - so that's understandable [21:35] _ry: but it's hardly a thing of beauty [21:35] mikeal: i think I'm missing something [21:35] mikeal: do some of the commonjs guys actually *like* threads? [21:36] MattJ: Anyone likes threads? :) [21:36] _ry: they just don't want non-blocking i/o everywhere [21:36] mjr_: I think almost everybody likes threads, in the broader programming world. [21:36] _ry: which is understandable [21:36] mikeal: Python *loves* threads [21:36] JimBastard: i like fresh threads when im going out with the ladies [21:36] JimBastard: only the finest of linen will suffice [21:36] mikeal: JimBastard is a rathole [21:36] mikeal: :P [21:37] mikeal: _ry: i can see enforcing non-blocking for require [21:37] kriszyp: the compelling aspect of SPDY is that it can push content instead of just waiting for requests [21:37] mikeal: but i don't see why you would specify a blocking API by default for anything else because all the platforms can't support it [21:37] mikeal: every platform can support callbacks [21:41] _ry: commonjs should have a voting system where the only voters are reps of the respective implementations [21:42] noonat: haha [21:42] towski has joined the channel [21:42] _ry: and the reps have votes weighted by the number of users of that implementation [21:42] saikat: somebody's biased [21:42] saikat: =) [21:42] MattJ: _ry: Simple one: http://matthewwild.co.uk/code/node-docs-remove-dynamic-header-and-whitespace.patch [21:43] hassox has joined the channel [21:43] isaacs: _ry: and then commonjs would be the ryan show, just like node. [21:43] mikeal: i don't know about that [21:43] mikeal: that's what ECMA was like, and that's what ES4 was [21:43] mikeal: everyone an implementor, nobody a user [21:43] mikeal: now it's much different [21:45] eday has joined the channel [21:45] mikeal: if you think of a spec being ratified at commonjs as a big "alpha" stamp, you stop caring so much about what happens at the end of the process [21:45] _ry: isaacs: ;) [21:45] _ry: isaacs: but i have good opinions [21:45] mikeal: i don't think the end of the process is the problem, the problem is the focus of the current work [21:45] isaacs: _ry: true, i do keep attending for that show. [21:45] mikeal: and an inability to say that previous specs might have been a mistake [21:46] _ry: MattJ: i like the dynamic header [21:46] mikeal: JSGI should just be forgotten [21:46] MattJ: Oh? We had rough consensus here it got in the way :/ [21:46] tlrobinson: mikeal: why? [21:46] ashb: mikeal: what about environements where async ins't a posibility. like GAE [21:46] mikeal: because it's impossible to fix will all the current baggage [21:47] mikeal: the current implementations have an API they like, but the people that don't need something drastically different, so both camps aren't happy [21:47] mikeal: current implementations won't back it out or anything [21:47] mikeal: they'll use it as is until something else happens [21:47] mikeal: but that spec needs a clean slate in order to move forward [21:47] ashb: why? [21:47] mikeal: and some of the underlying stuff should be worked out first [21:48] mikeal: ashb: so, I need something that works for async, I can't use it otherwise, but anything that does that isn't going to be reverse compatible with the current JSGI standard [21:48] _ry: the whole concept of specfying an http server interface needs to be abandoned - we need to get some basic things straight first [21:48] mikeal: and the current one is liked by a bunch of implementations that use blocking IO [21:48] ashb: _ry: again, what about GAE.. or say Smart. [21:48] ashb: you know that project the your emlpoyers have [21:48] deanlandolt: mikeal: that isn't true in the slightest [21:48] mikeal: _ry: definitely, that spec needs to be built on some kind of solid ground for simple IO [21:49] tlrobinson: mikeal: there are multiple implementations of JSGI on top of node [21:49] deanlandolt: to suggest that you can't use jsgi async all the way down is silly [21:49] _ry: They can do what they want - it doesn't need to be a specification [21:49] deanlandolt: _ry: it doesn't need to be a specification you support...but to have multiple, interoperable implementations it NEEDS to be a specification ;) [21:49] mikeal: tlrobinson: not that I can actually use [21:50] mikeal: in order to not violate the spec, i have to return more than i know before i do more IO [21:50] mikeal: which means blocking [21:50] tlrobinson: mikeal: you haven't seen the async versions of JSGI then [21:50] deanlandolt: mikeal: in what case? [21:50] mikeal: isaacs' eJSGI stuff is usable but it violates the current spec [21:50] _ry: deanlandolt: there isn't going to be multiple, interoperable implementations. not when you can't even open a file the same way on different systems. [21:51] isaacs: _ry: ++ [21:51] mikeal: that's the other thing [21:51] mikeal: how useful is interoporability when all the specs fall under different branches for async and sync? [21:51] deanlandolt: but there /are/ -- you keep saying that but it's not true at all :-/ [21:51] deanlandolt: mikeal: the spec does not branch [21:51] mikeal: we're basically saying we've got two camps of implementations and they all implement one half of the commonjs standards [21:52] rektide: narwhal for a while was doing a fairly good job, i've got to say [21:52] mikeal: deanlandolt: that's not what i meant [21:52] deanlandolt: and it's trivial to write middleware that supports both sync and async [21:52] isaacs: the only thing that is "interoperable" about jsgi are trivial hello world type things. the minute you have to do anything interesting with your app, you'er tied to a particular commonjs implementation. [21:52] isaacs: there is no interoperable mysql implementation, or file io, or http request interface, etc. [21:52] deanlandolt: isaacs: you're calling pintura a hello world? [21:52] mikeal: hehe, so i kinda laughed a little when Kris mentioned that people mention "commonjs compliance" and that doesn't make any sense [21:52] isaacs: deanlandolt: mostly, yes. [21:52] mikeal: it's actually on the narwahl front page [21:52] mikeal: someone should really fix that [21:53] _ry: the idea of narwhal is good - it's something that is going to be really great like 18 months from now [21:53] _ry: but right now we got to figure out what works [21:53] deanlandolt: isaacs: have you looked at it? [21:53] _ry: and it is not at all obvious what works [21:53] mikeal: what the hell is the point of JSGI? [21:53] mikeal: if it's to provide middleware then it's almost ok [21:54] tlrobinson: mikeal: what's the point of CGI, servlets, WSGI, Rack.... [21:54] deanlandolt: that's primarily what it's for -- to be able to build applications out of reusable components [21:54] mikeal: if it's to provide a common interface between the server layer and application layer then splitting it in to async and sync means it's a failure [21:54] deanlandolt: it's not necessarily to provide a common interface between the server and app -- that can be done with a handler [21:54] _ry: look, people, even if we sit down and try to map posix calls into js - we're going to get into fights. [21:54] mikeal: tlrobinson: the point of CGI and WSGI is to create an interoporable interface between the Server and Application layer so apps and frameworks are portable between frameworks [21:54] tlrobinson: mikeal: with promises you can write middleware and applications which work in both sync and async "containers" [21:54] deanlandolt: look at all the handlers available in jack...jsgi-node is a handler, node is the server [21:55] mikeal: "with promises" [21:55] mikeal: where do i get thos? [21:55] mikeal: :P [21:55] ashb: form the pure js promise.js file [21:55] deanlandolt: mikeal: i'll send yo usome links [21:55] deanlandolt: actually, you don't even need an include! [21:55] eday: _ry: anyone working on packaging for http-parser? debs/rpms/... ? thinking of using it, but would prefer not to have to embed it [21:55] deanlandolt: promises are just objects that have a then function on them [21:56] mikeal: are "promises" defined in any commonjs standard? [21:56] _ry: eday: not that i know of [21:56] isaacs: deanlandolt: i did. it was big. [21:56] deanlandolt: isaacs: pintura? it's pretty small, but it's not a hello world ;) [21:56] _ry: eday: it's pretty small - i don't think it would make sense to have a DLL for it [21:57] _ry: eday: it's really meant to be included in your code [21:57] _ry: (there is no make command to build a dll for example) [21:57] tlrobinson: mikeal: the kris's are still deadlocked on which flavor of promise is better [21:57] mape: why do people need node on windows? isn't it just easier to throw a virtualbox at it the fiddeling with win? [21:58] MattJ: _ry: Despite it being visually distracting, an example concrete annoyance: http://nodejs.org/api.html#sys-debug-71 - the header obscures the actual function syntax [21:58] deanlandolt: tlrobinson: not necessarily -- i believe krisk relented [21:58] mikeal: tlrobinson: so we should stick with a spec that is built on primitives we haven't even defined yet? [21:58] MattJ: mape: *shrug* [21:58] mikeal: every second I agree with _ry more and more [21:58] BinaryPie has joined the channel [21:58] mape: MattJ: Could just add a pageload scroll offset of 30px or so to remedy it [21:58] eday: _ry: I think it would be library worthy, but understood, I can just embed it. I'm actually planning on doing the same thing with other protocols as well, so perhaps combine them [21:59] tlrobinson: no, i realize it's blocked on several other APIs, but that's no reason to abandon it [21:59] deanlandolt: like i suggested earlier on the ML -- perhaps we could just move things like JSGI to a subgroup... [21:59] isaacs: deanlandolt: oh, kriszyp's thing. i was thinking of the big package thing that starts with a P [21:59] MattJ: mape: That doesn't solve that I really really don't like it, but I guess a greasemonkey script would :) [21:59] deanlandolt: it's not critical like binary -- i'll grant you that, but it's damn helpful -- and if people ARE willing to write interoperable apps (and many are) why should we actively BLOCK that? [21:59] mape: MattJ: What os are you on? [21:59] MattJ: Linux [21:59] mape: k [21:59] isaacs: deanlandolt: pintura abstracts out the jsgi part, but what can you do with jsgi beyond hello world, without touching the file system or network? [21:59] mrjjwright has left the channel [21:59] _ry: ACTION is having difficulty mentally demultiplexing the channel [22:00] tlrobinson: deanlandolt: a subgroup would be fine with me. if commonjs decides its not worth focusing on i'll split it off, make it useful, and promote the shit out of it myself [22:00] MattJ: We need threads and top-posting [22:00] deanlandolt: isaacs: you can use something that abtracts out the the file system...or network ;) [22:00] mikeal: tlrobinson: i'm not saying "abandon", it's still work that should be done, but starting with a clean slate after the underlying stuff is worked out sounds like a sane idea [22:00] mikeal: also, this doesn't effect working code that is using it [22:00] deanlandolt: jsgi-client is one hell of a simple http client [22:00] mikeal: you don't just remove all the existing impelmetnations [22:01] isaacs: deanlandolt: i think what _ry was saying, and what i'm saying, is that that stuff's much more important. [22:01] deanlandolt: mikeal: you don't have a clean slate -- you have prior art and expectations that you can't get just dump [22:01] mikeal: i just don't see why we should put more effort in to the specification process at this moment [22:01] isaacs: deanlandolt: that is, if jsgi is going to be anything interesting, it's going to have to sit on some kind of structure that does more than just host apps [22:01] mikeal: deanlandolt: that's like saying that we never make mistakes and once we do we can't take them back [22:01] _ry: if we agreed on a posix layer - for both blocking and nonblocking calls - we could start sharing code [22:01] deanlandolt: isaacs: yeah, i'm in complete agreement -- but what you all are /also/ saying in many cases is that nothing's been built with it...and that you CAN'T have interoperable apps...kris has done a hell of a job proving you wrong ;) [22:02] mikeal: fullfilling every expectation and ensuring compatibility is premature [22:02] isaacs: deanlandolt: i've yet to see a workable blog app that runs on all commonjs/jsgi platforms. [22:02] _ry: granted where to draw the line between c and js is also a point of contention [22:02] mikeal: _ry: how would node support blocking IO calls other that fs? [22:02] deanlandolt: isaacs: challenge accepted [22:02] isaacs: deanlandolt: at some point, you need a data store, and a way to talk to it, and that's where it dies. [22:02] _ry: i'm not going to accept someone binding select to javascript [22:02] isaacs: deanlandolt: there's no consistency there. [22:02] inimino: Working implementations have to come first, then interoperability, and specification [22:02] eday: _ry: btw, if your looking for mysql protocol libs that are fully non blocking/event aware, I have one you can use :) [22:03] deanlandolt: isaacs: not at all, but code speaks louder than words [22:03] deanlandolt: gimme a few days [22:03] felixge: Why do we need 10 different server side JS implementations? The only advantage I see is that Rhino bridges to Java [22:03] _ry: eday: oh? [22:03] _ry: eday: tell me more [22:03] eday: _ry: I work on the Drizzle project, wrote libdrizzle which does just this (speaks mysql and drizzle protocols) [22:03] _ry: oh awesome [22:04] felixge: I looked at libdrizzle before, it looks good [22:04] eday: _ry: been doing the threaded/event IO coding for a while, so fully aware of node.js requirements :) [22:04] mikeal: felixge: i only need 2 :) [22:04] felixge: mikeal: which ones? [22:04] _ry: eday: what do you think about mysac? [22:04] mikeal: CouchDB and node.js :) [22:04] _ry: eday: have you seen it? [22:04] felixge: mikeal: :) [22:04] mikeal: CouchDB doesn't allow you to do any IO in the js platform [22:04] mikeal: so none of these issues exist :) [22:05] _ry: mikeal: BTW - have you seen jefe? [22:05] mikeal: it's a totally different model tho [22:05] mikeal: nope [22:05] _ry: mikeal: that might be very useful for you [22:05] mikeal: _ry: what's that? [22:05] _ry: mikeal: http://github.com/fictorial/jefe [22:05] mikeal: oh, NICE [22:05] _ry: mikeal: process sandbox for execing js [22:05] eday: _ry: i'm not interested in using the libmysql lib, it's pretty gnarly underneath :) [22:05] _ry: yes [22:05] mikeal: yeah, I'll probably use this for the _changes consumer for CouchDB which uses node [22:06] felixge: I mean if we can all agree on a common API, we might as well agree on one project to implement it in. I don't see either happening, but I don't see the point for interoperability at all. I think the main reason we have (and will have) different implementations are that the authors of them want different stuff [22:06] mikeal: eventually i'm going to do a node.js view server, but there really isn't much point since the line protocol blocks on each call :( [22:06] eday: _ry: I'm actually working on another meta-project that does something similar to node.js, but in C++ (for performance), and is threaded too [22:06] JimBastard: lolwut [22:06] javajunky has joined the channel [22:06] mikeal: felixge: i can see the point of interop, i just don't see how we get interop when we have sync/async divergence in every API [22:07] _ry: mikeal: but if you used this one you could have a pool of processes [22:07] mjijackson has joined the channel [22:07] _ry: mikeal: jefe i mean [22:07] mikeal: couchdb already handles the pooling [22:07] felixge: mikeal: Yeah, there is pretty much no way to pull this off with networking [22:07] lifo has joined the channel [22:07] admc has joined the channel [22:07] mikeal: it'll start a new process if one is blocked [22:07] mikeal: that's why the view server can only block on processing and not on IO [22:07] _ry: mikeal: oh okay [22:08] mikeal: but the _changes consumer and the externals thing I'm working on are both node and both do IO and need to eval code out of CouchDB design documents in to a sandbox [22:08] mikeal: so this is perfect [22:09] felixge: jefe looks really nice [22:09] derbumi_ has joined the channel [22:09] herbySk: _ry: (jefe) isn't it too slow? I would prefer something like "change every if(....) and while (.....) in the script by if (Object.wellbehaving() && (....)) and while (Object.wellbehaving() && (...., add nondeletable nonwritable definition of Object.wellbehaving() and run it in new context... [22:09] _ry: herbySk: only benchmarks will show [22:10] _ry: but generally - i like jailing untrusted code in a separate process [22:10] _ry: even chroot it? [22:10] _ry: even setuid it? [22:11] mikeal: i still remember the metaweb guys complaining about how to Rhino "doesn't live up to the security story they've been telling" [22:11] mikeal: this seems pretty damn secure :) [22:11] eday: _ry: any other protocol libs you planning on adding in? I'm going to be writing more C libs for this in the same style of http-parser/libdrizzle [22:11] mikeal: NNTP! [22:11] mikeal: :P [22:12] eday: oh god now [22:12] mikeal: i'm literally the only person who cares about that [22:12] _ry: :) [22:12] eday: no [22:12] _ry: a good mime parser would be nice [22:12] mikeal: i just want to automate the download on new comics from usenet :) [22:13] konobi: _ry: time for node-spidermonkey, eh? [22:13] mikeal: i thought someone was working on a mime parser? [22:13] mikeal: if someone want to rewrite all the damn C++ bindings :( [22:13] _ry: eday- a nice, small, sax, html parser would be great [22:14] mikeal: i thought isaacs had something going on that [22:14] _ry: konobi: 1iin 18 months [22:14] _ry: s/1iin/in/ [22:14] isaacs: mikeal: i have an xml parser, but it doesn't do html reliably. [22:14] konobi: _ry: =0P [22:14] isaacs: s/reliably/correctly [22:15] konobi: _ry: actually gpsee as a module might be doable [22:15] mikeal: could we get away with bindings for http://xmlsoft.org/ ? [22:15] mikeal: libxml2 [22:15] eday: _ry: mmm, yeah.. [22:15] mikeal: that's what Python uses for lxml [22:16] mikeal: and there is some pretty cool stuff built on it [22:16] _ry: i'm not so interested in xml as html [22:16] mikeal: that includes an html parser [22:16] _ry: ironically xml has become a subset of html, more or less [22:17] ashb: s/html/SGML/ [22:17] hober: html5's parser algorithm has bits and pieces that can't be done with a streaming (saxlike) parser [22:17] _ry: hober: why? [22:18] _ry: hober: i imagine you need to buffer a lot at some stages [22:18] mikeal: yeah, i remember talk about that when i was at Mozilla [22:18] _ry: but you ought to be able to output 'element' every once in a while [22:18] mikeal: a lot of academics want to process html in parallel [22:18] demolithion has joined the channel [22:19] hober: IIRC the adoption agency stuff, the transition from in-head to in-body, and some other bits [22:19] mikeal: and it turns out that you just can't, for the same reasons you can't do sax effectively [22:19] hober: nevertheless, the spec allows for just not doing those bits if you're doing a streaming implementation, IIRC [22:20] _ry: huh okay [22:20] eday: _ry: what are you thoughts on libev vs libevent? I've been using libevent lately since it has better distribution [22:21] mikeal: i remember a quote from _ry about libevent but I'll hold off :) [22:22] eday: hehe, won't bother me :) [22:22] konobi: libevent has had some good updates recently, iirc [22:22] felixge: anyone else getting 'test-mkdir-rmdir.js' failing on OSX? [22:22] _ry: eday: libev has better support for forking - and generally i appriciate the BOFH,BDFL attitude [22:22] mattly has joined the channel [22:23] MattJ: eday: "better distribution"? [22:24] _ry: eday: but i static link everything so distribution isn't a problem [22:24] MattJ: eday: FWIW I'm considering switching from libevent to libev [22:24] konobi: libev supports linux... that's about it really [22:24] eday: MattJ: I can apt-get install/ yum install on most distros [22:24] _ry: konobi: well ... [22:24] mikeal: libev has the best distribution evar, it comes with node f'ing .js [22:25] eday: _ry: not just about linking, it's about download/config/... vs just having it auto installed as a dependency for your project [22:25] konobi: _ry: I know that's oversimplifying it... but from a feature matrix point of view... [22:25] hassox has joined the channel [22:25] _ry: konobi: osx is broken. windows sucks [22:25] _ry: konobi: libev on solaris is broken, apparently [22:25] _ry: that i'll give to you [22:25] mjijackson: _ry: what's BOFH? [22:25] kriskowal: bastard operator from hell [22:25] mjijackson: Wikipedia says "Bastard Operator From Hell" [22:26] kriskowal: operator means syadmin [22:26] mjijackson: ACTION trying to make the connection between libev and BOFH [22:26] kriskowal: oh. heheh. no idea. [22:26] kriskowal: ACTION returns to his previous context [22:27] _ry: kqueue doesn't work on macintosh though [22:28] _ry: i can't remember what it was - but, like, you couldn't use it on pipes [22:28] _ry: or something [22:28] konobi: you need open FD's iirc [22:28] konobi: so you need to add extra code to detect moves or unlinks [22:29] eday: _ry: why do you prefer forking vs just using kernel threads? resource protection or...? [22:29] konobi: threads are evil [22:29] _ry: eday: processes are nice concepts [22:29] pjb3 has joined the channel [22:30] _ry: we should use processes more [22:30] konobi: _ry: btw... did you mention you were coming up soon? [22:30] eday: _ry: I prefer threads for event engines so you can share more resources.. caches, proxy connections, ... [22:31] _ry: konobi: uh, coleen mentioned something a few days ago but no solid plans [22:31] konobi: gotcha [22:32] _ry: i like that you can just kill a process from the system [22:32] _ry: since that's a possibility you tend to design your program to recover from it [22:33] kriszyp_ has joined the channel [22:33] mikeal: kqueue on Mac only works for sockets [22:33] mikeal: everything else is riddled with bugs [22:33] _ry: okay [22:33] _ry: hence select() on mac :) [22:34] eday: yeah, try select/poll on stdin on osx, annoying (need o do thread-pipe relay) [22:34] _ry: i do the thread pipe thing on stdin but that still doesn't work [22:34] _ry: you can't kqueu on pipe [22:35] eday: ahh [22:35] mikeal: mac needs to suck less [22:35] _ry: definitely [22:35] eday: not holding my breath, I've given up on decent mac support :) [22:36] konobi: looks like kqueue support on OS X is pretty reasonable [22:36] tlrobinson: pretty much just needs to be good enough for development... does anyone actually deploy on OS X? [22:36] konobi: Sockets, VNodes, FIFO, Pipes... [22:37] konobi: time to get back to psgi [22:38] _ry: tlrobinson: yeah - same with windows. select() is good enough. [22:38] isaacs: tlrobinson: +1 [22:38] isaacs: linux for deployment. macs for dev. [22:39] mikeal: i agree, but even for dev [22:39] deanlandolt: _ry: some people actually /do/ deploy on windows (says /me sheepishly) [22:39] mikeal: the filesystem needs to be way less shitty [22:39] tmpvar: deploying to a mac would be pretty expensive [22:39] _ry: what sucks is when i have to boot into linux to do benchmarks :) [22:39] isaacs: mikeal: agreed [22:39] isaacs: . [22:39] isaacs: remember mag.nol.ia? [22:39] mikeal: hahaha [22:39] isaacs: or whatever that thing was called [22:39] isaacs: they deployed on macs [22:39] tlrobinson: _ry: i deploy to ipad, can you make it work well on that? kthx [22:39] eday: _ry: what sucks is you don't boot into linux by default :) [22:39] mikeal: the only website i care about that is deployed on windows is StackOverflow [22:40] ewdafa: ACTION rollseyes [22:40] creationix has joined the channel [22:40] _ry: eday: i agree completely. ive been forced onto a macintosh. [22:40] mikeal: and listening to them talk about how their infrastructure reassures me in my choice of linux [22:40] deanlandolt: a lot (the vast majority i'd posit) of internal corporate apps deploy on windows [22:40] eday: heh [22:40] mikeal: i'll develop on Linux as soon as TextMate works [22:40] mape: _ry: Work? Could just dualboot? [22:40] mikeal: :) [22:41] _ry: hardware support realy sucks for macbook pro [22:41] mikeal: in all honesty, it's the only application that keeps on Mac [22:41] _ry: i tried for weeks [22:41] mape: mikeal: Meh, how about you tell Allan to release textmate2 sometime soon? [22:41] mikeal: _ry: there is a new effort for Ubuntu running easily on Mac hardware [22:41] _ry: kept overheating cause the fans wouldn't turn on [22:41] mape: _ry: Long time ago? [22:41] mikeal: mape: i'll get on that, also, I'll get Duke Nukem Forever shipped [22:41] konobi: _ry: you can always do a fullscreen linux VM [22:41] _ry: like 2 months ago [22:41] _ry: konobi: yeah, but that sucks too [22:41] eday: _ry: where are you based out of? [22:41] _ry: sf [22:41] isaacs: _ry: i've got ubuntu running on a little mbp. it works fine. [22:42] konobi: i haven't found it too bad [22:42] isaacs: _ry: fan support and everything. [22:42] mape: mikeal: Nice, saw some sweet screenshots leaked on DNF so looking forward to that [22:42] Aria has joined the channel [22:42] _ry: konobi: but for benchmarks, for example it doesn't work [22:42] mikeal: i've also see videos of Duke Nukem Forever [22:42] mikeal: not getting my hopes up :) [22:42] mikeal: seriously, TextMate2 wins the vaporware award for development tools [22:42] konobi: _ry: true [22:42] mape: if only I could search without textmate locking for 10min [22:43] mikeal: Ubuntu should install on any Mac and everything should just work [22:43] kriskowal: here's a nickel. get yourself a copy of vim. [22:43] mikeal: i shouldn't need to hit up a wiki page [22:43] mape: mikeal: looked at e-texteditor? [22:43] mikeal: and configure/compile a bunch of crap [22:43] _ry: mikeal: ask for your money back :) [22:44] ewdafa: tab to a console and grep tbh [22:44] mikeal: we're talking about a company that releases 3, MAYBE 4 different hardware specs each year, and ships more of them than any other company [22:44] tlrobinson: mape: there's plugins for textmate to use grep and ack [22:44] mikeal: you should support that hardware OOTB [22:44] mjijackson: kriskowal: +1 for Vim [22:44] mikeal: i'm gonna drive over to Jono Bacon's house [22:44] mape: tlrobinson: oh that work well? link? [22:44] mikeal: and tell him what's what [22:44] mjijackson: I gave up on TextMate so long ago [22:44] tlrobinson: mape: oh i don't know if they work well :) [22:44] mape: mikeal: http://e-texteditor.com/blog/ ? [22:44] tlrobinson: http://henrik.nyh.se/2007/06/grep-in-project-command-for-textmate [22:44] deanlandolt: mikeal: doesn't jono bacon live in md? [22:44] mikeal: that's almost TextMate [22:44] mikeal: he lives in Oakland :) [22:44] mikeal: he lives like 20 blocks from my house [22:44] felixge: _ry: I rebased my branch with HEAD, and all tests are passing now: http://github.com/felixge/node/commits/coupling [22:45] mikeal: i get lunch with him every once in a while [22:45] mape: mikeal: yeah, gedit? not good enough? [22:45] mikeal: nope [22:45] creationix: mikeal: but apple hardware is hard to reverse engineer [22:45] tmpvar: gedit is leagues away from the quality that is textmate [22:45] deanlandolt: cool...IIRC he used to be around baltimore [22:45] mape: i just don't get how allan does it [22:46] deanlandolt: gedit makes me want to cry sometimes [22:46] mikeal: the different between all of these text editors and TextMate is like the difference between the iPhone and Android [22:46] mikeal: it's not about one or two features [22:46] mape: the dude must be suicidal by now [22:46] mikeal: it's about a general feeling of friction using the product [22:46] isaacs: mikeal: "Ubuntu should install on any Mac and everything should just work" [22:46] mikeal: and i don't like friction between me and writing code [22:46] isaacs: mikeal: by linux standards, it does [22:46] mikeal: hahaha [22:46] _ry: felixge: hmm [22:46] deanlandolt: isaacs: ouch [22:46] isaacs: that is, all the info you need is on one webpage. [22:46] _ry: felixge: i'm going through these one at a time [22:46] isaacs: and you can get it done in an afternoon, if you're not doing anything else. [22:47] mikeal: creationix: there is very little to reverse engineer on the laptops [22:47] mikeal: i don't need it on my iPad or anything [22:47] creationix: isaacs: I tried, and failed [22:47] _ry: felixge: if you git checkout -b coupling1 ba951e22f2617b18e07430a76395c320a67111a8 [22:47] _ry: felixge: it seems there is an error [22:47] creationix: besides, the apple keyboard doesn't work with gedit, it's just weird [22:47] mikeal: i hear people talk about installing Ubuntu on a Thinkpad and "everything just works" [22:48] _ry: ubuntu + thinkpad = awesome [22:48] felixge: _ry: ba951e22f2617b18e07430a76395c320a67111a8 ? [22:48] mikeal: Thinkpad's occupy a fraction of the market share any version of the MBP does [22:48] felixge: _ry: that's not in my branch [22:48] _ry: felixge: er, sorry i cherry-picked [22:48] mikeal: there is not reason it couldn't work that well on apple hardware [22:48] _ry: 383e12adcf9ae7f42a79e94bb66b77a291274d85 [22:48] creationix: but how many people with apples erase osx and use linux [22:48] mikeal: ry only speaks in patch :P [22:48] mape: good enough seems to be the golden standard of linux gurus [22:48] mikeal: now it's just commit hashes [22:49] felixge: _ry: yeah, that commit is broken because of: http://github.com/felixge/node/commit/59f1cdc31c5da770bdf0f17b5ee40830caca15ea [22:49] mape: as long as they can root it all the other stuff seems less important [22:49] felixge: I can rebase that [22:49] mikeal: creationix: i would if they had textmate [22:49] mjijackson: Personally I use Windows ME in a VM on iPhone OS 1. Works great. [22:49] mikeal: apple makes great hardware [22:49] felixge: just wondering if there is more stuff I need to rebase in :) [22:49] mikeal: i would love to use it without their filesystem [22:49] creationix: supposedly, e editor will be ported to linux [22:49] creationix: and be given away for free [22:49] mape: isn't that license wonky as hell? [22:49] mikeal: e isn't as nice as textmate [22:49] _ry: felixge: ah [22:49] mikeal: it's just compatible with plugins [22:50] pdelgallego has joined the channel [22:50] mape: rather strange no one tried to steal textmates place while it is dormant [22:50] deanlandolt: i'm still holding out hope for bespin to do that [22:50] JimBastard: *cough* cider [22:50] JimBastard: tmpvar [22:50] mape: That would be nice [22:50] tmpvar: bespin.. blarg :P [22:50] _ry: felixge: can you squash that into the 383e12 [22:51] mape: But bespin just seems.. like a mess [22:51] creationix: bespin's editor widget is pretty good [22:51] creationix: not sure about the rest of it thoug [22:51] mjijackson: mape: Didn't Panic try to do that with Coda? [22:51] felixge: mape: there is probably 1 new editor coming out / week. It's not that people don't try to provide the void left by Textmate 2, they just fail harder :) [22:51] felixge: _ry: sure, will ping you in a sec [22:51] mape: mjijackson: Well that is like trying to give kids root beer instead of beer just because it has beer in the name [22:51] tmpvar: cider: http://github.com/tmpvar/cider -- lightweight canvas editor (pre-alpha atm) [22:52] felixge: _ry: also going to squash that cleanup commit while I'm at it [22:52] mjijackson: mape: Agreed. I'm just saying, they tried. [22:52] mape: mjijackson: I meant a real editor ;) [22:52] _ry: felixge: cool thanks. i love cute commits [22:52] devinus has joined the channel [22:52] felixge: _ry: np :) [22:53] mape: all I want is non blocking search, non messy when working on network mounts and intellisense [22:53] JimBastard: fuck intellisense [22:53] JimBastard: i want my shit to compile JS in real-time [22:53] JimBastard: rubymine does that [22:53] JimBastard: so does *cough* dreamweaver cs4 [22:54] JimBastard: i.e. - if you go var myObject = {}; myObject.blarg = function(){} [22:54] JimBastard: then when you type myObject. [22:54] JimBastard: blarg comes right up [22:54] tmpvar: i want everythign to be replacable, broken up into tiny peices that make sense [22:54] creationix: we just need webview bindings for node [22:54] JimBastard: you should talk to that tmpvar guy tmpvar [22:55] tmpvar: yeah yeah [22:55] creationix: then we can write desktop apps in node [22:55] JimBastard: tmpvar you feel like a hack day anytime this week? [22:55] JimBastard: im deep into nodejs after work all week [22:55] tmpvar: creationix, or something like cairo -> canvas implementation [22:55] tmpvar: JimBastard, yeah man [22:55] creationix: cairo works too, but with webview we can reuse stuff like bespin [22:55] JimBastard: im down any / every night [22:56] tmpvar: JimBastard, you dont have to sound so desperate ;) [22:56] JimBastard: im leaving here shortly to go home and work on hook.io and this other top secret project [22:56] creationix: well, assuming you add in a dom [22:56] tmpvar: jsdom :P [22:56] mape: is bespin being worked on? [22:56] JimBastard: what, i like writing node code [22:56] JimBastard: whats soo desperate about that [22:56] mape: Haven't seen anything new in a while [22:56] creationix: not quite sure what just webview would do [22:56] mjijackson: ACTION will never understand why people want to write desktop apps in node [22:57] deanlandolt: mape: yeah, pretty much rearchitected the whole thing but it's coming out of hiding now [22:57] mjijackson: isn't the whole point to write servers? [22:57] mape: oh k [22:57] kriskowal: mape: bespin is just emerging from a massive refactor [22:57] creationix: mjijackson: because node is fun [22:57] mape: so what is better? [22:57] noonat: mjijackson: node's codebase is addicting [22:57] deanlandolt: mjijackson: what's the alternative for desktop apps? why not write them in js? [22:57] noonat: mjijackson: i immediately wanted to code games in it :P [22:57] creationix: and servers can have gui's anyway [22:57] deanlandolt: gui toolkits are all evented, aren't they? [22:57] creationix: look as osx server tools [22:58] tmpvar: im going to break down and do this cairo thing, but its pretty far down the project stack :( [22:58] mjijackson: creationix: node is very fun! writing a gui framework so you can use node on the desktop, not so much. [22:58] deanlandolt: mjijackson: to each is own :) [22:58] creationix: that's why I was thinking about hooking in an html engine [22:58] creationix: then it's easy to develop gui toolkit [23:00] mjijackson: deanlandolt: for some reason whenever i think of cross-platform gui frameworks i think of java [23:00] mape: gwt? [23:00] mape: peek a boo [23:00] creationix: I used to do pygtk for a while, it was fun [23:00] mjijackson: and the sacrifices they had to make to make it work everywhere [23:00] creationix: not the best on osx though [23:00] mjijackson: and how i hate using java apps, on ANY platform! ;) [23:00] tmpvar: gtk is sort of slow though, and it does too much :P [23:00] tmpvar: atleast for games and whatnot [23:01] noonat: i felt like air made the best compromise for that stuff [23:01] creationix: maybe someone could write a gui engine that communicated over a socket [23:01] mape: btw are there any asset management modules for node yet? [23:01] creationix: then anything could use it, node or other [23:01] felixge: _ry: http://github.com/felixge/node/commits/coupling [23:02] creationix: mape: what do you mean by asset management? [23:02] freshtonic has joined the channel [23:02] mape: grouping files, minification, gziping, adding nocache to the tags [23:02] mape: for js/css [23:03] creationix: ahh, wheat has some of that built in [23:03] mape: like http://github.com/miracle2k/django-assets [23:03] mape: http://elsdoerfer.name/docs/django-assets/ really handy [23:03] felixge: I guess http://github.com/felixge/node/commit/08720a273ff8d6c853c78af37af74bc40365cc4e could be split up. One part of it should go in the previous commit, and the new addition for readstreams should be its own commit [23:04] mape: creationix: It doesn't group or minify or gzip? [23:04] creationix: it gzips [23:04] creationix: and does the proper cache headers [23:04] mape: ah k [23:05] creationix: and render's dot files in the fly [23:05] creationix: no grouping though [23:05] creationix: howtonode doesn't have any js client-side and the css is preprocessed using less [23:05] mape: Yeah, you don't have a lot of http req anyway on the site so no harm not having it [23:06] mape: but when you start adding up it is a good default thing to have [23:06] tmpvar: creationix: regarding communicating over a socket.. you mean something like xorg? [23:06] _ry: felixge: so we really need fs.read and fs.write to do buffers [23:06] creationix: tmpvar: kind of, but modern and sane [23:06] darkf has joined the channel [23:06] _ry: felixge: cause usually the 'data' event should be a buffer [23:06] felixge: _ry: yes [23:06] creationix: then you could connect to your remote server with an ssh tunnel and see the visual interface to your server [23:06] creationix: or write desktop apps [23:07] creationix: same toolkit [23:07] tmpvar: got ya [23:07] felixge: _ry: do we need that before landing this patch? [23:07] _ry: felixge: maybe not [23:08] felixge: _ry: I might also need indexOf() for buffers, is that something you'd be interested in? [23:09] _ry: if (process.binding('stdio').isStdinBlocking()) { <-- [23:09] _ry: no .isStdinBlocking() is defined [23:10] Nohryb has joined the channel [23:10] felixge: hm? [23:10] felixge: let me see [23:10] creationix: tmpvar: does tcl/tk have socket client support [23:10] creationix: that might be a quick solution [23:10] creationix: and it looks native on osx [23:10] _ry: felixge: what do you ned indexOf() for? multipart? [23:10] felixge: _ry: which commit is that on? [23:10] _ry: felixge: the first [23:11] felixge: _ry: yeah I might need it for multipart, not sure yet. I might also get away without it. [23:11] felixge: _ry: checking [23:11] felixge: _ry: yeah, I guess that got fucked up [23:12] ncb000gt has joined the channel [23:12] felixge: _ry: more rebasing, will ping you [23:22] stepheneb has joined the channel [23:25] tlrobinson_ has joined the channel [23:30] gwoo has joined the channel [23:33] felixge: _ry: _http://github.com/felixge/node/commits/coupling [23:33] felixge: * http://github.com/felixge/node/commits/coupling [23:33] felixge: I think I perfectly untangled the commits from each other [23:33] felixge: so each revision should pass the test suite [23:34] felixge: and be atomic [23:36] gwoo: felixge: is new line 56 the same as old line 62? in node_stdio.cc? [23:37] felixge: gwoo: why do you ask? [23:37] gwoo: just looks like its the same code before and inside the if block [23:38] felixge: gwoo: good catch [23:39] gwoo: felixge: stick it [23:40] mjr_: Man, sleepy little #node.js has turned into a bustling open source collaboration metropolis. [23:40] felixge: gwoo: rebased & pushed [23:41] gwoo: nice [23:41] gwoo: felixge: slay the dragon [23:41] gwoo: that looks clener [23:42] confounds has joined the channel [23:42] gwoo: mjr_: this is the only place where people don't think your crazy for liking comma first [23:42] _ry: felixge: running through the tests [23:42] noonat: gwoo: hahaha [23:43] gwoo: :) [23:44] _ry: looks like test-http-chunked.js and test-utf8-scripts.js are broken on the debug build with the first patch [23:44] felixge: gwoo: my last game was really poor [23:44] _ry: which i'm assuming because they're using 'binary' encoding to print a utf8 string to stdout [23:44] gwoo: felixge: i must have stolen your mojo, cause i slayed the dragon 4 times [23:46] isaacs: gwoo: hooray! comma-first ftw! [23:46] mjr_: gwoo: I'm still not sold on comma first, but an even crazier idea is that you could use JavaScript to build high volume server applications. Once you are open to that idea, things like comma first sound quite plausible. [23:46] felixge: _ry: checking [23:46] gwoo: isaacs: you know it [23:46] gwoo: mjr_: so true [23:49] creationix: mape: you there? [23:50] creationix: I updated step to have a group function for your use case, see the latest commit of wheat for usage examples [23:50] felixge: _ry: I can reproduce this when running make test-all, but not when running the test by itself [23:50] felixge: build/debug/node_g /Library/WebServer/Documents/node/test/simple/test-http-chunked.js [23:50] felixge: what am I missing [23:50] felixge: ? [23:51] _ry: felixge: hmmm. in one case i guess it's a tty [23:51] _ry: in the other it's not [23:51] _ry: but actually this make me thing we have the logic fucked up [23:52] _ry: it should break on tty [23:52] felixge: _ry: so I still have the if-case mixed up? [23:52] felixge: in node.js? [23:53] _ry: static Handle [23:53] _ry: IsStdoutBlocking (const Arguments& args) [23:53] _ry: { HandleScope scope; bool tty = isatty(STDOUT_FILENO); return scope.Close(Boolean::New(!tty)); [23:53] _ry: } [23:54] _ry: hm [23:54] _ry: seems okay [23:54] felixge: is tty the blocking case? [23:55] felixge: I mean notice the !tty [23:55] _ry: tty is the non-blocking case [23:55] felixge: in that case this is correct [23:55] Yuffster has joined the channel [23:56] felixge: _ry: I have to go to bed now. Feel free to continue hacking on this / send me an email [23:56] _ry: ok [23:56] felixge: gn8 [23:56] _ry: felixge: i wish we shared timezones :) [23:56] felixge: me too ! [23:57] freshtonic: jashkenas: want to have a chat about the super method call stuff? [23:57] _ry: later [23:58] _ry: oh right. of course it uses the file stream in the non-tty case [23:58] _ry: ./node_g test/simple/test-utf8-scripts.js | cat