[00:00] CIA-77 has joined the channel [00:00] isaacs: you could just put Copyright (c) 2010 Kris Zyp, All Rights Reserved Forever And Ever, and then put an MIT license in it [00:00] kriszyp: :) [00:00] isaacs: you know, i just went on a cruise, and so we had to sign waivers to do certain things, like climb on the rock wall or skate in their ice, right? [00:01] isaacs: and all the waivers had this crazy language like saying that I indemnify Royal Carribean for any and all damage that may occur, or may have already occurred, as a result of or not as a result of climbing their rock wall, at any time from the beginning to the end of time, anywhere within or outside the entire universe [00:02] isaacs: there's covering your ass, and then they're covering all of space-time [00:02] Aikar has joined the channel [00:03] aglemann: i would like to use jslint in a javascript... it's just a function... var JSLINT = function..... is it possible to import and work with it like that? [00:03] isaacs: aglemann: just change "var " to "exports." [00:04] isaacs: or var JSLINT = exports.JSLINT = function.... [00:04] _announcer: Twitter: "#expressjs now serves static files 250% faster. http://cot.ag/aRk8la #nodejs" -- aaron heckmann. http://twitter.com/aaronheckmann/status/15888354687 [00:06] ceej: apart from on heroku where they can;t server images lol [00:07] ceej: serve* [00:07] sechrist__ has joined the channel [00:10] aglemann: isaacs - awesome works - thanks! question.. what about changing it to "this.JSLINT" is that different? [00:11] gerad: ceej: the faster serving apparently make it heroku compatible [00:11] ceej: gerad: I'm using that faster serving and it doesn't work on heroku :) [00:11] gerad: ceej: http://github.com/visionmedia/express/issues/issue/318/#comment_271242 [00:11] ceej: http://www.softwaredevs.com/public/images/logo.png [00:11] gerad: ceej: set('static buffer size', Number.MAX_VALUE) [00:12] ceej: it is [00:12] gerad: well then, apparently not [00:12] ceej: css file is fine, just seems to be images [00:12] gerad: well, at least it's an improvement…:-P [00:12] ceej: gerad: http://pastie.textmate.org/private/rqfhqb56qyjs4kyftxtpa [00:13] ceej: css files worked before :) [00:13] _announcer: Twitter: "@studip101 Yeah I've read Clean Code, I got a lot of value from it. Just learning JS now, few of my friends are adamant that I learn node.js" -- Cory Flanigan. http://twitter.com/seeflanigan/status/15888839145 [00:13] creationix: ceej: did Connect serve faster on heroku after my patch? [00:14] ceej: I don't see it here..... http://github.com/cj/Connect/commits/master [00:14] ceej: o wups [00:14] ceej: lol [00:15] ceej: ok applied let me test [00:15] _announcer: Twitter: "http://bit.ly/a6vgpD ◊ [Slides] Real Time Web with #NodeJS ( #TXJS )" -- François-G. Ribreau. http://twitter.com/FGRibreau/status/15888952961 [00:15] creationix: woot, my slides are still being tweeted about :) [00:16] creationix: lol, node-router sucks for static files: Requests per second: 3.84 [#/sec] (mean) [00:17] creationix: for this file http://sousaball.heroku.com/img/SousaBall.png [00:17] tilgovi: creationix: in the readme for step, would it be fine just just pass 'this' as a second argument to forEach rather than bind a variable to this.parallel? [00:17] ceej: creationix: hmmmm so images work for you..... [00:18] ceej: must be the way expressjs is doing headers or something :/ [00:18] creationix: tilgovi: no, I think it needs parallel so it waits for all of them to finish, not just the first to fire [00:18] tilgovi: no, no, that's not what I mean [00:18] creationix: ceej: maybe. I should replace mine with the connect version of sousaball and see if it still works [00:18] tilgovi: I mean if you pass this as the second argument to forEach you could use this.parallel() inside [00:18] creationix: tilgovi: oh, sure, that would work [00:19] creationix: I think it's slower though, not entirely sure [00:19] tilgovi: ok, just making sure...still relatively new to js [00:19] ceej: creationix: what's the guthub url for sousaball? [00:19] mikeal: ryah: what do you think an acceptable test would be for testing file server speed compared between node and nginx? [00:19] gerad: ok, dumb question, but is there an easy way to get node to reload files without restarting the server [00:19] creationix: the one running on heroku uses node-router [00:19] creationix: just a sec... [00:19] creationix: http://github.com/creationix/sousaball [00:19] tilgovi: I would think that the forEach would be faster because you wouldn't create new contexts, but you'd be dereferencing this more times. [00:19] creationix: gerad: that's not a dumb question, it's a hard unsolved problem [00:20] creationix: there are some libs that help though [00:20] tilgovi: either way, it's picking at something for fun. I'll keep my hands off . [00:20] gerad: creationix: hahahaha, makes me feel better [00:20] creationix: tilgovi: mainly I forget that foreach can pass this down [00:20] tilgovi: just making sure I wasn't missing something. carry on. [00:20] gerad: what libs? [00:21] gerad: alternatively, I have a small bootstrap server.js file, i figure I can just have it invalidate the require cache on every request (if there is one) [00:21] creationix: I think isaacs has something, and I know nodules from kriszyp does something [00:22] creationix: gerad: yeah, but that's fairly complicated [00:22] gerad: creationix: awesome thanks [00:22] creationix: kriszyp: nodules is yours right? [00:23] creationix: does heroku support submodules? [00:24] gerad: cretionix: nah you have to vendor everything [00:24] gerad: whoops [00:28] ceej: creationix:nope [00:29] jetienne has joined the channel [00:33] _announcer: Twitter: "@mikeal Which #couchdb module do you recommend using with #nodejs? Or none of the above? http://wiki.github.com/ry/node/modules#database" -- Jason Huggins. http://twitter.com/hugs/status/15889966111 [00:34] ceej: man still no luck getting images to display on node.js and express :/ [00:34] kocolosk has joined the channel [00:34] Tim_Smart has joined the channel [00:36] ceej: creationix: you should implement how you serve static files in sousaball to express, because it would be nice to do this use(Static,{ dirs: /^(\/.+\.(js|css|png|ico))$/, path: __dirname + "/public" }) so we don;t have to use public [00:37] creationix: in connect it can fall through [00:38] creationix: but yeah, matching on a pattern might be nice too [00:38] creationix: I don't work on express btw, I wouldn't know where to start [00:43] creationix: ceej: heroku fail! http://sousaball.heroku.com/ [00:43] creationix: I just pushed the connect version of sousaball and images are corrupt [00:44] ceej: yep :/ [00:44] creationix: hmm, looks line heroku is killing the Content-Encoding: gzip header [00:44] creationix: no wait, nevermind images aren't gzipped [00:45] creationix: they're binary already [00:45] creationix: I think varnish is getting in the way [00:45] tmpvar has joined the channel [00:51] stevendavie has joined the channel [00:54] Ori_P has joined the channel [00:55] ceej: creationix: but why on your custom one does it work? [00:55] creationix: custom one? [00:56] isaacs has joined the channel [00:56] creationix: ceej: are you talking about the node-router based version? [00:56] creationix: I'm guessing because it sets less headers and doesn't confuse varnish [01:01] creationix: ceej: ahh, my patch for older versions of node only worked for text [01:02] creationix: it assumed utf8, not safe for binary stuff [01:03] ceej: creationix: express must be doing the same thing with older versions of node [01:03] creationix: I'm working on patching mine, it's a little harder [01:04] creationix: they need to update their node version [01:05] creationix: yuck, I don't want to have to detect node versions [01:06] fictorial: saikat: catching up here... yes, it "pipelines". redis asserts FIFO request-response ordering per client. [01:06] ceej: ye heroku should really update :/ [01:06] deanlandolt_home has joined the channel [01:07] saikat: fictorial: so if chronologically a get happens before a set, the get will get executed before the set, and my get's callback will get called before the set's callback? [01:07] creationix: anyone have a semver compare function [01:07] _announcer: Twitter: "node-chat: step by step - A nice learning tool for picking up node.js, it includes 13 part breakdown of the... http://tumblr.com/xgcbc1km1" -- Craig W. http://twitter.com/mind_scratch/status/15892022860 [01:07] creationix: I need to compare "0.1.92" and "0.1.97" [01:07] creationix: I guess alphabetic will work for now [01:08] steadicat has joined the channel [01:08] saikat: fictorial: i posted the same question (more or less) on the mailing list as well, if that helps clarify [01:08] kriszyp: yes, nodules is my project (assume I am little late) [01:08] fictorial: saikat: yes, that's correct. [01:09] saikat: fictorial: i see, thanks [01:09] fictorial: if you send A, B, C in that order, redis processes A, B, C in that order, and sends back the responses of A, B, C in that order. [01:09] fictorial: np [01:09] fictorial: it's great for dumping a ton of commands without blocking [01:09] saikat: fictorial: right, i guess i was wondering if redis-node-client has any multi-thread trickery occurring (like redis processes it in A, B, C order, but because of context switching, the callback for B actually happens before the callback for A [01:10] gerad: kriszyp: I prompted the nodules question [01:10] saikat: and you are saying no, and i trust you =) [01:10] gerad: kriszyp: looking at the docs, it seems it handles reloading…? [01:11] creationix: anybody remember what version of node got buffers for fs.readFile? [01:11] creationix: 0.1.95 maybe [01:11] creationix: hmm, I guess it will be in the changelog [01:11] fictorial: saikat: nope... [01:11] creationix: yep v0.1.95 [01:11] fictorial: it's a stateful parser, and uses a stack of callbacks [01:11] softdrink has joined the channel [01:12] Yuffster has joined the channel [01:12] saikat: i see, so i shouldn't actually need to implement my own queuing, which i was going to do - like i have this gist: http://gist.github.com/433383 and i wanted to make sure that if client A sends an edit and then client B sends an edit, the value that client B gets is the value that client A set [01:12] _announcer: Twitter: "Just sitting down to work through some NodeJS examples and github is down so the libs I want to load are not available. *sigh*" -- Kevin Miller. http://twitter.com/kevm/status/15892344122 [01:13] tilgovi: if writing to a stream returns false and I write again before it drains will node buffer the data for me? [01:13] saikat: er, fictorial ^^ [01:14] fictorial: saikat: are the clients in separate node processes? [01:14] saikat: fictorial: not currently [01:14] fictorial: using different redis-node-clients? [01:14] fictorial: ok [01:14] saikat: someday maybe, but yeah i realize i'll need to worry about a lot more then [01:14] saikat: since then i could context switch even within a callback [01:14] fictorial: yeah... outside of a single redis client, that is a race condition and you'd need some sort of coordination beyond what a redis client would provide [01:15] fictorial: in a single redis client, FIFO [01:15] saikat: awesome, that simplifies a lot of things for me [01:15] dji has joined the channel [01:15] saikat: and i assume pipelining also makes this super fast [01:15] saikat: thanks fictorial [01:15] fictorial: great, you're lucky that is just the nature of the thing then... Salvatore is a smart chap. [01:15] fictorial: np [01:15] ceej: creationix: this is all the headers it's setting for images { 'Content-Type': 'text/html', 'Content-Length': 8174} [01:15] ceej: which is totally wrong [01:16] creationix: yeah, that's not good [01:16] ceej: o sorry... for the image it is setting none [01:16] creationix: express? [01:16] ceej: http://pastie.textmate.org/private/boklvhazxersscps0pqq [01:16] ceej: ye, but it gets the same error on heroku as connect [01:16] creationix: well 304 isn't supposed to have content headers [01:17] creationix: so the browser will load the old bad data [01:17] creationix: that's a cache problem [01:17] creationix: I've got connect failing locally on my laptop with node v0.1.92, working on a better patch [01:20] dji has joined the channel [01:22] _announcer: Twitter: "@heroku you need to update #nodejs from v0.1.92 to v0.1.97" -- CJ Lazell. http://twitter.com/ceej/status/15892916867 [01:22] ceej: wow _announcer is seriously quick :) [01:23] ditesh|cassini has joined the channel [01:23] creationix: bleh, I got my code working locally on v0.1.92 and now it get a different corruption on heroku [01:25] creationix: ceej: I just pushed a better patch for connect, do you want to try it on heroku? [01:25] creationix: not working for me still though [01:27] _announcer: Twitter: ".... and my node.js server crashed 350 times in the last 24 hours. Although that's bad. Monit keeps booting it up. That's good!" -- Ben Nolan. http://twitter.com/bnolan/status/15893238050 [01:28] stephenlb has joined the channel [01:30] kriszyp: gerad: yes, it does reloading [01:31] ceej: i can give it a go [01:31] mikeal: mjr_: did you do that whole "drive your truck to work" thing today? [01:33] Tim_Smart: Hmm how do you crash node 350 times in 24 hours? [01:34] Tim_Smart: Someone must be doing it wrong [01:34] mjr_: mikeal: I did. Shall I deliver your bicycle to your office then? I'm about to leave. [01:34] mikeal: i'm at home actually [01:34] mikeal: i left the office at like 3 today [01:34] mjr_: Oh, OK. I'll drop it by there. So I guess that makes it harder to exchange for a CouchDB shirt, then. [01:34] mikeal: oh damn [01:35] mikeal: also, i can go to your house and get it if my place isn't on your way home [01:36] x_or1: creationix: How close is express running on connect? [01:36] mjr_: no worries. I'm leaving SF now, so I'll get there as fast a rush hour traffic over the bridge lets me. [01:36] creationix: x_or1: I don't TJ has started porting it [01:36] creationix: *don't think [01:37] mikeal: cool [01:37] x_or1: Do you know if it is worth trying it now, or should I wait until things are more stable? [01:37] x_or1: Can I help in any way? I suppose I should be asking TJ. [01:37] x_or1: I'll email him. [01:37] creationix: x_or1: go for it, I think it's ready enough [01:37] creationix: ACTION famous last words [01:38] x_or1: Cool. I'm asking because I want to port a middleware layer from rack onto connect. [01:38] creationix: but yeah, I'm not involved in express in any way other than working with tj on connect [01:38] x_or1: Does connect have support for sessions, or would that be better handled inside express? [01:38] creationix: I think I want session as a middleware [01:38] creationix: there is a blank file in there currently [01:38] x_or1: OK. [01:38] x_or1: Good to know. [01:39] joshbuddy has joined the channel [01:39] ncb000gt has joined the channel [01:42] keyvan has joined the channel [01:43] isaacs has joined the channel [01:45] SteveDekorte has joined the channel [01:52] charlesjolley- has joined the channel [01:58] dji has joined the channel [02:02] Validatorian has joined the channel [02:02] abadr has joined the channel [02:03] hammerdr has joined the channel [02:10] tmpvar: isaacs, has there been any consideration in CommonJS packages for os level dependencies? [02:10] isaacs: tmpvar: i believe so, but it's kind of fuzzy [02:10] isaacs: tmpvar: the story in npm's world is "write a preinstall script that checks for what you care about" [02:11] tmpvar: got ya [02:11] isaacs: tmpvar: you could even do something like { "scripts" : {"preinstall" : "which tar" } } since that'll return with an error code if it's not found [02:11] tmpvar: strategizing about node-ogl.. trying not to bind too hard to a single windowing lib [02:12] isaacs: and any unsuccessful script command will abort the process. [02:12] creationix: crazy! I'm trying to JSON.parse a string and I'm getting the string "illegal access" as the exception [02:12] creationix: not even an exception object [02:12] tmpvar: isaacs, got ya [02:12] creationix: anybody ever seen that [02:12] isaacs: creationix: yeah, but it's probably not a string ;) [02:12] isaacs: creationix: that's what you get when you JSON.parse a buffer [02:12] isaacs: creationix: try JSON.parse(foo + "") [02:14] creationix: interesting [02:14] rtomayko has joined the channel [02:15] creationix: thanks isaacs [02:18] charlesjolley- has joined the channel [02:20] isaacs: creationix: np. drove me crazy when the http client started getting buffers instead of strings, and my json.parse started failing [02:20] isaacs: or maybe it was readFile... don't remember [02:20] mde: readFile for me, today. :) [02:28] hammerdr has joined the channel [02:28] kriszyp: yeah, that illegal access error is a real pain because it doesn't provide a stack trace [02:29] saikat: what postgresql lib is most stable currently? [02:30] siculars has joined the channel [02:30] creationix: saikat: mine works, but it's probably not the fastest [02:30] creationix: mde: don't you use postgres? [02:31] pedrobelo has joined the channel [02:32] saikat: creationix: postgres-js or persistence (though i'm guessing persistence is just using postgres-js on the backend?) [02:32] mde: creationix: Yeah, Geddy has Postgres and SQLite support. [02:32] creationix: saikat: postgres-js [02:32] saikat: sorry i can't actually look at your code currently, github seems to think the repo is unavailable [02:32] mde: saikat: Ry's node_postgres is the best one. [02:32] saikat: ok thanks [02:32] creationix: mde: so it's working for you? [02:33] mde: Yeah, I'm having no issues. Can't do prepared statements, but plain SQL works fine. [02:33] kriszyp_ has joined the channel [02:33] mde: saikat: http://wiki.github.com/mde/geddy/install-postgresql-and-node_postgres [02:33] saikat: cool thanks mde [02:34] creationix: mde: how much faster was the c version, I assume you benchmarked it [02:34] mde: Yeah, I was doing benchmarking, and basically the pure-JS version just fell down. [02:35] mde: I started off trying to use that one. [02:35] stevendavie has joined the channel [02:39] isaacs: kriszyp: i'm trying to install something that was published before hte registry started hosting the tarballs, and github is giving me 500 errors up and down. [02:39] isaacs: kriszyp: this is why controlling the distribution is a good thing! [02:39] isaacs: kriszyp: :) [02:39] kriszyp: oh, I totally agree [02:39] kriszyp: github is not reliable [02:42] tmpvar: it is pretty reliable at git stuff ;) [02:42] kriszyp: but I want to be able to have npm be a mirror of the canonical (albiet not-reliable) url [02:43] isaacs: kriszyp: yeah, i agree, and i think mapping could provide that. [02:43] isaacs: kriszyp: or multiple registries and couchdb replication [02:43] isaacs: kriszyp: which would also provide a lot of redundancy [02:43] isaacs: like, in the good sense, that is [02:54] LowValueTarget has joined the channel [03:08] x_or has joined the channel [03:08] kevm has joined the channel [03:08] creationix: mde: I see what you mean about my postgres driver falling apart [03:08] creationix: works fine under low load though [03:09] mde: Yeah, I was using siege with 1000 concurrent connections, benchmarking against Sinatra. [03:09] creationix: must be a bug in the rechunking code [03:09] creationix: that will do it [03:09] _announcer: Twitter: "building nodejs on an unbuntu vm. I keep cautiously telling myself "your on linux now" when in the VM. I've been on windows too long." -- A'braham Barakhyahu. http://twitter.com/BlessYahu/status/15899481371 [03:09] smtlaissezfaire has joined the channel [03:09] mde: Yeah, Sinatra was dropping stuff on the floor too. :) [03:09] creationix: I just added multi-core support to connect [03:09] creationix: about to push [03:09] mde: With Node, the latency just got longer and longer. [03:09] mde: Nice. [03:10] mscdex has joined the channel [03:10] ryah: what about my postgres lib? [03:11] creationix: http://github.com/extjs/Connect/commit/ef40cf55da3d67645cdd8f4fe2b9007d98749613 [03:11] mde: ryah: I used it in a JS/Node/Geddy Ruby/Thin/Sinatra benchmark test. [03:11] ryah: mde: where is it? [03:11] creationix: ryah: the multo-core stuff seems to scale pretty linearly with the number of cores [03:11] mde: It's supposed to go up on the Yammer Enginnering blog, but they are waiting to have enough posts to put it up. [03:11] creationix: I get 2x on my mac and mape was getting 4x on his quad-core linux [03:12] mde: And the info is getting stale, pretty frustrating. [03:12] ryah: creationix: good [03:12] mde: Basically it just did a Postgres insert and fetch of a single record. [03:12] creationix: and with connect apps it's at simple as setting the "-n 4" flag [03:12] mde: And at high load, Sinatra was dropping 15% of the requests on the floor. [03:13] ryah: mde: seems like a good benchmark [03:13] mde: With Geddy, the latency just got longer and longer, but availability was 100%. [03:13] mde: Yeah, was really gratifying to see. [03:13] ryah: how long? what load? [03:13] mde: I hope we can publish it soon. [03:13] mde: Lemme look. [03:13] _announcer: Twitter: "Added experimental multi-core support to connect http://bit.ly/adPtm1 (requires latest #nodejs from git) Run app with "connect -n 4 start"" -- Tim Caswell. http://twitter.com/creationix/status/15899802118 [03:14] mde: ryah: https://gist.github.com/b015a14fc639d8d8c77b [03:14] ryah: there is something really wrong about how node's perf degragates [03:15] mde: Sorry, the top one is Postgres, just updated. [03:15] mde: I was using siege. [03:16] mde: This was the old Geddy router. The new one does more, so it might be a tiny bit slower. [03:16] JimBastard has joined the channel [03:16] mscdex: Rush! :-D [03:16] mde: Memory usage was comparable between Sinatra and Geddy. [03:16] mde: Yeah. :) [03:17] Aria has joined the channel [03:17] ryah: hm [03:17] creationix: yeah, it's the dechunking in my postgres driver, I should probably fix that [03:17] creationix: it's fast enough for testing and a lot easier to install [03:17] creationix: and the only postgres that runs on heroku [03:17] mscdex: there should be a node module called peart [03:17] mscdex: huhu [03:18] ryah: Response time: 7.38 secs [03:18] mde: I guess it doesn't need the headers-stuff, yeah. [03:18] ryah: ? [03:18] mde: Yeah, the response time got longer and longer. [03:18] mde: But you can see Sinatra was just throwing up its hands. [03:19] mde: It's not a beefy box. [03:19] mde: All it was doing in both frameworks was routing, inserting a record, fetching the same record. [03:20] mde: You can see the response time is totally different with Memcache. [03:21] ryah: kind of disappointing [03:21] mde: It's all in the DB IO. [03:21] creationix: so it's the db that getting slower and slower, right [03:21] mde: The DB is on the same box, actually. [03:21] creationix: node is just waiting on it [03:21] mde: Yeah, likely so. [03:21] ryah: i don't know.. [03:22] hammerdr_ has joined the channel [03:22] ryah: could dtrace it and find out [03:22] mde: It's hard to say, but when you look at the Memcache results, it makes it look like it's either the DB, or the driver. [03:24] JimBastard: i should have never let indexzero deploy that app on nodejitsu [03:24] JimBastard: ohh man [03:24] creationix: nice, my real-world connect app is getting 6186.62 reqs/sec using two cores [03:24] creationix: it does a couple db queries and renders a view [03:24] creationix: (but there is a 100ms ramcache though) [03:24] creationix: if I disable the ramcache my postgres driver pukes [03:25] JimBastard: he has a interactive display at the smithsonian using the MS surface and has one of the services reporting to our servers. of course he made a bug, we got a half gig of transfer in like an hour [03:25] creationix: JimBastard: you need to add connect support to nodejitsu [03:25] mde: I'm starting on some benchmarks vs. Rails, since Sinatra is so lightweight. [03:25] JimBastard: creationix: can you bundle connect into a git repo? [03:25] creationix: it is [03:25] mde: The full trip from the DB to model to render. [03:25] JimBastard: what are the dependacies? [03:25] creationix: nothing [03:25] JimBastard: so it works [03:25] JimBastard: :-) [03:26] creationix: unless you want to run the unit tests [03:26] creationix: yep, connect works [03:26] JimBastard: i mean [03:26] JimBastard: i can deploy it already [03:26] creationix: and I just added multi-core support [03:28] stephenjudkins has joined the channel [03:31] _announcer: Twitter: "just wrote my first node.js/express/mongodb sample app. dang. that is cool stuff." -- JeffryGonzalez. http://twitter.com/JeffryGonzalez/status/15900969348 [03:34] Tim_Smart: creationix: How does that compare to single process? [03:34] creationix: Tim_Smart: it scales linearly with the number of cores [03:34] creationix: the kernel does the load balancing for you [03:35] Tim_Smart: OK I would have thought it would be more IO restricted than CPU limited [03:35] creationix: not synthetic benchmarks with small bodies [03:35] _announcer: Twitter: "Really should do my notification system for #nodejs esp. after the chats I've had with various people this week." -- andychilton. http://twitter.com/andychilton/status/15901248247 [03:35] creationix: those are very much cpu bound [03:35] chilts: wow, _annoucer is fast! [03:36] Tim_Smart: chilts: It uses the streaming api [03:36] chilts: ooooh, nice [03:36] chilts: ACTION croons [03:36] creationix: push technology! [03:36] chilts: yeah, that's pretty awesome [03:36] Tim_Smart: What is twitter using for streaming again? [03:37] mscdex: probably not websockets [03:37] mscdex: but that would be fun [03:37] Tim_Smart: Jetty [03:38] mscdex: Geddy [03:38] mscdex: :-D [03:38] Tim_Smart: twitter uses Java for streaming :o [03:38] mscdex: ugh java [03:39] mscdex: i'd rather stick my head in a container full of angry bees [03:39] Tim_Smart: At least angry bees have soul [03:40] Tim_Smart: w/e that means [03:40] mscdex: south korea has seoul [03:41] abadr has joined the channel [03:42] JimBastard: this shit is too funny [03:42] JimBastard: indexzero's sliverlight app is slowly sending nodejitsu larger and larger log files [03:43] JimBastard: they are up to 1meg now, getting sent every few seconds [03:43] JimBastard: sorry [03:43] JimBastard: 2 megabytes [03:43] JimBastard: every few seconds [03:43] JimBastard: growing bigger with each request [03:43] kevm: creationix: any know issues installing connect on macosx? [03:43] pedrobelo has joined the channel [03:44] kevm: creationix: getting an error trying to install the max pages. [03:44] creationix: kevm: tjholowaychuk did that part [03:44] Validatorian has joined the channel [03:44] creationix: but I think it's trying to write to a folder that not all macs have [03:45] creationix: just people with macports or homebrew or something like that [03:45] creationix: I just use "nvm linklib" to install it [03:45] creationix: works great for any node project if you're already using nvm [03:45] kevm: https://gist.github.com/005d015b4bbace77af00 [03:45] kevm: ok I'll try that [03:46] creationix: or "sudo mkdir -p /usr/local/man/man1/" [03:46] mscdex: silverlight = yuck [03:46] JimBastard: dude [03:46] JimBastard: i cant believe node is handling this [03:46] JimBastard: im getting 2 meg file uploads every few seconds [03:46] mscdex: silverlight oughta be put on notice [03:47] JimBastard: plz [03:47] JimBastard: and flex [03:47] JimBastard: all scripts [03:47] broofa has joined the channel [03:47] pzich has joined the channel [03:47] JimBastard: that arent javascript [03:47] mscdex: that's a bit much. nothing wrong with bash scripts [03:47] mscdex: or DOS batch files :-D [03:47] JimBastard: so who is taking bets? [03:47] JimBastard: its my server's harddrive versus node [03:47] JimBastard: which is going to die first [03:48] creationix: node will never die, just get slower and slower [03:48] creationix: it will be a stalemate [03:48] JimBastard: my money is on the HD [03:48] JimBastard: by the time the file uploads are like 5mg [03:48] JimBastard: mb [03:48] JimBastard: ill have used up all my storage [03:48] creationix: ask mde about node never dying [03:48] JimBastard: i mean, broodmother has had crazy up time [03:48] mscdex: node is immortal [03:49] mscdex: THERE CAN BE ONLY ONE [03:49] JimBastard: except for that one night where i had to do a pull and build live on production [03:49] mscdex: werd to the broodmutha [03:50] creationix: yeah! connect -n 16 start [03:50] creationix: starts 16 child processes all sharing a port [03:51] creationix: too much fun and I'm too loopy [03:51] JimBastard: lol [03:51] mscdex: we need the node equivalent of cakephp! [03:51] creationix: I wonder how many child processes it can start [03:51] mscdex: so i can replace my cakephp installations! [03:51] mjr_ has joined the channel [03:51] creationix: hmm, only 20, strange [03:55] mde: mscdex: Isn't Cake a PHPish version of Rails? [03:56] JimBastard: machine has been shut down remotely lol [03:56] mscdex: i don't use ruby or rails, so i can't answer that [03:56] JimBastard: node and the server both win [03:56] devinus_ has joined the channel [03:56] mde: Ah, okay. You might want to take a look at Geddy. Should be a pretty similar deal: http://geddyjs.org/ [03:56] mde: It's still very early, but it's getting there. [04:06] ajpiano has joined the channel [04:08] isaacs: wow, eyes is NEAT [04:08] isaacs: colors!! [04:09] mscdex: :S [04:10] JimBastard: dude [04:10] JimBastard: <3 eyes [04:10] JimBastard: <3 http-console [04:10] JimBastard: <3 cloudhead , no homo [04:10] stevendavie has joined the channel [04:10] JimBastard: isaacs [04:10] JimBastard: ahah [04:10] mscdex: jeje [04:11] JimBastard: theres a even better snippet in http console [04:11] JimBastard: i might have to steal it and make it a lib [04:11] JimBastard: "my string".color [04:11] isaacs: yeah, that's neat [04:11] JimBastard: sys.puts("mystr".red) [04:11] isaacs: oh, it's like a getter? [04:11] isaacs: thats rad [04:11] JimBastard: yeah i know [04:12] JimBastard: im using it for all my work stuff [04:12] JimBastard: people LOVE colors [04:12] isaacs: the npm logs are way more awesome with colors. [04:13] isaacs: also, try this: npm ls s t a b l e r t g o 0 . [04:14] isaacs: it's like skittles! [04:14] mscdex: taste the asynchronous rainbow! [04:15] stepheneb has joined the channel [04:16] mscdex: another weekend, another ncurses patch [04:16] JimBastard: nice mscdex [04:16] JimBastard: im tempted to start using that btw [04:16] JimBastard: maybe for a installation / config screen [04:16] JimBastard: beats the hell out of configuring in textmate [04:17] JimBastard: you need a custom compile though right? [04:17] mscdex: yep, it's a c++ addon [04:19] mscdex: i'd like to add support for the ncurses menu and form libraries too [04:20] saikat has joined the channel [04:20] mscdex: i'm hoping to get to that sometime in the near future [04:20] JimBastard: yeah custom compiles kinda suck [04:20] JimBastard: :-\ [04:20] creationix has joined the channel [04:21] mscdex: yeah i know, but there's no other way [04:24] cloudhead: mehehe [04:24] cloudhead: <3 colors [04:25] isaacs: ugh. dealing with the fact that node gets upgraded, and then npm's packages might no longer be something that works... this is a rats' nest of edge cases. [04:25] cloudhead: isaacs: what do you mean? [04:25] isaacs: cloudhead: foo depends on bar, right? [04:26] cloudhead: yea [04:26] isaacs: cloudhead: foo needs bar > 1 but < 2 [04:26] isaacs: 1.0.0 2.0.0 [04:26] isaacs: cloudhead: bar 1.0.0-1.5.0 work with node 0.1.* [04:26] isaacs: cloudhead: bar 1.5.0 - 2.0.0 work with node 0.2.x [04:26] isaacs: cloudhead: foo works with node * [04:26] mscdex: heh [04:27] cloudhead: right [04:27] isaacs: cloudhead: so, when you install foo, you have node 0.1.97, let's say, so npm is smart enough to link in bar 1.5.0 [04:27] cloudhead: well once it stablizes this won't be a problem anymore [04:27] isaacs: cloudhead: then, you upgrade node to 0.2.x [04:27] cloudhead: ohh [04:27] cloudhead: yea I see [04:27] isaacs: now foo still works, but it doesn't work with the bar version that's linked INTO foo [04:27] isaacs: so you have to have a way to go through and re-check all the deps for everything, as well as the packages that are directly installed. [04:28] tilgovi has joined the channel [04:28] cloudhead: hmm [04:28] cloudhead: rubygems doesn't solve that [04:28] isaacs: cloudhead: that's because rubygems has a worse problem, in that only one version of anythign can ever be anywhere [04:28] Yuffster has joined the channel [04:28] cloudhead: true [04:28] isaacs: i think what i really need is just an update command that re-checks the dependencies for a package. [04:29] isaacs: and maybe also gets the new stable version of everything or whateve. [04:29] cloudhead: but it's less of a problem with ruby because it moves very slowly [04:29] isaacs: ok.... [04:29] cloudhead: and more of a problem with node, cause newer versions aren't backwards compatible [04:29] isaacs: so, i think i can just deal with this by making npm only do the engine-version check at install time. [04:29] _announcer: Twitter: "@ryah Not a node.js problem. I was probing my websocket server with http protocol and monit was freaking out." -- Ben Nolan. http://twitter.com/bnolan/status/15904486843 [04:30] pavelz has joined the channel [04:30] isaacs: and then have an update command that explicitly re-checks the dependencies. [04:30] isaacs: post-install [04:30] cloudhead: isaacs: yea, that would make sense [04:30] isaacs: so, if you upgrade node, it's on you to re-check your packages and make sure they still work. [04:30] isaacs: and maybe have a way to automate that [04:30] cloudhead: yea [04:30] cloudhead: well [04:30] cloudhead: npm could store the current version of node [04:31] cloudhead: and every time it's run [04:31] cloudhead: it checks if the version is the same [04:31] cloudhead: if not, it runs the checks auto [04:31] isaacs: hm... [04:31] cloudhead: and warns the users of any problems [04:31] isaacs: i'd prefer not to do that. [04:31] isaacs: each install is the first and the last. [04:31] isaacs: :) [04:31] cloudhead: yea [04:32] isaacs: i'd rather make it more atomic than less. it's actually not quite fully atomic, since there are persistent configs and all [04:32] cloudhead: I think once node hits 1.0, it won't deprecate apis in minor releases [04:33] cloudhead: and then when you upgrade to new major release, you'll expect things to break anyway [04:33] cloudhead: and you can run a check command with npm [04:33] cloudhead: but the problem is more on the side of libraries I think [04:33] isaacs: yeah... [04:33] cloudhead: I mean, if I say ">= 0.1.97" [04:34] cloudhead: that doesn't mean it'll work in 0.2 [04:34] cloudhead: but npm thinks it will [04:34] cloudhead: cause 0.2 isn't out, I have no idea [04:34] cloudhead: if it'll work or not [04:34] cloudhead: : ) [04:34] cloudhead: so yea I dunno [04:34] isaacs: cloudhead: yeah [04:34] isaacs: it's not perfect [04:34] cloudhead: maybe you should put the responsibility on developers [04:35] tmpvar has joined the channel [04:35] cloudhead: and just have a global update command [04:35] cloudhead: if there isn't one already [04:35] isaacs: there isnt' even a limited update command :) [04:35] isaacs: smal steps first [04:35] cloudhead: hehe right, install [04:35] isaacs: i'm ok with breaking if the developer didn't give npm enough info to do something [04:36] isaacs: better to break because it's dumb than break because it's clever. [04:36] cloudhead: yea [04:36] isaacs: not failing is usually not an option. [04:39] isaacs: so, i'll just make sure it's set up properly at install time, and then do an update command that will basically just re-do the dependency resolution [04:39] cloudhead: makes sense [04:39] isaacs: or, actually, update could just run the build command again... [04:39] isaacs: oh, no, because it also fetches stuff [04:39] isaacs: build assumes that you already have the deps installed. [04:39] isaacs: ACTION is rambling [04:40] cedric__ has joined the channel [04:53] nsm has joined the channel [04:58] k3yvn has joined the channel [05:00] mjijackson has joined the channel [05:07] siculars has joined the channel [05:10] bpot has joined the channel [05:12] oleg__ has joined the channel [05:12] Yuffster_ has joined the channel [05:15] quirkey_ has joined the channel [05:16] jxson has joined the channel [05:18] quirkey_ has joined the channel [05:20] Yuffster has joined the channel [05:21] JimBastard: sup quirkey [05:21] JimBastard: ACTION bows to the master of food [05:23] pkrumins: should invent a single pill [05:23] pkrumins: consume it and you dont have to eat for the rest of the day [05:23] pkrumins: s/rest/whole/ [05:24] isaacs: pkrumins: but would it taste as good as food? [05:24] abadr has left the channel [05:25] pkrumins: not at all [05:25] pkrumins: it's just to keep you going 100% [05:25] pufuwozu has joined the channel [05:28] creationix: mmm, Jetsons food [05:28] pquerna: 'build' finished successfully (5h39m11.960s) [05:28] pquerna: 'oops', put a laptop to sleep while a build was running :D [05:34] isaacs: pkrumins: i'm not buyin it. food is so good. [05:39] keyvan has joined the channel [05:41] mjr_: pquerna: oh, so not building on your Amiga 500 then? [05:41] pquerna: lol [05:42] pquerna: well, to use v8.. might try that 486 dx [05:42] creationix: ruby used to take about 5hours on my 256mb slicehost [05:44] micheil has joined the channel [05:45] broofa has left the channel [05:47] peutetre has joined the channel [05:50] cloudhead: didn't the 'exit' callback used to receive the exit code as argument? [05:50] jetienne: atariST ftw :) [05:51] _announcer: Twitter: "@bostonou it accelerated my understanding of closure-style JS, which helped me grok node.js" -- Montana Rowe. http://twitter.com/calcnerd256/status/15908283651 [05:57] JimBastard: closure style js [05:57] JimBastard: all js is in a closure [05:57] JimBastard: mofafucka [05:58] mjr_: ACTION captures JimBastard in a closure [06:06] ryah: wait for c-ares release or not? hmm [06:09] micheil: ryah: ssl stuff in node works now, doesn't it? [06:11] mjr_: ryah: soon we'll have pure JavaScript DNS. [06:21] probablyCorey has joined the channel [06:24] SamuraiJack has joined the channel [06:27] mikeal has joined the channel [06:30] hammerdr has joined the channel [06:32] _announcer: Twitter: "Так-так-так... А не написать ли мне CMS-ку под Node.js?" -- Alexey Gromov. http://twitter.com/phpinfo/status/15909955621 [06:33] hammerdr_ has joined the channel [06:37] softdrink has joined the channel [06:45] pkrumins: hey, is there really no seek()? [06:48] nsm has joined the channel [06:50] derbumi has joined the channel [06:50] cloudhead: pkrumins: you can pass an offset to write [06:50] cloudhead: and read [06:52] saikat has joined the channel [06:54] virtuo has joined the channel [06:55] awenkhh has joined the channel [06:56] CIA-77: node: 03Matt Ranney 07master * rcbd1f14 10/ doc/index.html : Remove setTimeout from initial example and description. - http://bit.ly/dCPAsc [06:56] ryah: pkrumins: pread [06:56] ryah: pkrumins: fs.read has a parameter for position [06:56] ryah: ACTION sleep [06:57] mde: Same here. G'night, y'all. [06:58] pkrumins: thanks [07:00] mikeal: sleeeeeeeeeep! [07:04] derbumi has joined the channel [07:04] mscdex_ has joined the channel [07:05] markwubben has joined the channel [07:10] dabreaka has joined the channel [07:10] _announcer: Twitter: "Nice 'pitch' for node.js + riak: http://franciscotreacy.com/note/riak-js-the-missing-connector/" -- Mark Mayo. http://twitter.com/mmayo/status/15911443755 [07:12] slaskis has joined the channel [07:16] b_erb has joined the channel [07:21] micheil has joined the channel [07:25] admc has joined the channel [07:31] derbumi has joined the channel [07:38] javajunky has joined the channel [07:42] teemow has joined the channel [07:55] Validatorian has joined the channel [07:57] pilif: gzzzz899999999 [07:57] pilif: cat on the keyboard. sorr [07:59] sechrist__ has joined the channel [08:18] devtime has joined the channel [08:27] martoche has joined the channel [08:27] martoche: hi! I'm opening too many files at the same time, so I have a EMFILE, Too many open files error [08:27] ditesh|cassini has joined the channel [08:27] martoche: is it my responsibility to monitor the number of open files [08:28] martoche: or should it be node.js that only calls readFile when the limit has not been reached? [08:28] pkrumins: now this is outrageous. [08:28] pkrumins: fs.readSync(fd, buffer, offset, length, position) [08:28] pkrumins: doesn't work [08:28] pkrumins: meaning, changing position always reads the file from position 9 [08:28] pkrumins: meaning, changing position always reads the file from position 0 [08:29] pkrumins: it doesn't seek into file to position `position`. [08:29] pkrumins: instead of having a sweet interface to fseek() this interface is neither intuitive, nor it works. [08:31] pkrumins: very angry [08:31] pkrumins: spent like 3 or 4 hours debugging this problem [08:32] hellp has joined the channel [08:35] _announcer: Twitter: "Hacked on HTML 5 audio, websockets, webworkers and node.js all in the same little project. Good times! The say command also involved. :-)" -- jerememonteau. http://twitter.com/jerememonteau/status/15914528075 [08:38] _announcer: Twitter: "node-github released http://github.com/ajaxorg/node-github A fully asnyc JavaScript wrapper of the GitHub API for nodejs." -- Fabian Jakobs. http://twitter.com/fjakobs/status/15914653175 [08:38] SubStack: neat [08:41] slaskis has joined the channel [08:43] jedschmidt has joined the channel [08:43] xla has joined the channel [08:44] N` has joined the channel [08:49] _announcer: Twitter: "http://blip.pl/s/94050251 pobaw sie node.js" -- andrzejsliwa. http://twitter.com/andrzejsliwa/status/15915047161 [08:50] _announcer: Twitter: "CouchDB http://couchdb.apache.org/ 搭 node.js 玩玩貌似不错" -- Chris. http://twitter.com/Chris_Ys/status/15915089004 [08:52] _announcer: Twitter: "colors.js: get color and style in your nodejs console like what http://github.com/Marak/colors.js" -- Paolo Negri. http://twitter.com/hungryblank/status/15915140005 [08:56] _announcer: Twitter: "@Chris_Ys node.js配mongoDB更好用" -- aki. http://twitter.com/aki_xavier/status/15915275543 [09:03] caolanm has joined the channel [09:03] caolanm: so, what happened to require.paths in node-repl v0.1.97? [09:04] caolanm: seems to be missing, but only in node-repl, not when running scripts with node normally [09:04] caolanm: is that intended? [09:04] caolanm: if so, shouldn't it be just an empty array? [09:05] _announcer: Twitter: "fiddling around with http://nodejs.org/ and http://expressjs.com/ :)" -- Simon. http://twitter.com/shojberg/status/15915630187 [09:06] TomY_ has joined the channel [09:09] SvenDowideit has joined the channel [09:15] saikat: how do you guys do exception handling usually? like if I have a bunch of nested async calls, but if an error happens in any of them, i want a finally block to execute? [09:17] caolanm: saikat: if you're using the standard callbacks and not any of the async libraries around, then you just have to pass the error back up the callbacks until it gets handled [09:18] saikat: so in every callback, you do a test for if (err) ? [09:18] saikat: (i'm using some async libraries that have callbacks of the form function(err, data) [09:18] caolanm: yep [09:19] caolanm: if(err) callback(err, ...) [09:19] caolanm: something along those lines [09:19] javajunky: saikat: yes, its the elephant-in-the-room as it were [09:19] saikat: i see [09:19] javajunky: saikat: When I first came to node, promises existed and made this a much neater pattern.. they're not defacto anymore though :( [09:19] caolanm: if you are using some async libs then many of them have some more convenient ways to handle errors in that situation [09:19] javajunky: there are several libs about that will provide good helpers. [09:20] saikat: how do you pass it up though? so here's a gist: http://gist.github.com/434276 [09:20] saikat: and i want a finally block that makes sure to relinquish the lock [09:20] saikat: would i need a try/finally inside each callback in that case? [09:21] caolanm: well, you want to be sure you catch any errors and pass them back up so you can release the lock, yes [09:22] saikat: but when you say pass them back up [09:22] saikat: what would that literally be in this case? [09:22] saikat: i thought once a callback has executed and passed control to something else, that callback is done? [09:22] caolanm: well in this case it looks fairly simple [09:22] fdmanana has joined the channel [09:23] caolanm: I would separate out the locking from the rest of the code [09:23] saikat: like gunzip.close, i could do if (err) { what goes here? } [09:24] caolanm: yes, in that case you have to release the lock and do no further processing [09:24] caolanm: so no need to pass it up, since your processMessage function doesn't accept a callback [09:24] caolanm: ...it probably should ;) [09:25] saikat: so i'd have something like this in each callback: if (err) //release lock; try { //some code; } catch { // release lock} [09:26] caolanm: yeah, it gets a bit messy... but by structuring your code a little differently you can keep it a bit more DRY by having the locking and release done in another function, so you're not repeating it in every callback [09:26] mAritz has joined the channel [09:26] saikat: oh i see [09:27] caolanm: but you'll still need to do if(err) ... and try etc inside each callback [09:27] caolanm: you might want to look at some of the modules written to help with this sort of thing [09:29] saikat: yeah i will definitely do more of that [09:29] saikat: i've been trying to go through npm some [09:30] saikat: but just so i make sure i'm understanding what you're telling me [09:30] saikat: http://gist.github.com/434276 is that more like what you're suggesting? [09:30] JimBastard has joined the channel [09:30] saikat: (wiht more if (err)'s and more try... catches of course) [09:30] JimBastard: hey fuck uhh [09:30] JimBastard: can someone show me how to properly override sys.puts() ? [09:30] JimBastard: im a little lost in the module cache [09:31] caolanm: saikat: yeah, that's more like it! [09:31] caolanm: :) [09:31] saikat: ok cool, thanks a lot caolanm [09:32] caolanm: one thing: make sure you don't do any processing you don't want to after if(err) ... [09:32] saikat: i would just return right? [09:32] caolanm: atm you'd still do gunzip.close even if gunzip.write failed [09:32] saikat: ah right [09:32] caolanm: yeah, just return from the callback [09:32] caolanm: or add an else to the if(err) [09:33] caolanm: whichever you prefer [09:33] caolanm: saikat: gtg afk for a bit, good luck :) [09:34] saikat: thanks os much for your help caolanm [09:34] saikat: later [09:39] JimBastard: i kinda made an epic lol library ryah [09:39] JimBastard: one of those i stayed up too late things [09:41] JimBastard: just gotta add a picture [09:41] JimBastard: http://github.com/Marak/say.js [09:42] JimBastard: now node js can talk to you [09:42] JimBastard: nodejs is your new best friend! [09:42] JimBastard: even comes in female voices! [09:42] JimBastard: ACTION is going to get moar coffee and polish this and http://github.com/marak/colors.js [09:42] JimBastard: its open source friday mothafuckas [09:42] JimBastard: 2 for one specials [09:42] JimBastard: front page of github by noon [09:45] JimBastard: shit everyone is sleeping. fuuuu tmpvar [09:51] SteveDekorte has joined the channel [09:52] ewdafa has joined the channel [09:56] jetienne: JimBastard: this "say" exe is macos stuff ? [09:56] fdmanana has left the channel [10:01] JimBastard: yeah jetienne its mac os only [10:02] JimBastard: i gotta finish the docs [10:02] JimBastard: it could work on other OS's for sure [10:02] JimBastard: ill put a better error message too i guess [10:03] jetienne: ok [10:08] javajunky: great, now my computer can swear back to me, sweet ;) [10:09] JimBastard: im totally integrating this with our CI [10:09] JimBastard: and putting in a funny message [10:09] JimBastard: and not tell anyone [10:09] JimBastard: <3 node [10:10] JimBastard: can someone with a real terminal help me with a screen shot of the italics and stuff for colors? [10:10] JimBastard: italics and bold and underline dont work here [10:10] JimBastard: need it for the docs [10:13] jetienne: http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockford/dp/0596517742 <- this is still uptodate ? [10:17] b_erb: it think it is more or less [10:17] jetienne: ok thanks [10:17] MattJ has joined the channel [10:17] b_erb: but he had a talk at google where he presents most of the content in short [10:17] b_erb: perhaps you should have a look at this first [10:17] jetienne: http://www.youtube.com/user/GoogleTechTalks#p/u/19/hQVTIJBZook <- im looking at it [10:17] halorgium: hrm, did require.paths dissappear? [10:17] jetienne: b_erb: then it is 20euro + 1 weekend to read it. [10:18] JimBastard: i think so halorgium [10:18] jetienne: halorgium: you got it empty ? i had that [10:18] JimBastard: someone else had that issue [10:18] halorgium: jetienne: it is undefined [10:18] halorgium: ACTION greps git log [10:19] jetienne: halorgium: yep, but still you got the module loaded, correct ? [10:19] jetienne: halorgium: running ubuntu ? [10:19] _announcer: Twitter: ""Node.js: Push is back. If you're a serverside dev, you owe it to yourself to check it out." #wdx" -- Johan O:son B:mann. http://twitter.com/joolss/status/15918406397 [10:20] ben_h has joined the channel [10:20] ben_h: hi all [10:21] halorgium: jetienne: require is a global [10:23] jetienne: halorgium: ? for info, i used NODE_PATH to workit around [10:24] ben_h: i've got a question about scoping across multiple callback levels. in the inner callback, 'inner_sys' is defined but 'sys' isn't (so sys.puts fails). is that expected? http://gist.github.com/434329 [10:24] caolanm: halorgium: node.paths doesn't exist in node-repl but works fine when doing node script.js [10:24] caolanm: thats in 0.1.97 [10:24] caolanm: not sure why [10:24] caolanm: oops! I meant require.paths [10:24] caolanm: not node.paths ...that doesn't exist anywhere ;) [10:24] ben_h: (also, is the way i'm buffering the request using the 'data' callback a good way to handle it?) [10:27] marienz has joined the channel [10:30] steadicat has joined the channel [10:46] pandark_ has joined the channel [10:46] pandark_: Hi [10:47] marienz has joined the channel [10:47] pandark_: I can't get to install npm :o( [10:52] pandark_: or maybe I did.. (?) ^^ [10:56] JimBastard: lol [10:56] JimBastard: http://github.com/Marak/say.js [10:57] JimBastard: check out the readme [10:57] _announcer: Twitter: "#wdx a few people asked me how hard installing Node.js is. 4 steps: 1. Download 2. `./configure` 3. `make` 4. `sudo make install`" -- Tom. http://twitter.com/sh1mmer/status/15919879509 [11:02] martoche has joined the channel [11:04] temp01 has joined the channel [11:05] pandark_: JimBastard: what does it use ?? I can't see it in the code. [11:05] JimBastard: magic [11:05] JimBastard: and mac os [11:05] pandark_: \o/ [11:05] JimBastard: you got mac os? [11:05] frodenius: magic pf [11:05] JimBastard: can you clone and test? [11:05] JimBastard: hey, i got my node console talking to me [11:05] JimBastard: on my studio speakers [11:06] JimBastard: breaking the build just got REAL YO [11:06] JimBastard: im working on colors.js right now, almost done just doing docs [11:07] marienz has joined the channel [11:11] pandark_: JimBastard: I only have linux(es ^^) and one windows pc so I can't use mac software and I don't know the name of common text to speech for mac (espeak for linux, tts -ugly- for windows..) [11:11] JimBastard: get back to me later today [11:11] JimBastard: i bet there will be a solution or at least an idea [11:11] JimBastard: will push say.js in a couple of hours [11:11] JimBastard: still early [11:11] javajunky: JimBastard: say 'foo' [11:11] javajunky: will output foo to the speakers on mac [11:11] JimBastard: lolwut [11:12] javajunky: by default [11:12] JimBastard: in node js [11:12] JimBastard: its [11:12] ben_h: i.e. /usr/bin/say [11:12] JimBastard: say.speak('foo') [11:12] JimBastard: say.voice('Princess') [11:12] _announcer: Twitter: "@robertbrook we just started. luckily most of node is implemented in JS so there isn't that much C++ to replace. we'll see though" -- Charles Lowell. http://twitter.com/cowboyd/status/15920537488 [11:12] JimBastard: javajunky: did you peep the lib? [11:12] javajunky: JimBastard: I get that, I"m just saying that if you wanted to know the binary name its /usr/bin/say in macosx ;) [11:12] javajunky: nahh, tied up on some graphing at the mo [11:13] JimBastard: you should look at the readme will take 9 seconds [11:13] JimBastard: http://github.com/marak/say.js [11:14] javajunky: JimBastard: k, looks like it should work outta the box [11:15] javajunky: indeed it does [11:15] javajunky: the async is a nice touch [11:16] awenkhh has joined the channel [11:16] JimBastard: hee hee [11:16] JimBastard: did you play it? [11:16] JimBastard: WHATS UP DOG [11:16] javajunky: node example.js yarp [11:16] JimBastard: :-D [11:16] javajunky: ;) [11:16] JimBastard: im gonna fuck with our devs in a few hours [11:16] JimBastard: i cant wait to go to work [11:17] javajunky: the best bit is if you can ssh onto their machines whilst they've headphones in listening to music, always a blast on macs [11:17] javajunky: 'make cj a coffee' ….. mmm submliminal coffee making [11:17] JimBastard: JimBastard, how did you get the continuous integration server to do text to speech? Ummm, I used some javascript? #bastardfacts [11:17] JimBastard: ^_^ [11:22] stepheneb has joined the channel [11:24] JimBastard: hey javajunky can i bug you for a favor? can you run the example for this on a proper terminal and take a SS ? [11:24] JimBastard: http://github.com/Marak/colors.js [11:24] JimBastard: i dont know how i can make italics and underline work on my computer [11:24] JimBastard: ill give you 14 internet dollars [11:25] javajunky: I don't get italics, but I do get underlines [11:25] javajunky: still want a ss [11:25] javajunky: ? [11:25] JimBastard: fuck [11:25] JimBastard: whats your terminal? [11:25] JimBastard: i dont fully understand how this works [11:25] JimBastard: i stole most of the code from cloudhead [11:26] javajunky: macosx 'terminal' running bash [11:26] JimBastard: naaah [11:26] JimBastard: i need a linus [11:26] JimBastard: ubuntu [11:26] javajunky: fine bear with me [11:26] JimBastard: beaaarrrssss [11:27] javajunky: oh fuckity I've not got node on my linux box, and I'm tied up on stuff, sorry [11:29] JimBastard: aight thanks anyway [11:29] JimBastard: ill try it on the ssh [11:30] JimBastard: wait [11:30] JimBastard: oops [11:30] JimBastard: that wont work [11:30] JimBastard: ahaha [11:30] JimBastard: fail [11:30] JimBastard: fuck [11:30] JimBastard: can anyone help i wanna finish this shit [11:30] femto has joined the channel [11:31] JimBastard: i just need the the screen shot [11:32] dks has joined the channel [11:32] dks has left the channel [11:32] dks has joined the channel [11:33] marienz has joined the channel [11:33] javajunky: JimBastard: what linux client does it use ? [11:33] javajunky: epol_say ? [11:33] JimBastard: ? [11:33] jbaron has joined the channel [11:33] JimBastard: is there a linux say client? [11:33] JimBastard: i can haz patch? [11:33] javajunky: arghh now I'm confused, I thought you were saying before its only for linux and not mac.. [11:33] JimBastard: no [11:33] JimBastard: its open source friday yo [11:33] JimBastard: two projects [11:33] JimBastard: say.js [11:33] JimBastard: and colors.js [11:34] javajunky: what platform is say for ;) [11:34] JimBastard: i want a nice screen shot for colors.js and the mac os terminal can't do all the styles, so it doesnt render italtic for instance [11:34] JimBastard: say is pretty much done for now [11:34] JimBastard: say.js is for mac os [11:34] javajunky: well I'll do a node build on my linux box, but it'll take a while as I met get dragged for a meetting [11:35] JimBastard: if you can post an imgur that would be aweomse [11:35] JimBastard: ill be up and down for a bit [11:35] JimBastard: www.imgur.com [11:36] javajunky: sob sudo apt-get install gcc .. I only rebuild this machine last week [11:36] javajunky: s/gcc/g++/ [11:38] javajunky: goddamnit I forget how awesoemly fast this box is [11:40] rnewson has joined the channel [11:41] javajunky: JimBastard: yeah, italics don't work on linux either [11:41] javajunky: what's meant to be in italics ? [11:43] JimBastard: ummm [11:43] JimBastard: sys.puts('So '.bold + 'are'.underline + ' styles! '.italic + 'inverse'.inverse); [11:43] JimBastard: could be bad code [11:43] JimBastard: 'italic' : [3, 23], [11:43] bencc has joined the channel [11:43] javajunky: styles! seems pretty norm [11:43] bencc: is it possible to pass messages between two requests? [11:44] javajunky: bencc: yes throw a variable in a scope visible to both [11:44] javajunky: 'not widely supported' ;) [11:45] JimBastard: yeah hrmmm [11:45] aglemann has joined the channel [11:45] javajunky: whats the ,23 bit ? [11:45] JimBastard: javajunky: what about bold [11:45] JimBastard: no clue [11:45] JimBastard: im not very good with the internet [11:45] javajunky: kinda predates the internet this [11:46] JimBastard: cloudhead let me steal the code from some of his shit [11:46] JimBastard: im taking his awesome scraps [11:46] JimBastard: lol [11:46] JimBastard: apparently it was below his godly status to make a seperate project [11:46] JimBastard: this, i agree with [11:46] bencc: javajunky: so there is no message passing like in erlang? [11:46] javajunky: Chains looks bold ish is it [11:47] javajunky: yeah, bold italic (not) and underlined red [11:47] javajunky: the codes look right to me [11:48] JimBastard: you wanna take the SS ? [11:48] JimBastard: fuck it [11:48] javajunky: might as well do it on a mac mate looks the same [11:49] _announcer: Twitter: "@kurokikaze Ждём кусок какого-нибудь хитрозапутанного клубка с кодом. Если оно в #nodejs." -- ramainen. http://twitter.com/ramainen/status/15922228209 [11:50] JimBastard: yeah it did work [11:50] JimBastard: fuck [11:50] JimBastard: just cant see it [11:50] JimBastard: aight doing it up [11:50] JimBastard: screw italic [11:50] javajunky: so you want me to ss it [11:52] jbrantly has joined the channel [11:52] javajunky: well whatever http://github.com/Marak/colors.js.git [11:53] javajunky: http://imgur.com/NK4Pn.png rather ;) [11:56] jbaron: is it ok to distributed a patched version of node with ones libraries? [12:01] JimBastard: sorry javajunky [12:01] JimBastard: http://github.com/marak/colors.js [12:01] JimBastard: you too slow! [12:01] JimBastard: jbaron: sup? [12:01] javajunky: bothers me not ;) [12:01] JimBastard: you can do anything with node [12:02] JimBastard: i heard the flux-capacitor.cc is almost ready [12:02] javajunky: JimBastard: man that looks crap, couldn't you do italic ? [12:02] javajunky: :P [12:02] _announcer: Twitter: "JS #Collaboration with #Connect for node.js http://bit.ly/d1var8 Amazingly simple !" -- Yohann Monnier. http://twitter.com/yohannmonnier/status/15922844029 [12:02] JimBastard: ryah still working on the plutonium streams [12:02] JimBastard: twitter time i guess ugghh [12:03] jbaron: Jimbastard: I have some code that depends on some fixes in nodejs. So I though I just package a patched version of node with my code [12:03] _announcer: Twitter: "get colors in your #nodejs console like what. http://github.com/marak/colors.js #opensourcefridays #node.js #javascript #nycjs" -- marak squires. http://twitter.com/maraksquires/status/15922931324 [12:04] JimBastard: ohh what [12:04] JimBastard: hi [12:04] derbumi has joined the channel [12:05] _announcer: Twitter: "say.js - text to speech in #nodejs. my #node.js console talks to me now. http://github.com/Marak/say.js #nycjs #javascript" -- marak squires. http://twitter.com/maraksquires/status/15923014414 [12:05] JimBastard: yeaaaah [12:11] _announcer: Twitter: "http://ow.ly/1X9Z8 about #nodejs: "It is much faster than Ruby, Python, or Perl." really???" -- Eldar Djafarov. http://twitter.com/edjafarov/status/15923316907 [12:14] _announcer: Twitter: "Connect: Great middleware for node.js http://bit.ly/d2Q9gg" -- Mario Volke. http://twitter.com/webholics/status/15923475712 [12:15] bencc has left the channel [12:16] kriszyp has joined the channel [12:18] javajunky: I don't know why but I dislike stackoverflow :( .. 'I'm a child who needs to be told something because I'm too lazy to figure it out' [12:18] javajunky: I dislike the fact that it shards specific knowledge .. I must be getting old [12:20] stepheneb has joined the channel [12:22] JimBastard: sigh [12:22] JimBastard: social media push done [12:22] JimBastard: now i get to spam all my friends with links all day [12:23] JimBastard: two for one specials on opensource fridays rules #bastardfacts [12:23] dji has joined the channel [12:24] dji has joined the channel [12:24] _announcer: Twitter: "gm, a GraphicsMagick module for #nodejs http://github.com/aheckmann/gm" -- aaron heckmann. http://twitter.com/aaronheckmann/status/15924024591 [12:26] JAAulde has joined the channel [12:33] JimBastard: fun facts say.speak calls are asynchronous, lol ^_^ [12:33] _announcer: Twitter: "Connect - Rack for Node.js awesome! - http://bit.ly/coaX2K" -- Piotr Solnica. http://twitter.com/_solnic_/status/15924530829 [12:33] JimBastard: asynchronous TTS harmonies here we come [12:35] _announcer: Twitter: "TJ Holowaychuk (Connect - Middleware For NodeJS) http://ow.ly/17Hei3" -- Javascript News. http://twitter.com/del_javascript/status/15924655806 [12:36] Ori_P has joined the channel [12:36] smtlaissezfaire has joined the channel [12:41] jbrantly has joined the channel [12:43] felixge has joined the channel [12:44] felixge: how do you guys do unit tests for functions that use core modules or core JS? [12:44] micheil: :/ [12:44] MattJ: :/ [12:44] micheil: core modules, assert.js and node's testing runner [12:44] felixge: micheil: well, I don't want any core functions to be called, I want to mock them [12:44] micheil: iooooh.. [12:44] micheil: right [12:45] felixge: I mean I can do it by putting a thin wrapper in between [12:45] micheil: probably do a closure and mock them [12:45] felixge: which seems nicer than hacking the module system [12:45] felixge: or global manipulation [12:45] felixge: but you'd always have to do: this._fs [12:45] micheil: yeah [12:45] felixge: rather than just fs [12:45] micheil: probably hack the module system them [12:45] micheil: *then [12:46] felixge: micheil: that won't solve all problems [12:46] felixge: right now I'm writing a lot of code using timeouts [12:46] felixge: so I need to mock setTimeout() [12:46] micheil: or, you use async testing [12:46] felixge: micheil: no I/O should be performed [12:46] felixge: I'll consider timeouts I/O since they go through the event loop [12:47] micheil: okay, now the answer is: no idea. [12:47] felixge: ;) [12:47] felixge: ok [12:47] felixge: ACTION is a little crazy about testing [12:47] smtlaissezfaire: felixge: I end up creating global stubs for all of the IO I'm doing, at least to stdout & stdin. [12:48] felixge: smtlaissezfaire: so all the core modules you access are in the global namespace? [12:48] smtlaissezfaire: In ndb, I've got ndb.Helpers.puts, ndb.Helpers.print, etc. - they bind at run time to the normal stdout functions, but when testing I stub them. [12:48] stepheneb has joined the channel [12:48] felixge: smtlaissezfaire: makes sense [12:49] JimBastard: hey felixge [12:49] smtlaissezfaire: felixge: They are stored in a global object. So Instead of sys.puts, I'd call ndb.Helpers.puts, etc. ndb is doing a bunch of that. [12:49] felixge: smtlaissezfaire: is ndb a global variable? [12:49] felixge: JimBastard: heya [12:49] JimBastard: http://github.com/Marak/say.js [12:49] JimBastard: i did a funny thing [12:49] JimBastard: again [12:49] JimBastard: lol [12:49] smtlaissezfaire: felixge - yeah. why? [12:50] smtlaissezfaire: Are you noticing your test stubs overwriting each other? [12:50] felixge: JimBastard: hah, I sometimes have great fun with that tool via SSH and unsuspicious friends & co-workers [12:50] felixge: smtlaissezfaire: no, but I may want to have different stubs for different objects [12:50] felixge: smtlaissezfaire: so one base stub sytem might not cut it [12:50] felixge: hm [12:51] felixge: but I guess I don't have the problem in reality [12:51] smtlaissezfaire: That was one of the reasons I wanted a force reload, not just a require - because of the global object issue. And Object.create doesn't do any recurisve copying. [12:51] felixge: it's only the super-global I'd be unhappy about [12:52] felixge: I think it would be super useful if I could do this: [12:52] felixge: require('my-module', {foo: 'bar'}) [12:52] JimBastard: felixge: say.js is async [12:52] felixge: and foo would be a local variable in the required module [12:52] JimBastard: you should run the example file that ships with it [12:52] JimBastard: kinda epic [12:52] felixge: JimBastard: :) [12:53] felixge: JimBastard: haha [12:53] felixge: JimBastard: very funny [12:53] JimBastard: hee hee [12:53] JimBastard: retweet that shit [12:53] JimBastard: i wanna get me some frontpage action [12:54] JimBastard: ;-) [12:54] smtlaissezfaire: JimBastard: how was the meetup last night? [12:54] felixge: JimBastard: attention who.. [12:54] felixge: :) [12:54] smtlaissezfaire: Who presented? [12:54] JimBastard: felixge: im maraksquires on the twitter [12:54] JimBastard: smtlaissezfaire: lots of people it was nuts. everyone had kick ass projects too [12:55] JimBastard: spritefast and newsblur were sick [12:55] felixge: JimBastard: I know that, this is the internet - I know everybody [12:55] felixge: :) [12:55] JimBastard: spritefast should get released in the next day or so [12:55] JimBastard: ohh i dunno what you were asking me then [12:55] JimBastard: felixge [12:56] felixge: JimBastard: I didn't ask anything, I merely called you something :) [12:56] JimBastard: ohh [12:56] smtlaissezfaire: JimBastard: Is that for doing css sprites? [12:56] JimBastard: yeah [12:56] derbumi_ has joined the channel [12:56] JimBastard: yeah smtlaissezfaire , 100% js [12:56] JimBastard: browser [12:56] JimBastard: super slick interface [12:56] smtlaissezfaire: What was the other project: newsblur ? [12:57] JimBastard: .com [12:57] JimBastard: fuck i either gotta go to work or sleep [12:57] smtlaissezfaire: Ha. Me too. See you later JimBastard. [13:00] aglemann has joined the channel [13:00] jherdman has joined the channel [13:03] behmann has joined the channel [13:09] _announcer: Twitter: "Took the freedom to push node-expat, node-base64 and node-xmpp to #npmjs, package manager for #nodejs. Lower barriers to use them!" -- Astro. http://twitter.com/astro1138/status/15926640537 [13:10] _announcer: Twitter: "Ah, @dronnikov now has an account, author of various middleware for NodeJS/JSGI (http://bit.ly/bbRnV8 & http://bit.ly/cdB6j9)" -- kriszyp. http://twitter.com/kriszyp/status/15926711605 [13:17] _announcer: Twitter: "Connect для #nodejs - интересная штуковина. Т.е. вроде назначение понятно, но пока не вижу как бы я её применял. Ruby Rack не пользовался :)" -- Serge Shirokov. http://twitter.com/kurokikaze/status/15927182464 [13:28] keyvan has joined the channel [13:30] _announcer: Twitter: "Finally! Connect: Middleware for #node.js - http://tinyurl.com/2426a66" -- Ryan Rose. http://twitter.com/rsrose/status/15927994800 [13:33] _announcer: Twitter: "Последние обновления в git #nodejs великолепны. Теперь для FreeBSD-64 и x86, Cygwin всё ставится из коробки." -- ramainen. http://twitter.com/ramainen/status/15928144837 [13:34] rtl has joined the channel [13:35] rnewson has joined the channel [13:37] kocolosk has joined the channel [13:38] ryan_gahl has joined the channel [13:38] yaOwner has joined the channel [13:39] derbumi_ has joined the channel [13:39] creationix has joined the channel [13:40] maushu has joined the channel [13:42] jeffreyt has joined the channel [13:47] aglemann has joined the channel [13:51] ryan_gahl: ryah: FYI #cassandra peeps said rudimentary avro support exists in trunk, is a WIP. yay :) [13:52] voodootikigod: ryah: yo [13:53] micheil: hey voodootikigod [13:53] voodootikigod: hey! [13:54] o_o has joined the channel [13:54] tav has joined the channel [13:54] micheil: sup? [13:54] voodootikigod: not much [13:54] voodootikigod: just plowing away [13:54] voodootikigod: getting jsconf vids out [13:54] voodootikigod: getting work done [13:55] micheil: cool, cool [13:55] micheil: I've actually been following a long with the videos via itunes [13:56] voodootikigod: how things going with you [13:56] micheil: pretty good, I've got an idea for a realign/recoloring of my site. [13:56] micheil: also have a few ideas for the websocket-server and ideocase.com [13:56] creationix: voodootikigod: it's still quite early here. I'm usually the first at work [13:56] creationix: did you get ryah's video posted [13:56] voodootikigod: posting today [13:57] creationix: awesome! [13:57] voodootikigod: thats why i was pinging him [13:57] ceej: anyone interested in the world cup http://www.justin.tv/2010emer just about to start :) [13:57] voodootikigod: to give him a chance to preview [13:58] voodootikigod: creationix: wait... [13:58] voodootikigod: creationix: early here.. you working at joyent? [13:58] ceej: creationix: how's it going any word from heroku? [13:58] creationix: no, but I am in california [13:58] sanderjd has joined the channel [13:58] voodootikigod: ohhh ok [13:59] creationix: I'm at ExtJS [13:59] voodootikigod: I thought you were txjs [13:59] voodootikigod: err [13:59] voodootikigod: tx [13:59] creationix: voodootikigod: I just moved about a month ago [13:59] voodootikigod: fingers, do what i think!!!! [13:59] voodootikigod: cool [13:59] creationix: really messed my plans for swdc and txjs [13:59] o_o has joined the channel [13:59] voodootikigod: extjs man, they are picking up people left and right [13:59] creationix: I had to get a whole new set of plane tickets [13:59] voodootikigod: you just picked up dmitry as well [13:59] creationix: yep [13:59] creationix: extjs is paying me to write node stuff so I'm happy [14:00] creationix: ceej: no, nothing yet [14:00] ceej: ACTION from england, lived in Los Angeles and now in Dallas :) [14:00] creationix: ceej: looking for a house, I know a nice one for sale ;) [14:00] voodootikigod: nice [14:00] tav has joined the channel [14:01] ceej: I just bought one, funny you should say that :) Won't be built until september [14:01] creationix: ceej: what part of dallas? [14:01] ceej: Well it's a little bit out... McKinney [14:02] creationix: nice, I bought my car from a dealer in McKinney [14:02] creationix: I was in Richardson for the last 4 years [14:02] micheil: voodootikigod: btw, jsconflive is ftw. [14:02] ceej: 35+ mins away from Dallas..... Ye it's a nice chill place. What made you move to CA? Job? [14:02] voodootikigod: thanks [14:03] voodootikigod: we have been working on them for a couple weeks now [14:03] ceej: what part of CA? [14:03] voodootikigod: so we cna be regular despite baby birthing over the next couple weeks [14:03] creationix: ceej: yeah, Palo Alto. How could I turn down working on node full-time [14:03] hojberg has joined the channel [14:04] joshbuddy has joined the channel [14:04] ceej: creationix: That's pretty sweet, I'm trying to convince my business partner to switch from php/codeigniter to node/express (connect) but heroku needs to fix a few issues [14:04] hojberg: do you guys know if there is some kind of configurable limit to what size files must be when served with the nodejs http lib ? i have this weird issue where images are broken off around 150kb (the image are like 400kb) - can't figure out why this happends [14:05] creationix: hojberg: what are you using to serve files? [14:05] joshbuddy_ has joined the channel [14:05] hojberg: i am making a small webapp with express [14:05] creationix: since you write the file server itself when using node it's completely comfigurable [14:06] hojberg: so its just an image over http [14:06] creationix: hmm, I hear express has trouble with largish static files [14:06] hojberg: aha [14:06] hojberg: that would explain it [14:06] creationix: hojberg: have you looked at COnnect yet [14:06] ceej: I was really planning on making a simple wordpress app (opensource) this weekend to show it off but it doesn't look like that's going to happen if things don't quite work yet..... [14:06] javajunky: a commit went in last night to express to improve the static serving [14:06] javajunky: but I'm serving bigger than that statically (well at least once, its behind a cache) [14:07] hojberg: creationix well just shortly. is it a express replacement or something express will use ? (like sinatra uses rack) [14:07] softdrink has joined the channel [14:07] ncb000gt has joined the channel [14:07] ceej: creationix: ye i hear that [14:07] micheil: voodootikigod: wow. those are big damn videos.. ~0.8GB's for some [14:07] javajunky: hojberg: tj has suggested that he will port express to connect, 'probably' fwiw [14:07] ceej: too* [14:07] voodootikigod: for which [14:07] voodootikigod: dmitrys? [14:07] creationix: hojberg: it has most the functionality of express (at least all the lower-level stuff) [14:07] voodootikigod: yea [14:08] ceej: hojberg: ye express is eventually going to be ported to connect [14:08] ceej: built on top of it that is [14:08] hojberg: cool [14:08] creationix: Connect it like rack, but actually does a lot more [14:08] hojberg: hm must check it out [14:08] creationix: it's already got a sinatra-like router built-in [14:08] ceej: (I'm hoping for it ported sooner rather than later) :P [14:09] creationix: and tj just added a "rest" endpoint that makes serving RESTful resources easy [14:09] javajunky: I might spend some time tonight looking at porting express-auth to connect, need to get my head around it (and shake off my in-built fear of Ext licensing ) [14:09] creationix: javajunky: Connect is safe, I promise [14:09] ceej: creationix: I have a few new projects coming up, I'd love to use express on top of connect, I'm sure I'd be able to give you guys a lot of feed back as my team will be working with it every day [14:09] javajunky: creationix: yeah I know, everyone says so, perhaps I'm just a wuss [14:10] creationix: the only danger is if I finally find a better abstraction and rewrite the whole connect engine [14:10] creationix: but if that happens I'll probably make a new branch or include an adaptor [14:10] javajunky: creationix: ahh but thats the node way ;) [14:10] creationix: ceej: is is just express syntax you want or feature parity [14:11] creationix: because we're getting close to the second I think [14:11] mape: creationix: Nice work with the Connect scaling [14:11] creationix: mape: yeah you should try it on your quad beast [14:11] creationix: I was getting 12k reqs/sec on my macbook [14:11] ryan_gahl has joined the channel [14:11] _announcer: Twitter: "И да, я ставлю Оперу (для тестирования Socket.IO) #nodejs" -- Serge Shirokov. http://twitter.com/kurokikaze/status/15930874211 [14:11] mape: it is checked in and there is a test? [14:12] robinduckett: fuck centos and it's lack of glibc2.7 [14:12] creationix: it's checked in, but no test yet [14:12] robinduckett: that is all [14:12] ncb000gt: robinduckett: LOL [14:12] ncb000gt: you could leave it with centos [14:12] robinduckett: hah [14:12] creationix: mape: just a "-n" command line option on the "connect" executable [14:12] robinduckett: you know what [14:12] ceej: creationix: just all the features (including views, i like using ejs) I actually built a lot on top of express the current one to work more like codeigniter so if connect had all the features it would probably be easier for me to build a framework for us around it [14:12] kriszyp: so the possibility of a different type of abstraction seems like another reason for connect to support the middleware "type" notion, creationix [14:12] robinduckett: i'mma upgrade glibc and recompile the kernel [14:12] robinduckett: fuck them and their shitty distro [14:12] creationix: kriszyp: exactely [14:12] dji has joined the channel [14:13] Aria has joined the channel [14:13] ncb000gt: lol [14:13] robinduckett: try to tell me what I can and can't do [14:13] mape: creationix: hm k have the code you tested on so it can be compared? [14:13] robinduckett: brb [14:13] mape: Btw how often does V8 release performance upgrades? Is it incremental or do they do big pushes every now and then? [14:14] bradleymeck has joined the channel [14:14] creationix: mape, just get latest connect and latest node (v0.1.97 isn't new enough) and then go into one of the examples, multitouch is pretty standalone [14:14] creationix: and then do "connect -n 4 start" [14:14] mape: creationix: yeah compiling it as we speak [14:14] ceej: creationix: so you think you'll be putting all those features into connect? [14:15] creationix: ceej: I think so, maybe not built-in, but at least as pluggable modules [14:15] creationix: kriszyp: after spending a few days and not being able to find something that wasn't worse than both current connect and jsgi I gave up for now [14:16] creationix: I'll probably just add adaptors for fab and jsgi and leave connect's interface super bare-bones [14:16] kriszyp: connect's request and response are basically just raw node request and response objects? [14:16] jakehow has joined the channel [14:16] creationix: kriszyp: yep [14:17] mape: creationix: http://gist.github.com/434521 [14:17] mape: That seems strange though? [14:17] ceej: creationix: any best guess etc? [14:17] ceej: eta* [14:18] creationix: mape: add keepalive [14:19] mape: creationix: where in the chain? [14:19] bradleymeck: was working with v8-debug.h, http://gist.github.com/434441 , silent failure due to c++??? [14:19] creationix: mape, to ab [14:19] creationix: "-k" [14:19] mape: oh [14:19] mape: Requests per second: 4931.71 [#/sec] (mean) [14:19] creationix: mape: were you not using keepalive before when you got 23k reqs? [14:19] mape: Nope [14:20] creationix: also make sure you're not running out of ports, if it pauses and the cpu is idle then it's waiting for ports to free up [14:21] mape: Shouldn't be now when it worked fine before? [14:21] creationix: mape: which example are you using? multitouch? [14:21] mape: yeah [14:21] creationix: that one just serves a small static html file as the "/" path [14:21] kriszyp: with the new fd passing capabilities in node, is there a way to pass an fd for another child process so that two child processes can communicate directly with each other? [14:22] creationix: kriszyp: I would think so [14:22] creationix: fd's have to pass over unix sockets though, pipes don't work [14:23] creationix: ceej: we should meet up while i'm in Texas [14:24] creationix: I'll get in about 10pm tonight and be there for about 10 days [14:24] mape: creationix: but yeah it doesn't peak the cpu, but it is up there [14:24] mape: http://pic.thefarm.se/mape/20100611162052/ [14:24] creationix: mape: don't know, maybe there is something else linux doesn't like [14:25] creationix: on my mac I get twice the performance with two workers than with no workers (single process) [14:25] creationix: mape what do you get without the "-n" options [14:26] creationix: also I run on a different port each run so ab doesn't pause and I don't have to wait 60 seconds between tests [14:26] mape: Requests per second: 4855.36 [#/sec] (mean) [14:26] mape: not using -n 4 on connect [14:26] mape: perhaps the logging is slowing it down? [14:26] creationix: ahh, probably [14:26] creationix: comment out the log middleware [14:27] mape: Requests per second: 12305.50 [#/sec] (mean) [14:27] ceej: creationix: how come you're back in Dallas for the next 10 days? [14:28] creationix: ceej: to get my house ready to sell [14:28] creationix: not much sense paying a mortgage if I live in CA [14:28] felixge has joined the channel [14:28] ceej: very true [14:28] creationix: mape: that's more like it [14:31] devtime has joined the channel [14:31] creationix: keep in mind this is a real app (somewhat) so it will be never as fast as raw bare-bones benchmark code [14:31] mape: creationix: Requests per second: 18206.68 [#/sec] (mean) [14:32] utgo has joined the channel [14:32] mape: seems I'm better of running the bench on my i7 rather then on the same box, figured the network would choke but didn't really [14:32] mape: So yeah, it is fast ;) [14:32] mape: That is without log [14:32] creationix: nice [14:32] frodenius: what are you benchmarking? [14:32] Aikar: any idea when .2 will be out? i was told i should prolly wait until then before starting node [14:33] mape: creationix: Requests per second: 27001.30 [#/sec] (mean) [14:33] mape: with -k [14:33] Aria: Who told you that, Aikar? [14:33] Aikar: iono, some op in here [14:33] Aria: The API is shifting a little bit, but nothing reading the release notes won't illuminate. [14:33] Aikar: said stuffs changing in .2 [14:33] Aria: Heh, 0.1.9x are the API leading up to 0.2, so ... [14:34] creationix: 0.2.0 is just the current node once the bugs are fixed [14:34] creationix: but most the bugs don't affect everyone [14:34] Aria: I wouldn't fret it. [14:34] bpot has joined the channel [14:34] _announcer: Twitter: "@ziobrando it's one of the next big things. thinking also about node.js & event sourcing..." -- Antonio Terreno. http://twitter.com/javame/status/15932470689 [14:35] Aikar: i currently have an app im making (websocket server) in php, and im really wanting to switch it to be node instead as i know php's gonna hit performance issues quick with socket servers but right now its all in dev mode [14:35] creationix: mape: 27K, and that's over a lan? [14:35] Aikar: and since ive wrote such a huge client side codebase in JS, would be nice to do the server in JS too [14:36] frode has joined the channel [14:36] mape: creationix: yeah [14:36] creationix: nice, I think that's a new node record [14:37] mape: ACTION throws hands into the air [14:38] kevwil has joined the channel [14:38] mape: creationix: Requests per second: 34232.74 [#/sec] (mean) [14:39] mape: Guess I should just keep trying with ab ;) [14:39] creationix: woah, what changed this time? [14:39] mape: not sure.. [14:39] mape: http://gist.github.com/434549 [14:40] creationix: nice, that some serious concurrency too [14:41] creationix: mape, I'll tweet that, don't change the gist [14:41] mape: creationix: want me to bump the concurrency to 1000 ? [14:42] creationix: you can try, but I don't think it will speed things up [14:42] creationix: maybe 400 [14:42] mape: Yeah looses around 4k req [14:42] mape: Seems the sweet spot is around 200 [14:43] creationix: sounds right, I get best with about 50/core [14:43] mape: yeah [14:44] _announcer: Twitter: "@javame Didn't know about node.js ...now you've got my head spinning..." -- ziobrando. http://twitter.com/ziobrando/status/15933152893 [14:46] mape: There, added some sys info as well [14:46] creationix: perfect [14:47] _announcer: Twitter: "Connect app on quad-core machine over a real network connection. 35231.05 Reqs/sec http://bit.ly/aCWnd5 #nodejs #connect" -- Tim Caswell. http://twitter.com/creationix/status/15933354129 [14:47] mape: perhaps I should add that it doesn't use log as well? [14:47] mitkok has joined the channel [14:48] creationix: yeah, that's fine [14:48] creationix: I'll have to speed up log sometime [14:48] creationix: I know tj started on it but couldn't help it much [14:49] mape: Well it isn't blocking now? [14:52] ph^ has joined the channel [14:52] creationix: I think logs go over stderr which is sync in node [14:52] creationix: maybe logs should go over the stdout stream instead [14:53] steadicat has joined the channel [14:54] creationix: oh good, _announcer doesn't pick up retwees [14:57] javajunky: thankfully [14:57] mape: hehe [14:57] javajunky: sequential logs is useful, even in an async world [14:57] siculars has joined the channel [14:57] stevendavie has joined the channel [14:58] creationix: javajunky: well streams are sequential, but yeah under high load they might as well be sync I think [15:00] JimBastard has joined the channel [15:01] JimBastard has joined the channel [15:01] JimBastard: zzzzz [15:01] charlesjolley- has joined the channel [15:01] JimBastard: hey voodootikigod [15:01] _announcer: Twitter: "Сраный "Twitter is over capacity." не дает спокойно доделать OAuth в NodeJS!" -- Boo. http://twitter.com/BooBSD/status/15934384654 [15:02] _announcer: Twitter: "囧啊,某node.js写的静态服务器,达到35231.05 reqs/sec..." -- aki. http://twitter.com/aki_xavier/status/15934414446 [15:06] mitkok has joined the channel [15:07] micheil: mape: 35,000 Req/sec, bloody hell! [15:07] JimBastard: yeah man [15:08] JimBastard: lets here what those snap motherfuckers have to say now [15:08] ncb000gt: it's hawt [15:08] JimBastard: WHERE IS YOUR GOD [15:08] JimBastard: NODE OWNS YOUR FACE [15:08] ncb000gt: lol [15:08] JimBastard: ncb000gt: did you see my latest monstrosity [15:08] JimBastard: http://github.com/Marak/say.js [15:09] JimBastard: i also wrapped up the color lib from http-console into a separate project http://github.com/Marak/colors.js [15:09] ncb000gt: LOL, nice! [15:09] ncb000gt: Tho it requires osx...booo [15:09] JimBastard: yeah man [15:09] JimBastard: i think i can get it to work on other OS [15:09] ncb000gt: Might have to port to linux [15:09] JimBastard: just depends if they have a TTS client native [15:09] ncb000gt: yea [15:10] JimBastard: which linux distros have a built in tts? [15:10] JimBastard: i <3 tts [15:10] JimBastard: say.speak('booobs'); [15:10] JimBastard: all day [15:10] ncb000gt: kde has one [15:10] ncb000gt: kttsd [15:11] JimBastard: i dont really have a testing env [15:11] JimBastard: but i could defintely write all the rest of the code [15:12] JimBastard: if you give me the man file [15:12] mape: micheil: It is quite a bit of requests [15:12] micheil: mape: I take it it's currently down? [15:12] mape: micheil: no? http://mape.me:9999/ [15:13] mape: doesn't work ? [15:16] ncb000gt: JimBastard: it's not a manpage but http://accessibility.kde.org/developer/kttsd/ [15:16] JimBastard: yeah i need a dev env too [15:16] JimBastard: or something who has it [15:16] JimBastard: does node run on kde? i assume ya? [15:16] ncb000gt: I can install it on my magine [15:16] ncb000gt: err machine* [15:16] JimBastard: cool, im pretty spent on this for the day [15:17] ncb000gt: I'm runing linux and have the gnome and kde libs [15:17] JimBastard: let it float for a few days and we can come back to this ill bug ya then [15:17] JimBastard: or maybe just forget about the whole thing [15:17] ncb000gt: sounds good to me [15:17] ncb000gt: haha [15:17] micheil: ah, here we go mape [15:18] sanderjd has joined the channel [15:23] ajpiano has joined the channel [15:24] mscdex: JimBastard: why not make say.js work with festival on Linux? ;-) [15:26] JimBastard: mscdex: you should appreciate i didnt even know mac os had a "say" command until about 8 hours ago [15:26] JimBastard: ill make it support anything just let me know whats up [15:26] mscdex: heh [15:26] JimBastard: +10 points if you make a support issue [15:26] JimBastard: with a clue of where to find docs [15:26] zaach has joined the channel [15:27] bradleymeck: JimBastard, might want to merge in node-terminal w/ yours if you want some other fluff like concealed chars [15:27] voodootikigod_ has joined the channel [15:28] JimBastard: bradleymeck: yeah i saw your message on the mailing list [15:28] JimBastard: bradleymeck: i had to cut some of the features short to get the release out. theres a bunch of more terminal stuff [15:28] JimBastard: im pretty noobish with those codes, was looking them up [15:28] bradleymeck: cool [15:28] JimBastard: voodootikigod_ [15:28] voodootikigod_: o [15:28] JimBastard: you alive [15:28] JimBastard: http://github.com/Marak/say.js [15:29] voodootikigod_: i saw [15:29] JimBastard: say.speak('heeeeeehhhh') [15:29] voodootikigod_: you are crazy man [15:29] JimBastard: also, its async [15:29] voodootikigod_: i hooked it up to tweetstreamer [15:29] voodootikigod_: and it reads me whenever i get a dm [15:29] JimBastard: lol [15:29] JimBastard: really? [15:29] tedx has joined the channel [15:29] voodootikigod_: yea [15:29] voodootikigod_: ACTION is fast [15:29] JimBastard: dude, blog post that shit [15:30] voodootikigod_: dude if i had time [15:30] voodootikigod_: i would [15:30] voodootikigod_: i might get it out tonight [15:30] voodootikigod_: its a piece of cake [15:30] JimBastard: hee hee <3 [15:30] JimBastard: ill buy you a quart of rum [15:30] JimBastard: i'd say a beer, but i know better [15:30] aglemann has joined the channel [15:30] voodootikigod_: beer is so much better :) [15:30] JimBastard: perhaps both? [15:31] blowery: sounds like a frat party [15:31] brianmario has joined the channel [15:31] JimBastard: yo blowery [15:31] blowery: yo yo [15:31] JimBastard: there aint no party like a javascript party caus a javascript party got voodootikigod_ [15:31] voodootikigod_: hahahah [15:31] blowery: ACTION dm's voodootikigod_ "you need to stop masturbating kent" [15:31] voodootikigod_: what [15:32] blowery: though real genius references may escape this crowd [15:32] blowery: if you have a computer speaking any dm sent to you, the temptation to send you silly things is high [15:33] voodootikigod_: i will push it to github in an hour or so [15:33] voodootikigod_: that work [15:33] gwoo has joined the channel [15:35] blowery: sweet [15:38] ryan_gahl: ryah: wow, avro is a beast [15:41] nefD has joined the channel [15:42] voodootikigod_: JimBastard: http://github.com/voodootikigod/tweettalker.js [15:43] JimBastard: voodootikigod_: amazing [15:43] voodootikigod_: hahah [15:43] JimBastard: id test it out but i dont use twitter really [15:43] JimBastard: lol [15:43] voodootikigod_: its like 5 lins [15:44] JimBastard: dude [15:44] voodootikigod_: but its search [15:44] voodootikigod_: so you can querying anything [15:44] JimBastard: you are talking to the guy who wraps one sys exec into a whole library [15:44] voodootikigod_: if you wanna find when someone says the word sex [15:44] bpot has joined the channel [15:44] voodootikigod_: boom [15:44] voodootikigod_: haha [15:44] voodootikigod_: true [15:44] JimBastard: it took me longer photoshop the logo then write all the code [15:46] bradleymeck: mmm hello failwhale [15:46] nefD: omg did someone use a real genius quote earlier? [15:48] _announcer: Twitter: "Now on a positive note, node.js makes me happy!" -- Scott Walker. http://twitter.com/pragma_tech/status/15937893813 [15:49] fictorial: SNR: trending downward. [15:50] stepheneb has joined the channel [15:50] mravaux has joined the channel [15:51] nefD: "Where's the laser", "It's coming..", "It's coming? It's not even breathing hard!" [15:53] gerad has joined the channel [15:55] jwa has joined the channel [15:55] devinus_ has joined the channel [15:55] pjb3 has joined the channel [16:02] mravaux has joined the channel [16:06] tsyd has joined the channel [16:09] kevwil has joined the channel [16:15] ph^ has joined the channel [16:15] creationix has joined the channel [16:15] deanlandolt_home has joined the channel [16:16] hojberg has joined the channel [16:18] Aria has joined the channel [16:18] _announcer: Twitter: "Делаю проект под mongodb + nodejs + django :)" -- Kanterov Gleb. http://twitter.com/glebus/status/15939983836 [16:20] Aria has joined the channel [16:23] stevendavie has joined the channel [16:27] _announcer: Twitter: "Kendo or an evening of playing with Node.js? ...thinking." -- Seyi Ogunyemi. http://twitter.com/micrypt/status/15940510095 [16:30] skampler has joined the channel [16:34] lobridge has joined the channel [16:37] devtime has joined the channel [16:39] peutetre has joined the channel [16:40] qFox has joined the channel [16:42] aho has joined the channel [16:44] siculars has joined the channel [16:47] _announcer: Twitter: "@glebus сформулируй суть в двух словах. На что сгодился Node.js? У django есть стандартная поддержка mongodb?" -- Maxim Kazantsev. http://twitter.com/mkazantsev/status/15941739367 [16:51] mikeal has joined the channel [16:53] linuxsable has joined the channel [16:53] _announcer: Twitter: "@mkazantsev nodejs фигачит много ajax'a и пользуется mongodb, django интегрируется с mongo чтобы хранить юзеров и сессии, остальное в SQL BD" -- Kanterov Gleb. http://twitter.com/glebus/status/15942079703 [16:54] jetienne has joined the channel [16:54] saikat has joined the channel [16:54] voodootikigod: ryah: yt [16:55] ctp has joined the channel [16:56] ryah: voodootikigod: hey [16:56] voodootikigod: http://blip.tv/file/3735944 [16:56] voodootikigod: you want to review before publish? [16:56] ryah: This video is hidden. [16:56] ryah: yes please [16:56] voodootikigod: refresh [16:56] voodootikigod: password is jsconf [16:57] ryah: the slide thing is good [16:58] ryah: you can publish :) [16:58] x_or has joined the channel [16:58] voodootikigod: cool [16:59] softdrink1 has joined the channel [16:59] KungFuHamster has joined the channel [17:00] _announcer: Twitter: "Ryan Dahl presents Less is More in Node.js at JSConf http://blip.tv/file/3735944 "If a program's not fast, it's worthless."" -- JSConf. http://twitter.com/jsconf/status/15942518926 [17:01] jakehow has joined the channel [17:02] _announcer: Twitter: "@seeflanigan huh, i'll look in2 node.js. re the good parts, crockford's supposedly the best. have u seen YUI theater? TONS of js stuff there" -- Ethan. http://twitter.com/studip101/status/15942611649 [17:05] stephenjudkins has joined the channel [17:05] tjholowaychuk has joined the channel [17:07] o_o has joined the channel [17:09] JimBastard: This is a need to node situation and you don't know how to node. [17:11] _announcer: Twitter: "#jsconf 2010 #nodejs http://tumblr.com/xgxbdcmt9" -- Jack Russell SC. http://twitter.com/jackhq/status/15943145757 [17:11] sudoer has joined the channel [17:14] charlesjolley- has joined the channel [17:17] _announcer: Twitter: "Начал фреймворк для Node.js. Джаст фор фан. Репозиторий на гихабе, если кому интересно: http://bit.ly/a2M5mz" -- Alexey Gromov. http://twitter.com/phpinfo/status/15943530722 [17:19] creationix: has anyone here experience with siege [17:19] jedschmidt has joined the channel [17:19] creationix: I'm tired of messing with ab and hear good things about siege [17:19] ncb000gt: creationix: no but i've used tsung [17:19] creationix: but so far it's giving me terrible numbers [17:20] creationix: tsung? [17:20] ncb000gt: http://tsung.erlang-projects.org/ [17:20] mjr_ has joined the channel [17:20] felixge has joined the channel [17:21] creationix: looks a lot like siege in concept [17:21] ncb000gt: that's what i've heard [17:21] ncb000gt: One of our sysadmins uses siege, my experience has been with tsugn [17:21] ncb000gt: err tsung [17:22] ezmobius has joined the channel [17:23] creationix: seems siege can't hit the server very fast [17:23] creationix: I'm topping out at about 1k reqs/sec and the cpu is almost idle [17:23] ncb000gt: hmm [17:23] ncb000gt: strange [17:23] hojberg has joined the channel [17:23] ncb000gt: what's siege written in? [17:24] b_erb has joined the channel [17:24] creationix: c [17:24] creationix: ahh siege is eating all my cpu [17:24] ncb000gt: heh [17:24] creationix: so I really need another machine to run siege on [17:24] creationix: or a few [17:25] ncb000gt: to do real testing you should def get other machines [17:25] ncb000gt: real load testing that is [17:25] creationix: yeah, that was how mape got such high numbers with connect [17:25] ncb000gt: yea [17:25] JAAulde: _announcer missed it so: [17:25] visnup has joined the channel [17:25] JAAulde: via @jsconf: Ryan Dahl presents Less is More in Node.js at JSConf http://blip.tv/file/3735944 "If a program's not fast, it's worthless." [17:26] JAAulde: and [17:26] JAAulde: via @voodootikigod I do believe that Ryan Dahl is one of the smartest people I have been lucky enough to meet. Any doubt [17:26] ncb000gt: JAAulde: nah, it saw it above I think but probably uses some heuristics to see if it's just a RT. [17:26] JAAulde: ncb000gt: neither was an RT...maybe I just didn't see the bot say them [17:26] creationix: yeah, good thing to, my connect tweet got like 8 retweets [17:26] ncb000gt: haha [17:27] ncb000gt: yea, I'm pretty sure it just checks to see if the content has been said before [17:27] ncb000gt: there were a number of bots just spitting out the same content as their own [17:27] JAAulde: ncb000gt: Oh, I see that the first says Node.js in it, and the announcer did show it. But the second doesn't and wasn't [17:27] JAAulde: :D [17:27] ncb000gt: so if you check to see how similar the text is and then just pass over anything that is like 90% then it'll be better for the channel [17:27] softdrink has joined the channel [17:27] _announcer: Twitter: "Sweet - Ryan Dahl's JSConf 2010 talk on #node.js just got posted (http://blip.tv/file/3735944). Been waiting for this one - thanks @jsconf!" -- Jeremy Martin. http://twitter.com/jmar777/status/15944134663 [17:28] ncb000gt: JAAulde: yea, I am also just guessing because i've RT'd a few things that haven't been put in the channel (which is a good thing IMO) [17:29] JAAulde: got ya [17:29] ncb000gt: Oh yea, voodootikigod's wasn't in the channel for sure [17:29] b_erb: this multicore Connect stuff looks impressive, but can 4 processes be bound to one port? [17:29] voodootikigod: ? [17:29] ncb000gt: voodootikigod: scroll up [17:29] voodootikigod: what am i looking for [17:30] ncb000gt: "via @voodootikigod I do believe..." [17:30] voodootikigod: yea [17:30] voodootikigod: ryah is smart [17:30] voodootikigod: there i said it [17:30] ncb000gt: it wasn't brought in by _announcer because there was no "nodejs" in it [17:30] ryah: :P [17:30] ncb000gt: we were just talking about _announcer [17:31] mjr_: b_erb: amazingly, Unix lets you share file descriptors across process boundaries. [17:31] creationix: ryah: I think mape set a new speed record for node [17:31] mjr_: I was somewhat surprised by this myself. [17:31] creationix: 35k+ reqs/sec on a core2 quad [17:31] mjr_: wow, 35K [17:32] b_erb: that's insane [17:32] creationix: now to run the same test on someone's system with 4 quad core xeon processors and 16gb of ram [17:32] ncb000gt: lol [17:32] creationix: b_erb: insane, but makes for nice os-level load balancing [17:32] _announcer: Twitter: "My #nodejs talk from jsconf is up: http://blip.tv/file/3735944" -- Ryan Dahl. http://twitter.com/ryah/status/15944435291 [17:34] stevendavie has joined the channel [17:36] _announcer: Twitter: "Ryan Dahl's JSConf 2010 talk on #node.js just got posted (http://bit.ly/cOzlWj)" -- Elijah Insua. http://twitter.com/tmpvar/status/15944622870 [17:36] voodootikigod: now you went and done it [17:37] JAAulde: voodootikigod: who, hi there [17:37] JAAulde: *whoa* [17:37] tjholowaychuk: creationix: that is pretty sweet, with -n 2 on my machine I dont gain much maybe 1k [17:37] JAAulde: I did not ever notice you frequented here [17:37] voodootikigod: frequented... [17:37] voodootikigod: more like trolled [17:37] JAAulde: I usually log in and immediately stop paying attention [17:37] voodootikigod: i is everywhere [17:37] JAAulde: lol [17:38] creationix: tjholowaychuk: benchmarks are finiky [17:38] creationix: but I'll bet it really helps in a real-world app doing real cpu work [17:38] JAAulde: You and I are not far from each other, and yet I have never been able to attend any of your amazing events [17:38] JimBastard: i usually just stick around to see what that JimBastard guy will say [17:38] ryah: creationix: oh, i would argue the opposite :) [17:38] tjholowaychuk: for sure, its all relative [17:38] voodootikigod: threw it up on HN [17:38] voodootikigod: http://news.ycombinator.com/item?id=1423989 [17:39] creationix: ryah: what I mean is that in benchmarks at this level little things can throw off the numbers so easily because the actual app is to fast [17:39] creationix: on a real app doing real work, it's more immune to such little things [17:39] JAAulde: voodootikigod: I work in Frederick, MD. Live in Hagerstown [17:39] tsyd has joined the channel [17:40] creationix: even if the actual numbers aren't near as high [17:40] voodootikigod: nice [17:40] voodootikigod: I am headin gpas there monday [17:40] ryah: creationix: do you think it will be clear to programmers that the workers don't share a memory space? [17:40] creationix: ryah: yeah, still working on that one [17:40] JAAulde: voodootikigod: give us a loud Arggg on your way past [17:40] creationix: I'm hoping that there will be an api connect can expose shared memory with automatic locking [17:41] ryah: creationix: not shared memory - ipc [17:41] creationix: well, maybe ipc with the master process [17:41] tjholowaychuk: we still need -D to work, sick of nohup lol [17:41] gerad has left the channel [17:41] ryah: they can't share memory [17:41] ryah: tjholowaychuk: yeah, i keep meaning to do process.daemonize()... [17:42] creationix: ryah: can't or shouldn't? I'd put it as the same level of hack as sharing a fd [17:42] tjholowaychuk: ryah: it was really close i forget what was still needed [17:42] creationix: but yeah, probably shouldn't [17:42] ryah: creationix: can't without large amount of hacking. and also shouldn't. [17:42] creationix: fine with me, I never liked shared memory anyway [17:43] mjr_: IPCFTW [17:43] mscdex: iPC -- a new Mac product! [17:43] ryah: maybe that can be the new node irc channel #ipcftw [17:43] mscdex: heh [17:44] cloudhead has joined the channel [17:46] mjr_: ryah: do you expect your http parser to always invoke onMessageComplete for GET requests in 'request' mode? [17:46] ryah: yes [17:46] mjr_: When feeding it data from pcap, sometimes I see that event, and sometimes not, for seemingly valid HTTP [17:46] martoche has joined the channel [17:46] ryah: mjr_: sounds like a bug [17:46] ryah: mjr_: (in your code? :)) [17:47] mjr_: Well, either in my code, or in the code I'm using pcap to test. :) [17:47] ryah: mjr_: oh are you sending the parser EOF ? [17:47] mjr_: oh, no [17:47] mjr_: I never do that [17:47] ryah: i forget the js API. parser.finialize() or something [17:47] ryah: parser.finish() ? [17:47] creationix: ryah: any ideas on how ipc for shared state should work? [17:47] mjr_: I thought that just let you re-use a parser. [17:48] ryah: creationix: unix sockets, each worker net.createServer().listen('/tmp/node_worker' + index + '.sock'); [17:48] ryah: others connect [17:48] ryah: they send json [17:48] creationix: hmm, interesting [17:48] mjr_: Unix sockets are delightfully fast. [17:48] awenkhh has joined the channel [17:49] ryah: mjr_: no, it needs that to know about the end of stream [17:49] mjr_: yeah, but in this case the stream hasn't ended. [17:49] ryah: there are some http messages that areterminated by fin [17:49] mjr_: I see, so that'll need to go in to fix the response parser. [17:49] mjr_: But this is the request parser. [17:49] ryah: what's the request? [17:50] mjr_: super simple GET from our software. We might have botched it somehow. [17:50] ryah: maybe it's a bug in the parser - but i think that's unlikely [17:50] ryah: can you paste it to me? [17:52] _announcer: Twitter: "Ryan Dahl on Less is More in Node.js http://dlvr.it/1d2mJ" -- Tech & Friki Stuff. http://twitter.com/FrikiFeeds/status/15945552585 [17:52] charlesjolley- has joined the channel [17:53] isaacs has joined the channel [17:54] creationix: hmm, so each of the 4 child processes has a direct connection to each of the other 3 processes? [17:54] ryah: sure [17:55] admc has joined the channel [17:55] creationix: sounds messy, I'd have to implement peer-to-peer algorithms to keep stuff in sync [17:55] keyvan has joined the channel [17:55] creationix: I was thinking about having the master process manage the syncing centrally [17:55] tjholowaychuk: creationix: what are you implementing? [17:56] ryah: state -must- be out of sync [17:56] ryah: that's what makes it go fast [17:56] creationix: tjholowaychuk: data structures for connect apps [17:57] creationix: ryah: so suppose I want to implement sessions [17:57] creationix: and all 4 workers need access to the same session data [17:57] tjholowaychuk: creationix: keep in mind sessions could potentially span more machines though [17:57] tjholowaychuk: via redis or what have you [17:57] creationix: since the os randomly load balances request will jump all over [17:58] creationix: so maybe the solution for anything that needs to be synced is to use a database [17:58] creationix: or something external [17:58] tjholowaychuk: for express i have in-memory stuff by default so it is still usable (not practical) [17:58] keyvan has joined the channel [17:59] tjholowaychuk: but then yeah adapters can provide the db access for the cache / session apis [17:59] tjholowaychuk: as long as we provide solid apis anything could be used [17:59] creationix: ok, so what would use IPC then? [18:01] creationix: actually some of those peer-to-peer algorithms aren't that bad to implement [18:01] creationix: especially with a fixed number of nodes [18:03] creationix: ACTION searches through notes from the distributed computing class [18:03] tlg has joined the channel [18:04] tjholowaychuk: damn you and your school :( lol i never got to fiddle with low level stuff much since i never went to school. i got php instead.. until i realized wow php is terrible [18:05] tjholowaychuk: and then realized ruby is a clusterfuck [18:05] creationix: oh, but I paid dearly for that school [18:05] creationix: not sure it was worth it [18:05] tjholowaychuk: for much $$ [18:06] tjholowaychuk: i wish i just took like 2 years off after highschool to sit down with some books [18:06] tjholowaychuk: that is what i would recommend to anyone, my buddy went to college for web stuf and learnt absolutely nothing in 2 years [18:06] ncb000gt: tjholowaychuk: college doesn't guarantee you loads more $$ [18:07] zaach: don't do college for web stuff [18:07] tjholowaychuk: ncb000gt: no of course. when i started i did not even know what to start learning that was my main problem [18:07] ncb000gt: yea [18:07] tjholowaychuk: plus i learnt with dial up hahah... so.. yeah that slowed that process down a lot [18:08] mjr_: ryah: I'm working on isolating that parser thing. There are too many other things interwoven at the moment. [18:08] creationix: yeah, school cost me in money, time, effort, lost job opportunities, and the list goes on [18:08] micheil: ACTION doesn't know what this dail up thing is you speak of. [18:08] ncb000gt: lol [18:08] creationix: if I hadn't been toying with opensource at the same time I'd be stuck [18:08] Aria: Heh, I bet. [18:08] isaacs: creationix: some people claim they don't like saying "i told you so" [18:08] mjr_: I think college is great, and I recommend it to everybody, although clearly some people don't get much out of it. [18:09] isaacs: creationix: i firmly believe those people are liars. [18:09] isaacs: creationix: i totally told you so. [18:09] mjr_: I got a great deal out of college. [18:09] ncb000gt: Agreed, BUT, college does provide you with good things too [18:09] _announcer: Twitter: "pondering node.js (to take a mental break from numbing rails 1.2.3 upgrade to 2.3.8)" -- DavidHainlin. http://twitter.com/DavidHainlin/status/15946482310 [18:09] creationix: isaacs: but I did get a bachelors and half a masters, might as well use what I did learn [18:09] isaacs: creationix: sure, you got enough [18:09] isaacs: creationix: that's good. [18:09] isaacs: the most important thing to get in college is laid. [18:09] mjr_: fuck. now you tell me. [18:10] tjholowaychuk: hahah [18:10] ncb000gt: lol [18:10] creationix: nah, just got married [18:10] isaacs: creationix: doing it wrong!! [18:10] ceej: ACTION totally self taught (i originally got my BA in film studies) lol [18:10] isaacs: :P [18:10] ncb000gt: LOL [18:10] tjholowaychuk: creationix: is she a programmer? that would be sweet haha [18:10] ceej: I started coding in VB for aol 2.5 :) [18:10] creationix: now if only I could remember the name of that protocol... [18:10] isaacs: creationix: i've seen proof that you got SOME action. my momma told me where babies come from, and those kids look like you [18:10] tlg_ has joined the channel [18:11] ncb000gt: hahaha [18:11] tlrobinson_ has joined the channel [18:11] isaacs: no, but srsly, i'm using "laid" as a general catch all for "learn how to interact as an adult with other adults in a meaningful and relevant way" [18:11] isaacs: that's actually really super important, and going to college is a great way to learn that. [18:11] mjr_: The paradoxical thing about college is that it seems worthless while you are there, and you don't realize how much you got out of it until years later. [18:12] ncb000gt: isaacs: it is. that said, nobody really leaves highschool...it's just that your environment changes [18:13] creationix: does anyone remember the name of that DHT protocol where you have a fixed number of trusted nodes and only need to lock n/2 of them to write and less to read [18:13] mjr_: You mean the Amazon Dynamo thing? [18:13] creationix: mjr_: yeah, there are gems to learn for sure [18:13] creationix: mjr_: no, way simpler [18:13] isaacs: i feel bad about nerds that come out of great colleges with awesome educations and never learn how to talk to girls while they're there. out in the real world, the game gets trickier. [18:14] mjr_: isaacs: It's quite true. On the plus side, those people make GREAT open source contributors. [18:14] isaacs: mjr_: exactly! no distractions! [18:14] mjr_: It's a real, "Cognitive Surplus" [18:14] creationix: isaacs, well, I was an athlete in High School so that not normally a problem [18:14] creationix: sports are a great way to learn social skills [18:15] creationix: ACTION does miss having time to work out 5 hours a day [18:15] isaacs: creationix: absolutely [18:15] zaach: creationix: especially coed sport like track [18:15] b_erb: c'mon guys, university ain't that bad [18:15] tjholowaychuk: pff who needs social skills when you can be a dyslexic insomniac :D [18:15] ncb000gt: creationix: agreed, I was an athlete in highschool and did some in college...I do miss that working out [18:15] creationix: I was the team captain of a swim team [18:16] creationix: just like track but wet [18:16] ncb000gt: tho I've been biking to work [18:16] isaacs: the thing that i miss is not HAVING to work out 5 hours a day to be in awesome shape. in HS track, we basically had a daily 2 hour personal training session, and totally slacked off, and i STILL ran faster than i can now. [18:16] isaacs: talk about taking stuff for granted. [18:16] Aria: Heh, no kidding. [18:16] mjr_: this.metabolism-- [18:16] creationix: but hey, now I code 12 hours a day, those brain muscles should be pretty strong right? [18:16] isaacs: hehe [18:17] zaach: I miss the competition... [18:17] JimBastard: tjholowaychuk: i started with CF instead of php [18:17] JimBastard: lasted about 7 years [18:17] visnup: plenty of social interaction is moving online anyway [18:17] ncb000gt: creationix: sure...less you drink like a fish [18:17] isaacs: creationix: sure. but do you find that the more you learn, the less smart you feel? [18:17] tjholowaychuk: JimBastard: wow nice, i think I have only been seriously programming for maybe 2 or 3 years [18:17] visnup: if you don't know how to internet bully, that's another chink in your armor [18:17] JimBastard: lol really [18:17] tjholowaychuk: isaacs: ah! yes, i can say that for sure [18:17] JimBastard: ive been doing javascript since 2000 [18:17] tjholowaychuk: millions of things i want to learn [18:17] x_or has joined the channel [18:17] JimBastard: but like my first 2-3 years of JS were like nothing [18:17] JimBastard: real real basic shit [18:18] mjr_: isaacs: I find that just about every day. I recall how confident I was even a few years ago about things I thought I knew. Man. So embarrassing. [18:18] tjholowaychuk: i dont count my php years, because it is so limiting [18:18] tjholowaychuk: and just lame [18:18] creationix: ACTION goes back to trying to remember stuff I learned in school now that it's actually relevent [18:18] JimBastard: i figured out XSS in 2000 in HS [18:18] JimBastard: http://www.jimbastard.com/Jim_hacks_the_fake_stock_market.html [18:18] JimBastard: that shit was bad ass [18:18] JimBastard: we cheated the newsday stock market game [18:18] ncb000gt: creationix: algorithms and data structures [18:19] isaacs: ACTION is old... [18:19] b_erb: creationix: a&d, Computability theory, logic, … [18:19] visnup: creationix: I love breaking out finite state automatons to think about things now [18:20] isaacs: but, i guess on the plus side, i can say that i've been programming pretty seriously for about 12 years now... [18:20] isaacs: wasted WAY too much time in windows land, though [18:20] tjholowaychuk: ditto that [18:20] ncb000gt: isaacs: I think most of us have [18:21] jetienne: i left at win31 and am proud of it [18:21] mjr_: I've been troubleshooting and performance tuning networks most of the time, and only seriously programming for a few years. [18:22] ncb000gt: my first experience with linux involved me wiping out my parents banking information...that was my day of enlightenment [18:22] zaach: lol [18:22] tjholowaychuk: i used to be a designer, which is why im so anal about how my code looks, realized programming was more fun to me [18:22] ncb000gt: nice, I wish I had some part of an artistic eye...usually not [18:22] ceej: http://redcareditor.com/ nice cross platform editor [18:23] JimBastard: yeah isaacs you are an old man [18:23] ncb000gt: ceej: emacs is a nice cross platform editor [18:23] JimBastard: thats why you get to do the package manager [18:23] isaacs: tjholowaychuk: there is a zen state that comes from seeing the beauty in how the thinking behind the code looks. every time i think i've got it figured out, i realize that i had been mistaken. [18:23] ceej: ncb000gt so's vim :P [18:23] JimBastard: dependacy management is not a young person's game [18:23] ncb000gt: ceej: them's fightin words [18:23] jetienne: komodo [18:23] isaacs: JimBastard: yeah, you have to have felt that pain many times to be properly fearful of it. [18:24] ceej: lol [18:24] ncb000gt: lol, truth [18:24] JimBastard: s/many/several [18:24] isaacs: JimBastard: to paraphrase Douglas Crockford, "The AI folks wanted to get the programs to write themselves. Turns out, computers aren't afraid of bugs, so the programs they write are terrible." [18:24] JimBastard: ahaha [18:25] ncb000gt: hah [18:25] isaacs: a lot of terrible ideas look so good, and it's impossible to see why they're bad until you feel it yourself. no one can ever convince you. [18:25] isaacs: and a few good ideas look *really* terrible, which just makes it harder. [18:26] JimBastard: you could train your AI to generate unit tests. then you fuzz the solutions using another AI. eventually it will just do everything / handle every case [18:26] JimBastard: for what domain? [18:26] JimBastard: life [18:26] isaacs: JimBastard: but who decides which unit tests are valid? [18:26] JimBastard: it asserts 42 [18:26] mjr_: Another big learning for me recently: ideas necessary to get things started, but ultimately not useful compared to execution of those ideas. [18:26] JimBastard: everytime [18:26] isaacs: mjr_: ++ [18:27] mjr_: I'd read that in a million different places, and somehow still ignored it. [18:27] mjr_: And in Silicon Valley we still have this cult of the idea. [18:27] JimBastard: perception is reality, the most popular is rarely the best, girls don't care if you have a lot of github projects [18:28] JimBastard: perception is reality, the most popular is rarely the best, girls don't care if you have a lot of github projects #bastardfacts [18:28] JimBastard: ^^^ life [18:28] mjr_: JimBastard: no, they do. At least, it'll look like they do once I script the github signup process and use faker.js to make a bunch of fake girls to follow you. [18:28] ncb000gt: that's BS! [18:28] ncb000gt: My github repos bring all the girls to the yard. [18:29] JimBastard: every fake accounts will result in me registering a punch call back to your face [18:29] tjholowaychuk: hahahah [18:29] JimBastard: and yo [18:29] JimBastard: thats a promise [18:29] JimBastard: (promise api removed) [18:29] JimBastard: fuuuuuuucckkkk [18:30] JimBastard: can you just pass along the punch back to your face so i have a reference to it? [18:30] devinus_ has joined the channel [18:30] mjr_: throw (new Punch(this.face)); [18:31] creationix: tjholowaychuk: alright, I'm looking at the new syntax for connect's setup [18:31] PyroPeter: How do I close a http clients connection after Content-Length bytes were received? response.client.close() or similar? [18:33] jetienne: creationix: btw how long for you to code connect, before the recent annonce [18:34] tjholowaychuk: uhh [18:34] tjholowaychuk: lol [18:34] tjholowaychuk: your english is as good as mine :D. it was not too long to whip everything up with examples and all i think a week between the two of us [18:34] tjholowaychuk: i was working on other stuff and he had the conferences [18:35] jetienne: tjholowaychuk: ok [18:35] tjholowaychuk: if that was what you were asking [18:36] dajobe has joined the channel [18:36] jetienne: tjholowaychuk: i found another way to get the answer :) [18:36] jetienne: tjholowaychuk: git history :) [18:36] tjholowaychuk: ah :p [18:36] jetienne: tjholowaychuk: and you guys do a LOT of commit per day :) [18:37] tjholowaychuk: nah not really [18:37] TommyM has joined the channel [18:37] jetienne: http://github.com/extjs/Connect/commits/master?page=10 <- the proof :) [18:37] tjholowaychuk: commit early / often [18:37] tjholowaychuk: i like little bite sized chunks [18:37] _announcer: Twitter: "Learning about node.js http://blip.tv/file/3735944" -- Nick Crohn. http://twitter.com/nickcrohn/status/15948103585 [18:38] jetienne: tjholowaychuk: git commit -a kindof style ? [18:38] TommyM: more like a commit for each individual file ;) [18:39] tjholowaychuk: jetienne: just commit in a logical manor. dont bundle up things that really should be several commits into one [18:39] WALoeIII has joined the channel [18:40] jetienne: tjholowaychuk: make sense [18:41] tjholowaychuk: like when i get mad when people add a feature and bump my version in the same commit lol [18:41] tjholowaychuk: not that i want people to bump versions anyways [18:41] PyroPeter: when I request http://google.com it seems like google never closes the connection. Node uses 100% CPU until I kill it. [18:46] _announcer: Twitter: "pay serious attention to Node.js. The web application landscape as we know it is about to undergo radical evolution." -- John Goodsen. http://twitter.com/jgoodsen/status/15948545614 [18:46] tjholowaychuk: ACTION rage, god damn bugs [18:50] mjr_: So what should happen if an HTTP client makes a GET request, but supplies a Transfer-Encoding: chunked header? [18:50] micheil: hey, voodootikigod, any ETA on the (fab) talk? [18:50] jxson has joined the channel [18:50] voodootikigod: not atm [18:50] isaacs: jetienne: did you have some kind of problem with npm? i seem to recall seeing something in the scrollback the other day, but you'd left. [18:51] jetienne: isaacs: i dont remember... [18:51] reid has joined the channel [18:51] isaacs: jetienne: then i declare it fixed! [18:51] mjr_: ryah: that's the issue with the http parser. If a client brokenly supplies a Transfer-Encoding: chunked header to a GET request, the http parser starts looking for body chunks. [18:51] jetienne: isaacs: well i had the "publish end after a 60s timeout" [18:51] ryan_gahl: tmpvar: ping [18:51] jetienne: isaacs: good management :) [18:52] jetienne: isaacs: dont worry i will ping you if i get more [18:52] jetienne: isaacs: in case of issue, where is the good place to report ? here live ? githut ticket ? [18:52] isaacs: jetienne: github ticket, or email to npm-@googlegroups.com [18:52] jetienne: isaacs: noted [18:52] isaacs: jetienne: but complaining in here usually works, too. [18:53] JimBastard: so wait, dumb question. how do i force a function to be sync? [18:53] JimBastard: mind you i havent slept in 2 days [18:53] ncb000gt: first, you take a nap [18:54] JimBastard: like http://gist.github.com/434889 [18:54] JimBastard: im still at work [18:54] _announcer: Twitter: "@jgoodsen node.js does have good buzz around it. express (a node.js framework) looks neat as well. http://expressjs.com" -- Karmen Blake. http://twitter.com/kblake/status/15948980775 [18:54] creationix: "force a function to be sync" !== node [18:54] JimBastard: how do i call delay() in JS? lol kidding [18:54] JimBastard: creationix: [18:55] JimBastard: say.speak('hi') [18:55] _announcer: Twitter: "@jgoodsen and heroku is letting some deploy node.js onto it = awesome!!" -- Karmen Blake. http://twitter.com/kblake/status/15949023707 [18:55] JimBastard: say.speakSync('hi') [18:55] JimBastard: ohh yeah wait [18:55] ajpi has joined the channel [18:55] JimBastard: i know what to do [18:55] JimBastard: i gotta queue those bitches up [18:55] JimBastard: i think [18:56] creationix: yeah a queue is possible [18:56] creationix: blocking execution, not so much [18:56] JimBastard: how did you do it for all the FS stuff? [18:56] JimBastard: i gotta assume its the same approach [18:56] Ori_P has joined the channel [18:56] creationix: no, the fs stuff uses real blocking apis as the c level [18:56] JimBastard: ohh [18:56] creationix: I don't think node exposes that for child process stuff [18:57] JimBastard: i think i can delay execution [18:57] JimBastard: well, not spawn the child process until the queue says its ready [18:57] creationix: but sys.puts uses a queue/stream [18:57] JimBastard: i dont use sys.puts? [18:58] JimBastard: im tempted to change say.speak() to say.puts() [18:59] mindeavor has joined the channel [19:00] steadicat has joined the channel [19:00] tjholowaychuk: change it to sys.puts(), i want to hear all my stdout lol [19:01] creationix: tjholowaychuk: just pipe the program to say on the command line [19:01] tjholowaychuk: im just bugging :p i dont actually want that [19:01] tjholowaychuk: but it would sound funny with logs or something [19:01] JimBastard: tjholowaychuk: i already have the stub for that. im gonna monkey punch sys.puts() [19:02] JimBastard: i was having issues though [19:02] tjholowaychuk: haha yes! awesome [19:02] micheil: ryah: how can you easily free() a buffer? [19:02] tjholowaychuk: i wrote a ruby app a while back that can write code for me when i talk to it lol its the future! [19:02] tjholowaychuk: not really [19:02] JimBastard: i couldnt figure out how to override sys.puts() so that it would still sys.puts() and say.speak(), i was having some lame module cache problem. i've monkey patched other modules like HTTP, but sys is wierd [19:02] mikeal has joined the channel [19:03] ryah: micheil: you need to let v8 collect it [19:03] micheil: oh [19:03] micheil: there's no way to force it? [19:04] micheil: I've noticed the only memory isssue my websocket server has now when under the "spam test" is that the buffer used for parsing messages isn't collected fast enough [19:04] ryah: mjr_: what? [19:04] ryah: mjr_: what software is producing this ? [19:04] jetienne: dont ref to it? i think v8 gc is done when you unref an object, as oppposed to periodically [19:05] ryah: what is producing the GET? [19:05] mjr_: ryah: it's our proprietary thing [19:05] micheil: jetienne: hmm.. going to test that. [19:06] mjr_: Which is the thing I'm attempting to instrument. [19:06] creationix: mape: the smallest app the connect runner can run [19:06] creationix: module.exports = require('http').createServer(function (req, res) { res.writeHead(304, {}); res.end();}); [19:06] ryah: mjr_: that's an invalid request [19:06] ryah: mjr_: GETs are not forbidden from having a body [19:06] mjr_: ryah: yeah, I know, but just about everybody accepts it [19:06] jetienne: micheil: from memory, it was in one of the v8 video. and the motivation was to get a smooth execution. as opposed to the usual "wait im doing GC, so big freeze in the exec" [19:06] ryah: define everybody [19:06] ryah: like nginx accepts that? [19:07] mjr_: Even node ends up accepting it, but it just doesn't fire that one parser event. No big deal. [19:07] ryah: hm [19:08] mjr_: But yeah, I thought you might want to know about that, given your quest to make http parser be the reference implementation or whatever. [19:08] ryah: :( [19:08] micheil: jetienne: yeah.. unrefing isn't working. [19:08] drudge: nice talk at jsconf '10 ryah [19:08] ryah: drudge: thanks [19:08] drudge: you got some good laughs too [19:09] micheil: because unrefing would mean simply: pkt = new Buffer(); .... pkt = undefined; [19:09] ryah: mjr_: i don't know - how would one program around that? [19:09] creationix: micheil: also remember that Buffer instances are only half in the VM [19:09] ryah: like if someone sends a Transfer-Encoding: chunked header [19:09] nym has joined the channel [19:09] micheil: creationix: yeah [19:09] nym: hey [19:09] creationix: that may change how the GC handles them [19:09] ryah: you really should expect 0\r\n\r\n [19:09] ryah: otherwise a body [19:09] nym: ry's talk from jsconf is on HN today [19:10] mjr_: ryah: I think you are doing the right thing at the moment. The only thing that could be better, I guess, is to have GET method never wait for a body, even if a header suggests that a body will follow. [19:10] mjr_: I guess. I dunno. Handling invalid data is hard. [19:10] micheil: ryah: any ideas on unref'ing / forcing a free on buffers? [19:11] _announcer: Twitter: "Gah, it's clear I'll never grasp or exploit the true power of Node.js" -- Flip Sasser. http://twitter.com/flipsasser/status/15949875397 [19:11] TommyM has joined the channel [19:12] ryah: mjr_: but what about people who, complying with rfc 2616, send a header? [19:12] ryah: er body [19:12] ryah: basically your saying: valid requests should be invalid, and invalid requests should be valid [19:13] mjr_: Wait, you can send a body on a GET request? [19:13] ryah: yes [19:13] mjr_: oh shit [19:13] ryah: your http agent is broken [19:13] mjr_: well, nevermind then. The current situation is the best. [19:14] mjr_: Oh yeah, I know my UA is broken. I was just trying to harden node's http parser. [19:14] hellp has joined the channel [19:14] ryah: i guess what node could do is check the first byte of the body [19:14] ryah: if it's a hex char [19:14] ryah: er if it's not a hex char, and they gave a transfer encoding [19:15] ryah: assume the agent sucks [19:15] ryah: and pretend we're now on the next request [19:15] mikeal: wow [19:15] mikeal: i'm reading the rfc [19:15] mikeal: you can seriously send a body with a GET request [19:15] mikeal: that is so broken [19:15] utgo has joined the channel [19:16] mjr_: man, that is really way crazier than I thought. [19:17] mjr_: Why would you ever do that? And if you can do that, why do we have POST? [19:17] mjr_: What do all these "methods" even mean? [19:17] ryah: http is fucked deeply [19:17] jetienne: get is "dont modify server data" [19:18] ctp has joined the channel [19:18] jetienne: suppose you want to express something which is too large to be url encoded, and this "something" is a GET, as in retrieve some info. you put that in a body [19:18] kuya: is there any ffi lib for node? [19:19] mikeal: yeah, except you'll never do that because most clients won't let you send a body with a GET [19:19] mikeal: and most servers probably fail on it :) [19:19] mjr_: I actually like the idea of a generic, "location X, optional body Y" as a transport. But GET / POST / PUT / whatever seems needlessly complicated because everybody overloads those methods differently. [19:19] creationix: jetienne: yeah, webdav does that sort of thing all the time [19:19] creationix: and with XML bodies [19:19] mikeal: webdav, ewwwwww [19:19] mikeal: LOCK should not be an HTTP method [19:19] creationix: mikeal: yeah, there's a reason I only half implemented the protocol [19:19] mikeal: hehe [19:20] mikeal: i'm actually friends with the author of webdav [19:20] mde: mikeal: Tell it to Lisa. [19:20] mde: Haha [19:20] mikeal: mde: haha, she's actually kinda done with DAV [19:20] inimino: mjr_: they mean something to intermediaries like caches and proxies [19:20] mikeal: she's said a couple times that the atom pub stuff is way better [19:21] mde: It was better than nothing, I guess, and so was XML. But the world moves on. [19:21] mikeal: most caches will cache based on method and headers and ignore a GET body [19:21] mikeal: some of the world moves on [19:21] mjr_: inimino: yeah, I forgot about those. It seems like those are already looking at headers though, and now trying to figure out what to do based on method + header. Why have method at all? [19:21] mikeal: in 10s years there will still be "enterprise" people building stuff with Java and SOAP [19:21] mde: Yeah, some folks just get left behind. [19:22] mde: Yeah, it was really weird being in the car with that guy in Belgium. He was totally that guy. [19:22] mde: "I much prefer SOAP. [19:22] mjr_: I mean, obviously we aren't going to change HTTP, forever. I'm just noticing how sub-optimal the design is for what people are actually doing with it. [19:22] inimino: mjr_: because regardless of the headers you can say things like "this is safe" if it is a GET, or "invalidate the cache" if it is a POST [19:22] mde: Craziness. [19:22] mikeal: oh man [19:22] mikeal: "Douglas Crockford likes his code like he likes his women - beautiful, strict, and no class." [19:22] mde: Haha [19:22] inimino: mjr_: well, yes, welcome to the Web ;-) [19:23] micheil: hmm.. ~5000 packets / sec is fairly fast, right? [19:23] mikeal: mjr_: i'm poking at node_pcap today? [19:23] mikeal: anything i should watch out for? [19:23] mjr_: mikeal: yeah, it's a bit rough still, but I'll be curious to hear how it goes for you. [19:23] mikeal: cool [19:23] ajpiano has joined the channel [19:24] mikeal: also, what is the prevailing websocket server lib for node? [19:24] ryah: unclear [19:24] mjr_: I'm finally using it for the thing my company wanted it for, to do latency metrics on HTTP, so I'm leaning on the underlying bits pretty heavily. [19:24] mikeal: i want to build a web visualization of my current traffic [19:25] mjr_: check out http_trace.js [19:26] mjr_: Also in the examples dir is speed_server.js which doesn't do websockets, but does do regular HTTP and pcap at the same time. [19:26] JimBastard: yo mikeal hummingbird? [19:26] bradleymeck: mmm is there a good way to tell if a stream is a readablestream? [19:26] JimBastard: http://mnutt.github.com/hummingbird/ [19:27] mikeal: i had to move the pcap_binding.node manually and change the import to ./pcap_binding [19:27] ncb000gt: Hummingbird looks sweet [19:27] mjr_: mikeal: yeah, how can I change wscript to install it? [19:27] ncb000gt: I haven't yet gotten around to using it [19:27] micheil: hmm.. ryah another thing I've noticed, my websocket server gets slow with large data [19:27] mikeal: yeah, hummingbird is awesome, but i need this for debugging my local traffic not my remote traffic [19:27] micheil: (each client send() being some number of characters) [19:28] mikeal: basically, i never want to open wireshark or httpscoop again [19:28] ncb000gt: :) [19:28] mikeal: mjr_: no idea, i've never done that :) [19:28] JimBastard: node-shark [19:28] bradleymeck: micheil are you using buffers in memory? [19:28] JimBastard: i like it [19:28] mjr_: I'm just about to the point where I don't use tcpdump anymore for HTTP. node_pcap + the HTTP parser is really useful. [19:28] _announcer: Twitter: "@kblake re: heroku node.js - they giving you full node.js with file system access and everything?" -- John Goodsen. http://twitter.com/jgoodsen/status/15950794409 [19:28] JimBastard: ohh dude mikeal, you might as well build charles [19:29] micheil: yes [19:29] mjr_: I mostly need some command line flags to turn on and off some options. [19:29] mikeal: the pcap bindings are *really* nice [19:29] mikeal: and handle most of the hard stuff for me [19:29] Ori_P has joined the channel [19:29] micheil: memory usage stays fairly constant, it's just slow. [19:29] mjr_: micheil: "slow" how? [19:29] micheil: not sure if it's chrome or my server though [19:30] mjr_: like, using CPU, or just not moving end to end as fast as you'd expect? [19:30] micheil: well, rather then being 5000packets/sec, it drops to say, 50packets/sec [19:30] micheil: cpu stays very low, as with memory. [19:30] creationix has joined the channel [19:30] micheil: so I think it's actually a bottleneck at chrome's end [19:31] jetienne: micheil: is it linear ? like 500 is twice faster than 1000, 1000 twice faster than 2000 etc... [19:31] micheil: hmm.. not sure I know what you mean jetienne [19:31] jetienne: micheil: if you got a sudden slow down at say 1000, this is one thing. is the slowdown is linear with the size, this is another :) [19:32] jetienne: micheil: one is a threshold you hit. the other is a normal perf issue [19:32] jetienne: it helps the localisation of the bug/issue [19:33] micheil: hangon.. found the bottleneck. [19:33] micheil: I think. [19:33] jetienne: cool [19:33] micheil: wow. now that's fairly fast.. [19:33] tjholowaychuk has joined the channel [19:33] jetienne: micheil: what was it ? [19:33] micheil: had to add setTimeout(..., 1) to node [19:33] micheil: to chrome [19:33] micheil: rather [19:34] micheil: so that it'd send messages asyncly [19:34] jetienne: evil, doing stuff on nodejs you should know how to avoid sync stuff :) [19:35] JimBastard: micheil:lolwut [19:35] _announcer: Twitter: "@vectorjohn you ready to dominate with nodejs? I'm ramping up. #nodejs #jobshouts #gotime" -- Josh Hundley. http://twitter.com/oJshua/status/15951131549 [19:35] micheil: bloody hell.. add the same setTimeout() to my spam test, and suddenly it parsers 100,000 packets / ~ 4 seconds [19:35] mjr_: micheil: is this over localhost? [19:35] micheil: yeah [19:36] mjr_: That sounds right then. [19:36] micheil: 1,000,000 = million, right? [19:36] micheil: (sanity check.) [19:36] jetienne: yep :) [19:37] mikeal: mjr_: http://gist.github.com/434934 [19:37] mjr_: I mean, I'd expect a dedicated program to do 30k packets/sec. [19:37] mikeal: listening on lo0 "" [19:37] mjr_: of large packets, that is. [19:37] micheil: mjr_: yah, it was chrome restricting the speed that it sent out packets [19:37] jetienne: micheil: do you saturate the cpu or bandwidth ? [19:37] mjr_: mikeal: set your capture filter to ignore UDP [19:38] micheil: as soon as I added the timeout to the web client, the speeds i was getting from node increase exponentially [19:38] mikeal: ok [19:38] mjr_: sudo node http_trace.js en0 "tcp" [19:38] mikeal: ok, cool [19:38] micheil: cpu on the node process never goes above ~ 10% [19:38] mjr_: That'll find HTTP on any port. [19:38] micheil: memory sticks to ~50mb for small packets [19:38] jetienne: micheil: you removed the log in the webpage ?* [19:38] micheil: yeah [19:39] micheil: but, chrome's conn.send() on a websocket is sync [19:39] towski has joined the channel [19:39] micheil: so as soon as you throw that into the "event loop" of chrome, by placing it in a timeout, you get a big increase in throughput [19:39] mjr_: micheil: does it go faster if you do setTimeout(fn, 0) instead of 1? [19:40] micheil: haven't tried 0 [19:40] mjr_: but you must try [19:40] micheil: doing a 1million packet test. [19:40] creationix: connect with 2 workers + 1mb response body [19:40] creationix: Transfer rate: 1280298.86 [Kbytes/sec] received [19:40] micheil: currently up to 40,00000 [19:40] micheil: wait. [19:40] micheil: 0.4million [19:41] micheil: node's busy sitting at 4% cpu, and 25MB memory. [19:41] micheil: some times peaking back up to 50MB memory [19:42] micheil: mean while, chrome is using 97% cpu [19:42] jetienne: creationix: this is 1.2gbyte/s ? you sure [19:42] micheil: 288MB ram [19:42] creationix: jetienne: yep [19:42] jetienne: im not sure i get that for static file on linux... [19:42] mjr_: localhost is really really fast on modern computers. [19:43] creationix: ab -b 1049076 -t 30 -c 4 -k http://127.0.0.1:5001/ [19:43] mjr_: giant MTU and no copies of data [19:43] micheil: someone write me an ab for websockets :P [19:43] creationix: not sure if the -b flag makes much difference though [19:44] creationix: micheil: these guys should add it http://tsung.erlang-projects.org/ [19:44] creationix: they support tons of other stuff [19:44] jetienne: mjr_: you got memcopy due to userspace/kernelspace [19:44] markwubben has joined the channel [19:45] mjr_: surely someone will write a node-based replacement for ab and then add ws support to that. [19:45] creationix: jetienne: my cpus spend most their time in system space [19:45] creationix: I'm guessing copying memory around [19:45] mjr_: jetienne: oh sure, but with 16K MTU, you need far fewer trips through the IP stack, and there's no network adapter boundary to synchronize with. [19:45] micheil: ryah: watching this do a million packet test makes me think of a phrase from Dmitry's JSConf talk.. [19:45] jetienne: creationix: clearly... but 1.2gbyte per second with 2 process on the same box... hard to believe from here... would be delighted if it happen tho :) [19:46] micheil: "This is too clean & running too smoothly, let's add in some bugs, everyone loves a good bug, don't they?" [19:46] mjr_: creationix: given maybe that someone will be you? [19:46] ncb000gt: creationix: have you been using tsung? [19:46] mjr_: er, given your current position and activities, maybe that someone will be you. [19:46] creationix: ncb000gt: not yet [19:46] creationix: I don't have a second machine to run the bench software with [19:46] creationix: and ab has the lowest overhead [19:46] ncb000gt: gotcha :) yea [19:46] creationix: it's already hitting 100% of one cpu and the other cpus aren't 100% full [19:47] creationix: I'm sure my numbers would be faster with ab on another machine [19:47] creationix: except for maybe the throughput test [19:47] creationix: then it would be over lan [19:47] ryah: buried in emails :( [19:47] isaacs: zaach: yo [19:47] micheil: night chaps. [19:47] isaacs: zaach: i'm gonna try building jison locally and hopefully see what the hell is going on there [19:48] ncb000gt: micheil: later [19:48] isaacs: zaach: because this bug *should* be super squashed by this point [19:48] creationix: mjr_: probably not websocket for tsung, but I'm in the business of writing software that makes writing fast software easy [19:48] creationix: (isn't that what node itself is) [19:48] voodootikigod_ has joined the channel [19:49] _announcer: Twitter: "Node.js is really interesting, but watching videos of Ryan Dahl present is kind of painful." -- Kyle Cunningham. http://twitter.com/codeincarnate/status/15951823510 [19:49] CIA-77: node: 03Ryan Dahl 07master * rd127d15 10/ LICENSE : [19:49] CIA-77: node: License file maintenance. [19:49] CIA-77: node: - reference to OpenSSL [19:49] CIA-77: node: - note about http-parser - http://bit.ly/b7Py4g [19:49] CIA-77: node: 03Ryan Dahl 07master * r9c85357 10/ (67 files): Upgrade C-Ares to 1.7.3 - http://bit.ly/awzNBC [19:49] b_erb has joined the channel [19:49] tedx: I'd like to run node out of xinetd. Is there a way to get a server to use stdin as it's connected fd? [19:50] derbumi has joined the channel [19:50] mjr_: tedx: did you see my mailing list post about that? [19:50] mjr_: it should just be stdin [19:51] creationix: mjr_: is that possible. I know with the multicore stuff I wasn't able to use stdin to pass the fd down [19:51] creationix: I had to create a nameless socket to pass it [19:51] mjr_: you don't need to pass anything down. inetd maps the incoming socket onto stdin / stdout [19:51] mjr_: That is part of the magic of inetd. [19:52] creationix: I see, that's neat [19:52] mjr_: So in node you just read from stdin and write to stdout, and it'll be like reading and writing to the socket. [19:52] phiggins has joined the channel [19:53] tedx: maybe I don't understand what you mean. typically you construct a server a do a listen how do I tell it to use stdin instead of doing the listen? [19:53] mikeal: mjr_: how do i do an expression to filter for tcp on ports x,y and z? [19:53] mjr_: pcap-filter(7) has all the goodness [19:53] _announcer: Twitter: "Just found nozzle for node.js! Looks awesome" -- Thomas Beverley. http://twitter.com/thomas_101/status/15952061825 [19:54] ajpiano has joined the channel [19:54] mjr_: but you want: "tcp port x or tcp port y or tcp port x" [19:54] mikeal: ah ha [19:54] mjr_: you can do crazy nested expressions in pcap filter syntax. [19:55] ph^ has joined the channel [19:55] mikeal: sweet [19:56] howardr has joined the channel [19:57] mikeal: mjr_: it seems like you can't create two sessions in one node script [19:57] mjr_: yeah, sorry about that. [19:57] mjr_: Not yet, but soon. [19:57] sudoer has joined the channel [19:58] mjr_: It was hard enough making the C pcap stuff work reliably on both Linux and OSX with one session. [19:58] mikeal: cool [19:58] howardr: does anyone know the pubsub module of connect? [19:58] howardr: I am running into an issue [20:00] tedx: mjr_: does my question not make sense? [20:00] bradleymeck: it seems a bit odd what you are asking yes [20:01] zaach: isaacs: ok [20:01] sechrist: ryah: requrie [20:01] isaacs: zaach: reproducing here... [20:01] ryah: sechrist: ? [20:01] sechrist: your jsconf2010 slide, mispelled require [20:01] sechrist: hehe [20:01] ryah: oh [20:02] bradleymeck: tedx, you are going to want to pump stdin to the socket is what it sounds like? [20:02] creationix: howardr: did you figure it out [20:02] creationix: it's nothing fancy yet, the multitouch demo uses it [20:03] howardr: not really. i was just trying the blog demo [20:03] howardr: and there is a line that says logic = this.logic [20:03] howardr: that it was erroring on [20:04] tedx: let's say my server did http.createServer() then is there a way to set that servers connection fd? [20:04] mjr_: tedx: I just read your ml post. I see what you are asking now. [20:04] howardr: but i went ahead and just commented it out [20:04] isaacs: ryah: something weird is happening with the http client. i'm calling request.end(), but it's not ending, it just aborts with no error. [20:04] howardr: yeah the multitouch one is cool [20:04] mjr_: tedx: no, you can't do that. inetd has already accepted a single connection for you. You don't have the server fd anymore, just the new connection fd. [20:04] bradleymeck: the connection is already bound to a socket at that point? [20:04] _announcer: Twitter: "New post: Ryan Dahl on Less is More in Node.js http://geeknews.me/2010/06/11/ryan-dahl-on-less-is-more-in-node-js/" -- geek. http://twitter.com/geeknewsme/status/15952619160 [20:04] howardr: the multouch one is a much better example usage than the blog one [20:04] howardr: thanks [20:04] joshr has joined the channel [20:04] mjr_: tedx: inetd holds on to the server fd, and nobody outside of inetd knows what it is. [20:04] lobridge has joined the channel [20:05] mjr_: tedx: does that make sense? [20:05] tjholowaychuk: creationix: we need a better way to handle the env [20:05] tjholowaychuk: you can do createServer(..., module.parent.exports.env) [20:05] tjholowaychuk: but that is stupid [20:05] tjholowaychuk: what are your thoughts on maybe having process.connectEnv? [20:05] tjholowaychuk: or similar [20:06] tjholowaychuk: well i guess require('connect').env [20:07] _announcer: Twitter: "#nodejs 0.1.98 release with readline and window support: http://groups.google.com/group/nodejs/browse_thread/thread/b6e4861de82c895f" -- Ryan Dahl. http://twitter.com/ryah/status/15952766129 [20:07] CIA-77: node: 03Ryan Dahl 07master * r10d8adb 10/ (AUTHORS ChangeLog doc/api_header.html doc/index.html wscript): bump version - http://bit.ly/cRZSbK [20:07] sechrist: "Wow, Node sucks!" [20:08] sechrist: It's terrible, but not rails terrible! [20:08] sechrist: xfd! [20:09] bradleymeck: mmm dont see a way to check if a stream has already been closed? [20:09] ryah: bradleymeck: stream.readyState == 'closed' [20:10] sechrist: wow it nearly paralleled nginx after the buffer [20:10] sechrist: damn [20:10] bradleymeck: ryah, thought that was only on net.stream? [20:10] ryah: oh- yeah maybe [20:11] tedx: mjr_: I'm not sure if we are talking about the same things. I'll think about it some more and post to the list. [20:12] joshbuddy has joined the channel [20:12] joshr: 0.1.98 installed [20:13] cataska has joined the channel [20:13] _announcer: Twitter: "#nodejs 0.1.98 release with readline and window support: http://bit.ly/9rG8jr (@ryah)" -- Ray Morgan. http://twitter.com/raycmorgan/status/15953062375 [20:13] everton has joined the channel [20:16] CIA-77: node: 03Ryan Dahl 07master * r4e80587 10/ ChangeLog : Add Orlando to changelog - http://bit.ly/aXPlc5 [20:16] tedx: mjr_: maybe it's my terminology (connection fd) that's wrong. Servers have a stream, right? Can the servers stream fd be set to stdin? [20:17] b_erb: argh yet another update waits to be installed on 3+ boxes [20:17] mjr_: tedx: you can't accept new connections on the stdin stream because it isn't a server socket. [20:18] mjr_: inetd has already accepted one for you. As soon as your node program starts up, you can assume you have a new client, because that's what inetd does for you. [20:19] tedx: my server would need to accept connections only service the already established connection [20:19] steadicat has joined the channel [20:19] tedx: would not that is [20:19] _announcer: Twitter: "Connect: a middleware framework for node.js" -- jamescarr. http://twitter.com/jamescarr/status/15953346216 [20:19] mjr_: tedx: that's right. That's what running under xinetd is all about. [20:19] isaacs: so, if request.write() returns true, then that means it wrote it all, right? [20:20] isaacs: and it's safe to do another write immediately? [20:20] mjr_: Most people who use node don't bother with this, because socket and server stuff is all made so easy. [20:20] jakob has joined the channel [20:20] mjr_: But if you are doing C stuff and need to wrangle all the struct sockaddr_in pointer casting, having inetd handle that all is often a big win. [20:20] ryah: isaacs: yes [20:20] Aria: Wooo! 0.1.98. &update; [20:20] _announcer: Twitter: "We open sourced gm, a GraphicsMagick module for #nodejs we use to create your thumbnails! http://github.com/aheckmann/gm /cc @aaronheckmann" -- Clickdummy. http://twitter.com/clickdummy/status/15953421460 [20:20] isaacs: ryah: something very strange is happening. [20:21] isaacs: ryah: so, i rejiggered npm to use the drain event on the http client. that fixed *most* of the failing uploads, but for some reason, jison still doesn't work [20:22] isaacs: ryah: basically, when i call request.end(), it just sits there, and never gets to the "end" event. [20:22] isaacs: ryah: after a second or two, it terminates with no message. [20:22] steadicat_ has joined the channel [20:23] ryah: isaacs: hmmm [20:23] zaach: :( [20:24] isaacs: ryah: doesn't seem to be related to file size. jison's tarball is 230921 bytes, but it's been working with 10MB + files [20:25] tedx: mjr_: there are a number of different reasons to use xinetd a major one being that you don't need long running services taking up resources [20:25] ryah: isaacs: are you using buffer? [20:26] isaacs: ryah: yeah. i've tried allocating a single buffer for the entire file, and separate new buffers in chunks of 1024 or 1024*16 [20:26] isaacs: ryah: same behavior either way [20:27] _announcer: Twitter: ""It's not Rails terrible." :-) @ryah on response times http://blip.tv/file/3735944 #jsconf #nodejs" -- Nathan Youngman. http://twitter.com/nathany/status/15953763079 [20:27] isaacs: ryah: the request.response event never happens, either [20:27] _announcer: Twitter: "node.js v0.1.98 http://is.gd/cLSTl" -- Ruf. http://twitter.com/mvrilo/status/15953792482 [20:28] ryah: isaacs: hm are you use you're sending end()? [20:28] isaacs: ryah: absolutely. [20:29] isaacs: ryah: request.end() call completes immediately, but the response never shows up. [20:30] isaacs: ryah: on the other end in couch, i never see the request come in [20:30] CIA-77: node: 03isaacs 07master * r94be898 10/ (src/node.cc lib/uri.js): [20:30] CIA-77: node: Remove "uri" module. [20:30] CIA-77: node: The deprecation warning was broken, so clearly no one is using this thing. - http://bit.ly/9zZj1e [20:30] CIA-77: node: 03Brian McKenna 07master * r431e72c 10/ (tools/wafadmin/Tools/node_addon.py wscript): Make addon building work for Cygwin. - http://bit.ly/atnQDy [20:31] TommyM has joined the channel [20:32] _announcer: Twitter: "I'm probably one of the few, but I find async programming with #nodejs kind of fun. Maybe just because it's new and unfamiliar." -- Saikat Chakrabarti. http://twitter.com/saikatc/status/15954002210 [20:32] mscdex: there's more than a few :P [20:33] saikat: heh definitely people like nodejs [20:33] saikat: but most people that i hear complaining are people who complain about the async style of programming [20:34] isaacs: ryah: ahh, this is odd! it seems nginx is returning a 408 error. [20:34] ryah: isaacs: but node isn't catching it? [20:34] isaacs: ryah: that's a request timeout [20:34] isaacs: ryah: yeah [20:34] mscdex: i wonder if those same people have programmed in javascript before [20:34] ryah: (i thought you were uploading to couch?) [20:34] isaacs: ryah: i am, but i have nginx on this server delegating between things. and it's not good at it, and it sucks a lot. [20:34] martoche has left the channel [20:35] isaacs: my project this weekend is to put the js-registry on its own host. [20:35] saikat: mscdex: i think rentzch, for example, has programmed in JS before [20:35] saikat: but i remember him tweeting that he still doesn't quite like the async style [20:35] mscdex: because if you've programmed in javascript before, it seems like you'd recognize you've been doing async all along [20:35] isaacs: it's also costing me a small fortune to be uploading all these tarballs to a rackspacecloud site. the registry belongs on the ubercheap prgmr [20:35] mscdex: ah [20:37] isaacs: ryah: so, basically that 408 means that node isn't sending anything for 60 seconds, which is what i'm observing. [20:37] isaacs: ryah: ie, it takes 60 seconds to abort errorlessly [20:38] ryah: isaacs: can you tcpdump it and make sure node isn't doing anything? [20:39] isaacs: gr. as much as i love couchdb's simplicity, it'd be so much easier to just upload the damn tarball, and then have the other end unpack it and make sure everything is kosher. [20:39] isaacs: couch is great for hosting data, but not so much for hosting code and making sure that the data and the code are in sync. [20:45] isaacs: ryah: i'm not too familiar with tcpdump. is there an easy way to limit this to just one server or something? [20:45] isaacs: there's a ton of stuff being output which is clearly just random tcp my computer is doing for various reasons [20:46] mjr_: isaacs: what are you trying to filter? [20:46] isaacs: mjr_: see ryah's comment ^^ [20:46] mjr_: BTW, if my http_trace.js was packaged up better, it would be the perfect tool for you right now. [20:46] isaacs: mjr_: the attempt to upload a tarball to the registry [20:46] mjr_: what port does it come in on? [20:46] isaacs: mjr_: it seems like request.end() isn't doing anything [20:46] isaacs: mjr_: um.. 80? [20:47] ryah: isaacs: sudo tcpdump -s 0 -X -i en1 tcp port 80 [20:47] isaacs: ryah: oh, you mean tcpdump on teh server. duh [20:47] mjr_: instead of -X you can often benefit from -A [20:47] ryah: isaacs: either one [20:47] JimBastard has joined the channel [20:48] JimBastard: man i can really be a dick on the mailing list lol [20:48] isaacs: ryah: on the client, grepping by the ip address, i see 4 connections, and then when it gets to the request.end() nothing happens. [20:48] JimBastard: i should work on my internet etiquette [20:48] isaacs: JimBastard: ..."on the mailing list"? [20:48] JimBastard: ahahahahah [20:48] aconbere has joined the channel [20:48] JimBastard: ive been keep track of help / abuse the noobs in this channel [20:49] JimBastard: im just about .5 [20:49] JimBastard: :p [20:49] JimBastard: i do try to help a lot of people in this room though, it usually works out [20:49] ryan_gahl: good for a batting average [20:49] JimBastard: s/batting/battling [20:49] mjr_: isaacs: if you have httpscoop, that can be easier to work with and understand than tcpdump. If you are willing to put up with rough edges, my node_pcap has an http_trace.js example that I think will tell you exactly what you want. [20:49] JimBastard: i really need to sleep [20:49] ryan_gahl: s/battling/bastarding/ [20:50] JimBastard: im going to prototype this crazy idea until i fall asleep [20:50] JimBastard: dream about how to code [20:50] JimBastard: wake up and code [20:50] ryah: mjr_: we're just trying to see if it sends any data [20:50] JimBastard: repeat [20:50] mikeal: http scoop is great if all your http requests finish [20:50] JimBastard: see yall on the other side [20:50] mikeal: way better than dealing with tcpdump or wireshark [20:50] ryan_gahl: night [20:50] ryan_gahl: meh [20:50] mikeal: but yeah, it could be better [20:50] isaacs: mikeal: but that's just it, apparently it's not finishing, and that's why nginx is 408ing it [20:50] ryan_gahl: ok, trying again... [20:50] mikeal: which is why i'm doing this node_pcap think :) [20:50] ryan_gahl: tmpvar: ping [20:50] _announcer: Twitter: "Thanks to Cygwin we can run the hottest OSS projects on windows: #nodejs (http://bit.ly/9RgTiZ) with #redis (http://bit.ly/awLp9z)" -- Demis Bellot. http://twitter.com/demisbellot/status/15954906814 [20:51] mikeal: what is a good name for an in-browser network debugger that uses node_pcap? [20:51] mikeal: i need to name this repository now [20:51] ryan_gahl: node_pcap_inbrowser_debugger [20:52] mikeal: that sounds like a name i would come up with [20:52] _announcer: Twitter: "Nerds ! : http://bit.ly/aWxnDS #node.js" -- Scott Fitchet. http://twitter.com/figital/status/15954989463 [20:52] mikeal: which means it's not a good name [20:52] mjr_: if you want to filter just data sent by a client to a web server, do this on the client: sudo tcpdump -s0 -A 'tcp dst port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' [20:52] saikat: when i try to do require('./my_file') in node-repl, i keep getting Cannot call method 'lastIndexOf' of null. Checked process.cwd() and it is correct - what could this be? [20:52] ryan_gahl: ;P [20:53] ryan_gahl: mikeal: how about "squash" [20:53] mjr_: that'll show you only packets with data in them, and only packets sent by the client. [20:53] mikeal: there we go [20:53] saikat: the same file loads fine when i require it inside a file and just run the script [20:53] saikat: using node [20:54] ryah: isaacs: what do you think about http://github.com/ry/node/issues/issue/169 ? [20:56] rolfb has joined the channel [20:56] isaacs: ryah: that's a bug. easily fixed [20:56] isaacs: ryah: patch in a minute or two [20:56] isaacs: er.. actually... no, nevermind. scratch what i said. that's weird, and shouldn't happen. [20:56] isaacs: ACTION looking... [20:57] isaacs: nope, i was write. simple and easy to fix. [20:59] thebot has joined the channel [21:01] isaacs: ryah: http://github.com/isaacs/node/commit/05d0dad8ff056b46923e54594190abaeac1a3ea9 [21:02] everton_ has joined the channel [21:02] isaacs: didn't github used to let you link to a commit as a raw patch/diff format thing? [21:02] isaacs: where'd that go? [21:02] thebot has joined the channel [21:03] ryah: http://github.com/isaacs/node/commit/05d0dad8ff056b46923e54594190abaeac1a3ea9.patch [21:03] isaacs: ahh, i see [21:03] voodootikigod_ has joined the channel [21:07] CIA-77: node: 03isaacs 07master * re65e603 10/ lib/repl.js : [21:07] CIA-77: node: Fix #169. Expose require members in the repl. [21:07] CIA-77: node: This fixes #169 by putting the require members onto the cwdRequire function [21:07] CIA-77: node: which is exposed to the repl scope. - http://bit.ly/aGjkq3 [21:07] isaacs: listen, noders. ya'll gotta quit being so good about putting stuff in node when i ask for it. now i've got tons of work integrating the new goodies. [21:08] mikeal: hahaha [21:08] mikeal: the trappist opens at 4 [21:08] mikeal: i'm going there at 4 [21:08] mikeal: delicious cold begian beer [21:08] _announcer: Twitter: "mind being blown by launching remote repl servers in nodejs" -- Robert Brook. http://twitter.com/robertbrook/status/15955765997 [21:09] isaacs: seriously, though, sharing file descriptors with child procs is wonderful. [21:09] TommyM has left the channel [21:09] isaacs: now i can make npm help not-sucky [21:09] mikeal: it's pretty awesome [21:10] bradleymeck: npm getting a search feature for the registry anytime soon (descriptions)? [21:10] isaacs: bradleymeck: as soon as you send me a patch for it, yeah [21:10] isaacs: bradleymeck: so, like, today? [21:10] isaacs: :P [21:10] bradleymeck: give min [21:11] devinus_ has left the channel [21:11] isaacs: bradleymeck: srsly, if you feel like contributing, that'd be great. please refer to man npm-coding-style, though [21:12] isaacs: bradleymeck: then i won't have to reformat your addition :) [21:12] mjr_: mikeal: I'd love to join you, but I'm headed out of town for a vacation early tomorrow morning. I've got mountains of packing and prep work to do to get the whole family staged up for travel. [21:13] mikeal: it's cool [21:18] sztanphet has joined the channel [21:20] hsuh has joined the channel [21:22] isaacs: ryah: ok, i'm pretty sure this 408 thing is nginx being retarded. [21:23] isaacs: man, i was SO hapy with nginx at first. i mean, it's so FAST and easy to set up. [21:23] isaacs: i never thought my heart would be so broken so repeatedly, and with such lack of concern. [21:23] Aria: Heh. Welcome to my world. I've had my heart trod on by Lighttpd and Nginx in rapid succession. [21:24] isaacs: nginx is such a good file server, and such a very very terrible proxy [21:24] isaacs: it's like, just randomly awful. [21:24] ryah: hm, really? [21:24] isaacs: no rhyme or reason to it [21:24] isaacs: ryah: yeah [21:24] mikeal: it's worse when you turn on caching [21:24] isaacs: ryah: which is weird, because it's a nearly perfect file syserver. [21:25] isaacs: ryah: but for some reason a 290,000 byte upload will timeout and fail, and a 300,000 byte upload will work [21:25] isaacs: !!?!?!?!?!??1 [21:25] isaacs: if yo'ure proxying anything other than small GET and POST requests to small resources, it just cannot handle it at all [21:26] isaacs: like, it works just enough to make you think it's working, and then it'll just randomly die in the most unusual ways. [21:26] pquerna: you know there is a great little webserver i heard about called apache. [21:27] mikeal: apache thinks threads are awesome [21:27] isaacs: pquerna: i think i'm gonna just put the registry on the internet directly, and let the couch be out there. whatever. [21:27] isaacs: put the furniture on teh lawn. don't give a fuck any more. [21:27] mikeal: well like [21:27] mikeal: that's kinda what it's built for [21:27] mikeal: erlang can do concurrency :) [21:27] isaacs: mikeal: yeah, i had this idea that i wanted it to be protected, and when it was adminparty, that was reasonable. [21:27] mikeal: people who put apache in front of it tend to have a hard time getting apache to keep up [21:28] isaacs: mikeal: yeah [21:28] mikeal: yeah, don't put it on port 80 in admin party :) [21:28] isaacs: mikeal: also, i'm pretty certain at this point that couch's days as the npm registry are numbered. [21:28] isaacs: npm should be its own registry. it'd actually simplify a LOT of things [21:28] mikeal: this is the peer to peer thing you were talking about [21:28] isaacs: yeah [21:29] mikeal: that's cool [21:29] mikeal: i just don't want to think about implementing like, full text search [21:29] isaacs: then it could just PUT the tarball, and the server could unpack and whatnot. [21:29] mikeal: or even something as simple as tag filtering [21:29] isaacs: rather than this weird multiphase approach [21:29] isaacs: yeah, the metadata management possibilities are much more impressive with couch [21:30] isaacs: and the user management is dead simple, and i'm not looking forward to doing all that in a secure way. [21:30] mikeal: i mean, that's the main use case for the registry [21:30] mikeal: just storing meta info about packages [21:30] mikeal: i don't think it should even really check if they can install properly [21:30] isaacs: well, yeah, but without validating the package data, it's sort of worthless. [21:30] isaacs: not worthless... [21:30] isaacs: just... randomly costly [21:31] mikeal: i like the peer to peer thing [21:31] mikeal: but the protocol for the registry is so simple now [21:31] isaacs: you've got people going "yay, it worked!" but the tarball actually isn't valid, and then someone else tries to install, and it breaks, and they email me. [21:31] isaacs: yeah [21:31] mikeal: it would be trivial to reimplement [21:31] isaacs: it would not be trivial to make it safe, though [21:31] mikeal: and enable peer to peer without making that implementation be the production implementation [21:31] stephenjudkins has joined the channel [21:32] isaacs: mikeal: yeah, i'm thinking i'll probably do p2p, and then when that's solid, make the registry a peer rather than a couchapp [21:32] isaacs: mikeal: i also want to be able to use npm to deploy apps to another host, and p2p would be great there. [21:33] mikeal: it would be nice if instead of this whole virtualenv thing [21:33] mikeal: you just take your npm "database" in your local install and remote it to another box [21:33] isaacs: mikeal: the "database" is just the .cache folder. [21:33] mikeal: right [21:33] mikeal: this sounds like a lot of code tho [21:34] isaacs: and that has all the same info (in json and tarball files) as the registry [21:34] isaacs: but i could have a bare-style that has *only* the tarballs and the json, and no actual install data. [21:34] mikeal: i'm just imagining the first time node crashes in the middle of a write to the cache file [21:34] mikeal: and everything breaks [21:35] isaacs: the cache is a folder full of stuff. [21:35] isaacs: so, what it'd do is just send the tarballs, and if one tarball fails, then it'll get removed or halt or whatever. [21:35] isaacs: but then each tarball will be unpacked, validated, and put in the proper place. [21:35] isaacs: so, it'll be slow, but reliable. [21:36] charlesjolley- has joined the channel [21:39] saikat: isaacs: i'm trying to use your chain util that you use in npm, and i'm wondering - when I chain one function after another, is it possible for the second function to have access to values that were passed into the previos callback? basically, i'm trying to wrap my head around making this gist work with chain - http://gist.github.com/435080 [21:40] mjr_: ryah: website needs a push to reflect HTML changes for new release. [21:40] isaacs: saikat: no, chain doesn't support that. you'll notice in npm that when i do actually need the value, i either start a nested callback at that point, or have an object that gets a member attached and then subsequent callback functions look at the object to get the state. [21:40] ryah: mjr_: oh thanks [21:41] saikat: isaacs: yeah i saw a few places where you start nesting the callback and i was wondering why - i see now [21:41] saikat: thanks [21:41] ryah: mjr_: done [21:41] mjr_: Hey look everybody, no more 2 second sleep in the example. [21:41] isaacs: saikat: it wouldn't be *too* hard to add that functionality, and i considered it, but i don't often need it, so i opted to keep it simpler. [21:42] isaacs: saikat: if i were to make chain into a generic thing, i'd probably make it so that if you do cb(null, some, data) then [some, data] would be the arguments to the next function, before the cb and after any bound args. [21:43] isaacs: mjr_: maybe now n00bs will stop complaining about how the hello world site in node is 1500ms slower than the one in rails!! [21:44] pquerna: in net.js, why is process.nextTick used after the bind before starting to listen? [21:44] isaacs: ACTION zing! [21:45] isaacs: ACTION wonders when the railserati is going to start getting seriously upset over the casual bashing we all do against their platform... [21:45] mde: isaacs: There were a bunch of tweets during RailsConf. They already are. :) [21:46] isaacs: awesome. [21:46] isaacs: if there's one thing i've learned from the rails community, it's that pissing them off is a great way to get a lot of free press. [21:46] isaacs: we should go TP zed shaw's house or something [21:46] mde: Haha [21:46] jashkenas has joined the channel [21:46] mape: isaacs: well can you get a rails app to push 35k req a sec? :P [21:47] mde: Oh, he hates the Rails guys too. But he hates everybody. [21:47] KungFuHamster: did you typo "minute"? heh [21:47] kipe has joined the channel [21:48] saikat: does anyone have a good emacs mode that they use for nodejs stuff? my default javascript mode seems to not like all these indentations with anonymous functions [21:52] charlesjolley- has joined the channel [21:53] kriszyp_ has joined the channel [21:53] joshbuddy has joined the channel [21:53] joshbuddy has joined the channel [21:55] tlrobinson_ has joined the channel [22:00] saikat has joined the channel [22:06] saikat has joined the channel [22:07] saikat has joined the channel [22:07] jdknezek has joined the channel [22:08] cloudhead has joined the channel [22:09] jxson has joined the channel [22:09] isaacs: you know, it's AMAZING how much more productive i am on open source projects than on work projects [22:09] mape: hehe dont let your employer know [22:09] isaacs: it's like, once you hire a product manager, productivity falls through the floor [22:10] isaacs: mape: that's just it, though, i'm pretty productive at work. but in my spare time, it's just SO much more efficient. [22:10] tedx has left the channel [22:10] isaacs: no meetings, no wasted attention, no requirements docs, no PRDs, no scrum, no jira [22:10] isaacs: it's like just the Good Parts of software development. [22:11] mape: I just find it strange more companies don't get it though [22:11] isaacs: i know [22:11] isaacs: i'm trying to figure out how to tell 3 PMs that what we really need right now is to code, and not have any meetings, without sounding like a dick. [22:11] zaach: inertia. software development has changed [22:12] isaacs: it's like, "Hey, people who are supposed to be making our process run smoothly: Please the the fuck out of the way and let me work. kthx." [22:12] mape: isaacs: then what are the PMs suppose to do? You are making them look bad [22:12] isaacs: i mean, it's basically telling them that their job is worthless and they suck at it. [22:12] isaacs: but the thing is, they DO a lot of stuff that has to be done, and it consists of meetings, so they associate "meetings" with "working" [22:13] mape: have them switch jobs one day [22:13] mape: and then just get to work the next [22:15] charlesjolley- has joined the channel [22:15] _announcer: Twitter: "Connect for node.js looks like a very promising middleware system, a la Rack for Ruby. http://howtonode.org/connect-it" -- Greg Ritter. http://twitter.com/gjritter/status/15958919780 [22:16] msokk has joined the channel [22:17] charlesjolley- has joined the channel [22:17] _announcer: Twitter: "Connect for node.js http://howtonode.org/connect-it" -- dave johnson. http://twitter.com/davejohnson/status/15959050480 [22:20] stephenjudkins has joined the channel [22:22] mape: anyone in here had issues with eyes.js? [22:24] derbumi has joined the channel [22:25] isaacs: mape: i've been playing with it [22:25] _announcer: Twitter: "@robertbrook whuaaaauuuuu this is scary! http://nodejs.org/ lost in another dimension... someone hold my hand!" -- redmamba. http://twitter.com/redmamba/status/15959432587 [22:26] tilgovi has joined the channel [22:26] _announcer: Twitter: "@anthonybouch hey no sorry, I use it for development. But its the first time we could use nodejs on windows which is kool!" -- Demis Bellot. http://twitter.com/demisbellot/status/15959466545 [22:26] mape: hmm keep getting Error: EISDIR, Is a directory [22:28] Ori_P has joined the channel [22:28] mape: oh.. [22:30] mape: Just me screwing up the symlink [22:30] stepheneb has joined the channel [22:34] maushu: ryah, see what you did? http://www.theawl.com/2010/06/new-york-times-bans-the-word-tweet [22:34] JimBastard has joined the channel [22:34] JimBastard: I'm glad we have a really easy example of object prototyping in JavaScript that everyone can understand and apply their own knowledge and experience to. Surely this collaborative discussion will yield a fruitful bounty of information in which we can all benefit from. #bastardfacts [22:34] JimBastard: >.< [22:35] dji_ has joined the channel [22:41] tjholowaychuk: creationix: yo, you there? [22:42] tjholowaychuk: im working on the lint middleware, so far so good [22:45] ajpiano has joined the channel [22:47] bradleymeck: isaacs just sent out your patch so i can search for darn descriptions [22:47] isaacs: bradleymeck: neat! [22:48] isaacs: bradleymeck: hey, you know what... that's probably something that should be in the registry's couchdb... [22:48] isaacs: mikeal: how hard is it to do fulltext searching in couchdb? [22:48] isaacs: bradleymeck: but i'll tkae a look at the patch. sounds cool. [22:48] mikeal: you just plug lucene in [22:48] mikeal: someone just revved the docs [22:48] isaacs: plug? lucene? [22:48] mikeal: lucene is a full text indexer someone in Java land wrote [22:49] mikeal: and there is a way to hook it up to couchdb [22:51] mape: java dependency? [22:53] martin1 has joined the channel [22:53] martin1 has left the channel [22:53] isaacs: you know, it would be kinda awesome to have npm host its own registry, but still have a couchapp sitting there, and just sort of mirror the data into it [22:56] mikeal: isaacs: you could just write a replication client [22:56] mikeal: to do the sync [22:56] mikeal: :) [22:56] isaacs: mikeal: orly? [22:57] isaacs: mikeal: how hard is that? [22:59] pzich has joined the channel [23:00] mattly has joined the channel [23:00] mikeal: depends [23:01] mikeal: like, if your datamodel supports versioning of the documents [23:01] mikeal: it's a little harder [23:01] mikeal: if it doesn't it's actually really simple [23:01] mikeal: you just hit _changes [23:01] mikeal: and play the sequences against your datastore [23:01] mikeal: then keep around the sequence index [23:01] mikeal: so you can always hit _changes?seq=number [23:01] mikeal: and get the changes since the last replication [23:02] isaacs: i see... [23:02] mikeal: that would be pull replication [23:02] isaacs: right, i want push [23:02] mikeal: for push, you do the same [23:02] isaacs: like, i want to push npm's p2p registry into couch [23:02] mikeal: you just resolve any local changes since the last replication [23:04] isaacs: i see. [23:05] isaacs: so basically, just keep doing PUTs into the couchdb? [23:06] mikeal: then you do a bulk_docs PUT [23:07] mikeal: then you get the latest seq [23:08] mikeal: after your put [23:08] derbumi has joined the channel [23:08] isaacs: i see... [23:08] isaacs: bulk_docs is a thing? [23:09] mikeal: yeah, you can do bulk doc PUTs with insure_commit [23:10] mikeal: which means "only write these if they all write without a conflict" [23:10] isaacs: interesting [23:11] _announcer: Twitter: "http://bit.ly/aB2Xmx, JSGI for NodeJS (w/ JSGI-Node) is about 290% to 3000% faster than Connect for middleware delegation." -- kriszyp. http://twitter.com/kriszyp/status/15961697502 [23:11] isaacs: cloudhead: hey, is there a way in eyes to get the colorized string without printing it out? [23:11] isaacs: cloudhead: like eyes.inspect without printing? [23:13] sanderjd has left the channel [23:14] mape: returning the output? [23:14] isaacs: mape: like a 1:1 replacement for sys.inspect [23:14] mikeal: kriszyp: where did you get that benchmark? [23:14] mape: oh [23:14] kriszyp: the benchmark files are linked in the blog post [23:15] mikeal: did you test with gzip? [23:16] micheil: is node past middleware now? [23:16] isaacs: ie, i wanna get the colorized string, but not have eyes print it [23:16] micheil: some of the stuff that connect is doing with preforking (and what others on the mailing list are doing), comparing connect and framework XYZ is probably getting hard [23:16] pquerna: anyone want to try out udp patches? [23:17] mikeal: oh i see [23:17] mikeal: yeah, i'm not surprised anymore [23:17] micheil: so, maybe it's time for a generic preforking library (if it doesn't exist already) [23:17] mape: isaacs: jusy use the inspect code and hook the coloring into it? [23:18] mikeal: this test basically shows why the older Connect design is way too much overhead [23:18] micheil: in which you could give a net.Server primitive (so anything that inherits can run on it), and then it preforks out the delegation of responding to events [23:18] mikeal: but creationix is changing it pretty dramatically [23:18] mikeal: and optimizing for streams [23:18] ryah: pquerna: i do [23:19] mravaux has joined the channel [23:20] pquerna: ryah: http://github.com/pquerna/node/tree/udp [23:20] kriszyp: mikeal: the tests were specifically isolating how fast request delegation and middleware delegation are, (which is the alternate to JSGI that connect proposes), so I wasn't focused on the various different implementations of individual middleware apps. [23:20] joshbuddy has joined the channel [23:20] rolfb: i've installed npm, but i can't see npm as an executable. what am i doing wrong? [23:21] isaacs: rolfb: did you install node via homebrew? [23:21] rolfb: yes [23:21] isaacs: rolfb: run this in the node repl: process.installPrefix [23:21] rolfb: repl? [23:21] isaacs: rolfb: that is, run "node" without any arguments, and then type in: process.installPrefix [23:21] micheil: node-repl [23:21] isaacs: and press enter [23:22] isaacs: or run node-repl [23:22] micheil: oh? [23:22] rolfb: doh [23:22] isaacs: (homebrew probably doesn't install the latest node, i'm guessing) [23:22] mikeal: the one released today [23:22] mikeal: i doubt it :) [23:22] rolfb: isaacs: '/usr/local/Cellar/node/0.1.97' [23:23] isaacs: rolfb: add /usr/local/Cellar/node/0.1.97/bin to your PATH [23:23] isaacs: rolfb: the homebrew node recipe isn't right. [23:23] pquerna: ryah: http://gist.github.com/435184 [23:23] isaacs: rolfb: you could pull homebrew from http://github.com/reid/homebrew, which has a fixed node installation [23:24] rolfb: if this works, it's fine [23:24] rolfb: npm is still not available [23:25] mikeal: isaacs: pretty soon we're just going to need to build a distro like ryan says [23:25] isaacs: rolfb: ls -la /usr/local/Cellar/node/0.1.97/bin [23:25] isaacs: mikeal: srsly. [23:25] stephenjudkins has joined the channel [23:25] pquerna: ryah: only change from the original proposal is about getting the size of the recv'ed data out. [23:25] rolfb: there is only node, node-repl and node-waf [23:25] isaacs: rolfb: ok, then something failed. [23:25] isaacs: rolfb: :) [23:26] isaacs: rolfb: when you installed npm, did it say "ok" at the end? [23:26] rolfb: i have something called .node_libraries [23:26] isaacs: rolfb: that's great [23:26] isaacs: rolfb: try running "make" in the npm folder, and then paste the entire log to gist or pastie or something so i can see what happened. [23:26] rolfb: k [23:27] rolfb: doh [23:27] rolfb: now it installed fined [23:27] rolfb: fine* [23:27] isaacs: hehe [23:27] mape: isaacs: why not just add a command in npm that runs a test suite and sends the results to the server of your choice to make the testing easier? [23:27] isaacs: can you scroll back and see what happened the last time? was there any error or anything? [23:27] rolfb: - (i did pull from git again though) [23:27] rolfb: no, it said npm ok then as well [23:27] isaacs: weird [23:28] rolfb: yup [23:28] rolfb: but hey, it's working [23:28] rolfb: \o/ [23:28] isaacs: mape: good idea. i keep meaning to add tests in npm. the tricky thing is that it's so environment-dependent, but i guess it could still run stuff in a subshell or something to test out different sorts of settings. [23:29] rolfb: isaacs: thanks a bunch [23:29] isaacs: but tests are costly and annoying to write. better to just croudsource it. [23:29] isaacs: rolfb: np! :) [23:31] mikeal: that's what Google does [23:31] mikeal: ask anyone with and Android :) [23:31] isaacs: ACTION is part of the google android test swuite [23:31] isaacs: suite [23:32] mikeal: it's not so bad now [23:32] mikeal: the first gen was a lot worse [23:32] isaacs: no, it's quite nice, actually [23:32] mikeal: it like, worked, but it lacked fit and finish and stability [23:32] mikeal: i had to test crap on them [23:33] mikeal: compared to the first gen iPhone at least [23:33] mikeal: which didn't do much, but what it did was solid [23:36] aconbere: <- joining the android test suite shortly [23:42] ryah: pquerna: doesn't seem to work? are you missing a commit to node.cc ? [23:44] ryah: okay got it working [23:44] pquerna: ryah: don't think so.. though I've been using local paths to dgram.js (ie, ./lib/dgram.js) [23:44] cloudhead: isaacs: yea [23:44] jedschmidt has joined the channel [23:45] cloudhead: require('eyes').inspector({stream:null}) [23:45] ryah: pquerna: http://gist.github.com/435198 [23:45] pquerna: ah [23:47] ryah: pquerna: looks good! [23:48] pquerna: i worry about things in the message emitter though [23:48] pquerna: things like you need to copy the message out if you use a setTimer inside it [23:48] [[zz]] has joined the channel [23:48] isaacs: cloudhead: the issue is that then it doesn't put the color codes on [23:49] isaacs: cloudhead: the whole point is that i want the colors, but i want to write the string mysefl. [23:49] isaacs: cloudhead: so i can get colors in the node-repl [23:49] pquerna: as its 1 buffer -> 1 socket [23:49] ryah: pquerna: what? [23:49] ryah: oh yeah, need to change that [23:49] pquerna: in the message callback. If you did a setTimer(2000) [23:49] ryah: what i meant there is that there should be a larger buffer pool [23:49] pquerna: the message could be overwritten [23:49] ryah: var pool = new Buffer(40*1024); [23:50] ryah: and you should write into that [23:50] ryah: toss out the pool when you reach the end [23:50] pquerna: how do you know when you can recycle it? just let the GC handle it? [23:50] pquerna: mmkay [23:50] ryah: pool.slice() out the messages [23:50] ryah: before emitting them [23:50] pquerna: ah [23:51] cloudhead: isaacs: yea, just looking into that right now [23:51] cloudhead: isaacs: I don't remember why I made it work that way, but it doesn't make sense, so I'm fixing it [23:51] ryah: pquerna: if you want to just do a quick hack you can alloc a buffer for each message [23:51] isaacs: cloudhead: there's a line in inspect that checks if (!stream) conf.styles = null or something [23:51] ryah: instead of doing the pool thing now [23:51] ryah: it's just that "new Buffer" actually maps to alloc() [23:51] ryah: so that's going to get expensive [23:51] ryah: hence the pool [23:52] pquerna: well, how do you know when your sliced area is released? [23:52] ryah: (i should probably have new Buffer() use a pool internally) [23:52] pquerna: so you can reuse it [23:52] pquerna: yea [23:52] pquerna: sounds like apr pool allocator :P [23:52] ryah: pquerna: keep an integer to the offset you've filled [23:52] ryah: like pool.used = 123 [23:52] pquerna: yes [23:52] pquerna: okay, and just unref the variable when its full? [23:53] _announcer: Twitter: "@flipsasser I exploited node.js once, but then the plague sent a rabbit after me and crash override had to bail me out. True story." -- Brian Sierakowski. http://twitter.com/bsierakowski/status/15963970277 [23:53] ryah: if (pool.used > pool.length - someThreshold ) { pool = new Buffer(100*1024); } [23:53] pquerna: yeah [23:53] pquerna: okay [23:54] pquerna: only implemented this a dozen times in C i'm sure :) [23:54] ryah: pquerna: net.js does this [23:54] ryah: should only be like 5 lines of code or so [23:54] pquerna: yeah, looking. [23:55] ryah: although net.js is much more complex because it's using that pool for other stuff too [23:56] nixness has joined the channel [23:57] cloudhead: isaacs: yea, I'm removing that, and making it possible to remove styling [23:57] isaacs: cloudhead: neato