[00:00] micheil: shimondoodkin: yes, using eio_custom would be how you would do what isaacs wants [00:00] isaacs: wait, wut? when did sys.inspect stop being comma-first? [00:00] ajpiano has joined the channel [00:01] aheckmann has joined the channel [00:01] micheil: it? [00:01] isaacs: oh, jesus, ryan, srsly... [00:02] isaacs: at least the commit message admits the fact... [00:02] bpadalino: admits what ? [00:02] micheil: do we still wish to have bindings to GetUID / GetUser and GetGid / GetGroup? [00:02] micheil: is ryan no-comma-first? [00:02] isaacs: bpadalino: http://github.com/isaacs/node/commit/d164989 [00:02] isaacs: "Ugly? Yes. More readable by first time users? Yes." [00:02] Tim_Smart: Heh its been a while since I last did `svn checkout` [00:02] isaacs: i want an switch to put it back.. [00:02] isaacs: it's so painfully ugly [00:03] micheil: oh, yay! flood warnings for my region :( [00:03] micheil: and they are busy cutting 45% of the water allocation from the farms.. [00:03] bpadalino: ah [00:03] Tim_Smart: isaacs: You will get over it. [00:03] micheil: wtf. [00:03] bpadalino: weaksauce [00:03] isaacs: Tim_Smart: nah, i'll just float a patch [00:03] isaacs: it's a simple one [00:03] Tim_Smart: isaacs: Or that. [00:04] murz has joined the channel [00:04] isaacs: things not lining up makes my brain hurt [00:05] isaacs: i think node needs to do less to accommodate long-time javascripters who are first-time noders, and more to accommodate first-time javascripters [00:06] murz has left the channel [00:07] shimondoodkin: now the barier of knowlage level required is very high [00:07] bruse: node is a little confusing to me as a first-time javascripter (but decent coder in other languages) [00:07] shimondoodkin: my potencial workers say its a new languga [00:07] bruse: its errors are not very helpful a lot of the time [00:07] bpot has joined the channel [00:07] isaacs: bruse: they're more helpful than my first javascript experiences. [00:07] isaacs: alert("hello from msie 5.0") [00:08] bruse: ah, i did that too [00:08] isaacs: and lemme tell you, msie5 was a fuckin GODSEND [00:08] isaacs: compared to NN4 or IE 5.2 [00:08] isaacs: and IE 4 was a joke [00:08] bruse: ie5 was pretty nice if i remember correctly [00:08] shimondoodkin: bruse:you need todo console.log(err.stack) [00:08] bruse: you got away with some horrible stuff [00:08] bruse: but that was what, 12 years ago? [00:08] isaacs: Tim_Smart: http://github.com/isaacs/node/commit/096bb6fb673c3c8080897eb70cfecad9a81484de [00:08] bruse: i couldnt code back then. [00:09] isaacs: ACTION suddely feels very old [00:09] micheil: isaacs: you make me feel young :( [00:10] micheil: :P [00:10] shimondoodkin: i was like 13 my first sitesa ware fo netscape 3.2 and ie4 [00:10] isaacs: micheil: no, your age makes you feel young. [00:10] isaacs: micheil: remember when that "internet" thing came out? [00:10] micheil: I was 6 when msie5 was about. [00:10] matt_c has joined the channel [00:10] micheil: I turn 18 next week. [00:10] bruse: i've been coding c for 10 years apparently :/ [00:10] isaacs: i saw on the twitterz [00:10] isaacs: happy birthday :) [00:10] micheil: cheers. [00:11] micheil: can't believe I couldn't get into a gig on tuesday when I was 8 days away from being 18. [00:11] isaacs: the thing about turnign 18 is that they say it takes 10 years to get realy good at anything, so when you're 18, you'er basically like a master-level 8 year old. [00:11] micheil: that was seriously crap. [00:11] bruse: micheil: this one time some bouncers wouldnt let me in because i was 3 days too young [00:11] isaacs: ACTION trying to see the bright side of being over 30... [00:11] aurynn: the 10,000 hour problem. [00:11] bruse: not 3 days too young to be legal to drink, mind you, but 3 days too young for this bars policy [00:11] micheil: isaacs: hmm.. well, I'm not sure where you'd put me then. considering I've had people think I'm 28. [00:11] isaacs: aurynn: right. [00:12] isaacs: micheil: just cuz someone's wrong about something, doesn't make it reality ;) [00:12] shimondoodkin: im 26 so.. [00:12] isaacs: micheil: if people think you're 18 when you're 28, then that'll be something to be proud of. [00:12] micheil: lol. [00:13] micheil: isaacs: ryan's in st louis, right? [00:13] isaacs: micheil: you should comment here instead: http://github.com/ry/node/commit/d164989e3fd7199ad8905d884c378eecc60f51ee [00:14] isaacs: micheil: otherwise youer' just preaching to the choir :) [00:14] isaacs: yeah [00:14] micheil: yeah. [00:15] bruse: so, matlab [00:15] bruse: there's an interesting language [00:15] bruse: i have a love hate relationship with it [00:16] bruse: but honestly, it's mostly hate [00:16] micheil: isaacs: http://groups.google.com/group/nodejs-dev/browse_thread/thread/83c04c0157eddc2c?hl=en_US# [00:16] isaacs: bruse: you know how i made peace with matlab? [00:16] micheil: (that should really be in a sys module.) [00:16] bruse: isaacs: please tell me [00:16] isaacs: bruse: i left college. [00:17] bruse: :) [00:17] bruse: i get to do a lot of interesting stuff in matlab (in college) [00:17] isaacs: micheil: how do those ones work? [00:17] bpadalino: where did you leave it ? [00:17] micheil: isaacs: using eio_custom [00:17] isaacs: bpadalino: in CT [00:17] bpadalino: very nice [00:17] bpadalino: that's a good place to keep it [00:17] isaacs: micheil: i mean, do you pass in a uid and get the name, or is it just "get the name of the current process"? [00:17] micheil: isaacs: they are part of the GNU C libraru [00:18] bruse: just this week i've reconstructed 3d models from 2d images and made a melody rechognizer where you hum parts of a song and it tries to match it to the real one [00:18] micheil: isaacs: have a read: http://gist.github.com/625267 [00:18] bruse: recognizer* [00:18] isaacs: interesting [00:19] micheil: isaacs: getpwuid or getpwnam_r [00:19] softdrink has joined the channel [00:19] bpadalino: matlab costs too much money to rely on it :( [00:19] micheil: isaacs: and yes, I was working on a new module for node's core called node_os [00:19] bruse: bpadalino: you're probably right [00:20] bruse: i bet octave, R, or even numpy works as well for most things [00:20] bpadalino: though if i could buy stock in matlab, i probably would .. give it away to students/academics .. and it forces industry to adopt it since all the new talent knows how to use that [00:21] bruse: no one really knows how to use matlab [00:21] bpadalino: that's quite a bold claim [00:22] davidascher has joined the channel [00:22] bruse: after 4 years of matlab i'm entitled to it [00:22] bpadalino: again, another bold claim [00:22] bpadalino: very interesting [00:22] bruse: i'm only bold on the internet though [00:22] bruse: meet me in person and i have no opinions [00:23] micheil: isaacs: check out ryan's bio on: http://strangeloop2010.com/speakers [00:23] freeformz has joined the channel [00:23] micheil: isaacs: it doesn't mention node.js creator at all, only in his talk title. [00:23] micheil: :D [00:24] micheil: isaacs: that file does also half work. [00:25] bpadalino: it's just a little side project [00:25] heavysixer has joined the channel [00:29] dnolen_ has joined the channel [00:30] Tim_Smart has joined the channel [00:31] tapwater has joined the channel [00:32] davidascher has joined the channel [00:34] langworthy has joined the channel [00:34] ehaas has joined the channel [00:38] iheartnodejs has joined the channel [00:38] iheartnodejs: :-D [00:38] Tim_Smart has joined the channel [00:40] tyfighter has joined the channel [00:41] tksohishi has joined the channel [00:42] Tim_Smart has joined the channel [00:45] bradleymeck has joined the channel [00:46] rcy has joined the channel [00:47] micheil: isaacs: with C/C++, if it's char **name, then you can do &name when calling the function, right? [00:47] isaacs: if it's char**, then &name is a char* [00:48] isaacs: ie, it's the first string in the list of strings [00:48] isaacs: &name roughly = name[0] [00:48] isaacs: not exactly the same, though [00:48] isaacs: there are a few subtle diffs, which i dont' remember at the moment [00:48] unomi has joined the channel [00:48] micheil: okay [00:48] micheil: just looking at the differences between getpwnam and getpwnam_r [00:49] tjholowaychuk: micheil: char ** is a pointer to several character pointers lol if that makes sense aka array of c "strings" [00:50] micheil: okay [00:50] tjholowaychuk: char == one character, char * == pointer to a character (when in sequence makes up a c string) [00:50] tjholowaychuk: and char ** is an array of character pointers [00:50] micheil: okay [00:50] tjholowaychuk: kinda weird [00:50] tjholowaychuk: but you get used to it [00:50] tjholowaychuk: and then it makes sense [00:50] micheil: ACTION will need to read more into C/C++ syntax [00:50] Tim_Smart: char** is a pointer to a pointer [00:51] tjholowaychuk: micheil: read it from right to left. "*" pointer to a "*" pointer to a "char" [00:51] tjholowaychuk: kinda [00:51] tjholowaychuk: haha [00:51] tjholowaychuk: i probably dont make sense [00:52] Tim_Smart: E.g. if you had char 255 in memory at location 1000, char* would be a pointer '1000' at location '2000, so char** would be '2000', at location '3000' ;) [00:52] ehaas: just use cdecl [00:52] micheil: tjholowaychuk: yeah, you do. [00:52] skohorn has joined the channel [00:53] Tim_Smart: Then you just use & to walk your way backwards. [00:53] tjholowaychuk: im out, later guys [00:54] jakehow has joined the channel [00:56] tapwater has joined the channel [00:57] sonnym has joined the channel [00:58] mbrochh has joined the channel [00:58] mbrochh has joined the channel [00:59] Yuffster has joined the channel [01:02] bruse: pkrumins: that is an awesome node module, indeed [01:05] tilgovi_ has joined the channel [01:06] MattJ has joined the channel [01:06] micheil: bruse: which module? [01:06] bruse: http://www.catonmat.net/blog/lazy-lists-javascript-nodejs [01:08] SubStack: ^_^ [01:11] micheil: SubStack: it'd be cooler to do: db.limit(8).filter(...) [01:11] micheil: which would do take(8), but set it as a limiter [01:12] micheil: so each function afterwards would only be allowed to return that number of items [01:12] mikew3c has joined the channel [01:13] SubStack: micheil: return? [01:13] micheil: yeah [01:13] micheil: I guess not return [01:13] SubStack: I don't follow [01:13] micheil: but same idea. [01:14] micheil: in the sense that the last function will only receive X number of items [01:14] SubStack: well you could just put a .take(n) at the end before a .join or a .forEach to use the result [01:15] SubStack: yeah just put the take before the function you want to limit [01:15] micheil: creationix: for howtonode perhaps? http://tiptheweb.org/ [01:15] micheil: k [01:16] creationix: micheil: nah, I already feel bad having the mediatemple badge on there [01:16] micheil: creationix: why? [01:16] micheil: the hosting costs need to be covered some how. [01:16] creationix: it's a slippery slope [01:16] creationix: the hosting cost is nothing compared to the time it takes to write the articles [01:16] creationix: really, nothing [01:16] SubStack: micheil: take works like SIGPIPE also if that's what you mean [01:17] micheil: k [01:17] creationix: micheil: I'll think about it [01:17] SubStack: that's the part that I hacked in [01:17] micheil: creationix: well, yeah, please do. I think people want to be able to support great content. [01:17] SubStack: it sends a 'pipe' event up the chain which stops processing [01:18] micheil: creationix: I suppose if I wrote an article on how to do eio_custom modules, then that probably should go on a personal blog though. [01:18] micheil: bit too indepth for htn [01:18] creationix: micheil: as long as you keep it short it's fine [01:18] isaacs: ok, i'm gonna have to read up on ev tonight. [01:18] creationix: up to you where you put it [01:18] isaacs: god DAMN callbacks are crappy in C [01:18] micheil: creationix: well, it's a fairly in depth process. [01:18] creationix: we certainly need more people with c experience [01:19] isaacs: ev_set_allocator (void *(*cb)(void *ptr, long size)) [01:19] creationix: hmm, tiptheweb is private beta [01:19] micheil: isaacs: there's a reason that stuff is all "aliased" in node [01:19] creationix: considering they just won a hige award, the list is probably long [01:19] andrewfff has joined the channel [01:19] marienz has joined the channel [01:19] micheil: creationix: sides' I just signed up., [01:20] creationix: micheil: cool [01:20] micheil: I'll let you know if I get in. [01:20] derferman has joined the channel [01:22] micheil: seriously, if people want to support my projects and work, I'll take the money because it allows me to spend more time doing what I love. [01:22] paulr has joined the channel [01:22] isaacs: i have kind of a problem with tip the web [01:22] isaacs: tipping just seems dumb to me. i never really got it. [01:23] isaacs: i get that if you don't tip waiters or pizza deliverers, it's the social equivalent of murdering a puppy, but i mean, seriously [01:23] micheil: isaacs: in the sense that you give a bit of money to support a project / piece of content [01:23] isaacs: you don't tip your doctor or your mechanic [01:23] isaacs: micheil: right [01:23] micheil: not the US sense of tipping [01:23] isaacs: but tipping as a whole just seems like an odd and stupidly arbitrary thing [01:23] isaacs: micheil: that IS the US sense of tipping [01:23] micheil: if you want to give me money for the projects I work on, I'm not going to complain. [01:23] isaacs: don't get me wrong, people have given money to npm [01:24] isaacs: but i don't expect it, and thinking of it as a tip just seems almost derrogatory to either me or them for some reason, i'm not sure. [01:24] isaacs: i mean, i never left a $50 tip for a waiter. [01:24] micheil: isaacs: not at all. [01:24] guybrush: just replace the word 'tipping' with 'supporting' in your mind [01:24] guybrush: its about how it works, not how its named [01:24] micheil: isaacs: it's the wrong meaning of tipping. In australia, it's not a required thing or anything like that, it's just like, if you want to, then you can. [01:25] isaacs: guybrush: right... but then why not give it a substantial amount of money? and set aside a specific portion of your budget to help out projects based on how you use them? [01:25] isaacs: the whole idea of a tip is that it's money you won't miss, dropped in a jar that only amounts to something of substance if everyone does it. [01:25] isaacs: it's a percentage game. [01:25] micheil: have you ever heard of that happening? [01:26] isaacs: for instance: i give to FFRF and Norml, because they're charitable organizations that actively try to make my world more like how i want it to be. [01:26] SubStack: I would rather restaurants paid their workers decent wages and prices were raised accordingly [01:26] micheil: like a company putting money into a project they use like npm or something like that? [01:26] unomi has joined the channel [01:26] aubergine has joined the channel [01:26] isaacs: nothing wrong with your "save the puppies" fund, and i'm all about saving puppies, but a dollar given to that charity is a dollar not given to this other one. [01:26] aubergine: missed that last comment [01:26] isaacs: SubStack: RIGHT!? how much better would that be!? [01:27] aubergine: oops, wrong # sorry [01:27] isaacs: i've often wondered if i could maybe declare that i have a religious objection to tipping, and then just abstain from the whole enterprise. [01:27] creationix: isaacs: how reliable is the ferry [01:27] creationix: this looks like fun http://www.adsinusa.com/c/3728/3728p4031.htm [01:27] isaacs: creationix: it's reliable, but it only comes like 3 times [01:27] creationix: hmm, so getting back home could be a problem [01:27] Aria: ACTION is kind of a fan of tipping, but would love it if we had a reliable wage law in the US, and a way to support people doing good but not financially rewarding things. [01:27] isaacs: o the tiburon ferry.. i dunno [01:28] isaacs: creationix: where you at? [01:28] creationix: currently? [01:28] isaacs: ya [01:28] creationix: Palo Alto [01:28] isaacs: Oh, you mean, like, if you moved to tiburon and worked in teh city or something. i grok. [01:28] creationix: yep [01:28] creationix: it's a long ferry ride [01:28] isaacs: yeah [01:28] creationix: not sure it would be worth it [01:28] micheil: tliburon? [01:29] isaacs: there are some joyeurs that live in marin [01:29] creationix: micheil: http://maps.google.com/maps?f=d&source=s_d&saddr=845+California+Street,+San+Francisco,+CA&daddr=65+Red+Hill+Cir,+Belvedere+Tiburon,+CA+94920+(65+Red+Hill+Cir,+Belvedere+Tiburon)&hl=en&geocode=%3BCXepsaO_2NgIFfgGQgIdP2Kz-CEiERtGTpfnNg&mra=ltm&dirflg=r&ttype=dep&date=10%2F13%2F10&time=6:19pm&noexp=0&noal=0&sort=&sll=37.871059,-122.420826&sspn=0.098108,0.17664&ie=UTF8&ll=37.838259,-122.431297&spn=0.098152,0.17664&z=13&start=0 [01:29] creationix: yikes, should have shortened that one [01:29] creationix: sorry about that [01:29] micheil: no worries. [01:29] micheil: I'll just type it out by hand into my address bar. [01:30] creationix: lol [01:30] micheil: haha [01:30] isaacs: creationix: i've considered taking the oakland ferry, but it's only comes like 4 times a day [01:30] isaacs: creationix: so i'd have to either leave the house by 7:30 or not get to work until 11 if i miss it [01:30] isaacs: somethign like that [01:30] creationix: yeah, I'm not thinking this would work [01:31] creationix: though driving from sausalito doesn't seem too bad [01:31] Tprice has joined the channel [01:31] isaacs: yeah, and riding the scooter all the way around and over the GG would suck [01:31] rwaldron has joined the channel [01:31] creationix: hmm, wind [01:31] c4milo has joined the channel [01:34] marshall_law has joined the channel [01:36] rednul_ has joined the channel [01:39] pengwynn has joined the channel [01:41] melgray has joined the channel [01:45] bronson has joined the channel [01:47] marienz has joined the channel [01:48] jchris has joined the channel [01:49] shripadk has joined the channel [01:50] shripadk: bradleymeck: ping! sorry i timed out. bad connectivity.. [01:52] megana has joined the channel [01:52] megana: Hi node.js! Does anyone know why my node app won't close after I open a db connection to mongodb? [01:54] gf3 has joined the channel [01:54] micheil: megana: because there's still something on the event queue [01:54] micheil: megana: if you want to close it, either, ctrl+c it (SIGTERM, iirc) [01:54] megana: what is that? [01:55] micheil: it's the way that node notifies your code that stuff is happening or expected to happen [01:55] megana: oh [01:55] micheil: when you have no more connections such as network, http, or file streams open, node will automatically exit. [01:55] megana: do you know if it's wise to use a singleton on a node webapp for a database connection? [01:55] micheil: singleton? [01:56] micheil: as in one connection to a database? [01:56] megana: I open a connection to mongodb and then everyone uses it [01:56] megana: yeah [01:56] micheil: depends on the amount of traffic. [01:56] micheil: just with any other platform [01:56] megana: a billion users! [01:56] creationix: I use 500 concurrent connections to my couchdb [01:56] creationix: both couch and node like concurrency [01:56] megana: ohh [01:56] micheil: but, yes, a connection pool may be a good idea. [01:56] megana: why not make 1 per user? [01:56] bpadalino: don't pee in the pool [01:56] micheil: megana: you'd run out of file descriptors [01:57] creationix: megana: you don't want to create a connection per request [01:57] micheil: iirc, you have a maximum of 65567 [01:57] creationix: you'll want a pool of some sort [01:57] micheil: or something [01:57] megana: okay [01:57] megana: so is there a magic number of users to connections? [01:57] micheil: megana: just check with the connection is busy or not [01:57] creationix: mongo was optimized for fast responses and probably less for concurrency [01:57] creationix: you'd have to play around and find a good number [01:57] micheil: creationix: redis + biggie ftw. [01:58] megana: I see [01:58] micheil: creationix: maybe there's a use case for a connection pool / function / constructor pool module? [01:58] megana: so do you just create 500 couch objects and call open on them all? [01:58] EvanDotPro has joined the channel [01:59] micheil: hmm, I wonder if it'd be fun to get an arduino, hack together a rfid reader/scanner, and hook it up to node [01:59] micheil: megana: sort of. but allocate as needed. [01:59] micheil: megana: node does this internally for some things, iirc. [01:59] micheil: (that's what freelist is for, iirc) [01:59] creationix: megana: no, my pool is within the couch client [01:59] tksohishi has left the channel [01:59] creationix: so one client with 500 connections [02:00] megana: oh [02:00] creationix: and I create them on demand [02:00] micheil: megana: it's sort of you have an array with a maximum amount that it can grow to. [02:00] EvanDotPro: so, i swear i've googled this... with an http.Client object, can you specify which interface it uses? if i request fails on one interface, i want to try it again on another... [02:00] creationix: but then at 500 I start re-using the connections and requests simply queue up [02:00] micheil: there's no point having 500 db connections if you only have 1 user [02:00] megana: creationix, so this is all handled by the driver? o_O [02:00] MikhX has joined the channel [02:00] micheil: EvanDotPro: I don't think so. I may be wrong. [02:00] creationix: EvanDotPro: last I checked, you can't specify the interface, just the ip [02:01] creationix: megana: the client, yes [02:01] megana: yeah [02:01] micheil: megana: in the case of the mongodb drivers, I don't think it is. [02:01] megana: I wonder if mongo's does that too... [02:01] megana: oh [02:01] megana: zing! [02:01] creationix: it's hardly a driver since it's just a wrapper around http [02:01] creationix: http://github.com/creationix/couch-client [02:01] EvanDotPro: creationix: well IP is fine... with how my server is set up, that will make it use the interface i'm wanting. [02:01] micheil: megana: perhaps try the mongoose driver? [02:01] creationix: there are lots of drivers/clients [02:01] micheil: I know it does a bunch of fancy stuff, maybe it does connection pooling too. [02:01] megana: the mongoose driver? [02:01] megana: okay [02:02] micheil: it's on the module list page [02:02] micheil: http://github.com/ry/node/wiki/modules [02:02] creationix: mongoose is by the same guys as socket.io [02:02] creationix: roughly [02:02] micheil: yeah [02:02] megana: thhanks for all the infos! [02:02] micheil: learnboost [02:03] micheil: man.. I'm loving this work I'm doing in C/C++ [02:03] megana: why? [02:03] micheil: even if some things are a bit slow hard. [02:03] EvanDotPro: i must be missing where i can specify which IP the http.Client uses. [02:03] megana: C is the language where your code looks like a stary sky [02:03] megana: *********** [02:04] micheil: megana: because, I'm doing work with the core of node, and also doing a bit of fun stuff with Fuse and serial ports [02:04] micheil: megana: node is lowlevel / thin C bindings + javascript [02:04] megana: what does it look like? [02:04] micheil: view the source tree: http://github.com/ry/node [02:04] creationix: EvanDotPro: hmm for client [02:05] creationix: not sure about that [02:05] creationix: I was talking about server [02:05] EvanDotPro: yeah, i saw it on the server. [02:05] micheil: hmm.. creationix any ideas why the module is style net2 and not net? [02:06] EvanDotPro: weird omission for the client... it's a pretty important feature. i've got two internet connections to the box, and if a request fails on one, i need it to try it from another. [02:06] creationix: micheil: nope, I haven't really been tracking the 0.3.x stuff [02:06] micheil: EvanDotPro: yeah, makes sense [02:06] micheil: creationix: I'd be interested to know if it should be moved. [02:06] micheil: creationix: considering I've done the other move patches. [02:06] creationix: I know a long time ago net2 was the net rewrite into javascript [02:07] creationix: and that's the version we're using still [02:07] micheil: yes [02:07] micheil: I'm thinking it can now safely be renamed to just net [02:07] creationix: well, ryah was talking about possibly going back to implementing i tin c [02:07] micheil: I'm thinking now would be a great time to really clean up the code [02:08] hsuh has joined the channel [02:08] creationix: perhaps, just make sure to ask ryan before doing any refactoring [02:08] micheil: yeah [02:11] necrodearia has joined the channel [02:13] mjr_ has joined the channel [02:15] Tim_Smart has joined the channel [02:19] dguttman_ has joined the channel [02:21] bentruyman has joined the channel [02:22] hzin has joined the channel [02:23] MikhX has joined the channel [02:25] technoweenie has joined the channel [02:25] mikeal has joined the channel [02:25] mbrochh has joined the channel [02:26] gerred has joined the channel [02:27] melgray has joined the channel [02:29] bencc has left the channel [02:29] dohtem has joined the channel [02:29] dohtem has joined the channel [02:33] yhahn has joined the channel [02:33] shimondoodkin: in c how to return a __dirstream hande as javascript variable [02:34] shimondoodkin: tried varius staff like argv[0] = Local::New(sr->dir); [02:35] davidwalsh has joined the channel [02:39] jamescarr_ has joined the channel [02:39] jamescarr_: hmmm [02:41] dannycoates has joined the channel [02:41] gf3 has joined the channel [02:41] meso has joined the channel [02:44] shimondoodkin: http://gist.github.com/625445 [02:50] dgathright has joined the channel [03:00] jakehow has joined the channel [03:02] bpot has joined the channel [03:04] gf3 has joined the channel [03:06] jameshome has joined the channel [03:10] noahcampbell has joined the channel [03:11] shimondoodkin: found a better starting point [03:12] Tim_Smart: shimondoodkin: Wouldn't a DIR handle just be an int? [03:13] shimondoodkin: no its a stream pointer to a pointer [03:13] shimondoodkin: id do it from this: http://github.com/pquerna/node-extension-examples/blob/master/helloworld_eio/helloworld_eio.cc , it an object [03:14] Tim_Smart: Ah ok. [03:14] ryah: deanlandolt: we can't change slice - but we can add range [03:14] ryah: deanlandolt: and try to phase it out [03:14] ryah: did krisk call it range? [03:15] ryah: not sure if it matter so much. slice or range.. [03:15] Tim_Smart: ryah: Did you see http://izs.me/v8-docs/ ? [03:15] ryah: but yeah, if you feel strongly about it [03:16] ryah: Tim_Smart: yes [03:16] deanlandolt: ryah kris k and Wes called it range, yeah...but folks round here thought view may make more sense (considering that's what it's called in WebGL typed arrays) [03:16] Tim_Smart: range seems more human. [03:16] shaver: ask Wes, he'll tell you I'm right [03:16] ryah: it's likely we're going to have to hit a big API change later [03:16] deanlandolt: but having slice /not/ copy is the real problem [03:17] Me1000 has joined the channel [03:17] deanlandolt: and as it stands now it won't break /that/ much code [03:17] ryah: to come in line with type arrays (or whatever wins out) [03:17] SubStack: range like an array generator? [03:17] shaver: generators! [03:17] shaver: did v8 get generators? [03:17] ryah: maybe we should just not make changes until then [03:17] deanlandolt: ryah good point :) [03:17] SubStack: shaver: not a Generator, a generator [03:17] dannycoates: Tim_Smart: that link is sweet! [03:17] SubStack: something which generates [03:17] mw has joined the channel [03:18] Tim_Smart: dannycoates: Yeah I can see it being useful. [03:18] deanlandolt: none the less you have to admit that not matter what slice /would/ copy if it landed in any of these apis [03:18] SubStack: i should get around to writing that monkey patcher lib I have planned [03:18] SubStack: so I won't feel too bad about stuff like [03:18] deanlandolt: so to me the sooner you can move away from that the better...and 0.3 seems like a perfect opportunity [03:18] SubStack: Number.prototype.times = function (n, f) { for (var i = 0; i < n; i++) f(i) } [03:19] overra has joined the channel [03:19] ryah: deanlandolt: i waffel back and forth when i think about buffers.. [03:19] ryah: lately i've been thinking something immutable would be better [03:19] ryah: maybe not.. [03:19] deanlandolt: yeah, seems like everyone waffles on that :) [03:19] shaver: immutable length is the key thing for optimizations [03:19] deanlandolt: i'm trying to marry the mutable and immutable apis [03:19] Tim_Smart: ryah: Have you played with ExternalStringResource? [03:20] SubStack: oh whoops I mean [03:20] deanlandolt: (just for the most /basic/ uses) [03:20] shaver: otherwise you can CSE most of the stuff you want [03:20] SubStack: Number.prototype.times = function (f) { for (var i = 0; i < this; i++) f(i) } [03:20] ysynopsis has joined the channel [03:21] deanlandolt: i'm not suggesting one over the other (i kinda like the idea of both)...just that the slice function behave like js...no matter what got specified by tc39 that's one constant i can guarantee they'd shoot for :) [03:24] sonnym: hey, is there any trivial way to use the assert module to check if two arrays contain all the same values? [03:24] sonnym: deepEqual is false when they're not in the same order [03:25] shaver: deepEqual on sort? [03:25] sonnym: touche. [03:25] sonnym: thanks :) [03:25] shaver: if deepEqual(a.sort(), b.sort()) [03:25] jedschmidt has joined the channel [03:25] deanlandolt: sonnym: do you want identity equality or just coerced string equality? [03:25] shaver: then you get the terrible lexicographic-sort-of-numbers thing [03:25] deanlandolt: deepEqual forces all kinds of checks IIRC...if you just want == you can toString them and == the values [03:26] alexb_ has joined the channel [03:26] shaver: yeah, once they're in order [03:26] sonnym: so equal(a.sort().toString(), b.sort().toString()) would probably be better? [03:26] Tim_Smart: I almost always use === [03:26] deanlandolt: yeah, there ya go [03:26] Tim_Smart: Oh, assert >.> [03:26] shaver: every time I do that I end up screwed by the difference between an empty string and a missing element [03:26] shaver: or 5 vs "5" [03:27] shaver: and yet, every time I convince myself that it'll be OK *this* time [03:27] deanlandolt: Tim_Smart: same, but if you're just testing things sometimes you want ==...in that case you don't have to worry about some of the gotchas [03:27] shaver: so I'm probably not a good source of advice [03:27] jedschmidt: is npm down? npm install npm => Error: ucs {bad_utf8_character_code}: npm [03:27] deanlandolt: jedschmidt: that's a couch error [03:28] jedschmidt: deanlandolt: yeah, same one as last time. [03:28] deanlandolt: (at least, that's an erlang atom) [03:28] jedschmidt: deanlandolt: it happens anytime i try to install anything. [03:28] sonnym: hmm require("assert").equal([1,2].sort().toString(), [2,1].sort().toString()); works [03:29] deanlandolt: jedschmidt: i'm getting that too [03:29] jedschmidt: deanlandolt: yeah, this happened last week IIRC. was a couch problem. blarg. [03:29] sonnym: as does require("assert").deepEqual([1,2].sort(), [2,1].sort()); . . . which is probably what I really want [03:30] deanlandolt: no mikeal or isaacs either....hmm [03:30] deanlandolt: sonnym: sure, that's probably your best bet [03:30] JimBastard has joined the channel [03:31] deanlandolt: what's awesome about the npm index is it's a couchapp so it should distribute nicely...apparently what *sucks* about the npm index is that it's a couchapp that's not actually distributed :) [03:31] jedschmidt: deanlandolt: ha, i guess i'll just have to wait then. thanks. [03:32] deanlandolt: has anyone in here replicated the npm index?? [03:32] Aria: Also that bad data keeps getting into it. [03:33] deanlandolt: Aria: bad data? oh if only mikeal were here...so many jokes [03:33] Aria: Heh. [03:33] deanlandolt: shoulda put it in mongo :) [03:34] deanlandolt: (and i'm obviously completely kidding unless anyone takes that seriously) [03:34] jedschmidt: deanlandolt: don't worry, your jokes are web scale. [03:34] deanlandolt: ha! [03:37] JimBastard: i totally just got to troll one of the reddit founders in person [03:37] JimBastard: it was kinda glorious [03:38] jedschmidt: JimBastard: did you mean: _tedious_? [03:38] JimBastard: i submitted something to reddit once, why didnt it get upvotes [03:38] JimBastard: then i showed him the reddit rap [03:38] JimBastard: good times [03:39] hsuh has joined the channel [03:41] SubStack: JimBastard: alexis? He's in NYC right [03:42] davidwalsh has joined the channel [03:42] jesusabdullah: ahahaha, the reddit rap [03:42] JimBastard: SubStack: aye [03:42] jesusabdullah: That was painful XS [03:42] jesusabdullah: But awesome [03:43] JimBastard: i made him play the reddit rap on his cell [03:43] jesusabdullah: It's in my faves [03:43] JimBastard: ohh its terrible lol [03:43] jesusabdullah: :D [03:44] Tyler has joined the channel [03:44] davidascher has joined the channel [03:45] derferman has joined the channel [03:47] Tprice: why does this not work [03:47] Tprice: message = JSON.parse(message); [03:48] Tprice: it keeps giving me errors [03:48] deanlandolt: because message is invalid json [03:50] tilgovi has joined the channel [03:51] deepthawtz has joined the channel [03:51] Aria: (json needs quoted attribute names. javascript does not. It'll trip most people up more than once.) [03:52] alexb_: Double quotes only [03:52] deanlandolt: yeah, and no undefined, Infinity, -Infinity, NaN, dates...etc [03:52] cloudhead has joined the channel [03:53] deanlandolt: true, false, null, string, number, array, object...that's /it/ [03:55] micheil: deanlandolt: actually, believe it or not, tail.thechangelog.com uses mongo (it's currently down while we rewrite the ruby app that crashed) [03:56] micheil: we had something close to several billion documents, I'm sure of it. [03:56] micheil: considering there is something like 25 github events every 1.8 seconds. [03:56] deanlandolt: i believe it...i'm not really knocking mongo as much as knocking couch for being 'reliable' compared to mongo :) [03:56] JimBastard: mongoloid db [03:56] JimBastard: INAPPROPIATE [03:56] micheil: yeah, that's just a nice stat there. [03:57] deanlandolt: still, jed's joke was f'ing webscale [03:57] micheil: yeah [03:57] micheil: just sayin' [03:58] micheil: each database can get bad wrap. don't just take one person's blog article or one event to throw you off. [03:59] deanlandolt: hey, i got nothing but love for mongo...i don't use it personally but i understand the issues mikeal was pointing out and it sounds like mongo's taking steps to address them (as mysql did when they were pointed out)... [04:00] deanlandolt: tradeoffs are hard...but anything that lets /us/ actually make those decisions is okay by me [04:01] jedschmidt has joined the channel [04:03] jansc has joined the channel [04:05] sivy: good evening. i'm playing with node+mongodb for the first time, and while I can make a mongo connection from a test script, I can't from within my express app [04:06] sivy: at least, mongod sees the connection, but the client can't keep it [04:06] sivy: this is what it looks like: [04:06] sivy: https://gist.github.com/81c482221c1c0e5ece24 [04:07] Aria: ACTION documents the html5 parser a bunch. [04:07] grahampage has joined the channel [04:07] jesusabdullah: Aria: Link to html5? [04:07] jesusabdullah: I'm interested in a different parser [04:08] Aria: http://github.com/aredridel/html5/ [04:11] jesusabdullah: So, the parser dumps the results into a given jsdom? [04:11] Aria: Yep. The HTML5 parsing algorithm implies a DOM [04:11] Aria: (it's not linear -- it'll go back and add some things to , it'll put in missing elements like and ...) [04:11] path[l] has joined the channel [04:11] Aria: (It'll reorder elements that end up in the wrong spot in the nesting around tables.) [04:12] jesusabdullah: This is relevant to my interests. I've used htmlparser before, and while it worked as advertised, it had a really annoying api [04:12] jesusabdullah: dom[0].children[3].children, etc. [04:12] jesusabdullah: and the Apricot thing was really really broken, from what I saw [04:12] jesusabdullah: :C [04:12] jesusabdullah: You should npmify this, imo [04:12] davidascher has joined the channel [04:13] Aria: It is. [04:14] __mn__ has joined the channel [04:14] Aria: (also, there's an example in there for using it with jquery) [04:14] Aria: (so enjoy that ;-)) [04:14] EyePulp has joined the channel [04:14] jesusabdullah: Saw the jquery example :) [04:15] __mn__: how do I debug an NPM install error? I'm trying to "npm install mailer" but I get "BAD UTF8 CHARACTER CODE") [04:15] jesusabdullah: o__o [04:15] mape: Someone should make it dumb simple with jquery, jquerify('http://an.url.td', function($dom) { $dom.find('a').each(function() { console.log($(this).attr('href')); }) }) would be handy [04:15] Aria: That's npm being broken. At the server. [04:15] jesusabdullah: Oh, is it? [04:15] ajpiano has joined the channel [04:15] __mn__: so, is there anything I can do to fix it? [04:15] Aria: Nope. [04:16] mikeal has joined the channel [04:16] jesusabdullah: You can pray to the gods of broadband [04:16] mape: Seems so, http://npm.mape.me/ is broken as well [04:16] Aria: Download modules by hand and npm install from the checkouts. [04:16] jesusabdullah: sacrifice a 56k modem [04:16] mjr_: npm registry is broken again? [04:16] Aria: Yep [04:16] mape: Yup [04:16] mjr_: damn [04:16] __mn__: oh, dangit, I was hoping it was just a problem with me :P [04:16] Aria: Yeah. . . [04:17] SubStack: if I knew where isaacs lived I would bike to his house [04:17] Aria: Nope. It's couchdb being dumb. [04:17] __mn__: how do you npm install from a git clone checkout? [04:17] SubStack: and DEMAND SOME ANSWERS [04:17] jesusabdullah: SubStack: that'd be horrible! [04:17] jesusabdullah: but also really funny imo [04:17] Aria: __mn__: npm install . [04:17] brianmario has joined the channel [04:17] SubStack: his github says he's in the same city as me [04:17] Aria: (or npm link .) [04:18] __mn__: right, but doesn't npm install [module] download from directory? [04:18] Aria: I believe the version where you specify a path doesn't. [04:18] __mn__: ooh, okay it worked, cool. [04:18] Aria: Hehe. [04:18] mape: I thought it was mongodb that broken stuff, not couch :P [04:18] __mn__: thanks :) [04:19] andrewfff: hi. i asked this a while ago but it looks like web-scraping people are here, so i'll ask again :) [04:19] gf3 has joined the channel [04:19] andrewfff: i want to scrape something behind a forms-and-cookie authentication method, so i need to do something like http://personalpages.tds.net/~kent37/kk/00010.html#e10form-based-authentication [04:20] micheil: creationix: got an invite. [04:20] andrewfff: is there an easy way? it seems to be outside the scope of what Apricot etc does [04:20] mape: andrewfff: http://github.com/aredridel/html5 [04:20] jesusabdullah: Hah :D [04:20] mape: check the first example [04:20] creationix: micheil: ohh, me too [04:20] micheil: sweet [04:20] micheil: testing this stuff out. [04:22] langworthy has joined the channel [04:22] Aria: Huh. This having people use stuff I wrote is kinda fun. [04:23] langworthy has joined the channel [04:23] __mn__: Aria: what did you write? [04:23] Aria: the html5 parser. [04:23] Aria: (the port to Javascript anyway) [04:23] mape: Aria: Is there any way not to have to use the wonky eval/runInNewContext part when doing the jQuery example? [04:23] mape: Seems like that could get annoying pretty fast [04:24] __mn__: nice [04:24] mape: And perhaps the example would be more interesting to most people if it showed fetching data rather then modifying? [04:24] Aria: Yeah, fetching is a bit out of scope of the parser, but I'll work up a whole series of examples. [04:24] Aria: And the runInNewContext is optional, but it does isolate things. [04:25] slashxr has joined the channel [04:26] mbrochh has joined the channel [04:27] __mn__: could somebody explain... if I"m using the mailer package - should I be able to receive emails from doing stuff off my localhost machine? [04:28] Aria: Heh, that's a bit complex to answer. [04:28] Aria: It'll let you connect to an SMTP server to send mail. [04:28] andrewfff: mape: yeah, i can pull and parse pages down okay, it's the cookie stuff that's not obvious to me. i was going to manually plug headers into http request objects but was wondering if there's a better way [04:28] Aria: Whether or not that actually results in you able to read it is dependent on that SMTP server. [04:28] __mn__: Aria: so... is there a packagte for an SMPT server? [04:29] __mn__: for instance, I am running an Amazon EC2 server right now, and I have SMPT ports active [04:29] Aria: __mn__: I'm writing one in node, but it barely works. Usually one uses what the OS provides in a development system, like sendmail, postfix or exim [04:29] __mn__: and I installed mailer module, and ran the demo, but I get an ECONNREFUSED error, is that expected? [04:29] __mn__: hmm [04:30] JimBastard: __mn__: node_mailer [04:30] JimBastard: ? [04:30] ryah: I'm not sure why people prefer httperf to ab [04:30] Aria: CONNREFUSED sounds like nothing's listening on the port. [04:30] __mn__: JimBastard: yes, node_mailer [04:30] Aria: (netstat -lnt!) [04:30] JimBastard: i wrote that [04:30] grahampage has left the channel [04:30] ryah: httperf eats all of my CPU and generates less load [04:30] JimBastard: it requires an smtp server [04:30] __mn__: JimBastard: sweet, oh okay... any pointers where I go to setup an SMPT server? [04:30] JimBastard: i think i talk about that in the readme [04:31] __mn__: JimBastard: isn't the ReadMe what shows up on github? [04:31] JimBastard: __mn__: i use sendmail, but im not sure what ec2 rules are about sending email from an instance [04:31] Aria: install postfix, as you would on your OS. [04:31] Aria: or if you feel like hacking, http://github.com/aredridel/node-smtp [04:31] Aria: (which can receive mail into a maildir right now, but no more) [04:31] __mn__: Aria: thanks. (postfix is an SMPT server? it works on Ubuntu?) [04:31] blaines has joined the channel [04:31] JimBastard: __mn__: the readme doesnt really get into how to setup a server, but if you look at the usage [04:31] JimBastard: email.send({ host : "localhost", // smtp server hostname port : "25", // smtp server port [04:31] JimBastard: you just point to it [04:32] JimBastard: node_mailer is super super simple [04:32] __mn__: JimBastard: I've never done anything with emails before, so I don't even know what SMTP servers are. [04:32] JimBastard: yeah [04:32] Aria: (Yeah, it's an SMTP server, and works on ubuntu. It's relatively sane.) [04:32] __mn__: Aria: Postfix better than sendmail? [04:32] Aria: smtp is the server that a sender connects to, and then accepts the mail for delivery or passes it on to the end system. [04:33] Aria: If you can understand sendmail's config file, you're a better man than I. Postfix at least makes some sort of sense. [04:33] Aria: In this "mail servers are super complex sometimes" sort of way, but it does at least tend to run out of the box. [04:33] __mn__: hmm [04:33] andrewfff: __mn__: if you've ever set up outlook or thunderbird or something, and typed in an address for an "outgoing mail server" - that's an SMTP server [04:34] Aria: (And if you want to learn how SMTP works, the node-smtp library there isn't a bad way to go. The code is pretty simple.) [04:34] __mn__: andrewfff: I've always avoided desktop based email clients, they are icky. [04:34] micheil: smtp is lovely. [04:34] micheil: it's a protocol that works. [04:34] micheil: just not for a asynchronous nature. [04:34] __mn__: Aria: I'll definitely look at your node-SMTP, thank you. [04:34] micheil: (it's a send/ack protocol) [04:34] micheil: ACTION was writing a binding for it. [04:34] Aria: (Yeah.) [04:35] Aria: (I wish LMTP hadn't had the big fat "don't use this on the internet" warning, though... per-receiver confirmation would make 50% of current email hell go away) [04:35] creationix: micheil: done, you can tip my twitter, vimeo, slideshare, creationix.com, or howtonode.org [04:35] chapel: ryah << why doesn't someone make a benchmark script using nodejs? [04:35] creationix: micheil: it's a very interesting idea [04:35] micheil: creationix: sweet. I don't have any money to tip though. [04:36] micheil: I've got github, brandedcode.com and twitter. [04:37] creationix: micheil: on your miksago account? [04:37] SINPacifist has joined the channel [04:37] micheil: yeah [04:38] creationix: hmm, has to be paypal [04:38] creationix: atleast you can fund it in bulk [04:38] creationix: and then tip a little at a time [04:38] micheil: yeah [04:38] micheil: I can see myself definitely using it once it's open and out there. [04:39] micheil: although, I think tips should expire if they're unclaimed. [04:39] micheil: so, like have a set of "these tips where never claimed" [04:39] langworthy has joined the channel [04:40] creationix: micheil: you have a dollar ;) [04:40] creationix: micheil++ [04:40] v8bot: creationix has given a beer to micheil. micheil now has 1 beers. [04:40] micheil: cool. [04:40] JimBastard: you guys know about flattr? [04:40] creationix: yeah, it's pretty cool too [04:40] creationix: but don't you need a banner on the site [04:40] JimBastard: i think you just need the button? [04:40] micheil: creationix: hmm.. I can't see it yet. [04:40] creationix: must not be node powered [04:40] creationix: or it would be real-time [04:41] micheil: yeah [04:41] micheil: it's Java. [04:41] creationix: I take back my tip [04:41] creationix: :P [04:41] micheil: (with mongodb) [04:41] micheil: creationix: :( [04:41] micheil: I was just about to tip you back. [04:41] creationix: micheil: don't worry, I can't take it back once funded [04:41] micheil: okay [04:41] creationix: oh, I see, I have to donate and then fund [04:41] creationix: ok, now it's funded [04:42] micheil: hey, cool. got it. [04:42] creationix: JimBastard: I thought about putting a flattr button on howtonode [04:42] creationix: I would love to somehow link it to the author and not have everything go to me though [04:42] creationix: I like tiptheweb because it doesn't clutter my page at all [04:42] JimBastard: creationix: i bet they have some sort of campaign tracking [04:43] __mn__: JimBastard: Okay, installed Postfix, and now I'm getting an error 220 and 250? [04:43] JimBastard: __mn__: no clue [04:43] micheil: creationix: I guess when you tip it'll use the title of the page [04:43] Aria: 220 is "Welcome" and 250 is "accepted" [04:44] Aria: Not errors. [04:44] micheil: then you can contact authors and ask if they want to have it, or if they want to spend on the hosting [04:44] JimBastard: i think mailer might need some love, but last time i tried it it did work [04:44] __mn__: hmm [04:44] JimBastard: its not really a high priority project atm, but it should work [04:45] __mn__: JimBastard: okay, thats fine. Thank you though. [04:45] creationix: micheil: yeah, that should work as long as it doesn't happen all the time [04:46] micheil: yeah [04:46] micheil: creationix: contact them say, every 6months or something? [04:46] creationix: well, then I'd have to keep records [04:46] creationix: if the tips are infrequent, i can do them as they come it [04:46] creationix: *in [04:46] creationix: I'll worry about it if it happens [04:47] creationix: more important things to work on now [04:47] micheil: yeah [04:47] micheil: creationix: just filter the tip history to htn.org and then go through them [04:47] micheil: creationix: under the awards section [04:47] creationix: true [04:48] micheil: (if I had 5$ in my paypal, I would've tipped you by now.) [04:48] creationix: yeah, not sure if this will take off [04:48] micheil: yeah [04:48] micheil: it's still interesting to play with. [04:48] micheil: and being it won a big prize supported by paypal, I'm sure it will take off. [04:49] creationix: ryah: you should claim nodejs.org [04:49] creationix: I'll give you a dollar if you do [04:49] creationix: ;) [04:50] killfill has joined the channel [04:50] jsilver_ has joined the channel [04:54] micheil: I'll give you 100$. [04:54] micheil: (hold my word to that.) [04:54] micheil: ACTION needs coffee. bbiab. [04:54] SubStack: beh it's only 21:54 [04:54] shimondoodkin: how to set a HandleScope to avariable that defined in another thread? [04:55] shaver: thread? [04:55] shimondoodkin: eio [04:55] shaver: oh [04:56] shimondoodkin: ive defined an array in eio function and returned it , i guess i need to assign it to the current scope in the after function [04:57] mape: creationix: he already has that domain? [04:57] micheil: shimondoodkin: you create a custom eio object. [04:57] creationix: mape: claim it in the tiptheweb.com system [04:58] micheil: shimondoodkin: give me 45 minutes and I'll be able to explain it to you. [04:58] __mn__: JimBastard: okay... so it sends a "Hello localhost" and says that the sender and recipient are OK, with message accepted for delivery... but I don't receive an email? (or do you not care to help me figure this out)? [04:58] creationix: mape: basically put in a custom meta tag to prove he owns it [04:58] mape: creationix: that is like flattr but on urls? [04:58] shimondoodkin: micheil: are you serious? [04:58] micheil: yes [04:58] creationix: yeah micheil has worked with that before [04:58] micheil: shimondoodkin: give me 45 minutes and I'll show you how. [04:58] JimBastard: __mn__: testing email sending can be tricky, it could have sent, but got tagged as spam, or still sending [04:59] micheil: I just need a coffee and some food first. [04:59] JimBastard: usually checking your outgoing smtp logs is a better indicator [04:59] creationix: mape: yeah, no banner or button needed on the site [04:59] shimondoodkin: ah i understand you mean later [04:59] shimondoodkin: ok [04:59] micheil: but yeah, I worked heavily with the eio_custom stuff, and have a bunch of unreleased bindings. [04:59] __mn__: JimBastard: oh woah! you are right, here it is. Will gmail always tag anything from it as spam? [05:00] __mn__: JimBastard: Okay, this is super cool, thank you. Very nice! [05:00] creationix: JimBastard: yeah, I used to work at this shop that built email engines [05:00] JimBastard: __mn__: there are certain things you can do to fix this, its not the code as much as gmail flagging it as spam since its coming from an unqualifed domain [05:00] creationix: the emails logs are your friend [05:00] JimBastard: creationix: can you provide any good links for getting your emails to be legit? [05:00] JimBastard: i know there are a few things you can do [05:01] creationix: check the canspam stuff [05:01] creationix: it's actually quite complicated [05:01] creationix: unless you go through a smarthost that has all the stuff built in [05:01] creationix: like your gmail's smtp [05:01] JimBastard: __mn__: pretty much, if you fire up a vps somewhere and try to send mail to a major provider, they will block it by default [05:01] creationix: but then you can only send from your gmail account [05:01] JimBastard: because, anyone can just start sending mail from anywhere [05:01] __mn__: VPS? [05:01] micheil: shimondoodkin: in the mean time, gist the code you have already [05:01] JimBastard: virtual private server [05:01] JimBastard: you are on an EC2 right? [05:02] __mn__: yes [05:02] shimondoodkin: ok [05:02] __mn__: okay yes that makes sense [05:02] JimBastard: yeah, thats a virtual server slice [05:02] __mn__: considering your obama@whitehouse.gov example [05:02] JimBastard: :-) [05:02] creationix: http://business.ftc.gov/documents/bus61-can-spam-act-Compliance-Guide-for-Business [05:02] JimBastard: THE PRESIDENT SENT ME AN EMAIL [05:02] creationix: that's the legal side [05:02] __mn__: creationix: thanks [05:02] creationix: now finding tips to get around gmails filter [05:02] creationix: I'm pretty sure that's not documented [05:02] creationix: or the spammers would do it [05:02] JimBastard: creationix: whats that thing called [05:03] micheil: sending email might be better done in node.js via third party services at the moment. [05:03] creationix: but there are things like spf records and special headers [05:03] JimBastard: the extra thing you can do [05:03] shimondoodkin: http://gist.github.com/625605 [05:03] JimBastard: spf! [05:03] JimBastard: yes [05:03] micheil: that'd be the quickest way atm. [05:03] JimBastard: __mn__: if you really need to send emails out, i would suggest using a mail sending service, with an api [05:03] __mn__: huh, okay, thank you. SPF is one (it stands for?) [05:03] JimBastard: it sounds like are new to this, and from what we are hearing, its a complex thing [05:03] shaver: sender-permitted-from [05:03] creationix: thanks to SPAMMERS it's really complicated to send a legitimate email these days [05:04] micheil: JimBastard: up for writing a few wrappers? [05:04] __mn__: oof. well I'm glad I know that now. [05:04] micheil: ACTION is. [05:04] shimondoodkin: its a problem wioht your dns [05:04] micheil: (later) [05:04] JimBastard: micheil: i think we'll be adding outgoing smtp as part of the nodejitsu platform [05:04] shimondoodkin: s/wioht/with [05:04] JimBastard: so its just a matter of picking a good provider [05:04] micheil: JimBastard: I may start working on node-smtp again if there is demand for it. [05:05] micheil: it'll take some serious work + time though. [05:05] creationix: JimBastard: __mn__: so these are the guys I used to work for http://www.distribion.com/ [05:05] creationix: they know all about the rules [05:05] creationix: you can try to ask them their secrets, but not sure how that will go over [05:05] __mn__: micheil: postfix worked like a charm with JimBastard's. But having a nodejs SMTP would be pretty neat too. Necessary though? No. [05:06] __mn__: creationix: thanks. [05:06] micheil: well, yeah, I have a basic module built again 0.1.28 [05:06] micheil: I just need to update it, and fix it up to latest standards [05:10] mikeal has joined the channel [05:14] cagdas has joined the channel [05:14] cagdas: is npm down? (how many people asked before me?) [05:15] __mn__: cagdas: yes it is. [05:15] __mn__: cagdas: I did :P [05:15] mattcodes: micheil, Jimbastard, checkout www.postmarkapp.com http interface is volume is light [05:15] cagdas: oh ok thanks :) [05:15] __mn__: mattcodes: thanks [05:15] JimBastard: mattcodes: do you know those guys? [05:16] mattcodes: nope. just to be clear I use them on a site i just finished because all our mail was being spam boxed, no setup of reverse dns [05:16] JimBastard: id like to find a node friendly / interested shop and link up [05:16] JimBastard: get them a solid api wrapper [05:16] JimBastard: get us some good support [05:17] JimBastard: maybe just pick mailchimp, thats easy too [05:17] creationix: JimBastard: talk to my old employer [05:17] mattcodes: mailchimp does do transactional email though? [05:17] mattcodes: transactional mean single message, like thanks for signing up, here is your password reset etc.. [05:17] JimBastard: creationix: ill review the service a bit more [05:17] JimBastard: there isnt an immediate demand over here, but its something to think about for certain [05:17] creationix: JimBastard: I was talking about getting them to sponsor some node work [05:18] creationix: but their service is nice too [05:18] creationix: they compete with mailchimp [05:18] JimBastard: creationix: ill get it built for free, just would want some promotion / good support [05:18] ryah: v8 gets into these strange states where it wants to GC itself to death.. [05:18] __mn__: creationix: who competes with mailchimp? [05:18] shaver: responsys [05:18] mattcodes: jangomail? [05:18] SubStack: oh this is bollocks: assignment to Function.name doesn't maintain referential transparency [05:18] mattcodes: constant contact [05:18] ryah: when that is clearly not the optimal choice [05:18] creationix: __mn__: http://www.distribion.com/ [05:18] creationix: I worked there for a few years as the lead developer [05:19] creationix: very nice bunch, too much php [05:19] SubStack: v8: var f = function () {}; var n1 = f.name; f.name = 'pow'; [ n1, f.name ] [05:19] v8bot: SubStack: ["", ""] [05:19] SubStack: highly annoying! [05:19] creationix: ryah: yeah, but that only seems to happen when you have LOTS of objects [05:19] creationix: more than any sane webpage would ever have [05:19] SubStack: can't __defineGetter__ on it either [05:20] creationix: it's like "this can't be right, surely there is something to collect" [05:20] __mn__: creationix: define "more than any sange webpage would ever have"? [05:20] creationix: well in my case I had objects and/or properties on objects in the millions [05:20] __mn__: creationix: okay, good, thought so. So beyond millions? [05:21] creationix: in a web page usually objects are tied to dom elements [05:21] creationix: and that limits you to a much smaller number [05:21] __mn__: creationix: oh not each element? [05:21] mattcodes: ryah, your talk at yahoo a few months ago about putting nginx in front because expolits and other issues, is there any change on that stance for a say small blog [05:21] creationix: mattcodes: I run howtonode.org on port 80 [05:21] creationix: and all the no.de sites run direct [05:22] creationix: and creationix.com is on port 80 too [05:22] mattcodes: cool. is joyent is doing it then I relatively happy (they are ryah employer too rite?) [05:22] mattcodes: is joyent --> if joyent [05:22] creationix: well, the no.de sites were experiments for a contest [05:22] creationix: security wasn't a big factor there [05:23] creationix: if someone does find a exploit where they can run arbitrary code through a node server, then I'd be screwed [05:24] creationix: but I'm betting that won't happen, and if it does, I'm ready to face the consequences [05:24] mattcodes: probably will put nginx in front when live as site is heavily hit [05:24] mattcodes: but for testing / demonstrating to clients will just node direct on a linode [05:24] creationix: for sure [05:24] creationix: but nginx in front will slow things down a little [05:24] creationix: and I don't think websocket passes through [05:25] mattcodes: its standard mvc site behind ravendb atm, moving to nodejs and couchdb [05:25] mattcodes: response time to first byte is about 0.1-2 secs at the moment (lazy programming if anything - no time for caching due to pressures) so I doubt even with nginx it will slower than current stack [05:25] mattcodes: thats 0.1-0.2 sec to clarify [05:25] galaxywatcher has joined the channel [05:27] creationix: yeah, nginx is really fast [05:27] creationix: for most stuff it's fine [05:27] yviktorov has joined the channel [05:28] ryah: yes - but we should turn that off [05:28] ryah: i dont like this crazy GC [05:28] ryah: i'd rather eat memory [05:28] ryah: i'm only using 80mb [05:28] Yuffster has joined the channel [05:28] ryah: and fucking v8 won't stop compacting [05:29] ryah: Mark-compact 54.3 -> 24.9 MB, 1 / 4189 ms. <- anger [05:29] mjr_: Is there some new v8 behavior that spends more time in GC than before? [05:29] mjr_: wow, 4s [05:29] mjr_: That's unworkable [05:29] ryah: (node_g, but still) [05:30] ryah: they must have some condition about agressive GC [05:30] shaver: that has to be debugging overhead [05:30] shaver: no way can copying GC with a 30MB live heap take 4 seconds [05:30] shaver: unless it's running on your gameboy [05:30] mjr_: node_g is really a lot slower [05:30] Aria has joined the channel [05:31] shaver: they must be running some hairy verification pass over all the handles or something [05:32] ryah: yeah. we've got some suboptimal behavior here... [05:33] ryah: try this: http://gist.github.com/625630 [05:33] creationix: well, I've seen nstore tests running 75% gc [05:33] creationix: in profiling [05:34] SINPacifist has joined the channel [05:34] isaacs_home has joined the channel [05:34] ryah: do --trace_gc on the server [05:35] ryah: you'll see it go nuts [05:35] ryah: around 20000 connections for me [05:36] ryah: (ive modified my build to not do the V8::IdleNotification()) [05:36] micheil: mattcodes: I have. [05:37] micheil: JimBastard: I could talk the the Campaign Monitor guys, they're pretty friendly. [05:37] JimBastard: word [05:37] ryah: ACTION uses his special technique to debug v8 [05:37] JimBastard: see if there is any interest [05:37] ryah: % grep -Ri aggressive deps/v8/src [05:37] JimBastard: fuck, i wish i was leet like ryah so i could help [05:38] JimBastard: stupid js userland [05:38] ryah: deps/v8/src/heap.cc: CollectAllGarbage(true, AGGRESSIVE); [05:38] ryah: :) [05:38] jetienne has joined the channel [05:39] Aria has joined the channel [05:39] vilhonen: are there any Socket-IO developers here? [05:39] micheil: creationix: I've gotta test nginx + websockets at some stage. [05:39] creationix: yeah [05:40] vilhonen: micheil: I tried quickly and the websockets didn't seem to pass through [05:40] micheil: vilhonen: yeah, I'm needing to write a client + server test suite. [05:40] vilhonen: I didn't investigate the problem more but just exposed node.js application directly [05:40] micheil: vilhonen: I'm not a socket.io developer, but I can probably help you if you need it. [05:41] micheil: (I could possibly hope to be a socket.io developer, hint hint learnboost.) [05:41] vilhonen: micheil: it seems to me that no other transport than websocket is currently working [05:41] SubStack: there are "socket.io developers"? [05:41] micheil: vilhonen: I can verify that all transports work [05:41] vilhonen: I tried with latest version of socket.io-node and masters and stuff [05:42] __mn__: vilhonen: what version of node are you using? all my transports work fine. [05:42] micheil: vilhonen: browsers? [05:42] jesusabdullah: SubStack: Yeah, they sit in an ivory tower [05:42] SubStack: figures [05:42] jesusabdullah: SubStack: rauchg is THE ESTABLISHMENT [05:42] SubStack: looking down scornfully on the rest of us I bet [05:42] creationix: lol [05:42] jesusabdullah: also, one of those gohl-durned college hippie liberals [05:42] vilhonen: I haven't found a combination to get latest stable firefox reliably communicate [05:42] jesusabdullah: Too much education to understand the true plight of the proletariat [05:42] jesusabdullah: Being told by liberals what to do [05:42] vilhonen: I've been using node.js 0.20 as I had some problems at some point with later versions with imports [05:42] jesusabdullah: and being taxed a lot [05:43] creationix: ACTION doesn't need a tower to look down scornfully, is 6'4" [05:43] __mn__: vilhonen: try removing flashsocket from the transport list and see if it works. [05:43] jesusabdullah: Heh, I'm so mean to conservatives :( [05:43] vilhonen: __mn__: tried and failed [05:43] jesusabdullah: It's what happens I guess whenI live here [05:43] mattcodes has joined the channel [05:43] __mn__: vilhonen: what code are you using? did you test it with the chatroom example? [05:43] vilhonen: I disabled transports one at a time but wasn't able to get it working two ways [05:43] jesusabdullah: Oh God, SubStack, I went to the gubernatorial debates, and this woman from the Joe Miller campaign (listeners: Miller is the Tea Party candidate for senate) [05:43] SubStack: jesusabdullah: it's strange, because the liberals here irk me [05:43] mattcodes: god damn disconnected from vpn and no warning typing blindly to noone, repeat : is there any highlevel ajax client for nodejs? something akin to ajax client in jQuery or YUI3, I not going the YUI3 / yui-nodejs route just to bring in an intelligent ajax client th [05:44] jesusabdullah: She asked me if I was going to vote for Joe Miller [05:44] vilhonen: some transports stalled at sending and other didn't get messages through either way [05:44] SubStack: I think it has more to do with the ideologies that hold sway [05:44] mattcodes: looking at restler, any experiences? alternatives? [05:44] jesusabdullah: "Probably not" [05:44] jesusabdullah: "How come?" [05:44] jesusabdullah: "I'm a communist." [05:44] jesusabdullah: Her facial expression was PRICELESS [05:44] __mn__: vilhonen: what code? the example chat? [05:44] vilhonen: __mn__: I wrote very simple app to try it and it worked fine with websocket [05:44] jesusabdullah: A combination of DISGUST and PITY [05:44] SubStack: hah awesome [05:44] SubStack: trolling [05:44] vilhonen: I think I also tried the chat but I could do it again if you think it should work [05:44] __mn__: vilhonen: please first test the example chat again, see if it works. Let meknow. [05:44] jesusabdullah: SubStack: Yeah, I bet any strong political ideology is frustrating [05:44] __mn__: vilhonen: so the chat didn't work? [05:45] jesusabdullah: I thought she'd just roll her eyes, realise I was a hopeless case and move on [05:45] bpot has joined the channel [05:45] jesusabdullah: She didn't exactly accost me though [05:45] vilhonen: I'll have to test it again as I'm not sure I've done it [05:45] jesusabdullah: so that's good [05:45] creationix: I've been accosted [05:45] __mn__: vilhonen: make sure you didn't edit the chat example :P I've done that... [05:45] vilhonen: __mn__: I understand your point :D [05:46] __mn__: vilhonen: I use v0.2.3 and it works fine, though I had used it on 0.2.0 and didn't have a problem if I checked it against the example chatroom [05:46] vilhonen: on the client project's github issues page there are lots of issues without answers going as far back as more than month [05:46] __mn__: vilhonen: true, right now there is a HTTPS error for websockets. [05:47] saikat has joined the channel [05:51] Aria has joined the channel [05:52] ryah: well - im happy about finding out how to induce this case.. [05:52] admc has joined the channel [05:53] micheil: ryah: that's the issue commented in node.cc right? [05:54] micheil: / TODO(ryah) [05:54] langworthy has joined the channel [05:54] ryah: micheil: ? [05:54] Nohryb has joined the channel [05:54] micheil: actually, no, that's line 1870 [05:55] micheil: issues with EVBACKEND PORT [05:56] micheil: shimondoodkin: ping. [05:56] micheil: actually, brb [05:56] mikeal: oak.js bitches! [05:56] mikeal: http://oakjs.com/ [05:56] SubStack: oak! [05:56] SubStack: I am in that place. [05:57] mikeal: then RSVP sucka! [05:57] SubStack: aha there is a venue now [05:59] SubStack: pow done [05:59] shaver: hmm [05:59] ryah: micheil: cool [05:59] ryah: er [05:59] ryah: mikeal: cool [05:59] shaver: wed the 27th, eh? [05:59] mikeal: ryah: you gonna make it? [05:59] tyfighter has joined the channel [05:59] ryah: yeah [05:59] micheil: mikeal: I wish I could. [06:00] micheil: :( [06:00] micheil: missing all the conferences this year sucks. [06:00] mikeal: it's just a meetup :) [06:00] micheil: ryah: btw, see that thing on setting up nodejs.org with tiptheweb.org? [06:00] mikeal: NodeConf will happen in 2011 [06:00] mikeal: just make it to that [06:00] micheil: ryah: hold me to the word that if you do set it up, then I'll tip you 100$ at some stage. [06:01] micheil: shimondoodkin: ping. [06:01] micheil: mikeal: I will be. [06:01] ryah: micheil: hm? [06:01] mikeal: shaver are you in town? [06:01] mikeal: on the 27th [06:01] micheil: ryah: tiptheweb.org, it's a new way to get small donations on projects you work on and stuff [06:02] shaver: mikeal: yeah, I'm hear through april or may [06:02] micheil: ryah: creationix has set it up for howtonode.org [06:02] shaver: I think I may have something the 27th [06:02] Aria has joined the channel [06:02] micheil: and I've set it up on my stuff [06:02] mikeal: oh wow, i didn't know that [06:02] shaver: trying to figure out what! [06:02] micheil: it looks like a good service [06:02] creationix: ryah: I already sent you a dollar too [06:03] ryah: micheil: how about instead you come out to sf and i buy you $100 beer and food [06:03] zum: is tiptheweb.org a new service? [06:03] micheil: ryah: why so? [06:03] micheil: zum: up [06:03] micheil: *yup [06:03] ryah: for making the journey :) [06:03] micheil: ryah: ha, okay, you sure on that? [06:04] shaver: yeah, that sounds better [06:04] micheil: I'll be there for NodeConf. If that's in SF. [06:04] micheil: :P [06:04] zum: sounds like flattr except I don't get the awards thing... good that someone's trying though [06:04] ryah: sweet, i think it's in portland [06:04] ryah: but that's close enough [06:04] ryah: or maybe that's secret [06:04] ryah: nm [06:04] mikeal: it won't be in SF [06:04] mikeal: it'll be in Portland [06:04] micheil: there we go then. [06:04] micheil: :P [06:05] micheil: mikeal: any ideas on when? [06:05] mikeal: it's a secret why it's in Portland [06:05] mikeal: and where [06:05] mikeal: late April or May [06:05] micheil: okay. [06:05] micheil: hopefully I'll be able to make it then. [06:05] ryah: ACTION away [06:05] micheil: ryah: have fun :) [06:05] matjas has joined the channel [06:06] CIA-36: node: 03Ryan Dahl 07master * rcdde22a 10/ benchmark/http_simple.js : Improve benchmark/http_simple.js - http://bit.ly/aYgiqk [06:06] CIA-36: node: 03Ryan Dahl 07master * rff456b3 10/ (4 files in 2 dirs): Add 'make bench' script - http://bit.ly/9vNCNq [06:07] mjr_: I like how that unofficial announcement of nodeconf just slipped out there [06:07] steadicat has joined the channel [06:07] langworthy has joined the channel [06:07] mjr_: But hey, nodeconf! [06:07] micheil: mjr_: yeah, but it's good news [06:07] mikeal: it's not an announcement [06:07] mikeal: nothing is official [06:08] mikeal: just…. don't take a vacation then :) [06:09] micheil: shimondoodkin: did you still want eio_custom explained? [06:09] jamescarr__ has joined the channel [06:10] andrewfff_ has joined the channel [06:11] Fullmoon has joined the channel [06:12] Fullmoon: mjr_: Ping [06:12] mjr_: hello [06:13] Yuffster_work has joined the channel [06:13] Fullmoon: mjr_: Hello, we talked yesterday about the APN service, I chose some other nick name, because I was using my tablet, and can’t remember. [06:13] micheil: apple push notification? [06:13] mjr_: gotcha [06:13] Fullmoon: mjr_: Anyways, you mentioned that the APN gateway does, in fact send an Ack with the extended protocol, could you point me to this doc, again? [06:13] mjr_: Yeah, I re-read that Apple doc, and it looks like they don't actually send the ACK packet on success. [06:13] shimondoodkin: micheil:pong [06:13] mjr_: Even though they define an ack packet "success" response! [06:14] mjr_: WTF [06:14] micheil: shimondoodkin: right, how do you want to do this? [06:14] Fullmoon: mjr_: Oh, I see, damn. [06:14] micheil: mjr_: you should know specs are never implemented properly. [06:14] mjr_: micheil: for sure [06:15] jamescarr_ has joined the channel [06:15] Aria has joined the channel [06:15] mjr_: I'm just amazed that they bothered to rev the protocol to fix the obvious stupidity in the initial release, and then they neglected to do this really basic thing. [06:15] jamescarr__ has joined the channel [06:16] shimondoodkin: micheil: yes tell me if i did everything right, http://gist.github.com/625675 , it compiled but i could not load it with require('modulename'); [06:16] Fullmoon: mjr_: The whole service is "best effort" anyways, so I might just overthink the problem.. [06:16] shimondoodkin: micheil: it simply lets read contents of a dir one by one [06:16] mjr_: Fullmoon: you can always just send one request and then close the connection, even though the docs say not to do that. [06:17] micheil: shimondoodkin: okay. [06:17] sveimac has joined the channel [06:17] Fullmoon: mjr_: Short of a connection pool + sleeping, that sounds like the best way to do it [06:18] mjr_: Fullmoon: yeah, that's probably the best way if you have a high volume. For low volume, I think the one request per connection is going to be far easier to get right. [06:19] Fullmoon: mjr_: Well, as a middle ground, I could always make sure I have open, handshaked connections left, because the timeout from APNs is ~1 hour, and upon success close them && open a new one. Still. I don’t get the reasons behind this. [06:20] jansc has joined the channel [06:23] langworthy has joined the channel [06:24] mytrile has joined the channel [06:25] langworthy has joined the channel [06:26] mbrochh has joined the channel [06:30] V1 has joined the channel [06:35] tpryme has joined the channel [06:37] mirko has joined the channel [06:37] mirko: rum [06:38] shaver: that is a GREAT idea [06:39] mirko has left the channel [06:39] mirko has joined the channel [06:40] jetienne: shaver: nice to see you here :) [06:40] shaver: jerome!! [06:40] murphy has joined the channel [06:41] jetienne: shaver: long time no see [06:42] Tim_Smart: Mozilla just took a dump on apple's porch http://arewefastyet.com/ [06:43] jesusabdullah: Cool, The Zillas are getting faster [06:43] amerine has joined the channel [06:43] mjr_: closing in on V8 too [06:43] mjr_: Pretty fantastic. [06:43] mikeal: haha [06:43] mikeal: we really need new benchmarks [06:43] mikeal: sunspider is crap [06:44] mikeal: it's like a decade old [06:44] davidascher has joined the channel [06:44] mikeal: brendan mentioned he was working on something [06:44] creationix: the v8 guys could use a new target to optimize towards too [06:44] creationix: I want something that uses Object.create [06:45] Tim_Smart: And the V8 bench is somewhat bias, unless V8 actually is that awesome. [06:47] ph^ has joined the channel [06:48] hzin has joined the channel [06:50] shaver: sunspider is a disaster [06:51] shaver: we are working on a benchmark for more computationally-intensive loads (the stuff people say you can't do in JavaScript, like image manipulation and audio FFTs and such) [06:51] shaver: we can do gaussian blur within 20% of the speed of photoshop on some PCs now [06:51] shaver: I'm going to be liberally mining node modules and such for more benchmarks fodder! [06:52] shaver: need some more types of computation in there [06:52] shaver: v8bench is an odd benchmark [06:52] shaver: like, one of the tests is converted from lisp programmatically [06:52] shaver: so it's...perhaps not representative [06:52] shaver: of how people build JS stuff, at least [06:53] shaver: anyway, I'll stop blabbing at the channel now :-) [06:53] themiddleman has joined the channel [06:55] creationix: shaver: I would LOVE it if there was a test for this use in my pattern library [06:55] creationix: shaver: I have to do crazy stuff like http://github.com/creationix/pattern/blob/master/lib/pattern.js [06:55] shaver: mail that to me? shaver@mozilla.com [06:56] creationix: when I mean http://github.com/creationix/pattern/blob/fafa13a6912776dfd8ace91028c87878e8e42900/lib/pattern.js [06:57] Tim_Smart: mjr_: I might have a play with the mysql protocol. [06:57] shaver: I should put a suite together of node-bench sorts of things [06:57] shaver: then make the team optimize for them, and see if ryah is interested in supporting spidermonkey [06:57] mjr_: Tim_Smart: that's cool. We could use a good native JS mysql. [06:58] shaver: so I can have yield :-/ [06:58] Tim_Smart: mjr_: Also seems mysql doesn't pipeline replies :( [06:58] mjr_: shaver: benching things like parsing binary protocols would be interesting. Things like mysql, etc. [06:58] creationix: shaver: sent [06:58] Tim_Smart: shaver: Bench my node-redis if you like :p [06:59] shaver: mjr_: does v8 have typed arrays? [06:59] creationix: shaver: yeah, implementing msgpack, and postgres [06:59] creationix: shaver: no, just buffers [06:59] shaver: oh [06:59] shaver: then it wouldn't really be fair :-P [06:59] shaver: we scream on typed array stuff, because of the tracer [07:00] mjr_: who said it has to be fair? [07:01] creationix: well I mean all the bit operations [07:01] tobeytailor has joined the channel [07:01] shaver: yeah [07:01] mjr_: The other benchmark is called V8 bench [07:01] mjr_: I wonder who came up with that one [07:01] creationix: shaver: since there are no typed arrays, we have to do stuff like http://github.com/creationix/postgres-js/blob/master/lib/buffer_extras.js [07:02] creationix: and it would be good if those operations are super fast [07:02] shaver: ah [07:02] shaver: sounds like the crypto benchmarks [07:02] creationix: probably close [07:02] shaver: with fewer modulo operations [07:02] creationix: again, I think ideally node had something like typed arrays natively [07:03] shaver: you need support from the JIT to get the performance you want [07:03] creationix: yeah [07:03] creationix: oh, and performance with LARGE numbers of objects and/or large numbers of properties on objects [07:03] creationix: I'm talking millions here [07:03] creationix: browsers don't have that requirement [07:03] creationix: but a server easilly can [07:04] creationix: maybe my nStore database can have a fake fs module put in it and test all the serialization / queueing / deserializing stuff [07:05] creationix: http://github.com/creationix/nstore [07:05] shaver: mmmm [07:05] shaver: that would be good [07:05] creationix: shaver: I could go on for a while talking about use cases where I've hit walls with the vm, but I need to get to bed soon [07:05] creationix: I like to test the edges and see how far I can push things [07:06] shaver: yeah [07:06] Tim_Smart: I have generally found the biggest limiting factor right now are bufferes. [07:06] Tim_Smart: *buffers [07:07] Tim_Smart: We need a fast way to do binary. [07:07] creationix: Tim_Smart: really, that's often the least of my problems [07:07] shaver: you just need byte arrays, right? [07:07] Tim_Smart: GC is also the other one. [07:07] creationix: massive arrays are terrible [07:07] creationix: gc is pretty bad [07:07] shaver: yeah, we just added compartments to spidermonkey [07:07] creationix: and the threads in the fs module are nasty [07:07] Tim_Smart: Oh arrays are easy to swap out though. [07:07] creationix: shaver: I saw [07:07] shaver: so that we can do split-heap independent collection next [07:07] shaver: will help a ton with our pause times [07:07] creationix: I saw a patch for something like that for V8 as well [07:08] shaver: yeah [07:08] creationix: it's bad when adding or removing a single property on a huge object causes a 2000ms pause [07:08] creationix: every time! [07:08] Mobbit has joined the channel [07:09] shaver: ouch [07:09] derferman has joined the channel [07:09] shaver: OK, I should head home [07:09] creationix: node is partly to blame [07:09] creationix: cool, take care [07:09] shaver: need to update arewefastyet.com to use the proper v8 harness, now that we're in the hunt [07:10] delapouite has joined the channel [07:11] mape: Easiest way to do a unique key for content (a hash) in js without adding dependencies to node? (is there any good?) [07:11] mape: want to cache the validation output from any give html source and would rather not add deps like md5 [07:11] Kami_ has joined the channel [07:11] Tim_Smart: mape: Just use a array of characters + Math.random [07:12] creationix: mape: there are pure-js md5 implementations [07:12] creationix: how fast do you need it? [07:12] mape: creationix: Not so much the speed, just don't feel like adding more code then I really need [07:12] creationix: mape: or just sort and json-stringify the content [07:12] creationix: it's a unique key, even if it's really long [07:13] mape: any max length on the keys used in objects? [07:13] mape: And will it slow down to a hault? [07:13] creationix: not that I know of [07:13] creationix: I imagine it stores a reference to the string as the key, not the string itself [07:13] jesusabdullah: shaver: Is that blurring thing on reddit from you? Looks good [07:14] xonecas has joined the channel [07:14] creationix: s/reference/pointer/ [07:14] jesusabdullah: s/reddit/HN/ [07:14] xonecas: Hello, is it possible to do server side includes in node ? [07:14] shaver: no, I just commented there [07:14] shaver: I only hacked it lightly to let it update in realtime [07:14] mattcodes: xonecas, require? [07:15] xonecas: mattcodes: I can use it to load other scripts? [07:15] xonecas: I thought it was for modelues [07:15] creationix: xonecas: a module is a script [07:15] benburkert has joined the channel [07:15] shaver: because I wanted to see if we could keep interactive performance levels in FF4 beta [07:15] shaver: all the coolness is someone else's [07:15] shaver: I only put it up on the web at all so he could see it and take the change if he wanted [07:15] shaver: and now I'm on HN [07:16] creationix: xonecas: I'm not sure I understand what you're looking for [07:16] mattcodes: have a look at commonjs stuff on require [07:16] creationix: you can even fs.readFile + eval if you really want that behavior [07:16] derferman has joined the channel [07:17] jesusabdullah: shaver: I see! Cool find [07:20] jesusabdullah: Twitter says tjholowaychuk got bit by a raccoon [07:21] micheil: ryah: would you accept a patch to node.h that adds ASYNC_CALL and ASYNC_CUSTOM_CALL to it? [07:22] mattcodes: he always has to out do everyone i just got bit by a mosquito but you dont see me twitting ;) [07:23] jesusabdullah: haha [07:23] jesusabdullah: He went to the hospital apparently [07:24] mape: creationix: hmm seems using the source as key doesn't work [07:24] mape: or it doesn't match it at least, if I print the object I get it [07:25] Tim_Smart: Heh Google was pretty clever to call their browser Chrome, they get quite a lot of free marketing. [07:26] jesusabdullah: Tim_Smart: How do you figure? [07:26] jetienne: chrome is for "no chrome all content". not sure they did it for marketing :) [07:26] mattcodes: not sure am following? [07:27] Tim_Smart: Mozilla has to justify everytime they mention the "browser chrome" [07:27] creationix: mape: maybe I don't get what you're trying to do [07:27] xonecas: creationix: my mistake, require does what I want. I wanted to mimic the require function from php [07:27] creationix: xonecas: awesome [07:28] mape: bah gists are down :( [07:28] mape: private ones at least.. [07:28] mape: creationix: http://gist.github.com/625775 [07:29] Tim_Smart: mape: Settle down on the nesting ;) [07:30] mape: Tim_Smart: refactor and gist [07:30] ctp has joined the channel [07:30] mape: creationix: http://boilerplate.mape.me/ [07:30] mape: if you check the top right there [07:31] mape: what it does is that it ajaxes the current page, sends the source as a post to the validate-content path [07:31] mape: and then fetches the content from a validator I host, and then I'm trying to use the posted html source as key [07:31] SamuraiJack has joined the channel [07:31] mape: but it won't take it, if I change the cacheKey to 'test' it works fine and dandy [07:31] creationix: hmm, maybe it's too big somehow [07:31] mape: Yeah.. [07:32] mape: Guess I need md5 then :( [07:32] creationix: there are a few standalone md5 libs out there [07:32] creationix: also node has it built in if you compile with ssl [07:32] mape: Oh really? How do I access it? [07:32] creationix: I don't remember, but it's in the crpyto stuff [07:32] creationix: JimBastard has a library that wraps it [07:32] creationix: you could read his source [07:33] mape: crypto.createHash('md5') :) [07:33] Tim_Smart: mape: Also, nesting makes the GC angry :p [07:33] mape: http://japhr.blogspot.com/2010/06/md5-in-nodejs-and-fabjs.html [07:33] JimBastard: http://github.com/Marak/node_hash/blob/master/lib/hash.js [07:33] creationix: cool, we got it [07:33] mape: well that was handy [07:33] Tim_Smart: (Only if it is a hot code path though) [07:34] JimBastard: var md5 = hash.md5(user_password); [07:34] Tim_Smart: What is wrong with crypto? [07:34] felixge has joined the channel [07:34] JimBastard: it doesnt use enough zeros [07:34] creationix: I keep forgetting that node has it built-in now, back when I needed md5 for postgres auth I had to grab a js lib [07:34] Tim_Smart: I see. [07:34] JimBastard: computer science level III stuff [07:34] mape: Someone should kill me.. [07:35] creationix: JimBastard: zeroes? [07:35] mape: Why isn't it matching the source? Since I have a <%= new Date().toString() %> >_< [07:35] Tim_Smart: 000? [07:35] mape: duh [07:35] creationix: mape: or that [07:35] mape: Hehe [07:35] mape: Still neat I use md5 instead of the entire source [07:35] creationix: but I figured you had already checked that [07:35] JimBastard: no one said anything was wrong with crypto [07:35] mape: nicer to inspect [07:36] mape: creationix: You should always assume I'm dumb ;) [07:36] creationix: mape: nah, we're the ones up super late at the moment [07:36] mape: Hehe [07:36] creationix: especially JimBastard, it's almost 4am there [07:36] Max_Might has joined the channel [07:37] JimBastard: now that i am full time at nodejitsu i am not limited by the barriers of space and time [07:37] Tim_Smart: You go through jobs fast :p [07:37] micheil: mape: also, try using node to do the md5 stuff. [07:37] creationix: JimBastard: I take it you guys don't work 9-5 hours [07:37] JimBastard: ive very close to closing a nice round of funding [07:37] JimBastard: ;-) [07:37] creationix: awesome [07:37] mape: micheil: jup using var cacheKey = crypto.createHash('md5').update(req.body.source).digest('hex'); [07:37] JimBastard: creationix: until the office is ready not really [07:38] JimBastard: moving in end of month, the big 16k ft co working spot [07:38] JimBastard: construction is still underway... [07:38] JimBastard: http://generalassemb.ly/ [07:38] teemow has joined the channel [07:39] mape: So consulting on the side? [07:39] V1: mape: a crc32 is actually faster than a md5 and probably good enough for your stuff [07:40] zomgbie has joined the channel [07:40] mape: V1: crypto has that? [07:40] V1: nope, js imp is faster than native md5 [07:40] mape: more code, and I don't really need speed [07:40] mape: This is just for dummy development [07:40] mattcodes: is node-couchdb the recommended/prefer lib for couchdb interaction amougst you guys? [07:41] micheil: mape: better then that. [07:41] micheil: store the crypto.createHash as a sort of singleton [07:41] micheil: then just update it. [07:41] micheil: iirc, digest() will clear the hash [07:41] creationix: mattcodes: i wrote my own [07:41] creationix: couch-client [07:42] creationix: though micheal's request works great too [07:42] creationix: it's just a http helper [07:42] mape: micheil: Cannot call method 'createHash' of undefined, seems wonky [07:42] tekky has joined the channel [07:42] mape: or duh.. [07:42] mape: nm [07:42] micheil: >_> [07:42] micheil: mape: let me check how I was doing it in tail... [07:43] mape: Do get HashUpdate fail though, but yeah, please do [07:43] ivanfi has left the channel [07:43] micheil: okay.. I am currently using hashlib [07:43] micheil: but I do remember see a reset thing for crypto hashes [07:44] mattcodes: creationix, at this stage I just want to prototype parts of our current app, so to get up and running, is there any significant reason you wrote your own? [07:44] creationix: my client is simple and stays out of the way [07:44] creationix: it only abstracts simple stuff [07:44] creationix: and gives you direct access to advanced stuff [07:45] cagdas has left the channel [07:45] creationix: mattcodes: http://nodeknockout.posterous.com/countdown-to-knockout-post-14-using-couchdb-w [07:46] mape: Tim_Smart: so suggesting I add a ton of functions to flatten the nesting? [07:46] creationix: mattcodes: that's written by mikeal from couchone, it goes through 3 different libraries [07:46] mape: or well perhaps not a ton but some.. ;) [07:49] simme has joined the channel [07:49] creationix: g'night everyone [07:50] mape: nn [07:53] shreekavi has joined the channel [07:53] micheil: mape: yeah, looks like the life cycle of a createHash is: [07:53] micheil: init (crypto.createHash) -> update(data) -> digest -> cleanup -> ready to use again [07:53] xonecas has joined the channel [07:53] xonecas: creationix: I'm requiring a file with a function declaration, but after the require statement calling the functions returns undefined is there a specific way i need to write the file being required? [07:53] russell_1 has joined the channel [07:54] markwubben has joined the channel [07:54] mape: a so just use cleanup [07:55] mape: Object [object Object] has no method 'cleanup' [07:55] mape: shouldn't that be on the createHash object? [07:56] MikhX has joined the channel [07:57] aabt has joined the channel [07:58] mytrile has joined the channel [08:00] jamescarr__ has joined the channel [08:01] guybrush: uuhhm how is this language called with all these --- +++ << ... ? recently i spotted a node-module for this, but i cant remember [08:03] Druid_ has joined the channel [08:05] simme: guybrush: Brainfuck? [08:05] guybrush: simme: ty! [08:05] simme: :) [08:07] Twelve-60 has joined the channel [08:08] L_star has joined the channel [08:12] Druid_ has joined the channel [08:14] virtuo has joined the channel [08:22] jstemmer has joined the channel [08:31] tpryme has joined the channel [08:35] ryah: ACTION holds his head in his hands. [08:36] ryah: slide making = noy my forte [08:39] TomY has joined the channel [08:40] Tim_Smart has joined the channel [08:41] Tim_Smart: ACTION shakes a fist at net splits. [08:45] Anti-X has joined the channel [08:46] Anti-X: browscap for node is now ready http://github.com/dangrossman/node-browscap [08:46] Anti-X: also on npm [08:47] Tim_Smart: Anti-X: You should wait until the others, trapped in the netsplit void, come back and re-announce :p [08:47] Anti-X: orly [08:47] Anti-X: that void thing eh? [08:48] Anti-X: oh yeah 155 people [08:48] Anti-X: that's not much [08:48] Anti-X: i think we might be the ones in the void [08:48] Tim_Smart: At one stage it was 15 for me. [08:48] Tim_Smart: I re-connected and found one half, then again, and I end up here. [08:49] Tim_Smart: It's like space travel or something. [08:49] Anti-X: or lsd [08:50] Tim_Smart: Like closing the door on 150 people, re-opening it 10 secs later, and find everyone changed. [08:50] Anti-X: i think it's all in your head [08:50] Anti-X: did you eat that green bread? [08:50] Tim_Smart: I ate the white bread. [08:50] Anti-X: that means you ate jesus [08:51] Tim_Smart: Whoops. Wouldn't want that. [08:51] Anti-X: no he probably tastes like crap [08:51] Anti-X: so [08:51] Anti-X: bored, huh? :p [08:51] Tim_Smart: OK then I didn't eat Jesus. [08:51] Tim_Smart: It was good bread. [08:51] Tim_Smart: :p [08:54] daglees has joined the channel [08:55] MikhX has joined the channel [08:55] dgathright has joined the channel [08:55] Viriix has joined the channel [08:55] teemow has joined the channel [08:55] Max_Might has joined the channel [08:55] Fullmoon has joined the channel [08:55] JimBastard has joined the channel [08:55] megana has joined the channel [08:55] marienz has joined the channel [08:55] ehaas has joined the channel [08:55] ooooPsss has joined the channel [08:55] KungFuHamster_ has joined the channel [08:55] mif86 has joined the channel [08:55] dnolen has joined the channel [08:55] figital has joined the channel [08:55] Draggor has joined the channel [08:55] nsm has joined the channel [08:55] leeeb has joined the channel [08:55] crodas has joined the channel [08:55] gbot2 has joined the channel [08:55] cognominal has joined the channel [08:55] buu has joined the channel [08:55] mqt has joined the channel [08:55] ice799 has joined the channel [08:55] tk has joined the channel [08:58] hellp has joined the channel [09:00] agnat has joined the channel [09:00] joshpeek has joined the channel [09:00] overra has joined the channel [09:00] path[l] has joined the channel [09:00] spetrea has joined the channel [09:00] rope has joined the channel [09:00] mbrochh has joined the channel [09:00] fbits has joined the channel [09:00] mattcodes has joined the channel [09:00] stalled has joined the channel [09:00] aabt has joined the channel [09:00] ntelford has joined the channel [09:00] markwubben has joined the channel [09:00] russell_1 has joined the channel [09:00] xonecas has joined the channel [09:00] tekky has joined the channel [09:00] derferman has joined the channel [09:00] themiddleman has joined the channel [09:00] ph^ has joined the channel [09:00] jansc has joined the channel [09:00] Yuffster_work has joined the channel [09:00] matjas has joined the channel [09:00] Nohryb has joined the channel [09:00] saikat has joined the channel [09:00] mikeal has joined the channel [09:00] blaines has joined the channel [09:00] gf3 has joined the channel [09:00] ajpiano has joined the channel [09:00] alexb_ has joined the channel [09:00] ysynopsis has joined the channel [09:00] jameshome has joined the channel [09:00] necrodearia has joined the channel [09:00] jchris has joined the channel [09:00] Tprice has joined the channel [09:00] sonnym has joined the channel [09:00] tapwater has joined the channel [09:00] skohorn has joined the channel [09:00] heavysixer has joined the channel [09:00] freeformz|AFK has joined the channel [09:00] prettyrobots has joined the channel [09:00] Gruni has joined the channel [09:00] GriffenJBS has joined the channel [09:00] zemanel has joined the channel [09:00] cjheath has joined the channel [09:00] alexfner has joined the channel [09:00] deanlandolt has joined the channel [09:00] pedrobelo has joined the channel [09:00] rbranson_ has joined the channel [09:00] thejefflarson has joined the channel [09:00] jacobolus has joined the channel [09:00] wilmoore_ has joined the channel [09:00] sschuermann has joined the channel [09:00] janne has joined the channel [09:00] everton has joined the channel [09:00] boaz has joined the channel [09:00] maqr has joined the channel [09:00] jesusabdullah has joined the channel [09:00] blowery has joined the channel [09:00] sveisvei has joined the channel [09:00] robotarmy has joined the channel [09:00] jbenesch has joined the channel [09:00] aurynn has joined the channel [09:00] viirya has joined the channel [09:00] ircretary has joined the channel [09:00] akweon has joined the channel [09:00] deoxxa has joined the channel [09:00] micheil has joined the channel [09:00] sth has joined the channel [09:00] quag has joined the channel [09:00] nuba has joined the channel [09:00] apage43 has joined the channel [09:00] jperras has joined the channel [09:00] d4ilycow has joined the channel [09:00] jarfhy has joined the channel [09:00] jamescarr has joined the channel [09:00] sstephenson has joined the channel [09:00] kgf has joined the channel [09:00] themcgruff has joined the channel [09:00] dnyy has joined the channel [09:00] Validatorian has joined the channel [09:00] chewbranca has joined the channel [09:00] Ned_ has joined the channel [09:00] _announcer has joined the channel [09:00] luddep has joined the channel [09:00] franck34 has joined the channel [09:00] webr3 has joined the channel [09:00] wink_ has joined the channel [09:00] ironfroggy has joined the channel [09:00] zk has joined the channel [09:00] _sri has joined the channel [09:00] Epeli has joined the channel [09:00] Nevtus has joined the channel [09:00] pkrumins has joined the channel [09:00] mlangenberg has joined the channel [09:00] joshthecoder has joined the channel [09:00] sideshow has joined the channel [09:00] yenz has joined the channel [09:00] ivan has joined the channel [09:00] joncurra has joined the channel [09:00] cha0s has joined the channel [09:00] disq has joined the channel [09:00] SvenDowideit has joined the channel [09:00] rphillips has joined the channel [09:00] hober has joined the channel [09:00] voodootikigod has joined the channel [09:00] phiggins has joined the channel [09:00] keeran has joined the channel [09:00] chilts has joined the channel [09:00] mediacod1r has joined the channel [09:00] cce has joined the channel [09:00] ddollar has joined the channel [09:00] manveru has joined the channel [09:00] kordless|away has joined the channel [09:00] er1c_ has joined the channel [09:00] DoubleV has joined the channel [09:00] aconran_ has joined the channel [09:00] takeout has joined the channel [09:00] thedjinn has joined the channel [09:00] ashleydev has joined the channel [09:00] polyrhythmic has joined the channel [09:00] FireFoxIXI has joined the channel [09:00] kkaefer has joined the channel [09:00] StM has joined the channel [09:00] jhelwig has joined the channel [09:00] inimino has joined the channel [09:00] wattz has joined the channel [09:00] zhesto has joined the channel [09:00] sam_ has joined the channel [09:00] elliottcable has joined the channel [09:00] wang has joined the channel [09:00] Atmoz has joined the channel [09:00] The_Surfer has joined the channel [09:00] foca has joined the channel [09:00] tmm1 has joined the channel [09:00] sr has joined the channel [09:00] halorgium has joined the channel [09:00] shajith has joined the channel [09:00] pquerna has joined the channel [09:00] Sembiance has joined the channel [09:00] decklin has joined the channel [09:00] termie has joined the channel [09:00] lstoll has joined the channel [09:00] masch has joined the channel [09:00] lianj has joined the channel [09:00] konobi has joined the channel [09:00] dgathright has joined the channel [09:00] aubergine has joined the channel [09:00] joshpeek has joined the channel [09:01] Tim_Smart: Anti-X: There you go :) [09:01] Anti-X: browscap for node is now ready on npm 'browscap' or at http://github.com/dangrossman/node-browscap [09:01] Anti-X: :P [09:01] sstephenson has joined the channel [09:04] aubergine_ has joined the channel [09:04] Blink7 has joined the channel [09:04] aubergine_ has joined the channel [09:06] Anti-X: i also found another short fix to double the speed of it [09:07] Anti-X: i'm on fire, fixing this dude's project instead of things that i should be doing [09:11] niko has joined the channel [09:18] wilmoore has joined the channel [09:19] marienz has joined the channel [09:20] foca has joined the channel [09:21] unomi has joined the channel [09:22] isaacs_home has joined the channel [09:29] aliem has joined the channel [09:30] tpryme has left the channel [09:31] xla has joined the channel [09:40] marienz has joined the channel [09:40] MikhX has joined the channel [09:41] unomi has joined the channel [09:45] cefn has joined the channel [09:45] aabt has joined the channel [09:46] cefn has left the channel [09:49] [[zz]] has joined the channel [09:57] cnu has joined the channel [09:57] hjjaa has joined the channel [09:59] aubergine has joined the channel [09:59] marienz has joined the channel [10:04] omarkj has joined the channel [10:06] caolanm has joined the channel [10:06] shreekavi has left the channel [10:14] stephank has joined the channel [10:19] TomsB has joined the channel [10:24] DoNaLd` has joined the channel [10:25] Tim_Smart has joined the channel [10:25] mbrochh has joined the channel [10:26] agnat has joined the channel [10:27] AAA_awright has joined the channel [10:28] zomgbie has joined the channel [10:29] pdelgallego has joined the channel [10:33] rasputnik has joined the channel [10:38] ajsie: how do i install http://github.com/felixge/node-couchdb ? [10:38] ajsie: that is the de-facto node couchdb wrapper right? [10:38] Anti-X: use npm [10:39] Anti-X: http://github.com/isaacs/npm [10:39] Anti-X: package manager [10:39] MattJ has joined the channel [10:39] ajsie: Anti-X: yeah i know but i cant find it in npm [10:40] Anti-X: oh [10:40] ajsie: npm install couchdb isnt from the same author [10:40] ajsie: so i doubt its that repo http://github.com/felixge/node-couchdb [10:41] Anti-X: it is [10:41] Anti-X: npm view couchdb [10:41] Anti-X: it's that on [10:41] Anti-X: e [10:41] Anti-X: it says nathan, but that could be just the original author [10:41] Anti-X: i don't know [10:42] Anti-X: nathan is just the 0.0.1... 1.0.0 is felix's, but npm doesn't seem to care [10:47] peritus- has joined the channel [10:48] Tim_Smart has joined the channel [10:50] digitalspaghetti: yea, npm install couchdb IS node-couchdb [10:50] digitalspaghetti: i know because i'm using it :D [10:53] Teeheehee has joined the channel [11:04] c4milo has joined the channel [11:04] fermion has joined the channel [11:05] kjy112 has joined the channel [11:05] murphy has joined the channel [11:13] Anti-X: how sexy [11:13] zorzar_ has joined the channel [11:14] micheil: that was just seriously scary. [11:14] murphy has joined the channel [11:14] micheil: accidentally created a 1.5m fireball in my wok. [11:14] Anti-X: why would you do that [11:14] murphy has joined the channel [11:14] Anti-X: that's not acceptable behaviour [11:14] micheil: by accident, a combination of oil+water caught on fire. [11:15] Anti-X: what kind of oil are you using? :p [11:15] Anti-X: i've never had oil catch fire [11:15] micheil: uh. Cooking oil. duh. [11:15] micheil: like, every day olive oil. [11:16] Anti-X: i thought you needed liquor to flambé things [11:25] chapel: Anti-X: the water hits the hot wok/oil and steams, causing the oil to splash and vaporize, probably getting some near the heating element, and it flares, causing the fireball [11:26] Anti-X: hm [11:30] DoNaLd` has joined the channel [11:32] tj has joined the channel [11:36] Gruni has joined the channel [11:37] micheil: chapel: pretty much. [11:37] Gruni has joined the channel [11:37] micheil: nasty stuff, because when you remove from the heat, it flares up even larger. [11:37] micheil: ACTION singed some hair doing that. [11:40] aubergine has joined the channel [11:45] aubergine_ has joined the channel [11:45] mattcodes has joined the channel [11:46] Anti-X: don't you know that water in hot oil is bad? :P [11:46] Anti-X: exept for making crispy bacon [11:46] mattcodes: if I have a global routing table that is used product name to product id (for db lookup) how should I handle this in connect/express? e.g. /big-teddy-bear-20cm-brown [11:47] mattcodes: should I just lookup and then set req.productId = routes["big-teddy-20cm..] [11:47] mattcodes: and then call next() [11:48] jamescarr_ has joined the channel [11:48] jamescarr__ has joined the channel [11:53] micheil: /:product_name [11:53] micheil: and then you have that as params [11:54] __mn__: question, if you find security flaws in a server where do you go to report it? [11:55] hellp has joined the channel [11:55] MattJ: __mn__: server software? [11:56] d0k has joined the channel [11:57] __mn__: no, earlier I was figuring out how to send emails from node and I hit a bunch of spam-filter problems. So I was figuring out how to work around them and I found that T-Mobile's texting server can extremely easily be exploited, and I have a script that could send out text messages to 34 million accounts. Which... would get me in a lot of trouble. But the point is they have a huge flaw on their server. [11:58] MattJ: Ah [11:58] __mn__: and, of course, I want it fixed... but how do you get a massive corporation to fix a security flaw? [11:59] MattJ: Depends whether you hit the right person or not [11:59] __mn__: **rolls eyes** [11:59] MattJ: If you can't find appropriate contact details check whois for the domain and mail the technical contact [11:59] skohorn has joined the channel [11:59] __mn__: hmm thats a good idea, thanks. sorry for the non-node question. [11:59] MattJ: at the end of the day you can only do your best :) [11:59] __mn__: :P [12:01] mikew3c has joined the channel [12:02] deoxxa: __mn__: it's situations like this that are why the concept of full disclosure exists. if you can't get in contact with someone at the company, or they refuse to act on it in an acceptable timeframe, you throw the info onto the full-disclosure mailing list and let peer pressure do its work. [12:03] skohorn_ has joined the channel [12:03] __mn__: hmm. full-disclosure mailing list... meaning just letting the code out to the public? [12:03] Mobbit has joined the channel [12:03] __mn__: **reads wikipedia** [12:04] deoxxa: you can't guarantee that your polite "i found a problem with your service" email will hit their inbox or prompt them to take action, but an exploit turning up on milw0rm or inj3ct0r will probably give them a push in the right direction. [12:04] deoxxa: and yeah, there's a mailing list that a whooole ton of people are subscribed to that you can submit things like that to [12:04] __mn__: thanks, looking up on it now [12:05] deoxxa: so within a few hours of the information being on there, it'll be in the hands of thousands of less honest people [12:05] deoxxa: the challenge then, for the company/companies affected, is to fix it before it can be exploited [12:05] __mn__: wow... [12:05] deoxxa: usually this is months after they've been notified [12:05] deoxxa: since big companies are kind of lame like that [12:06] __mn__: yeah, thats what I was thinking. Call T-Mobile customer service? rrr... no. :P [12:06] mattcodes: any SQL Server support? [12:06] mattcodes: (dont ask. not my fault) [12:06] deoxxa: what? [12:06] deoxxa: no, this is not #mssql [12:06] micheil: isaacs_home: this might be handy for you. http://gist.github.com/626085 [12:07] micheil: isaacs_home: there's a post on the mailing list about it too. [12:07] mattcodes: I mean is there a way to pull a resultset from sql server into node.js. rather than having intermedia python/ruby adapter/proxy [12:07] micheil: mattcodes: if there is a driver. [12:08] agnat: __mn__: If you don't want to do it yourself because you are afraid of the hassle, the german CCC is very helpful with these kind of things ... write to presse@ccc.de to get professional help ... I'm sure they will be interested [12:08] Teeheehee has joined the channel [12:08] deoxxa: mattcodes: nothing in npm, so there's probably not anything available right now [12:08] __mn__: deoxxa: thanks. [12:09] deoxxa: i don't think there's a lot of overlap between node.js users and mssql users mattcodes [12:09] deoxxa: so your options are probably to pay someone to write one, write one yourself or keep using whatever you're using now [12:09] micheil: mattcodes: you would probably have to write a driver. [12:09] c4milo has joined the channel [12:09] deoxxa: http://nodul.es/categories/#Database%20Interfaces [12:10] mattcodes: ill just throw up a php script and GET calls to that, it can jsonify the output for me. PHP only because my apache instance already has it installed.. ; [12:10] aubergine has joined the channel [12:11] deoxxa: that kind of defeats the purpose of using node at all if you're relying on something as slow and synchronous as php/apache [12:11] mattcodes: no Im not its a task the runs once a day [12:12] deoxxa: oh [12:12] deoxxa: well that's not -as- bad then [12:12] mattcodes: some transformation and throw it up into couchdb [12:12] mattcodes: at the moment its a powershell script that pulls it from ms sql and puts it into ravendb [12:12] Cainus has joined the channel [12:13] devinus has joined the channel [12:13] herbySk has joined the channel [12:13] jamescarr_ has joined the channel [12:14] Tim_Smart has joined the channel [12:15] jamescarr__ has joined the channel [12:17] mattcodes: any nodejs libraries that ideal for high-level ajax calls. preferably handling expires and etags whilst instance of client is alive? [12:17] ctp has joined the channel [12:19] bentruyman has joined the channel [12:21] Anti-X has joined the channel [12:27] Mobbit has left the channel [12:28] noahcampbell has joined the channel [12:30] nerdEd has joined the channel [12:32] devinus has joined the channel [12:34] kriszyp has joined the channel [12:38] Gruni has joined the channel [12:43] jakehow has joined the channel [12:44] cyraxx has joined the channel [12:46] ctp has joined the channel [12:47] blaines_ has joined the channel [12:49] ctp has joined the channel [12:50] blaines has joined the channel [12:51] malkomalko has joined the channel [12:58] daglees has joined the channel [12:58] daglees has joined the channel [12:59] ivanfi has joined the channel [13:02] sschuermann: yeha [13:02] sschuermann: expressjs update [13:04] ysynopsis has joined the channel [13:05] mw has joined the channel [13:06] digitalspaghetti: and connect! [13:07] sschuermann: I still use only express and connect implied by that [13:07] sschuermann: but never explecit connect [13:07] sschuermann: ;) [13:07] sschuermann: hey [13:07] sschuermann: everybody gone [13:11] herbySk has joined the channel [13:11] paulr has joined the channel [13:12] davidsklar has joined the channel [13:14] Anti-X has joined the channel [13:16] endergen has joined the channel [13:19] pdelgallego has joined the channel [13:20] mbrochh has joined the channel [13:20] mbrochh has joined the channel [13:23] marshall_law has joined the channel [13:24] cefn has joined the channel [13:25] cefn has left the channel [13:25] Twelve-60` has joined the channel [13:29] ctp has joined the channel [13:29] sstreza has joined the channel [13:30] steadicat has joined the channel [13:30] ooooPsss has joined the channel [13:33] rwaldron has joined the channel [13:34] stephank has joined the channel [13:34] gm__ has joined the channel [13:35] shaver_ has joined the channel [13:35] zedas_ has joined the channel [13:36] EyePulp has joined the channel [13:38] sideshowcoder has joined the channel [13:38] hoodoos_ has joined the channel [13:40] UHMA has joined the channel [13:40] joeshaw has joined the channel [13:40] Anti-X: announcer clean the tubes [13:40] _announcer: Cleaning the tubes for great justice! [13:41] path[l] has joined the channel [13:41] sivy has joined the channel [13:43] matjas has joined the channel [13:43] jdalton has joined the channel [13:44] jdalton has left the channel [13:44] TomY has joined the channel [13:44] bradleymeck has joined the channel [13:46] sivy has joined the channel [13:48] mlangenberg: I am trying to get WebSockets and SSL to work, but I am running into the following error when I am setting up the connection: Error during WebSocket handshake: location mismatch: wss://localhost/faye != ws://localhost/faye [13:48] __mn__: hi. :) [13:48] __mn__: same here. no fix so far that I've heard of. [13:49] bradleymeck: you can manually patch it, i know someone in here did a while back, but :/ [13:49] _announcer: Twitter: "Anybody need a JavaScript / Node.js developer? Anywhere in Scandinavia. Job #" [no] -- Tor Valåmo. http://twitter.com/torvalamo/status/27342156451 [13:49] __mn__: bradleymeck: oh? do you know who? [13:49] mlangenberg: __mn__: what is the origin of the error? [13:49] bradleymeck: not off top of my head [13:50] __mn__: same error as yours, I got HTTPS up and running with security credentials, I set client&server socket.io to secure:true... and everything except websocket worked for secure connections [13:50] mlangenberg: Yeah, secure connection for plain HTTP is working properly. [13:51] __mn__: yupe. [13:51] unomi has joined the channel [13:51] __mn__: I looked through socket.io couldn't find any places where it would seem to mismatch [13:51] __mn__: check my most recent comment on the issue. [13:52] TheEnd2012 has joined the channel [13:52] mlangenberg: One solution might be browser-client <-SSL-> ningx-proxy <-NON-SSL-> Node.js server ? [13:52] __mn__: I don't know ningx :/ [13:54] andrewfff has joined the channel [13:54] jtsnow has joined the channel [13:56] dnolen_ has joined the channel [13:57] _announcer: Twitter: "returned from the # devcamp, unfortunately missed the report about node.js. Tomorrow seems to be listening to reports on the thesis is Ruby." [ru] -- Max Klyga. http://twitter.com/Neku42/status/27342852604 [13:58] mlangenberg: bradleymeck: Any clue about the mysterious wss:// issue? [13:58] bradleymeck: i would know more if i had a stack trace [13:58] mlangenberg: haha yeah [13:59] mlangenberg: Stack trace of GTFO (http://26.media.tumblr.com/tumblr_l8sp0mqEfG1qav3jwo1_500.jpg) [14:01] cferris has joined the channel [14:04] TomsB has joined the channel [14:05] TomY_ has joined the channel [14:07] davidwalsh has joined the channel [14:07] xla has joined the channel [14:08] mlangenberg: hm... NginX can only do HTTP/1.0 upstream proxy. [14:09] _announcer: Twitter: "doing some Node.js today." -- GarrenSmith. http://twitter.com/GarrenSmith/status/27343948197 [14:11] davidwalsh has joined the channel [14:12] _announcer: Twitter: "What I wonder is how node.js? Easy to use? No time I'm touching." [ja] -- Go Tanaka. http://twitter.com/tan_go238/status/27344236807 [14:15] Ari-Ugwu has joined the channel [14:16] mlangenberg: __mn__: See http://www.sand-labs.org/aros/browser/trunk/WebCore/websockets/WebSocketHandshake.cpp?rev=1428#L499 [14:17] UHMA: mlangenberg: "hm... NginX can only do HTTP/1.0 upstream proxy." what's that mean ? [14:17] __mn__: mlangenberg: sorry was dealing with some security stuff. checking your comment and link now. [14:17] UHMA: i'm using nginx, is it a limitation I should worry about, or just a special case [14:17] dpritchett has joined the channel [14:18] mlangenberg: UHMA: No don't worry, it is just when you are using WebSockets ... [14:18] __mn__: oh, so it isn't a socket.io thing? [14:18] nerdEd has joined the channel [14:19] mlangenberg: __mn__: Oh, it is WebSocket specific. But the WebSocket server (Socket.IO) might play a role in this. [14:22] UHMA: so your exact same code would work perfect on apache ? [14:22] _announcer: Twitter: "@christkv yes it's true! talking about node.js :)" -- Sergio Espeja. http://twitter.com/spejman/status/27345169065 [14:23] mlangenberg: UHMA: don't worry about NginX, it is awesome. I have used it for years. [14:24] ceej has joined the channel [14:24] rasputnik has left the channel [14:24] emmanueloga has joined the channel [14:25] mattcodes has joined the channel [14:26] _announcer: Twitter: "Interesting: Node.js/Connect for doing browser detection and presumably serving up custom content. http://ow.ly/2Tst4" -- matthewforr. http://twitter.com/matthewforr/status/27345524545 [14:26] evanpro has joined the channel [14:27] mbrochh has joined the channel [14:27] mlangenberg: __mn__: Did you take a look at the implemenation code of the WebSocket handler? clientOrigin() seems to return a 'ws://' url instead of a 'wss://' ... [14:27] Eber has joined the channel [14:28] _announcer: Twitter: "@spejman more like talking about evented development both with node.js and ruby (mostly ruby)" -- Christian Kvalheim. http://twitter.com/christkv/status/27345668614 [14:28] qFox has joined the channel [14:28] Eber: guys... is there a library that loads commonjs modules in the browser like in node? [14:28] c4milo: Eber: requireJS [14:28] blowery: eber: requirejs can [14:28] renatoelias has joined the channel [14:28] blowery: too slow! [14:28] ajpiano has joined the channel [14:28] c4milo: :) [14:29] blowery: back to mavis beacon for me [14:29] Eber: right, thanks! what if I need to expose some module I installed via npm for instance... is there a way to share that with the server and serve it to the user somehow? [14:30] Eber: to the client, I mean... [14:31] ctp has joined the channel [14:31] c4milo: Eber: requireJS , you need to use the same module system in both if you want share code [14:32] mattvermaak has joined the channel [14:32] bradleymeck: there are a couple commonjs modules but i think the only maintained one is requireJS [14:33] Eber: c4milo: thanks man, I'll take a look at that... [14:33] c4milo: mozilla skywriter is using requireJS , cloud9ide is also using it. So you can expect good support [14:33] _announcer: Twitter: "This morning, "node.js I do" and was told that, but interesting, is not using, let's just say. Because there now because there is Erlang." [ja] -- yosuke hara. http://twitter.com/yosukehara/status/27346177354 [14:34] _announcer: Twitter: "Not like I did not know before.. I know why I struggle to finish stuff, there is always some cool new technology - #node.js, it rocks!" -- MD Oppenheimer. http://twitter.com/md_oppenheimer/status/27346222959 [14:35] marienz has joined the channel [14:36] Eber: c4milo: cool :) [14:37] Eber: now, does anyone knows if there is a good code to generate real guid with client side JS? [14:38] bradleymeck: can you get a hold of the mac address at all from client side? [14:39] Eber: bradleymeck: I guess not, no without plugins like ActiveX, but I'm not so sure if using mac addresses is the only way to generate guid's... [14:39] c4milo: Eber: ? [14:40] c4milo: Eber: guid ? [14:40] Eber: c4milo: UUIDs [14:40] c4milo: oh [14:40] rasputnik has joined the channel [14:40] bradleymeck: eber, it the generally accepted way that uses mac addresses [14:40] c4milo: Eber: I think there is a module to do that [14:41] c4milo: Eber: ohh they are gists haha [14:41] c4milo: Eber: http://gist.github.com/393456 [14:41] Eber: c4milo: haha, thanks! i'll check it out! [14:41] c4milo: Eber: http://gist.github.com/394936 [14:42] c4milo: and [14:42] c4milo: Eber: http://bitbucket.org/nikhilm/uuidjs [14:42] mattcodes has joined the channel [14:42] Eber: wow, lots of resources :) thanks! [14:42] c4milo: Eber: http://github.com/ry/node/wiki/modules [14:42] bradleymeck: those are all server side :/ [14:43] xla has joined the channel [14:43] Eber: bradleymeck: take a look at http://www.rfc-archive.org/getrfc.php?rfc=4122 section 4.4 [14:45] Eber: yeah, I need something for the client, to work offline as well... [14:47] bronson has joined the channel [14:47] bradleymeck: eber that seems pretty easy to do [14:48] _announcer: Twitter: "@JurieOnGames Hard to compare nodejs and Erlang. Erlang seems more scalable (on PC and Cluster), better crash recovery, hot code updating." -- Bjoern Knafla. http://twitter.com/bjoernknafla/status/27347532483 [14:48] _announcer: Twitter: "I made a website with words on it! http://telepromptr.com #nodejs #expressjs #mongodb" -- Michael Hampton. http://twitter.com/mirhampt/status/27347593231 [14:50] _announcer: Twitter: "@JurieOnGames nodejs seems targeted at event driven js code and far less messaging support than Erlang. Erlang also automatically parallel." -- Bjoern Knafla. http://twitter.com/bjoernknafla/status/27347742675 [14:50] TobiasFar has joined the channel [14:50] Eber: bradleymeck: maybe i'll do something... maybe! [14:51] bradleymeck: give me a sec, im almost done, but its going to be slightly off (64bits w/ 4bit padding) [14:51] TobiasFar has joined the channel [14:51] bradleymeck: but the 60bits should be clean [14:54] _announcer: Twitter: "@bjoernknafla Messaging = communication between components running on the server? And nodejs just replies to client requests?" -- Jurie Horneman. http://twitter.com/JurieOnGames/status/27348089817 [14:58] ivanfi has left the channel [14:59] matt_c has joined the channel [14:59] _announcer: Twitter: "@bjoernknafla And nodejs does everything in one process, and therefore will sooner hit a limit?" -- Jurie Horneman. http://twitter.com/JurieOnGames/status/27348555721 [15:00] vilhonen: how would you compare node.js and erlang? [15:00] stride: strange discussion there on twitter.. [15:00] stride: heh :) [15:00] _announcer: Twitter: "@JurieOnGames nodejs is mainly concurrent - code is run on events but only in one thread and sequentially. No race conditions on shared vars" -- Bjoern Knafla. http://twitter.com/bjoernknafla/status/27348665142 [15:00] bradleymeck: math.random is proving to be a poor subsitute for getting random bits [15:00] vilhonen: are they competing of the same market [15:00] bradleymeck: vilhonen, different languages, decently shared principles [15:01] stride: bradleymeck: open /dev/urandom and read a few :) [15:01] bradleymeck: client side [15:01] aubergine_ has joined the channel [15:01] marshall_law_ has joined the channel [15:01] bradleymeck: erlang is more tested, but nodejs code is sometimes reusable beyond the server [15:01] stride: bradleymeck: oh.. uhm.. use flash to access the microphone and calculate your random value out of that noise :> [15:01] prettyrobots has joined the channel [15:01] _announcer: Twitter: "@JurieOnGames For nodejs to use multiple cores it needs to spawn OS processes - or use other Javascript tech (never used it)." -- Bjoern Knafla. http://twitter.com/bjoernknafla/status/27348796122 [15:02] vilhonen: are erlang's IO related apis also asynchronous like in node.js? [15:02] mlangenberg: bradleymeck: Let the user press some random buttons [15:02] mlangenberg: bradleymeck: Or, watch the movement of the mouse pointer [15:02] stride: not according to http://en.wikipedia.org/wiki/Asynchronous_I/O vilhonen [15:04] vilhonen: node.js excels in its APIs as you can create fast event handler and do heavy calculations in externals processes whose results you receive via async APIs [15:04] vilhonen: I think [15:05] _announcer: Twitter: "@JurieOnGames Though be warned - I don't know Javascript and only skimmed over the nodejs docs." -- Bjoern Knafla. http://twitter.com/bjoernknafla/status/27349164165 [15:07] matt_c_ has joined the channel [15:08] dphiffer has joined the channel [15:08] dphiffer has left the channel [15:08] sonnym has joined the channel [15:08] yviktorov has joined the channel [15:09] danielzilla has joined the channel [15:09] dphiffer has joined the channel [15:09] _announcer: Twitter: "@jdub Thanks for chiming in! Base of discussion was a comparison of Erlang with nodejs." -- Bjoern Knafla. http://twitter.com/bjoernknafla/status/27349495978 [15:10] matt_c_: ACTION waves from the riak talk at strangeloop. [15:10] steadicat has joined the channel [15:11] jamescarr_ has joined the channel [15:11] _announcer: Twitter: "node.js de sys.log idea to define, bg year fall in the process when the user moves" [ja] -- こまっしゅ. http://twitter.com/komasshu/status/27349708293 [15:12] jakehow has joined the channel [15:14] agnat has joined the channel [15:14] agnat has joined the channel [15:15] bradleymeck: eber http://gist.github.com/626336, ran some simple tests and it wasnt colliding on a billion consecutive ids [15:16] charlenopires has joined the channel [15:16] Eber: bradleymeck: awesome man :) you did it just now? [15:16] _announcer: Twitter: "etc. from the SCP also Iketa minipro login. Node.js available anywhere in this experiment!" [ja] -- 江ミ藤. http://twitter.com/emit7c/status/27350143660 [15:16] bradleymeck: its a pretty easy thing for v4 uuid [15:16] dylang: tjholowaychuk: i think there were some incompatibility changes in the express update today. is there a list? for example from a partial this.req.query is now this.query. [15:16] _announcer: Twitter: "moongift of people want to say is "node.js I Janee language" means." [ja] -- 徳永 広夢. http://twitter.com/tokuhirom/status/27350187331 [15:17] aubergine has joined the channel [15:17] Eber: bradleymeck: I couldn't do it :( I know nothing about those stuff... nothing about bits and bytes and binaries... I'm a fraud... lol [15:17] _announcer: Twitter: "@bjoernknafla @JurieOnGames I hope you guys have seen this... http://rocketpack.fi/engine/ (node.js + socket.io gaming platform)" -- Jeff Waugh. http://twitter.com/jdub/status/27350263518 [15:18] bradleymeck: seeing this discussion on erlang, i dont think people understand erlang's scaling or parrallelism [15:18] vilhonen: bradleymeck: could you explain [15:19] _announcer: Twitter: "# Nodejs No Shima Kaopu currently # mysql solution, there is an unstable node-mysql but the author has been shouting for help, up to the people who are interested you can complete this mission ah!" [zh-CN] -- Chicharito (爵之45355). http://twitter.com/hanyee/status/27350442435 [15:20] bradleymeck: well erlang is parallel by design, that does not mean it executes in a different manner than say, a coroutine based system, it does have the ability to spread across cores which is impressive for a single process, but at the same time it enforces quite a few restrictions to do so, and may even have to reexecute code if shared memory is overriden [15:21] bradleymeck: node is manually scaled by contrast, which requires knowledge of number of cores and message passing using a protocol rather than built in language features [15:21] bradleymeck: but should not reexecute code, and shared memory would not be provided between processes [15:22] _announcer: Twitter: "Intends to use the Google # O3D # Websocket and # nodejs be interesting web3d app demo for the real warm about, for tomorrow to get, a little tired today" [zh-CN] -- Chicharito (爵之45355). http://twitter.com/hanyee/status/27350668737 [15:22] _announcer: Twitter: "Yesterday I have updated node.js []. Reduce no like. Despite being Chrome. Weird. (Not sure you do not have it now)" [ja] -- edvakf. http://twitter.com/edvakf/status/27350692837 [15:22] _announcer: Twitter: "erlang node.js and interesting story! In both Satoshi Hazime. Personally, I ~ a erlang. You'll quickly realize the Wait." [ja] -- 小林卓之. http://twitter.com/takayuki_koba/status/27350693153 [15:22] bradleymeck: idk about erlang clusters much though cant talk about that :/, but its more an argument about how to scale [15:22] bradleymeck: both are valid approaches [15:22] delapouite has joined the channel [15:23] _announcer: Twitter: "not only did I totally enjoy the Node.js PeepCode, I recognized the intro and outro music ^_^" -- Giles. http://twitter.com/gilesgoatboy/status/27350748887 [15:23] GriffenJBS: does anyone have web workers for node.js? [15:23] bradleymeck: lots [15:23] bradleymeck: http://github.com/pgriess/node-webworker [15:23] GriffenJBS: bradleymeck: thanks [15:24] Me1000 has joined the channel [15:25] marshall_law has joined the channel [15:25] tjholowaychuk: dylang: this.req.query ? there is no "this.req" ? its just req.query [15:26] tjholowaychuk: and has been for quite some time [15:26] dylang: tjholowaychuk: heh, this.req.query was working for me, guess it was a fluke. [15:26] tjholowaychuk: dylang: weird :s lol [15:27] dylang: tjholowaychuk: i've been using proto to give forEach to my collections which has let the view engine use collections instead of arrays, now that doens't seem to work anymore. Looking into it now... [15:28] tjholowaychuk: dylang: I added support for anything array-like [15:28] tjholowaychuk: forEach is not used anymore [15:28] tjholowaychuk: well i think it was map() actually [15:28] tjholowaychuk: but now its just a for loop + indexed properties [15:28] dylang: tjholowaychuk: yeah, proto adds map as well. the array-like check i think requires a .length property which the collections don't have. i'm adding that now to see if it helps. [15:28] simme has joined the channel [15:29] tjholowaychuk: dylang: ah yeah that would do it [15:29] hsuh has joined the channel [15:29] aheckmann has joined the channel [15:30] _announcer: Twitter: "@ Kuwabarahiroshi you! Node.js never dabbled in that! ?" [ja] -- 坂上 真大. http://twitter.com/madai0517/status/27351443316 [15:31] dylang: tjholowaychuk: 'collection' and 'as' properties still work same as before? [15:32] benburkert has joined the channel [15:32] tjholowaychuk: dylang: yup, if he second arg has a length prop, then it is considered the collection [15:32] tjholowaychuk: dylang: or whatever is passed to collection:, but that needs a length prop too [15:34] dylang: tjholowaychuk: <%- partial('recruiter/recruiter', { collection: recruiters, as: 'recruiter' }) %> -- inside recruiter/recruiter i'm getting an error that recruiter is not defined. [15:34] tjholowaychuk: hmm [15:34] dylang: excuse the silly naming - i have a lot of partials for this project so i'm broken them into directories [15:35] fod has joined the channel [15:35] tjholowaychuk: what is recruiters tho? not an array obviously like you mentioned [15:36] tjholowaychuk: also partial('recruiter', recruiters) would deduce "recruiter" as the name [15:36] tjholowaychuk: by default [15:36] dylang: an object with a length. if i remove any reference to recruiter in the partial then the partial runs fine the correct number of times [15:36] tjholowaychuk: hmm [15:36] _announcer: Twitter: "Choreographer for nodejs is sure one useful tool for routing requests." -- igor g.. http://twitter.com/iganapolsky/status/27351996191 [15:36] tjholowaychuk: let me make sure i have tests for "as" [15:36] tjholowaychuk: im sure i o [15:36] tjholowaychuk: do [15:36] dylang: i wasn't sure what varname it would use for 'recruiter/recruiter' [15:37] trotter has joined the channel [15:37] tjholowaychuk: dylang: I can add a test case for that, and take the last segment [15:37] aubergine has joined the channel [15:38] fod has joined the channel [15:38] softdrink has joined the channel [15:38] eazyigz has joined the channel [15:38] eazyigz: how can I find out the version of nodejs installed on my system? [15:39] dylang: eazyigz: node -v [15:39] strmpnk has joined the channel [15:39] eazyigz: thx [15:39] dylang: tjholowaychuk: i changed the as to "test" and the partial says "test is undefined" [15:40] dylang: tjholowaychuk: i'm going to check to see if this is only happening with array-like collections [15:40] tjholowaychuk: dylang: weird :s all my old tests were/are fine [15:40] eazyigz: does anybody use choreographer with nodejs, for routing requests? I find that it doesn't work on 0.23 [15:40] _announcer: Twitter: "Browscap for Node.js! "npm install browscap" or http://github.com/dangrossman/node-browscap" -- Tor Valåmo. http://twitter.com/torvalamo/status/27352338493 [15:41] tjholowaychuk: dylang: shouldnt matter [15:41] tjholowaychuk: dylang: unless length is wrong [15:41] _announcer: Twitter: "Browscap for Node.js! "npm install browscap" or http://github.com/dangrossman/node-browscap #nodejs #javascript #browscap" -- Tor Valåmo. http://twitter.com/torvalamo/status/27352429329 [15:41] Anti-X: lol sorry about double post [15:41] Anti-X: had to add tags :p [15:42] mlangenberg: Hmm.. still can't find the origin of: Error during WebSocket handshake: location mismatch: wss://localhost/faye != ws://localhost/faye [15:43] mlangenberg: oh, gtg [15:43] Anti-X: which lib? [15:43] Anti-X: socketio? [15:44] dylang: tjholowaychuk: i tried hardcoding the length to 1 and same error. this might just be an incompability created by using proto. [15:44] Anti-X: so who's doing the mozilla game competition? [15:45] tjholowaychuk: dylang: could be, but if .length == 1 and [0] is an object you are good to go [15:45] _announcer: Twitter: "Perhaps something like ruby and rails are in different languages right, the same rhythm that I will introduce you node.js as a single programming language." [ja] -- Takanori Suzuki. http://twitter.com/BlueSkyDetector/status/27352743763 [15:45] prettyrobots has joined the channel [15:45] Anti-X: oh no, people think node is ruby [15:45] davidascher has joined the channel [15:45] Anti-X: so to speak [15:46] dylang: tjholowaychuk: would it be strange if partial supported collections as is (no length property, using object.keys) but only when passed in via collection property? [15:46] dmcquay has joined the channel [15:47] _announcer: Twitter: "@jnunemaker My Node.js experiment (http://bit.ly/9vkyBx) got 19k in the first two days. But 90k... Wow. :)" -- Jeff Kreeftmeijer. http://twitter.com/jkreeftmeijer/status/27352914502 [15:47] tjholowaychuk: dylang: id rather have the shortcut [15:49] _announcer: Twitter: "Watching: [npm node.js and installation - about their own susceptibility http://d.hatena.ne.jp/t_43z/20101013/1286957802]" [ja] -- hidehish. http://twitter.com/hidehish/status/27353126939 [15:49] _announcer: Twitter: "Working with #Grails and #Nodejs AT THE SAME TIME while preparing for my #YUIConf talk next month. #YUI3" -- Matthew Taylor. http://twitter.com/rhyolight/status/27353141923 [15:52] ThePub has joined the channel [15:53] davidascher has joined the channel [15:55] matt_c has joined the channel [15:56] MobileSidnicious has joined the channel [15:56] MobileSidnicious has left the channel [15:57] dylang: tjholowaychuk: ugh - i just realized the problem. var val = collection[i]; [15:57] dylang: tjholowaychuk: this means each object's key must be an integer in order [15:57] _announcer: Twitter: "#awesome: @couchDB + @nodejs + @digitas = <3 #NYC" -- hij1nx. http://twitter.com/hij1nx/status/27353800525 [15:57] benburkert has joined the channel [15:57] tjholowaychuk: dylang: yeah. that is what is meant by it being array-like :p [15:57] tjholowaychuk: we *could* support anything with forEach() [15:57] tjholowaychuk: but [15:57] tjholowaychuk: yeah i dont know, doesnt matter much either way [15:58] jamescarr_ has joined the channel [15:58] tjholowaychuk: dylang: but on a side note, that inspired me to change this http://github.com/visionmedia/express/commit/6672d650185a1c8f5e934931ef74ca7dcc29f6e2 [15:59] tjholowaychuk: so you can clean up a bit [15:59] muk_mb has joined the channel [16:00] dylang: tjholowaychuk: cool, thanks [16:01] ekidd has joined the channel [16:01] ekidd: Are there any good articles on scaling Node.js and Socket.io? [16:01] chewbranca has joined the channel [16:01] dylang: tjholowaychuk: here's the proto library i've been using. i don't recommend using it because it modifies the object prototype, but it's an alternate way to loop through non-array-like collections. http://github.com/creationix/proto/blob/master/lib/proto.js [16:02] tjholowaychuk: dylang: there are lots of libs like that out and about [16:04] steadicat has joined the channel [16:04] lgl has joined the channel [16:04] lgl: Hi, does anybody know of a good way to test connect applications? [16:07] bradleymeck: that is a pretty generic question, i would guess selenium is the way to go for large testing [16:07] bradleymeck: anti-x i would be interested if i had a team in the game comp [16:07] simme has joined the channel [16:08] Anti-X: i'm also looking for a team [16:08] bradleymeck: ekidd, are you actually topping out a node instance? [16:08] Anti-X: and there was a discussion a few weeks ago about joining up when it started [16:08] Anti-X: but i can't remember who [16:08] tjholowaychuk: lgl: anything you want :p [16:08] tjholowaychuk: vows, assert mod, expresso [16:08] jpld has joined the channel [16:08] ekidd: bradleymeck: It's running Socket.io, and it start dropping connections around 140 clients. Weird, huh? [16:09] bradleymeck: yep, generally you can get a lot more than that, at least on testing here, i dont have that kinda traffic [16:09] lgl: bradleymeck: Thanks but we're looking for something a little smaller. Preferrably unit tests. [16:09] renatoelias: tjholowaychuk: thank you for your libs =) and all of sencha [16:09] tjholowaychuk: renatoelias: np! [16:09] lgl: tjholowaychuk: thanks I'll take a look [16:10] Anti-X: ekidd, that doesn't sound very desirable [16:11] Anti-X: any type of connection in particular? [16:11] ekidd: bradleymeck, Anti-X: Any suggestions on what I might be doing wrong? [16:11] Kami_ has joined the channel [16:11] bradleymeck: ekidd are you doing long running computations? [16:11] ekidd: Anti-X: A mix of websockets and long-poll requests. Typical socket.io stuff. [16:11] Anti-X: yeah but any type of connection that drops out? [16:11] ekidd: I _do_ need to serialize JSON for each client, and it comes in batches. [16:11] Anti-X: you can see that on client.transport i think [16:12] ekidd: Anti-X: I _think_ the websocket connections are dropping, and also some of the long polls, but I'm not sure. [16:13] lgl: tjholowaychuk: Thanks, we're looking at expresso and it seems able! [16:13] Anti-X: if there are very few long polling drop outs, that could be that they just leave [16:13] ekidd: Anti-X: It doesn't seem to make a huge difference. [16:13] danielzilla has joined the channel [16:13] ekidd: Anti-X: Nah, I can stay at 80 clients all day. But if I hit 140, it will crash back to 40 or 60 within a minute. [16:14] Anti-X: did you upgrade socket.io to the current master? [16:14] ekidd: Anti-X: Yes. [16:14] Anti-X: they made a heartbeat mechanism [16:14] ekidd: Anti-X: Would the heartbeats trigger in under a minute or two? [16:14] murphy has joined the channel [16:15] Anti-X: yeah if it lags too much it might shut down, but it shouldn't lag THAT much.. i think it's 5 or 25 seconds depending on transport type [16:15] ekidd: Is there a good way to break long-running computations up into chunks? Will calling setTimeout(doChunk, 0) on a lot of chunks do it. [16:15] bradleymeck: yes, but webworkers are preferred and easier to manage [16:15] Anti-X: ekidd, you could put long running computations into child processes [16:15] ekidd: Socket.io broadcasts make a lot of JSON.stringify calls? [16:16] Anti-X: and leave the main process to do heartbeats and light work [16:16] ekidd: Err. That was a statement, not a question. [16:16] bradleymeck: they shouldnt to my knowledge [16:16] ekidd: Anti-X: It's not one big computation, but hundreds of little ones. [16:16] Anti-X: so there's no one computation that takes several seconds? [16:16] ekidd: They basically each do a big JSON.stringify and transmit. [16:17] Anti-X: you may want to increase the heartbeat interval [16:17] Anti-X: you can do that when setting options [16:17] ekidd: Anti-X: No. Not unless serializing 150 300 byte JSON messages and writing them to individual clients is too much. [16:17] _announcer: Twitter: "[Js Popular Information] Learning Javascript with Object Graphs (Part II) - How To Node - NodeJS http://bit.ly/9UXNCT # javascript" [ja] -- jsMagazine. http://twitter.com/jsMagazine/status/27355580275 [16:17] Anti-X: well there could be other things [16:17] Anti-X: are you reading from the filesystem synchronously? [16:17] Anti-X: at any point? [16:19] ekidd: Is it safe to use the built-in broadcast method with, say, a 300 byte JSON message and 100 clients? Or is that likely to lock up Node.js for too long? The broadcast method is just a simple loop and it serializes the message once per client, I think. [16:19] Anti-X: remember it's not one thread per connection, you need to pass the torch to an async function, or finish your current run before any other client gets to do anything at all [16:19] ekidd: Anti-X: No, no synchronous calls. [16:19] Anti-X: ok [16:19] Anti-X: and no, a 100 loop shouldn't take long at all [16:19] wadey has joined the channel [16:19] dahankzter has joined the channel [16:20] Anti-X: and sending 300 bytes is like writing to dev null, as long as your connection can handle it :P [16:20] ekidd: Anti-X: Here's the code: http://github.com/emk/node-feedhose/blob/master/feednozzle I apologize for the CoffeeScript; it was just a quick hack. [16:21] ekidd: The Socket.io code starts here: http://github.com/emk/node-feedhose/blob/master/feednozzle#L42 [16:21] ekidd: I wonder why I start dropping connections, then? [16:21] ekidd: I don't seem to be doing anything weird. [16:22] chewbran1a has joined the channel [16:22] ekidd: Anti-X: Thanks for all your advice! [16:22] Anti-X: what advice? [16:22] Anti-X: :p [16:22] Anti-X: i just asked a lot [16:22] ekidd: Well, thank you for a list of things to check. :-) [16:22] Anti-X: ahuh [16:22] Anti-X: ;) [16:23] _announcer: Twitter: "Node.js is to javascript what Rack is to Ruby." -- Sleeptillseven. http://twitter.com/sleeptillseven/status/27356051145 [16:23] JCS^ has joined the channel [16:23] ekidd: Is there a way to turn on detailed logging in Socket.IO? Let me dig around... [16:23] aubergine has joined the channel [16:24] bradleymeck: uggg rack [16:24] Anti-X: more like uggg ruby [16:25] Anti-X: there are three things missing from my CV that i don't mind claiming to not know... perl, ruby and .net [16:25] bpot has joined the channel [16:25] Anti-X: they can all go fuck themselves [16:25] Anti-X: :P [16:26] benreesman has joined the channel [16:26] Anti-X: of course that last one makes my cv unsuitable for a large majority of companies here, but why would i care, i'm not a programmer whore! [16:27] chewbranca has joined the channel [16:28] Anti-X: ekidd, that last bit in your code about heartbeats [16:28] banjiewen has joined the channel [16:28] Anti-X: you may wanna drop that [16:28] gerred has joined the channel [16:28] davidascher has joined the channel [16:28] Anti-X: it's socket.io's job, so socket.io should do it. if it can't do it, change the socket.io code and submit a patch ;) [16:28] ekidd: Those only get checked every 5 minutes or so, on the client. I use them to make sure that Socket.io hasn't silently railed to reconnect. [16:28] jbenesch has joined the channel [16:29] ekidd: The other half of the code is here: http://github.com/emk/node-feedhose/blob/master/public/feedhose-client.js#L88 [16:30] ekidd: And here: http://github.com/emk/node-feedhose/blob/master/public/feedhose-client.js#L115 [16:30] ekidd: Anti-X: Hmm. What about 'disconnect' messages on the client? What should I do with those? [16:31] Anti-X: use the disconnect message to reconnect, don't add extra stuff [16:31] ekidd: Right now, I simply wait a while (20-50 seconds) and reconnect. [16:31] c4milo has left the channel [16:31] Anti-X: you can reconnect immediately, the client isn't notified until the heartbeat timeout [16:32] Anti-X: so it's already been 25 seconds [16:32] kriszyp_ has joined the channel [16:32] ekidd: Interesting. For web sockets, disconnects are almost instantaneous. [16:32] ekidd: And they're usually because of a server restart when there are < 100 clients. [16:32] Anti-X: yes, but they are also less costly, bandwidth wise [16:32] GriffenJBS: can I open a fd for a unix socket, as a Stream? [16:33] _announcer: Twitter: "node.js HTTPS (SSL) Server Example http://www.silassewell.com/blog/2010/06/03/node-js-https-ssl-server-example/" -- hisaitami. http://twitter.com/hisaitami/status/27356881766 [16:33] Anti-X: ekidd, do you use something in front of your node app? [16:33] Anti-X: like a proxy [16:33] Anti-X: or load distributor [16:33] ekidd: So all my websocket clients try to reconnect within a second of each other unless I randomize the retry interval, turning the server into a smoking crater. :-) [16:33] mjr_: GriffenJBS: you can use unix sockets behind streams, yes. [16:33] ekidd: Anti-X: It's just a bare EC2 box, as far as I know. [16:34] GriffenJBS: mjr_: if I'm passed the fd, how do I create the stream from that? [16:34] Anti-X: 100 ws clients won't do much to your server [16:34] Anti-X: it can handle it [16:34] Anti-X: it still only takes one at a time [16:34] Anti-X: it's not like apache and overdoses on memory allocation [16:34] mjr_: GriffenJBS: oh, I dunno. That's kind of backward from the current API. [16:35] _announcer: Twitter: "@DanaDanger I think I can sense you shaking your fist at node.js from here." -- Chris Vannoy. http://twitter.com/chris_vannoy/status/27357058314 [16:35] GriffenJBS: yeah, but I can't change 10 year old api's [16:35] ekidd: Anti-X: Well, it wasn't. I was sending about 10 "setup" messages on reconnect, and the whole thing started falling over. [16:35] ekidd: Call it 1000 total messages, counting all the clients. [16:35] Anti-X: what about sending a termination message before restarting the server [16:36] Anti-X: to tell them not to reconnect for a while [16:36] vnguyen has joined the channel [16:36] ekidd: Anti-X: Would that help? I just listened for the disconnect and stagger the reconnects over 50 seconds. That seemed to fix that problem. [16:36] Anti-X: what kind of app is it? [16:36] agnat: GriffenJBS: take a look at IOWatcher ... it takes a fd and add it to the node main loop ... [16:37] GriffenJBS: agnat: thanks [16:37] ekidd: Anti-X: Just a little RSS feed reader: http://feedhose.randomhacks.net [16:37] _announcer: Twitter: "Introducing node-lazy - lazy lists for node.js http://bit.ly/a9QAHm" -- Justin Vincent. http://twitter.com/justinvincent/status/27357243509 [16:37] mjr_: Yeah, that'll at least get you a read callback, but you won't have all fo the buffer magic of a real stream with that. [16:38] _announcer: Twitter: "So soon after midnight, and had to sleep the birds, the task is arduous morrow it, # nodejs the # mysql program have to want to break ah" [zh-CN] -- Chicharito (爵之45355). http://twitter.com/hanyee/status/27357297501 [16:38] ekidd: Anti-X: It has a single long-poll connect open to another server, and receives several JSON objects (300-1000 bytes or so) every minute. Then it broadcasts them. [16:38] _announcer: Twitter: "ultimate dev pack for windows: Redis server v2.0.2 + Node.js v0.2.3 + Express v1.0.0rc3 http://ff.im/s27Vz" -- Outsider. http://twitter.com/Outsider__/status/27357321974 [16:39] ekidd: Once there's ~140 open client pages, the server gets a bit laggy and the clients start getting disconnect messages. [16:39] ekidd: On an m1.small... [16:39] GriffenJBS: net.server.listenFD(fd) might do it [16:39] Anti-X: that's weird [16:40] ekidd: Yeah. No idea what's going on. [16:40] Anti-X: if you hang around until rauchg comes he may know what's up [16:40] Anti-X: if it's a socket.io issue [16:41] _announcer: Twitter: "@ Sofish Advanced mention # nodejs is really fun" [zh-CN] -- Chicharito (爵之45355). http://twitter.com/hanyee/status/27357574509 [16:41] mjr_: ekidd: what's the overall request rate when you get to 140 clients? [16:42] ekidd: mjr_: I'm not sure what Socket.io is doing under the hood. How do I find out the request rate? [16:42] tobeytailor has joined the channel [16:42] mjr_: ekidd: you'd have to compute it somehow, probably [16:42] Anti-X: no he means how many clients leave and how many new join in a set time [16:42] ekidd: Anti-X: Thanks! I'll keep an eye out for rauchg. [16:43] Anti-X: you can just count connect and disconnect on the server [16:43] mjr_: ekidd: in my servers I just have a request counter that gets incremented on every request, and an interval timer that goes off every minute to print the rate. [16:43] _announcer: Twitter: "@ Hanyee you need to use new technology so you node.js" [zh-CN] -- haohaolee. http://twitter.com/haohaolee/status/27357733427 [16:43] Anti-X: i think you'd get more sensible data if you printed it more frequently than each minute [16:43] mjr_: ekidd: that's something that you'll really want to keep track of. [16:44] peritus- has joined the channel [16:44] mjr_: Yeah, I have a repl thing for changing the frequency of the timer [16:44] rasputnik has joined the channel [16:44] ekidd: mjr_: The home page gets hit no more than once a minute or so, on average. [16:44] mjr_: gotta run [16:45] creationix has joined the channel [16:46] _announcer: Twitter: "sometimes try to compile node.js beeen at hardy-server ..." [de] -- Matthias Gutjahr. http://twitter.com/mattsches/status/27357966974 [16:46] ekidd: Anti-X: Here's an unusually busy 2-minute stretch of connect/disconnect notices: http://gist.github.com/626539 [16:46] noahcampbell has joined the channel [16:47] rauchg_ has joined the channel [16:48] MikhX has joined the channel [16:48] ekidd: Anti-X: Many thanks! [16:49] Anti-X: ekidd, those two that connect and disconnect at the same time 16:36:36 [16:49] Anti-X: are just timeouts [16:49] Anti-X: they join, they don't care, they leave [16:49] slashxr has joined the channel [16:49] TheEmpath has joined the channel [16:49] ekidd: Yeah, there's nothing really interesting in the logs. [16:49] Anti-X: possibly twice from the same client [16:50] Anti-X: which is weird [16:50] Anti-X: i think i'm gonna try and do some work [16:51] ekidd: Thanks for your time! [16:51] Anti-X: np [16:53] galaxywatcher has joined the channel [16:53] simme has joined the channel [16:54] davidascher has joined the channel [16:55] brianmario has joined the channel [16:56] davida has joined the channel [16:57] paulr has joined the channel [16:59] softdrink has joined the channel [17:02] _announcer: Twitter: "@seacreature he's referring to a video on Node.js but "you can lead a horse to water but can't make him drink" is universal" -- Giles. http://twitter.com/gilesgoatboy/status/27359249372 [17:02] _announcer: Twitter: "I joined Node.js - Oslo on Meetup. You should too! http://meetup.com/u/2jYw" -- Sølve Heggem. http://twitter.com/SolveHeggem/status/27359262859 [17:02] MikhX has joined the channel [17:04] TomSlick` has joined the channel [17:04] MikhX has joined the channel [17:05] Anti-X: ekidd, Small Instance (Default) 1.7 GB of memory, 1 EC2 Compute Unit (1 virtual core with 1 EC2 Compute Unit), 160 GB of local instance storage, 32-bit platform [17:05] Anti-X: you only have 1 core [17:05] technoweenie has joined the channel [17:05] Anti-X: which means that even async is blocking [17:05] Anti-X: to some degree [17:05] micheil: not at all. [17:06] Anti-X: everything takes twice, if not three times as long [17:06] micheil: the connections will have to wait for an async operation to complete [17:06] micheil: but you'll still be able to process other connections in that time. [17:06] Anti-X: yes, but the OS will spend time switching between threads [17:06] micheil: where as a traditional stack would probably be blocked from being able to even accept the connection. [17:07] micheil: not really. [17:07] Anti-X: uh yeah it will, that's how multithreading without multiprocessing works [17:07] micheil: as there's a pool of a maximum of 5 worker threads, and one master [17:07] Anti-X: yeah but the OS has to give them cpu time in turn [17:08] Anti-X: you cant run several operations simultaneously on a low level [17:08] micheil: CPU time is absolutely nothing compared to network or disc time. [17:08] hornbeck has joined the channel [17:08] micheil: anyway. back to bed. bbl. [17:08] mape: micheil: network is harder to benchmark ;) [17:09] mape: Or at least, that usually isn't the issue [17:09] micheil: exactly [17:10] _announcer: Twitter: "@jeedee Yes, but what about the server side? We hear about V8 and node.js non-stop but not at all about SpiderMonkey." -- Rafaël Blais Masson. http://twitter.com/rafBM/status/27359890303 [17:10] Anti-X: that, my friend, is because spidermonkey is a monkey [17:10] Anti-X: and it has unbelievably simple bugs [17:11] Anti-X: or had [17:11] Anti-X: maybe it was written by 1 billion monkeys [17:11] Anti-X: that's what it means.. 1 billion monkeys met on the web and decided to write a js engine [17:11] Anti-X: spidermonkey. [17:12] Anti-X: i know he can't read this [17:12] Anti-X: but i just had to get it out [17:12] micheil: Anti-X: not wise to insult the mozilla guys. [17:12] Anti-X: how so [17:12] Anti-X: are they going to prevent me from using firefox? oh no the horror [17:12] micheil: because there's no need for it. [17:12] mape: Anti-X: Probly because you couldn't do it better? :) [17:13] Anti-X: well the mozilla guys are probably good and all, i'm just talking about all the other people that contribute [17:13] micheil: Anti-X: watch this talk, know why I'm saying this. http://voodootikigod.com/jsconf-eu-2010-speech [17:13] Anti-X: oh videos are out [17:13] Anti-X: why didn't anyone tell me [17:14] mjr_ has joined the channel [17:15] Anti-X: well to know what i mean you only have to pick a random page in the mdc javascript reference and find a spidermonkey bug notice [17:15] modular has joined the channel [17:16] micheil: Anti-X: but still. It's not nice to call it software that's been implemented by monkeys. [17:16] micheil: more often then not, it's an experimental feature [17:16] mape: Anti-X: Saying complex issues are easy? [17:16] micheil: try reading v8's source code. [17:16] _announcer: Twitter: "We'll see what can zeuch! # # Couchdb nodejs" [de] -- Raphael Pigulla. http://twitter.com/muddyb0y/status/27360414760 [17:17] deepthawtz has joined the channel [17:17] ieure has joined the channel [17:17] Anti-X: you two read more into it than i meant [17:18] micheil: Anti-X: what's to say anyone else doesn't? [17:18] Anti-X: well i didn't tweet it, did i? [17:18] Anti-X: i could have [17:18] micheil: it doesn't matter. [17:19] micheil: --out. [17:20] mape: Anti-X: Feel free to say whatever, but you aren't crying in space [17:20] bartt has joined the channel [17:21] dgathright has joined the channel [17:22] _announcer: Twitter: ""you only have 1 core, which means that even async is blocking" http://pastebin.com/3Bh2xe59 #nodejs" -- Ian Eure. http://twitter.com/ieure/status/27360827645 [17:22] Anti-X: thanks :p [17:22] ieure: ;) [17:22] _announcer: Twitter: "Have some perf graphs comparing manos, node.js, xsp and tornado. Wont post them though, the internet has proven it cant handle information." -- jacksonh. http://twitter.com/jacksonh/status/27360861355 [17:22] Anti-X: you know what i meant though [17:22] renatoelias has joined the channel [17:23] ieure: Everyone needed to be enlightened by your wisdom. [17:23] andrewfff has joined the channel [17:23] Anti-X: haha [17:23] modular: does anyone know if the swarmation source (server-side) is available? [17:24] ieure: And no, Anti-X, I have no idea what you mean. But I’m more than happy to continue receiving your web-scale wisdom. [17:25] Anti-X: well i obviously didn't mean that the threads queue up [17:25] Anti-X: i meant they take turns doing little at a time [17:25] Anti-X: i tend to skip the obvious because i thought people were clever [17:25] Anti-X: :P [17:26] _announcer: Twitter: "Continuation of the addictive addictive Nau → → nap. Sun node.js do come play!" [ja] -- Kotaro Kokubo. http://twitter.com/kotarok/status/27361123451 [17:26] aguynamedben has joined the channel [17:26] mikeal has joined the channel [17:30] c4milo has joined the channel [17:30] jetienne has joined the channel [17:32] figital has joined the channel [17:33] prettyrobots has joined the channel [17:33] stephenjudkins has joined the channel [17:36] oal has joined the channel [17:37] oal: Is Express the framework of choice for node.js? It seems to be in active development [17:37] tjholowaychuk: oal: quite a few startups are using it (including ours) so it is well supported [17:38] oal: tjholowaychuk, interesting :) [17:38] dylang: oal: i heart express, and the lead developer is an swell guy [17:38] bjarkih has joined the channel [17:38] tjholowaychuk: transparent asset compression via jade here we come! [17:39] steadicat: modular: you're interested in the swarmation source? [17:39] oal: I should give it a few hours this weekend. How about database management... Does it have some kind of ORM? [17:39] tjholowaychuk: oal: nope, it is not that level of framework. I try my best not to impose things upon people [17:39] tjholowaychuk: dir structure etc [17:39] ieure has left the channel [17:40] _announcer: Twitter: "HTML5 canvas, drag n' drop, textareas, websockets ... oh my! This is becoming a real project! All made possible by #nodejs" -- Tim Jarratt. http://twitter.com/Tim_jarratt/status/27362170441 [17:40] oal: Ok, ah, I see you're one of the developers. [17:40] oal: ACTION is following you on twitter [17:40] tjholowaychuk: oal: let me know if you have questions, the mailing list is usually pretty helpful too [17:40] tjholowaychuk: good peeps on there [17:41] oal: Great. I probably have some time to test it on Saturday [17:41] langworthy has joined the channel [17:42] modular: steadicat: just wondering if it was available to look at [17:42] steadicat: modular: https://gist.github.com/bdd75f1429cba417b90a [17:42] paulr has joined the channel [17:43] modular: steadicat, thanks :) [17:43] steadicat: that's most of it [17:43] oal: Would you use something like Mongoose with Express, tjholowaychuk ? [17:43] tjholowaychuk: oal: yup! definitely would recommend Mongoose, 1.0 is approaching I believe [17:43] tjholowaychuk: and it will be very cool [17:44] oal: tjholowaychuk, any other libraries I should check out? [17:44] emehrkay_ has joined the channel [17:44] tjholowaychuk: oal: what else are you looking for? [17:44] emehrkay_: Does anyone have a link to that entry for the knockout competition that mapped the comments in this room? [17:44] aho has joined the channel [17:45] oal: Not sure. I'd like to just experiment with express and node.js, so if there's something cool worth trying, let me know :) [17:45] HAITI has joined the channel [17:45] tjholowaychuk: there are lots of cool libs [17:45] HAITI: cheers #node.js [17:46] tjholowaychuk: oal: i really like mranney/node_redis and felxige's node-formidable [17:46] _announcer: Twitter: "@PwrOverwhelming Yeah, dude. These Node.js guys are just nuts." -- Ian Eure. http://twitter.com/ieure/status/27362608308 [17:46] oal: tjholowaychuk, thank you :) [17:47] ben_alman has joined the channel [17:47] gorakhargosh has joined the channel [17:47] Me1000 has joined the channel [17:50] spetrea-home has joined the channel [17:52] mjr_: emehrkay_: google wargamez [17:53] emehrkay_: that is it, thanks mjr_ [17:53] _announcer: Twitter: "node.js is not optimized yet. it just implements fundamentally good ideas that make it pretty fast already." -- Mikeal. http://twitter.com/mikeal/status/27363125711 [17:54] hoodoos_: ignore it, test [17:54] benburkert has joined the channel [17:55] mikeal: mjr_: writes some good code [17:55] mikeal: man, i really want to tackle this performance testing stuff in node [17:55] mikeal: but i'm busy with like real work [17:55] hoodoos_ has left the channel [17:55] mjr_: I have that problem this week as well [17:56] mikeal: rewriting futon is a lot of work :) [17:56] mjr_: Trying to roll out my big node-based rewrite of our backend. [17:56] dgathright has joined the channel [17:56] mikeal: oh wow [17:56] mjr_: And it's taking forever. [17:56] mikeal: didn't realize you were finally doing that [17:56] mjr_: Yeah, I'm pretty happy with it so far. [17:56] mikeal: mjr_: http://oakjs.com/ [17:57] mjr_: nice [17:57] mjr_: I might be out of town, let me check [17:57] mikeal: i'm in love with @font-face :) [17:58] mjr_: Where are you getting your fonts? Typekit? [17:58] mikeal: that CC site [17:59] mikeal: http://openfontlibrary.org/ [17:59] ryah: mikeal: well, it's kind of optimized :) [17:59] mikeal: except you can't use their snippets because Firefox doesn't support cross domain fonts :( [17:59] _announcer: Twitter: "@reidmain then: node.js with express. JavaScript power!" -- Paul Kalupnieks. http://twitter.com/kalupa/status/27363547008 [17:59] ryah: i think there's a lot more we can do, of course [17:59] mikeal: ryah: v8 and the other underlying C libraries are [17:59] ryah: but - for example: http://github.com/ry/node/blob/9b1ff070e6df8560ec4ce60d78c68c96ddf206c8/lib/http.js#L550 [18:00] ryah: look at what defines hot [18:00] mikeal: but like the way we do writes [18:00] mjr_: mikeal: oh, you are hosting them yourself to get around same origin bs? [18:00] mjr_: mikeal: somehow typekit works in firefox, in spite of same origin. [18:00] bartt has joined the channel [18:00] mikeal: mjr_: you have to if the server doesn't implement the Access control headers for cross-domain requests [18:00] mikeal: and you want it to work in Firefox [18:00] mjr_: oh, their server doesn't turn around the access-control-allow-origin header? [18:01] mjr_: lame [18:01] mikeal: nope :( [18:01] mjr_: But yes, font-face. Full of win. [18:01] ryah: we should take the damn trailer out of there.. [18:01] jchris has joined the channel [18:01] mikeal: that is super ugly [18:01] siculars has joined the channel [18:01] mjr_: Does trailer make it slower if you don't have a trailer? [18:02] mikeal: ryah: we won't need this after your writeQueue rewrite, correct? [18:02] mjr_: Because I actually need trailers in my app. Or rather, having trailers would make things very convenient for my app. [18:02] ryah: mikeal: yeah - i think [18:02] mikeal: mjr_: you're one of those crazy fuckers who actually uses the whole HTTP chunked encoding spec :) [18:02] ryah: mjr_: just dont need trailers in the hot path [18:03] mjr_: oh yeah, not in the hot path. [18:03] ossareh has joined the channel [18:03] ryah: which is the "im going to run 'ab' on this new Node thing - let's see what it does" [18:03] ryah: path [18:03] creationix: ryah: hmm, so using a string is actually faster for hello world tests than a buffer since the headers are a string? [18:03] ryah: yes [18:03] mjr_: mikeal: here's my scenario: user A starts uploading a file, user B wants to download a file before user A is done uploading it. What happens if user A's connection drops before finishing the upload? [18:03] creationix: ryah: for my benchmark I'm running, should I use raw node, or connect? [18:03] mikeal: how long until we can grab the string memory address out of v8? [18:03] mikeal: :) [18:04] _announcer: Twitter: "@bluefur Is node.js hosting available?" -- Chris Bellini. http://twitter.com/bullines/status/27363867718 [18:04] ryah: at the momemnt string . bufller => two packets [18:04] _announcer: Twitter: "Once tried to write an IRC bridge in ruby, until i found out ruby doesn't have nonblocking IO. This turned out to be 4 lines of #NodeJS code" -- Adam Bergmark. http://twitter.com/adambergmark/status/27363876593 [18:04] ryah: which is *awful* [18:04] creationix: I see [18:04] mikeal: mjr_: close the connection abruptly [18:04] renatoelias has joined the channel [18:04] mikeal: :) [18:04] mjr_: mikeal: yeah, that's what i do [18:04] ryah: mikeal: i can do that - it's keeping that pointer that's a problem [18:05] mikeal: resp.fd.forceClose() ? [18:05] renatoelias: arg internet provider in brazil is suck =P [18:05] creationix: ryah: also, do you want my benchmark with 0.2.3 or 0.3.x? [18:05] mjr_: But I'd like to differentiate the "your connection just closed for some reason" from "we have closed your connection on purpose" [18:05] ryah: creationix: 0.2.3 [18:05] creationix: awesome [18:05] mikeal: mjr_: yeah, there are reasons for this stuff [18:05] mikeal: it's just kind of nuts :) [18:05] mjr_: mikeal: I always thought it was nuts too, until I needed it. [18:06] mjr_: Maybe this sounds familiar [18:06] ryah: mjr_: give an error arg [18:07] mjr_: Yeah, that's why I need trailers now. :P [18:07] ryah: traielrs. meh. [18:08] TheEnd2012 has joined the channel [18:08] ryah: im sure some proxy is going to strip them [18:08] mjr_: I'm not in love with that solution. But it does seem to fit. [18:08] ryah: make another request [18:08] ryah: for the status :) [18:09] mjr_: Hmm, I hadn't thought about the proxy issue. [18:09] mikeal: i don't think a proxy will strip them [18:09] mikeal: if it's smart [18:09] mikeal: our proxy doesn't dick around with even decoding the entity-body [18:10] mikeal: it decides where to route and then hooks the tcp streams together [18:10] mjr_: Anyway, I'm just going to do an retry with exponential backoff for now. [18:10] mjr_: Because then it handles both cases of a connection going away for some reason. [18:11] dguttman has joined the channel [18:12] mikeal: hehe [18:12] mikeal: i thought i was going to have to write a script or some more code on oakjs.com to tell me how many rsvp's [18:12] WALoeIII has joined the channel [18:12] mikeal: then i realized i can just turn on resource tracking in Chrome and look at the XHR and check the total_rows from the view request [18:12] mikeal: yeah for HTTP [18:12] mikeal: er yay for HTTP [18:14] V1 has joined the channel [18:18] cce has joined the channel [18:19] Anti-X: er. [18:19] bjarkih has joined the channel [18:20] v8bot has joined the channel [18:21] dahankzter has joined the channel [18:21] c4milo has joined the channel [18:21] creationix: ryah: https://gist.github.com/7474aea1921aa04ee7a8 [18:21] creationix: ryah: that's with ab on localhost, so it's eating one of the cores all the time [18:21] creationix: ry [18:21] creationix: ryah: but it should give a rough idea [18:23] creationix: 26937.39 reqs/sec is pretty good for a $20/month vps right? [18:24] ezmobius has joined the channel [18:24] Anti-X: v8> var greet(received) {switch(received.split(/\s+|,/)[0]) {case 'welcome': return 'thanks'; case 'hello': case 'hi': case 'ohai': return 'hi'; case 'wassup': case 'sup': case 'yo': return 'wassup';}}; greet('hi v8bot'); [18:24] v8bot: Anti-X: SyntaxError: Unexpected token ( [18:24] Anti-X: nooooo [18:24] chrischr1s has joined the channel [18:24] tjholowaychuk: creationix: curious how thin/rack might compare [18:24] tjholowaychuk: with hello world [18:24] Anti-X: v8> var greet = function(received) {switch(received.split(/\s+|,/)[0]) {case 'welcome': return 'thanks'; case 'hello': case 'hi': case 'ohai': return 'hi'; case 'wassup': case 'sup': case 'yo': return 'wassup';}}; greet('hi v8bot'); [18:24] v8bot: Anti-X: "hi" [18:24] Anti-X: YES! [18:24] rnewson has joined the channel [18:24] rnewson has joined the channel [18:24] tjholowaychuk: i think node was quite a bit faster, just IO was worse [18:24] tjholowaychuk: in the connect benchmarks [18:24] creationix: tjholowaychuk: with 50 concurrent, probably not that good [18:25] mikeal: isaacs_home: FYI, i'm pretty sure npm already has more features than pkg-get [18:25] mikeal: ACTION is screaming at solaris [18:25] creationix: ryah: I can do another round with a large body to see throughput [18:25] creationix: ryah: maybe 1mb buffer? [18:25] tjholowaychuk: creationix: its been months now but it was quite a bit better than node for small statics [18:25] stride: hmm.. I'm starting to dislike the whole integer handling in JS somehow [18:25] creationix: tjholowaychuk: have you tried Tim_Smart's sendfile middleware [18:25] tjholowaychuk: creationix: nope not yet [18:26] tjholowaychuk: saw it tho [18:26] creationix: tjholowaychuk: I'm using it for creationix.com (since it's connect compat) and it's fast [18:26] tjholowaychuk: didnt know he made middleware out of it [18:26] mikeal: i need to look at that and see how it works [18:26] creationix: it's in biggie-router [18:26] Anti-X: so, religion time, how many space indents do you use, or do you just use tabs? [18:26] tjholowaychuk: ah gotcha [18:26] mikeal: two [18:26] mikeal: spaces [18:26] creationix: Anti-X: two spaces [18:26] mikeal: that's kind of standard for js [18:26] tjholowaychuk: or if you are sencha, 4 :p [18:26] Anti-X: you know one tab takes a whole byte less? [18:27] mikeal: do you know that the chances of that being your bottleneck are fucking zero [18:27] Anti-X: :D [18:27] bradleymeck: 3 spaces, a lot of alignment of keywords will happen [18:27] mikeal: anyone who uses 3 spaces is, by definition, an asshole [18:27] creationix: I used to be a tab guy back when I did python [18:27] Anti-X: actually i find 2 aligns really well with a lot [18:27] bradleymeck: lol [18:27] creationix: 4 spaces really bloated the source files [18:27] mikeal: a lot of Python people try to do 4 spaces [18:27] creationix: especially with python being white space sensitive [18:28] mikeal: it doesn't work with js, too much indentation [18:28] c4milo: tjholowaychuk: hey ! I use 4 :P [18:28] tjholowaychuk: c4milo: haha so did I, but not because I wanted to [18:28] tjholowaychuk: i dont mind it [18:28] mikeal: in Python if the indentation starts to look like a lot with 4 spaces then your code is wrong [18:28] tjholowaychuk: but prefer 2 [18:28] mikeal: but that just isn't the case with Python [18:28] bradleymeck: we honestly should just make a pretty printer [18:28] mikeal: er JavaScript [18:28] creationix: I like 2 spaces because it makes the code fit in howtonode.org's narrow window [18:29] jesusabdullah: four spaces imo [18:29] mAritz has joined the channel [18:29] mikeal: four spaces is for coffeescript programmers and little girls [18:29] jesusabdullah: Did a lot of python, so [18:29] Anti-X: risking that people may start throwing their feces at each other... semicolon or no? [18:29] jesusabdullah: mikeal is right there [18:29] EyePulp: four spaces for old men such as myself. [18:29] blowery: spaces? use tabs. [18:29] mikeal: i did a lot of Python [18:29] mikeal: and using 2 spaces is a great reminder that I don't have to write fucking Python anymore [18:30] jesusabdullah: I find it works with js okay, though with a lot of {}'s it can sometimes get messy [18:30] sveisvei: 2 spaces ftw [18:30] blowery: i like the flock of seagulls nested anonymous functions lead to [18:30] mikeal: when you're nesting inline functions the indentation grows too quickly [18:30] EyePulp: Anti-X: semi-colon where? at statement ends? [18:30] Anti-X: end of line [18:30] Anti-X: or statement [18:30] mikeal: or newline, comma first FTW! [18:30] mikeal: and….. FIGHT! [18:31] Anti-X: definately comma first [18:31] EyePulp: Anti-X: totally. I have jslint on save, and it whines about the lack of semis [18:31] Anti-X: but that's not the question [18:31] creationix: ACTION goes back to making pointless but awesome benchmarks with ab [18:31] mikeal: with comma first you want the semi-colon on a newline [18:31] mikeal: creationix: we need an ab replacement [18:31] tjholowaychuk: siege? [18:31] creationix: yeah, ab really eats my cpu and I can't really test anything on a dual core machine [18:31] jesusabdullah: The ab-abber 2000? [18:31] Anti-X: i get why semicolons are important in a browser script (because it helps minification), but on the server side? it just looks sexy without ;) [18:31] creationix: siege is worse [18:32] creationix: unless I had a 10 gigabit lan [18:32] bradleymeck: separator first (logical binary operators, semi's, commas) [18:32] creationix: then I could offload the client [18:32] tjholowaychuk: i like that siege can hit several urls [18:32] EyePulp: comma-first is an annoying reminder that trailing commas are still a problem. I miss trailing commas from python [18:32] _announcer: Twitter: "node.js vs Erlang (ネタ) - amnesiac weekend programmer http://htn.to/MFyTi7" -- yamada. http://twitter.com/k_yamada/status/27365819990 [18:32] creationix: tjholowaychuk: sure siege is better if you have another machine to run it from [18:32] creationix: but I usually don't [18:32] stride: Anti-X: code without semicolons gives me a seizure.. always reminds me of Visual Basic somehow [18:33] eisd has joined the channel [18:33] blowery: i thought v8 dealt with trailing commas just fine? [18:33] mikeal: i have a comparable, programmable, concurrent client pool [18:33] mikeal: that i use for testing CouchDB [18:33] bradleymeck: commas are parsed fine, debugged hard [18:33] mikeal: http://github.com/mikeal/relaximation/blob/master/common/testpool.js [18:33] EyePulp: blowery: it might, but client side that's not as reliably the case [18:33] creationix: mikeal: that could be fun [18:34] mikeal: creationix: i already have the code [18:34] Anti-X: i like commas first because you can remove and add lines independently of what is around it [18:34] danielzilla has joined the channel [18:34] Anti-X: you don't need to fix that comma on that other line [18:34] agnat has joined the channel [18:34] mikeal: creationix: I can do like 5K requests per second w/ like 15% of one core and ~22megs of memory [18:35] eazyigz has joined the channel [18:35] mikeal: that's with like 400 concurrent clients [18:36] creationix: mikeal: think it could scale to 20k/sec and still be lightweight? [18:36] creationix: or more like 40k [18:36] mikeal: i don't see why not [18:36] bradleymeck: v8: Function("return function(){return 1//A FIN NEWLINE!?\n, 3}")()()//commas can do insane things [18:36] v8bot: bradleymeck: SyntaxError: Unexpected token ILLEGAL [18:36] bradleymeck: whaaat, they lie [18:36] mikeal: it's a little sketchy testing node with node tho [18:37] mikeal: if there is something slow in the http parser then it's going to be doubly slow [18:38] strmpnk: mikeal: That's why null tests and comparison tests are good to have. :-) [18:38] mikeal: I pretty much only do comparison tests [18:39] strmpnk: :-) Numbers are meaningless but ratios are fun. [18:40] tmpvar has joined the channel [18:41] Anti-X: you sure fun is the right word? [18:43] bradleymeck: i have a terriible and bad project i need to hook into the es5 parser... [18:44] strmpnk: Anti-X: Yup. Saying something is NNNN times faster or slower is like pure fire. And that's fun if you are a pyro. [18:44] strmpnk: ;-) [18:44] strmpnk: (actually, it's useful to see yourself exceed old code with new code where it's only your own limit) [18:45] Anti-X: especially when you made it faster [18:45] Anti-X: yeah that [18:45] cscotta has joined the channel [18:45] strmpnk: Anti-X: Of course the slower case is for other people's code. ;-) [18:45] Anti-X: i had a rush like that yesterday and today [18:46] Anti-X: when i took the browscap library and took it from 2.6 seconds to 1.1 seconds yesterday [18:46] Anti-X: and from 1.1 to 0.47 today [18:46] Anti-X: parsing the browscap ini file of 18300 lines [18:46] Anti-X: including copying parent values before parsing own [18:47] strmpnk: Nice. My latest: took a test suite from 24 minutes to 8 with some runtime config. [18:47] Anti-X: i was like "hey pull this" and then two hours later "pull this!" and i think he's sick of me now [18:47] Anti-X: i have to waiting pulls [18:47] Anti-X: two [18:47] jesusabdullah: NNNN times faster? XD [18:47] Anti-X: N can be 0 too [18:48] Anti-X: 0002 [18:48] Anti-X: strmpnk what kind of lib was that? [18:48] strmpnk: I was only suggesting that large N be used to flame more. [18:48] HAITI has joined the channel [18:49] Anti-X: well of course one exaggerates when bragging [18:49] Anti-X: otherwise what's the point [18:49] strmpnk: Anti-X: web app specs for a client. [18:49] jesusabdullah: I was thinking that you could just say X times faster [18:49] jesusabdullah: and not tell anyone what the value of X is [18:49] jesusabdullah: Or, update it over time [18:49] _announcer: Twitter: "#nodejs for newbie: http://nodecasts.org/" -- Amr Numan Tamimi. http://twitter.com/amrnt/status/27367018193 [18:49] Anti-X: maybe he meant in binary [18:49] jesusabdullah: node.js is x(A,t) times faster than ringo.js! [18:50] jesusabdullah: A: particular test algorithm [18:50] strmpnk: Or maybe N * N * N * N. [18:50] creationix: ryah: https://gist.github.com/11fb580c65ce8c76ca8c [18:50] jesusabdullah: t: time at which code was pulled [18:50] creationix: the vps was about worthless for getting consistent results [18:50] jesusabdullah: It's totally true! [18:50] Anti-X: totes [18:51] jesusabdullah: vps, creationix? [18:51] jesusabdullah: virtual private swerver? [18:51] creationix: linode [18:51] jesusabdullah: ah [18:51] Anti-X: virtual private swede [18:51] creationix: I don't have a linux box at home anymore [18:51] jesusabdullah: worthless you say? Bummer [18:51] jesusabdullah: very perky swede [18:51] jesusabdullah: ohoho [18:51] matt_c has joined the channel [18:51] _announcer: Twitter: "Node.js has recently become better to hear the story of the association. The deal also seems to node.js WebSocket, and real-time server push me to be mature Web will be able to actually be running the service. I'm starting to get interesting!" [ja] -- 下町システム工房 ユービジョン. http://twitter.com/U_Vision/status/27367156118 [18:51] creationix: I mean, linode is pretty fast, I get anywhere between 500MB/sec and 1000MB/sec throughput [18:52] creationix: but that's a pretty large range of results [18:52] jesusabdullah: Yeah [18:52] creationix: for the exact code with the exact same test [18:52] svnlto has joined the channel [18:53] skohorn has joined the channel [18:54] jameshome has joined the channel [18:54] Anti-X: is it a shared connection with other apps? [18:54] Anti-X: or users even [18:55] Anti-X: or was that just a local test [19:01] ryah: creationix: hm [19:01] ryah: not the linear scale i was hoping for :) [19:02] creationix: ryah: it was linear when mape did it with real hardware [19:02] creationix: I've only got a dual core laptop and a vps [19:02] confoocious has joined the channel [19:02] confoocious has joined the channel [19:02] creationix: and since ab uses one of the cores on my laptop… [19:02] creationix: it's pratcially single core [19:02] pedrobelo has joined the channel [19:02] mape: the cores scaled wel [19:02] ryah: yeah [19:03] ryah: mape: still got that gist? [19:03] mape: hmm think creationix pasted it [19:03] ryah: oh [19:03] creationix: mape: it's been a while [19:03] tekky has joined the channel [19:03] tekky: ahh that looks better [19:03] creationix: I just pasted my two examples today [19:04] programble has joined the channel [19:05] joemccann has joined the channel [19:05] tapwater has joined the channel [19:05] creationix: mape: ryah: how about this one http://gist.github.com/432248 [19:05] tekky: creationix: i know its not 'high' on any list, but I found out yesterday that v0.2.3 doesnt compile directly on Windows... but if you compile 0.2.0 then update, 0.2.3 will compile (might be worth putting somewhere visible to the windows Node folks) [19:05] mape: creationix: I had better with server stats [19:05] creationix: yeah, still looking [19:06] creationix: luckily you don't have quite as many gists as me [19:06] mape: hehe yeah [19:06] mape: twitter history is bad [19:07] creationix: mape: it was on your gist rught? [19:07] jchris has joined the channel [19:07] creationix: mape: hmm, maybe it was a private gist [19:08] creationix: that means only you can find it in the directory [19:08] admc has joined the channel [19:08] joemccann: why does npm hate me? [19:08] kkaefer: is there a rss/atom feed parser for node? [19:08] creationix: joemccann: because you're Texan [19:08] joemccann: haha! [19:08] joemccann: i'm not a Texan! I just live here! [19:08] creationix: it hated me for a while, I had to move to California [19:08] joemccann: hahahaha [19:09] ryah: thanks good [19:09] ryah: creationix: do you have a date for that? [19:09] kkaefer: I mean something that goes beyond parsing the xml [19:09] ryah: oh june 9 [19:09] ryah: mape: was that with spark? [19:09] creationix: ryah: I'm pretty sure it was [19:09] tekky: lmao, I was born and raised in Texas... npm doesnt hate me, must be something else joemccann :P [19:09] mape: ryah: yeah think so [19:09] joemccann: ffffuuuu [19:10] joemccann: i swear [19:10] creationix: either spark, or the code that went into spark [19:10] tekky: joemccann: maybe your rejection of texas? :P [19:10] bradleymeck: mmm jeomccann whats the issue? [19:10] joemccann: every time i go to update any package, npm tells me something lame like: [19:10] joemccann: Failed to create /Users/joemccann718/.node_libraries/.npm/.cache/npm/0.2.3-6/package.tgz: ENOENT, No such file or directory '/Users/joemccann718/.node_libraries/.npm/.cache/npm/0.2.3-6/package.tgz' [19:10] joemccann: so i end up completely uninstalling, deleting files, reinstalling and then it works...seems totally absurd [19:11] bradleymeck: mmm thats odd [19:11] _announcer: Twitter: "@Kaadian The back end will be probably running on a node.js server with connection to MySQL database. This will be worked out more soon." -- Phil Harvey. http://twitter.com/filharvey/status/27368464583 [19:11] joemccann: tekky: I reject Texas, but LOVE Ausitn [19:11] bradleymeck: no such file on the file it is about to create? [19:11] joemccann: yeah exactly! [19:12] bradleymeck: ACTION goes to dig up where that call is made [19:12] joemccann: http://gist.github.com/626826 [19:12] _announcer: Twitter: "BTW, If you're looking to install node.js and you have a mac, try homebrew, http://bit.ly/aLKQG4 makes it super easy" -- Andrew Lowther. http://twitter.com/AndrewLowther/status/27368559465 [19:13] tekky: joemccann: hehe, im not a huge fan of Austin but its growing on me (5 out of 7 days a week most weeks kinda makes it impossible to avoid) [19:13] tekky: why would you use homebrew to install Node on a mac? [19:13] joemccann: tekky: what's there NOT to like about Austin?! [19:13] tekky: ACTION boggles [19:13] shaver_: tekky: self-esteem issues [19:13] shaver_: joemccann: it's surrounded by Texas [19:13] joemccann: zing!!! [19:13] joemccann: exactly! [19:13] joemccann: lol [19:13] creationix: shaver_: that's the best part! [19:13] _announcer: Twitter: "Installing node.js as we speak :D can't wait to try this out, been meaning to for a while" -- Andrew Lowther. http://twitter.com/AndrewLowther/status/27368657541 [19:14] creationix: what are you guys talking about [19:14] creationix: *notice I even say "you guys" instead of "y'all" [19:14] tekky: joemccann: its just not my cup-o-tea so to speak... I grew up in the country, its hard to find a city I really like :P [19:14] creationix: I swear, I grew up in Texas, just wasn't born there [19:14] path[l] has joined the channel [19:14] joemccann: creationix: we're just talking shit really...there are some other cool spots outside of austin, but most dont take kindly to my music and tattoos ;) [19:14] micheil: joemccann: oh. hi, I think I just watched your jsconf talk. [19:14] hellp has joined the channel [19:15] MikhX has joined the channel [19:15] joemccann: micheil: cool man..hope you learned at least one thing ;) [19:15] micheil: hmm, yeah [19:16] joemccann: micheil: i used your websocket module for demos i presented at Android Only in Stockholm...worked flawlessly [19:16] micheil: heh, thanks [19:16] creationix: android has websocket? [19:16] creationix: that's cool [19:16] joemccann: creationix: nope [19:16] hsuh has joined the channel [19:16] joemccann: creationix: so me and colleague wrote our own [19:16] creationix: aww [19:16] creationix: nice [19:17] mif86 has joined the channel [19:17] MikhX has joined the channel [19:17] micheil: joemccann: open source, I hope? [19:17] _announcer: Twitter: "OH: "OMG comparative heap snapshots...I uh...need new pants" #node.js #node-inspector" -- Nick Campbell. http://twitter.com/ncb000gt/status/27368910095 [19:17] joemccann: http://github.com/voltron/whoopingkof/blob/master/clients/android/src/com/whoopingkof/web/WebSocketExtension.java [19:17] bradleymeck: joe, looking forward to tuesday, cant see on glance why it is failing [19:18] joemccann: micheil: of course man! [19:18] micheil: joemccann: ;P [19:18] joemccann: github.com/voltron [19:18] joemccann: has all the stuff we wrote [19:18] _announcer: Twitter: "Hoooly heck bro, i'm totally running a node.js server, that's pretty neat" -- Andrew Lowther. http://twitter.com/AndrewLowther/status/27368959431 [19:18] joemccann: including all the source [19:18] joemccann: for the demos, our android app framework, our websocket extension and our websocket librarary [19:18] micheil: joemccann: are you planning on maintaining that or? [19:19] joemccann: we wrote the websocket extension and attached it to a WebView in Android [19:19] joemccann: micheil: we'll see [19:19] micheil: okay. [19:19] bradleymeck: interesting, ive seen socket.io off android but no true websockets [19:19] joemccann: every time there's a new draft we'll try to update it, but you know how that goes [19:19] micheil: because it's not exactly an implementation of the DOM API there [19:19] micheil: joemccann: next draft to support would be -02 or -03 [19:20] joemccann: micheil: what do you mean? we wrote to spec and passes modernizer [19:20] micheil: joemccann: probably a good idea to make it consistent with the DOM API [19:20] joemccann: bradleymeck: Tuesday's gonna be dope [19:20] _announcer: Twitter: "Tried to install JS/node.js bundle on cygwin for Google AI Challenge. Not the easiest thing ever, but exciting. Write in Java maybe... )" -- theOnlyBoy. http://twitter.com/theOnlyBoy/status/27369117035 [19:20] micheil: joemccann: for instance new WebSocket(DOMString url, DOMString protocol) or new WebSocket(DOMString url, DOMString[] protocol) [19:20] micheil: are valid [19:20] bradleymeck: i want to present one day, but dont know what to do it on [19:21] bradleymeck: tekky are you going to come? [19:21] micheil: (DOMString[] is sent on the wire as Array.join(","); [19:21] tekky: bradleymeck: sorry, wasnt paying attention, where? [19:22] joemccann: micheil: fwiw, we wrote the implementation months ago [19:22] bradleymeck: austin javascript [19:22] micheil: joemccann: okay [19:22] silentrob has joined the channel [19:22] tekky: bradleymeck: oh yah, I'm planning on showing up :) I always plan for it, usually fail though :P [19:22] pedrobelo has joined the channel [19:23] tekky: usually sit with getify and give him shit when I'm there [19:23] xla has joined the channel [19:23] bradleymeck: oh, didnt know that was you [19:23] tekky: phiggins was saying he's gonna be here for next months AustinJS [19:24] confoocious has joined the channel [19:24] confoocious has joined the channel [19:24] tekky: bradleymeck: always in short/t-shirt and longish hair (@ktiedt on twitter) [19:24] tekky: and sandals [19:25] slashxr has joined the channel [19:25] slashxr: hi [19:25] bradleymeck: hello~ [19:25] joemccann: micheil: so it appears we'll need to change the implementation to support DOMString[] as opposed to just text strings currently, or am I missing something? [19:26] joemccann: phiggins will be in for November's meetup....he leaked it ;) [19:26] slashxr: is node.js stable for production rigth now? [19:26] tjholowaychuk: slashxr: i know quite a few sites using it in production [19:27] jahoni has joined the channel [19:27] bradleymeck: slashxr, for most things yes, for things like banking, no [19:27] tjholowaychuk: slashxr: its subjective, but i would say yeah [19:27] slashxr: ok good enough for me [19:28] joemccann: slashxr: for fortune 500 clients...no [19:28] slashxr: all nodejs needs now is a FRAMEWORK [19:28] tekky: ... [19:28] agnat: ? [19:28] creationix: slashxr: workin' on it [19:28] jansc has joined the channel [19:28] slashxr: like node on rails sort of way [19:28] markwubben has joined the channel [19:28] creationix: first we need to figure out what said framework needs to do [19:28] bradleymeck: ACTION shudders [19:29] creationix: a rails port would not fit well at all [19:29] creationix: node has very different strengths than ruby [19:29] slashxr: atleast make it more mvc [19:29] creationix: slashxr: there is geddy [19:29] creationix: it's railsish [19:29] creationix: and express is a lot like sinatra [19:29] slashxr: ok cool ill check them out [19:30] c4milo has joined the channel [19:30] joemccann: aight, i'm gonna go try to coax npm to be nice to me....see u guys later [19:30] bradleymeck: mvc needs to be split up somehow between client and server i think, mv-mc [19:30] xonecas has joined the channel [19:31] gerred has joined the channel [19:31] slashxr: why is that? [19:31] slashxr: model view controller is like the standard for most app development [19:31] bradleymeck: for stateless it is great [19:31] bradleymeck: for stated web sites like modern ones, not too much I feel [19:32] ajsieyu has joined the channel [19:32] xonecas: hey everyone! So I got a tumblr feed in JSON that is comming back with encoded characters can I use string.decode() in node ? [19:32] yrashk: I currently use a concept where server side is essentially a mere "data server" — it spits no HTML out, just JSON interactions with a highly dynamic client side [19:32] jesusabdullah: I like the idea of blurring the client/server lines [19:32] tjholowaychuk: slashxr: its basically a question of is your "site" just a site, or an "app" [19:32] tjholowaychuk: or both [19:32] tjholowaychuk: lol [19:32] jesusabdullah: Like the state-encapsulated-in-closures dnode thing [19:32] _announcer: Twitter: "nice - google search for node.js turns up "you should work for meebo" ad" -- Steven Milne. http://twitter.com/stevenmilne/status/27369943208 [19:33] ajsieyu has joined the channel [19:33] slashxr: all apps can be mvc no? [19:33] jherdman has joined the channel [19:33] bradleymeck: no [19:33] slashxr: whether state/stateless? [19:33] ajsie has joined the channel [19:33] bradleymeck: you can have stated mvc, i think its a poor choice though [19:33] tjholowaychuk: slashxr: ppl writing client heavy apps prefer to render client-side [19:33] jesusabdullah: Just because they *can* be doesn't mean they *should* be [19:33] slashxr: isn't java MVC too? [19:33] jesusabdullah: umm [19:33] jesusabdullah: mvc is just a way of organizing your code [19:33] jesusabdullah: is all [19:33] bradleymeck: your controllers are mutating underneath you, your data is changing on the fly, doing so without having the models and controller live on the client is chaotic when resolving things on the server [19:34] peterpedr0 has joined the channel [19:34] bradleymeck: jesusabdullah, ideally yes, but when frameworks get involved it gets a bit more than that [19:34] slashxr: bradleymeck: you can do that with mvc [19:34] MikhX has joined the channel [19:34] bradleymeck: can != well suited [19:35] bradleymeck: i can make JS run JVM code [19:35] shaver_: (that's getting to be surprisingly effective!) [19:35] slashxr: i think creating an API for your app is the key to making your code extremely efficient [19:35] peterpedr0: Is npm the standard for node? or kiwi? or something else? [19:35] bradleymeck: npm [19:35] slashxr: but thats just my opinion [19:35] matt_c has joined the channel [19:35] jesusabdullah: npm is the de-facto standard, yes [19:36] jesusabdullah: bradleymeck: When a framework is involved, they just impose the organization on you, yes? [19:36] bradleymeck: impose organization and introduce rules and constructs as the "correct" way [19:36] slashxr: can you have constructors/deconstructors with nodejs? [19:37] bradleymeck: same as javascript [19:37] shaver_: so yes/no [19:37] slashxr: is node.js chat source code using jquery? [19:37] peterpedr0: what are the most popular npm packages? [19:37] slashxr: i see a bunch of $ [19:37] bradleymeck: yes it is [19:38] bradleymeck: peter connect, socket.io [19:38] xonecas: mustache [19:39] ThePub has joined the channel [19:39] teemow has joined the channel [19:39] slashxr: why doesnt the nodejs chat app not have any doctype set? [19:40] _announcer: Twitter: "starting a series of blog posts about @membase and #nodejs http://blog.membase.com/content/starting-membase-nodejs" -- Steve Yen. http://twitter.com/steveyentweets/status/27370449380 [19:40] bradleymeck: its a simple example, not something to pine over [19:41] confoocious has joined the channel [19:41] confoocious has joined the channel [19:42] slashxr: and why does it use tables? [19:42] slashxr: seems like really bad code [19:43] jesusabdullah: You mean, the standard example? [19:43] jamescarr_ has joined the channel [19:43] slashxr: yea [19:43] banjiewen: slashxr: you're right, more time should have been spent working on that than the actual node codebase. [19:43] banjiewen: :p [19:44] jesusabdullah: Well, first, it's meant to be a simple example, so the doctype was probably dropped in order to make things more obvious. [19:44] slashxr: if (req.method === "GET" || req.method === "HEAD") { [19:44] slashxr: theres no need for 3 eq signs imo [19:44] xonecas: slashxr: the source is on github, fell free to polish it up ;) [19:44] tjholowaychuk: lol [19:44] tjholowaychuk: omg [19:44] shaver: strict equality is righteous equality [19:44] jesusabdullah: slashxr: That's just a style point there [19:44] bradleymeck: slashxr there is no need for many things, but there they are, working [19:45] c4milo: isaacs_home: ? [19:45] EyePulp: slashxr: the chat app probably needs a rework. I wouldn't look at it for best practices or even a good example of building a node app [19:45] murphy has joined the channel [19:45] xonecas: slashxr: using === instead of == is almost always better (note the almost) [19:45] bradleymeck: and === can be optimized slightly by the compilers! [19:46] slashxr: its bad practice imo [19:46] bradleymeck: why? [19:46] renatoelias: bad O_o [19:46] kjeldahl has joined the channel [19:46] bradleymeck: type coersion? [19:46] slashxr: better to know what you are doing [19:46] jesusabdullah: Most people consider it good practice! It's surprising to hear it called bad. [19:46] EyePulp: slashxr: if you're looking for an interesting starting point, take a look at http://github.com/robrighter/node-boilerplate [19:46] murphy has joined the channel [19:46] bradleymeck: slashxr thats the point of strict equals, it prevents type coersion [19:46] shaver: "better to know what you are doing" [19:46] shaver: how does it keep you from knowing what you are doing? [19:46] jesusabdullah: I usually hear == considered bad because === requires you to be aware of your types, etc., and not have to be concerned about unexpected coercion behavior [19:47] shaver: == can be pretty surprising in some cases [19:47] jesusabdullah: idk, I kinda get the argument that you should know what types are coming in the pipe, but :/ [19:47] shaver: sure [19:47] jesusabdullah: I would just chalk it up to style, myself [19:47] shaver: it doesn't keep you from knowing [19:47] chrisdickinson: i like "===" as the "better safe than sorry" approach [19:47] renatoelias: if you like trap in code with == [19:47] jesusabdullah: tbh, I often use == because I don't want to think too hard about what type of data is coming in [19:47] tekky has joined the channel [19:47] tekky: doh [19:47] xonecas: slashxr: hum, its not bad practice its actually better to avoid type coersion. Now i know javascript got everyone spoiled and not caring about types, but one day == will cause you trouble :) [19:47] bradleymeck: v8: x= {valueOf:function(){return "test"}};[x==="test",x=="test"] [19:47] v8bot: bradleymeck: [false, true] [19:48] tekky: no logs to read now, damn web clients [19:49] seanouimet has joined the channel [19:49] slashxr: bradley: thats my point, you shouldnt write apps in that manner [19:49] bradleymeck: slashxr you should allow type coersion? [19:49] slashxr: that will cause confusion [19:49] slashxr: and you will pay [19:50] bradleymeck: v8: x= {valueOf:function(){return "test"},toString:function(){return "this"}};[x+1,x+"x",String(x)/*HAHA YOU CAST ME TO A STRING AND I HAXOR*/] [19:50] v8bot: bradleymeck: ["test1", "testx", "this"] [19:50] jesusabdullah: slashxr: Well, no, but === will make you aware if you accidentally the codebase [19:50] slashxr: i like to keep my codes simple KISS is best [19:50] jesusabdullah: Nobody's disagreeing with you there--but why does that make === bad practice? [19:50] bradleymeck: == should be considered for what it does not used at all times [19:50] shaver: === is simpler: it is only comparison, no coercion [19:51] xonecas: slashxr: KISS doesn't mean you should avoid best practices. Being aware of your types, and avoiding coersion is a best practice. [19:51] shaver: surely you don't mean "fewer characters is simpler" [19:51] eazyigz has joined the channel [19:51] xonecas: shaver: I second that [19:52] V1 has joined the channel [19:52] slashxr: a code with too many operators/comparison is bad coding imo [19:52] jesusabdullah: Indeed, === is much simpler to predict behavior of, as shaver said, and as such follows the KISS principle better than ==, which has all sorts of ??!?! behavior under the surface [19:52] blowery_zzz has joined the channel [19:52] bradleymeck: but == is quite useful at times [19:52] shaver: it's not too many operators -- it's a single operator [19:52] tjholowaychuk: hahah [19:52] tjholowaychuk: haha [19:52] xonecas: bradleymeck: yes its has its moments! [19:52] jesusabdullah: what shaver said [19:52] _announcer: Twitter: "@fairhonanth Node.js doesn't depends on MacOSX" -- Nerdson. http://twitter.com/nerdson/status/27371297308 [19:53] tjholowaychuk: ============= [19:53] shaver: D [19:53] slashxr: i think node.js codebase can be improved greatly [19:53] Anti-X: so improve it [19:53] Anti-X: nobody's stopping you [19:53] shaver: I suspect you are even being encouraged! [19:54] Anti-X: no way! [19:54] Anti-X: :D [19:54] jesusabdullah: (Just don't go changing ==='s to =='s willy-nilly <_< ) [19:54] bradleymeck: completely different operators imho [19:54] xonecas: jesusabdullah: ha! [19:54] shaver: I wouldn't say completely different [19:54] shaver: it's like <= and < [19:55] tekky: technically they are [19:55] shaver: <= will be true more often, it is like (< || ==) [19:55] benreesman: do people write if (null !== foo || undefined !== foo) ? [19:55] bradleymeck: yea but with <= you cant hide things from casting [19:55] shaver: == is (=== || type-coerced-then-===) [19:55] shaver: yes, my point is that there's a strict subsetting relationship [19:55] Anti-X: i'm fairly new to hardcore js... does ==/=== make a difference when working with primitive types? [19:55] shaver: benreesman: certainly [19:56] shaver: Anti-X: yes [19:56] Anti-X: like '1' == 1 ? [19:56] shaver: v8: [7 == "7", 7 === "7"] [19:56] v8bot: shaver: [true, false] [19:56] benreesman: as opposed to being lazy and using null != foo [19:56] shaver: benreesman: or just (foo) [19:56] Anti-X: how php of it [19:56] shaver: I think perhaps your history is reversed, but sure [19:56] Anti-X: :p [19:57] Anti-X: it's ony of those things that seemed like a good idea at the time and then people started using it and now you have to support it until you hit the grave [19:58] c4milo has joined the channel [19:58] slashxr: one thing i hate about js is 'undefined' [19:58] slashxr: it should just b e null [19:58] bradleymeck: fun-defined! [19:58] Anti-X: i like undefined [19:58] tjholowaychuk: undefined makes good sense [19:58] tjholowaychuk: imo [19:58] Anti-X: it means not defined [19:58] slashxr: null is the standard [19:58] Anti-X: which is so damn literal! [19:58] tjholowaychuk: stuff with just nil or null is kinda odd [19:59] shaver: undefined and null are quite different, and importantly so [19:59] _announcer: Twitter: "hmm... complexity theory or node.js?" -- JD Harrington. http://twitter.com/psi/status/27371730952 [19:59] renatoelias: shaver: yepa ! [19:59] Anti-X: yeah and rarely do you need to make an effort in determining which one to use [19:59] tjholowaychuk: yeah you can use them in nice ways [19:59] renatoelias: the undefined is never used [19:59] bradleymeck: whaaaa [20:00] renatoelias: the null is used in any point [20:00] slashxr: v8: 1 + 1 [20:00] v8bot: slashxr: 2 [20:00] Anti-X: v8> v = undefined; v [20:00] v8bot: Anti-X: undefined [20:00] slashxr: v8: a [20:00] v8bot: slashxr: ReferenceError: a is not defined [20:00] bradleymeck: i use undefined all the time to get some typeof action, if anything i would remove null [20:01] slashxr: v8: a+a [20:01] v8bot: slashxr: ReferenceError: a is not defined [20:01] Anti-X: function b(a) {return a}; b() [20:01] tjholowaychuk: slashxr: you need to declare it first [20:01] Anti-X: v8> function b(a) {return a}; b() [20:01] v8bot: Anti-X: undefined [20:01] slashxr: v8: a=1;a+b [20:01] v8bot: slashxr: ReferenceError: b is not defined [20:01] tjholowaychuk: v8: var foo; foo [20:01] v8bot: tjholowaychuk: undefined [20:01] tjholowaychuk: v8: typeof foo [20:01] v8bot: tjholowaychuk: "undefined" [20:01] slashxr: v8: var b;a=1;a+b [20:01] v8bot: slashxr: NaN [20:01] tjholowaychuk: slashxr ^^ [20:01] Anti-X: v8> function b(a) {return a}; b(null) [20:01] v8bot: Anti-X: null [20:01] devongovett has joined the channel [20:01] bradleymeck: v8: void(null) [20:02] v8bot: bradleymeck: undefined [20:02] Anti-X: v8: void [20:02] v8bot: Anti-X: SyntaxError: Unexpected end of input [20:02] shaver: void is an operator [20:03] tjholowaychuk: v8: typeof void typeof void typeof void "weeee" [20:03] v8bot: tjholowaychuk: "undefined" [20:04] sonnym has joined the channel [20:07] _announcer: Twitter: "Why Node.js Is Totally Awesome: http://bit.ly/dokkD7" -- Benjamin Truyman. http://twitter.com/bentruyman/status/27372296523 [20:07] Anti-X: it's not totally awesome [20:07] Anti-X: it's quite awesome [20:08] Anti-X: could become way awesomer [20:09] Anti-X: that page had annoyingly large text [20:09] Anti-X: i'm not friggin blind [20:09] tekky: isaacs_home: http://registry.npmjs.org/ supposed to dump a huge JSON string? :P [20:10] jesusabdullah: yes [20:11] murphy has joined the channel [20:13] _announcer: Twitter: "Node.js library for naming a node-***, but, with hindsight a very bad taste." [ja] -- edvakf. http://twitter.com/edvakf/status/27372722529 [20:15] _announcer: Twitter: "About to listen to the node.js talk by Ryan from joyent #strangeloop" -- temojin. http://twitter.com/temojin/status/27372854319 [20:16] bjarkih has joined the channel [20:16] _announcer: Twitter: "Gonna finally learn about node.js #StrangeLoop http://twitpic.com/2xm77l" -- Michael Galpin. http://twitter.com/michaelg/status/27372941338 [20:17] _announcer: Twitter: "Node.js talk with coventry guys. #strangeloop" -- Heath Borders. http://twitter.com/heathborders/status/27373022796 [20:18] confoocious has joined the channel [20:18] confoocious has joined the channel [20:19] _announcer: Twitter: "#RWX2010 to cover: HTML5, CSS3, JavaScript, Ajax Libraries, Semantic Web, iPhone, Android, Flex, GWT, NodeJS, Security http://bit.ly/dzVys9" -- Mattias Köhlmark. http://twitter.com/mattek/status/27373136773 [20:19] _announcer: Twitter: "@heathborders so node.js more than a toy yet?" -- gaffo. http://twitter.com/gaffo/status/27373142050 [20:19] mjr_: zing [20:19] mjr_: take that, node [20:20] _announcer: Twitter: "WebOS Developer Day in NY November 19th and 20th. http://developer.palm.com/index.php?id=2128 #javascript #nodejs #mobile" -- Justin Kruger. http://twitter.com/jdavid/status/27373196884 [20:20] creationix: strangeloop must be starting [20:20] boaz has joined the channel [20:20] mr_daniel has joined the channel [20:22] _announcer: Twitter: "From our blog: @steveyentweets talks about starting Membase with NodeJS http://bit.ly/dd4mPS #membase #nosql" -- Membase. http://twitter.com/membase/status/27373347864 [20:22] _announcer: Twitter: "jefe's description: Jefe is a safe sandbox for running user scripts in Node.js ... http://bit.ly/9lkvpp" -- Yevgeniy Viktorov. http://twitter.com/yviktorov/status/27373365862 [20:24] _announcer: Twitter: "Lots of dissing of both Ruby and Rails at #StrangeLoop talk on node.js ... #BeatingDeadHorse" -- Michael Galpin. http://twitter.com/michaelg/status/27373471222 [20:25] _announcer: Twitter: "Starting #membase with #nodejs - first of series from @steveyentweets http://bit.ly/dd4mPS #nosql" -- Chantal Yang. http://twitter.com/chantaly/status/27373523137 [20:25] _announcer: Twitter: "Ryan Dahl speaking about Node.js #strangeloop http://yfrog.com/3tg1lfj" -- Nick Nisi. http://twitter.com/nicknisi/status/27373542736 [20:25] mjr_: I hadn't even heard of strangeloop until yesterday. [20:26] BrianTheCoder has joined the channel [20:26] Anti-X: well that's a lot of twitter for 12 minutes [20:26] Anti-X: is announcer having a seizure? [20:26] siculars_ has joined the channel [20:26] _announcer: Twitter: "http://duartes.org/gustavo/blog/post/what-your-computer-does-while-you-wait #strangeloop node.js talk" -- temojin. http://twitter.com/temojin/status/27373650797 [20:27] _announcer: Twitter: "Done for the day, setting up Ubuntu 10.04 server for web development with: vsftpd, nginx, php5 with fpm, nodejs with upstart+monit, npm" -- Mike Plate. http://twitter.com/mikeplate/status/27373652840 [20:27] cjheath_ has joined the channel [20:27] cscotta has left the channel [20:27] mjr_: people love to tweet about how node-ly they are. [20:27] _announcer: Twitter: "really enjoying an evening session with node.js - hacking with no objective whatsoever :)" -- Steven Milne. http://twitter.com/stevenmilne/status/27373673525 [20:27] Anti-X: i see this [20:27] mikeal: too much announcer [20:27] mikeal: someone should implement a throttle [20:27] Anti-X: i suppose there are a couple of talks on [20:28] meatmanek has joined the channel [20:28] Anti-X: so people have to share that they are actually out among people, so instead of talking to them they tell everybody ELSE [20:28] Anti-X: :D [20:28] _announcer: Twitter: "Node.js talk with coventry guys. #strangeloop http://twitpic.com/******" -- Heath Borders. http://twitter.com/heathborders/status/27373785363 [20:29] whozman has joined the channel [20:29] whozman: question [20:29] bradleymeck: 42 [20:29] jesusabdullah: whozman: orly? [20:30] whozman: ubuntu 10.4 node.js install - gives me console not defined [20:30] _announcer: Twitter: "#strangeloop node.js way more interesting than I thought. Yet another thing I'll have to read about on hackernews" -- Matt Mitchell. http://twitter.com/matthatesfun/status/27373879037 [20:30] mjr_: whozman: sounds like a very old node [20:30] matt_c has joined the channel [20:30] Anti-X: Question: a sentence in an interrogative form, addressed to someone in order to get information in reply. [20:30] _announcer: Twitter: "Perl 6 talk by @mfollett was fantastic. At Programming Node.js now at The Pageant." -- Michael Schade. http://twitter.com/michaelschade/status/27373895044 [20:31] mjr_: Interjection: Aw, Snap! [20:31] xonecas: exit [20:31] jesusabdullah: whozman: Where did you get your node? apt-get? [20:31] xonecas: ups :) [20:31] whozman: yep [20:31] kingryan has joined the channel [20:31] jesusabdullah: whozman: It's extremely stale in that case. node.js changes way too quickly for apt repos to keep up [20:31] whozman: ok [20:31] matt_c: ACTION looks in from strangeloop. [20:31] jesusabdullah: whozman: http://nodejs.org/#download [20:31] kingryan: ryah: so is there really no way to do integers > 2**53 in node? [20:31] whozman: one sec [20:31] jesusabdullah: Very easy to build, don't worry [20:31] tobeytailor has joined the channel [20:31] whozman: let me check, I think I actually did a build [20:31] Anti-X: hey matt_c, we just had two thousand tweets from the audience [20:31] jesusabdullah: But yeah, def. build from source [20:31] whozman: sry [20:32] jesusabdullah: Oh, you're fine [20:32] jesusabdullah: It's okay! [20:32] Aria has joined the channel [20:32] matt_c: Anti-X: Ha, I'll bet. [20:32] jesusabdullah: It's actually funny to see how behind standard repos can get sometimes, with actively developed software [20:32] wink_: kingryan: http://jsfromhell.com/classes/bignumber ? [20:33] kingryan: wink_: sure, it can be worked around, but that doesn't help core libraries, like json parsing :) [20:33] bradleymeck: kingryan the question is: do you really need to do numbers bigger than that [20:33] kingryan: bradleymeck: yes [20:33] Anti-X: jesusabdullah, that's why i like npm, because the developer has to push it himself [20:33] bradleymeck: for what? [20:33] whozman: hey jesus, its node-v0.1.96 [20:33] whozman: i did a build [20:34] mjr_: mikeal: sadly, I'm going to out of town on vacation for oak.js. [20:34] Anti-X: hayzeus [20:34] kingryan: bradleymeck: ids for tweets will soon be non-sequential (b/c of my work) [20:34] bradleymeck: use strings [20:34] c4milo has joined the channel [20:34] creationix: mjr_: where are you going? [20:34] kingryan: bradleymeck: i work at twitter. we can fix our own code, its the api developers who we're trying to help out [20:35] creationix: mjr_: I may still be on vacation in Texas then [20:35] mjr_: creationix: to the exotic island state of Hawaii. [20:35] creationix: nice [20:35] mjr_: kingryan: are you guys using node at twitter? [20:35] kingryan: no [20:35] c4milo: isaacs_home: ???? [20:35] bradleymeck: kingryan all JS implementations will falter at anything beyond 60bit float [20:35] c4milo: micheil: ? [20:36] whozman: jesusabdullah: I'll try the newer version and do a build [20:36] Anti-X: maybe there should be a python Decimal port to node [20:36] kingryan: bradleymeck: alright, so there's little hope of non-intrusive workarounds [20:36] micheil: c4milo: ? [20:36] jesusabdullah: whozman: try node --version [20:36] jesusabdullah: Just curious [20:36] jesusabdullah: If it's 0.2-ish, you should be okay :/ [20:36] c4milo: micheil: are you working on node-fuse ? [20:36] micheil: c4milo: somewhat [20:36] danielzilla has joined the channel [20:36] micheil: I'm wanting to, but not sure where to start yet [20:36] jesusabdullah: Oh [20:36] bradleymeck: kingryan, unfortunately yes [20:36] jesusabdullah: whozman: 0.1.96? Huh [20:37] jesusabdullah: whozman: Yeah, you might oughta rebuild with 0.2-series then [20:38] c4milo: micheil: but did you figure out how to deal with that ? [20:40] c4milo: micheil: I'm reading the source code of fuse and it seems like it doesn't work asynchronously. neither fuse.h nor fuse_lowlevel.h [20:40] micheil: c4milo: that's where the custom libeio stuff comes in [20:40] c4milo: micheil: in what way ? [20:40] spetrea-home has joined the channel [20:41] micheil: well, we can create our own eventloop, from there, when we do a blocking call or something like that, it throws into the event loop [20:41] micheil: just remember, fuse is c->js [20:41] micheil: not c <- js [20:41] micheil: most of node is js -> c [20:41] micheil: does that make sense? [20:41] c4milo: micheil: sorry, I don't follow you [20:41] c4milo: micheil: :$ [20:42] voodootikigod: Anti-X: you still here? [20:42] mjr_ has joined the channel [20:42] Anti-X: yeah [20:42] micheil: so, like, rather then you calling something in javascript to get something from C, like fs.readFile(), which spins in to libeio [20:42] c4milo: if the fuse loop is synchronous how will you make it works async ? [20:42] micheil: it's C calling methods that are bound on initiailize to JavaScript [20:42] voodootikigod: Anti-X: quite the damn rant eh? [20:42] Anti-X: what where [20:43] Anti-X: the core thing? [20:43] Anti-X: lol [20:43] voodootikigod: they spidermonkey thing [20:43] micheil: so there isn't any need for it to be "evented" in a way [20:43] Anti-X: oh yeah [20:43] Anti-X: i rant a lot [20:43] c4milo: micheil: do you have some gists where I can see this technique ? [20:44] Anti-X: i come from undernet, i'm used to spewing hate [20:44] hsuh has joined the channel [20:44] micheil: c4milo: just think of the fuse_lowlevel event loop being non-blocking and stuff [20:44] micheil: it is the event loop, so it calls into javascript [20:44] micheil: javascript never calls into it. [20:44] voodootikigod: aside from your belief that its written by monkeys (wtf) what are you specifically complaining about [20:44] voodootikigod: or just spewing to spew? [20:45] Anti-X: i say a lot of shit, because in my head there is a train of thought, and i also have a filter that cuts out the in between stuff and goes straight to the point [20:45] c4milo: micheil: the only way I can see fuse async is hacking into it and adding the non blocking flag to the open syscall they do over /dev/fuse [20:45] Anti-X: about the monkey thing i had an internal thing about the name and then that came out [20:45] c4milo: s/ I can see / I can see fuse async [20:45] micheil: c4milo: I'm going off stuff where I've just looked at it [20:46] voodootikigod: gotcha [20:46] micheil: c4milo: but it sounds like fuse has it [20:46] voodootikigod: so basically nothing of value [20:46] voodootikigod: cool [20:46] micheil: 's own event loop [20:46] _announcer: Twitter: "So node.js has internals fiber threading...#woopdidoo" -- Marc Brooks. http://twitter.com/IDisposable/status/27375007018 [20:46] Anti-X: voodootikigod, exactly :p [20:46] micheil: voodootikigod: btw, how can I test serialport without an arduino? [20:46] mikeal: ryah: who do I talk to at Joyent about sponsoring food or drink at oak.js? [20:46] voodootikigod: i use a zwave controller set [20:46] voodootikigod: you can use /dev/tty [20:47] micheil: like, I don't think your test case will work if I don't have a usable device [20:47] micheil: voodootikigod: as in the tty from terminals? [20:47] voodootikigod: you can use a null terminal [20:47] zemanel has joined the channel [20:47] xicubed has joined the channel [20:47] voodootikigod: it just doesnt write back ): [20:47] c4milo: micheil: yes, that's I'm saying, fuse has its own loop [20:47] micheil: yeah, well, it's kinda important that it does [20:47] voodootikigod: hold looking to see how pyserial does it [20:48] micheil: c4milo: right. so it will call JavaScript methods in an async nature [20:48] mjr_: voodootikigod: did you figure out your serialport thing? [20:48] mjr_: in time to save the world? [20:48] voodootikigod: enough to make a disco ball spin [20:48] bradleymeck: micheil i hope that wrapper goes through, asyncing c->js is balls right now [20:48] voodootikigod: but i want to finish it out all the way [20:48] voodootikigod: and mix drinks [20:48] voodootikigod: disco balls and mixed drinks ftw [20:48] mjr_: sure, the logical conclusion. [20:49] jesusabdullah: Clap-on, clap-off? [20:49] micheil: bradleymeck: the one on the mailing list? [20:49] bradleymeck: yes [20:49] micheil: ASYNC_CUSTOM_CALL? [20:49] micheil: k [20:49] micheil: yeah, it's really quite useful [20:49] voodootikigod: pyserial requires a loopback device [20:49] c4milo: micheil: and it mounts the devices synchronously , even if fuse call the javascript functions async it's synchronous [20:49] jesusabdullah: I made a clap-on, clap-off switch in labview once [20:49] jesusabdullah: It was really crappy [20:49] jesusabdullah: but it worked! [20:49] micheil: I originally wrote it for a module called node_os.cc [20:49] jesusabdullah: I was proud :3 [20:49] micheil: c4milo: that shouldn't matter too much I don't think. [20:50] micheil: because we're not doing stuff in tradition node.js event sense [20:50] c4milo: micheil: I think now I'm understanding your point [20:50] kingryan has left the channel [20:51] micheil: like, I don't think node's event queue will stop if calling fuse.mount(path, callbacks) [20:51] micheil: and that function blocks [20:51] micheil: (either that, or we get say libeio to call the mounting functions) [20:51] micheil: the rest of it is evented. [20:51] bradleymeck: javascript implemented in javascrip [20:52] c4milo: micheil: so the goal is to avoid that fuse blocks the apps who are going to use the library (node-fuse)? [20:52] jesusabdullah: lolwat [20:52] mikeal: this is hilarious [20:52] renatoelias has joined the channel [20:52] micheil: mikeal: ? [20:52] mikeal: the last comment on this bug [20:52] mikeal: https://bugzilla.mozilla.org/show_bug.cgi?id=604421 [20:52] mikeal: just the term "font foundaries" make me start cracking up [20:52] rcy has joined the channel [20:52] mikeal: i know they are a real thing [20:53] mikeal: but….. really? [20:53] mjr_: fire up the font forge and dust off your font anvils. [20:53] jesusabdullah: Sounds like a magic card [20:53] shaver: "foundries" [20:53] _mythz has joined the channel [20:53] meatmanek: before about 1983, font foundries were literal foundries [20:53] mikeal: see, i can't even spell it right [20:53] meatmanek: they melted metal [20:53] meatmanek: and made fonts [20:54] jesusabdullah: A special Land that gives you +1 blogoblag mana and +1 typography mana [20:54] micheil: mikeal: hmm, well for what it's worth, I'm a typography enthusiast and stuff, if I had to tools, I'd probably try creating a a face. [20:54] mikeal: i'm a HUGE font geek [20:54] meatmanek: micheil, get some rubber stamps or something [20:55] nerdEd has joined the channel [20:55] mikeal: i went to MoMA and basically sat in the font corner for 2 hours [20:55] micheil: so, I can see why they want the security and all that. [20:55] pquerna: font piracy:( [20:55] micheil: MoMA also has a bunch of cool coffee gear in it [20:55] meatmanek: I should've gone to MoMA when I was in NYC this summer [20:55] jesusabdullah: MoMA has a font section? [20:55] mikeal: but like, out of all the things that aren't going to make the transition to the web [20:55] jesusabdullah: Crazy [20:55] mjr_: can we kern down the x-height of this fontyness and get back to why JavaScript is bad a large numbers and binary data? [20:55] mikeal: to digital mediums [20:55] mikeal: is selling generic fonts [20:55] mikeal: it's just not going to make that transition [20:55] micheil: c4milo: pretty much, we make use of fuse_lowlevel's event loop for everything that's after mount and before unmount (I think) [20:56] jesusabdullah: mjr_: It has to do with font foundaries insisting on a minimum height to their fonts [20:56] mikeal: i think there is still a market for hiring people to create a new font for you [20:56] mikeal: but for just selling a font thousands of times for a license [20:56] mikeal: really not gonna happen in the future [20:56] rauchg_ has joined the channel [20:56] c4milo: micheil: hehe I'm lost again hehe sorry [20:56] mikeal: you can't future proof that business model to put it on the web [20:56] micheil: ACTION needs to get the next edition of 8 Faces, got the first one. [20:57] meatmanek: mikaeal, how do you think Windows machines come with Times New Roman and Arial? [20:57] meatmanek: they certainly weren't free [20:57] micheil: c4milo: right, so, if there's a call in creating a fuse mount, and that's a blocking function, then we throw it into libeio [20:57] c4milo: micheil: I'll read about eio custom to say what it is [20:57] mjr_: Seems like the Typekit model is sustainable. They charge some small bit of money and then the foundries can still get paid to twiddle with serifs. [20:57] _announcer: Twitter: "Listening to @ryah discuss scaling #nodejs . Hoping to catch him after to discuss my @codemash submission and @joyent hosting for nodejs." -- Benjamin P Lee. http://twitter.com/leebenjp/status/27375771912 [20:57] c4milo: to see [20:58] meatmanek: bbl. [20:58] cloudhead has joined the channel [20:58] meatmanek has left the channel [20:58] c4milo: micheil: to see what it is [20:58] micheil: c4milo: so, basically eio_custom lets you create a call to a blocking C function on the event loop and get notified when it returns [20:58] TomsB has joined the channel [20:59] sixtus42 has joined the channel [20:59] c4milo: micheil: what does libeio ? a thread to monitoring that ? [20:59] mikeal: i'm not seeing it [21:00] micheil: c4milo: pretty much, from what I understand. the call gets pushed into a thread, and when that thread ends or something like that, it triggers the callback [21:00] micheil: c4milo: given: [21:00] _announcer: Twitter: "Noders: How do you juggle your callbacks? Gists and links, please. #nodejs #oakjs Thanks! :)" -- Ⓘⓢⓐⓐⓒ. http://twitter.com/izs/status/27375991369 [21:01] micheil: eio_custom(blocking_function, callback_function, data) [21:01] c4milo: micheil: oh, that is kind of cool [21:01] micheil: data is a struct where you store data in between the three functions [21:01] _announcer: Twitter: "really excited about elnode, my emacs node.js clone. it could end the emacs data silo problem. org, diary, etc... over http." -- Nic Ferrier. http://twitter.com/nicferrier/status/27376028550 [21:01] c4milo: micheil: so basically that allow me to make sync C API's async ? [21:01] micheil: you have the one that schedules [21:01] c4milo: allows [21:01] micheil: yeah [21:01] micheil: then the one that blocks [21:01] micheil: then the one that is the callback [21:02] micheil: I've still got to learn more about libev before I go into that much [21:02] wadey: you have to be carefull though, I've seen some weird bugs with eio_custom stuff. i.e.: http://github.com/vanillahsu/node-memcache/issues/issue/5 [21:02] _announcer: Twitter: "Great Node.js talk by @ryah. "Am I talking about node being buggy? No, it's very buggy." #strangeloop" -- Douglas Sims. http://twitter.com/ratsbane/status/27376077833 [21:02] c4milo: micheil: great I already understood [21:02] isaacs has joined the channel [21:02] ircretary has joined the channel [21:02] micheil: like, at the moment, I'm thinking that the libeio library should only ever be used for file i/o [21:02] micheil: not for things like databases [21:02] mikeal: pkrumins: you around? [21:03] davidascher has joined the channel [21:03] ph^ has joined the channel [21:03] pkrumins: yep [21:03] mikeal: i saw someone was trying to do remote object stuff with dnode + proxies [21:03] mikeal: are you in on that? [21:04] pkrumins: proxies like http proxies? [21:04] pkrumins: or proxies as js proxies? [21:04] mikeal: js proxies [21:04] mikeal: harmoney proxies [21:04] pkrumins: haven't used them myself [21:04] mikeal: and i'm wondering how it doesn't break horribly in node [21:04] micheil: c4milo: also, when people do use libeio, and eio_custom, they are doing too much themselves and not using the methods and wrappers that the node headers and such provide [21:04] pkrumins: why do you think it would break? [21:04] mikeal: because it would be converting attribute access for function invocation to something that did IO [21:04] _announcer: Twitter: "Anyone using @joyent #nodejs beta hosting have trouble accessing your server w/ your ssh key? ssh/git keep dropping me to password prompt." -- Benjamin P Lee. http://twitter.com/leebenjp/status/27376264928 [21:04] chilts has joined the channel [21:04] mikeal: so it would lock up the js process [21:05] mikeal: i don't see how it would work without blocking [21:05] pkrumins: what kind of io? [21:05] sixtus42: mikeal: distributed objects will never fly [21:05] _announcer: Twitter: "Listening about node.js at #strangeloop and curious what type of apps use it and for what" -- Adam Boyet. http://twitter.com/adamboyet/status/27376324409 [21:05] mikeal: whatever underlying protocol they are using for doing remote objects [21:05] mikeal: sixtus42: that's my impression :) [21:06] sixtus42: Just google corba [21:06] pkrumins: mikeal, oh snap, it sure would be blocking [21:06] slashxr: whats a good tutorial site for nodejs [21:06] pkrumins: like arr[0] = 5, that's a synchronous call. [21:06] mikeal: proxies do this with returning a callback to the gettr [21:06] pkrumins: got to wait until it completes to proceed. [21:06] mikeal: but in node the js process can't do anything else [21:07] mikeal: or else we basically introduce all the issues you have with threading without even knowing it's happening [21:07] mikeal: if you somehow were to take the getter callback and shove it in to the event machine [21:07] mikeal: it just introduces a whole new world of side effects [21:07] pkrumins: crazy! [21:08] _announcer: Twitter: "Node.js sounds like a search for creativity through restriction. #strangeloop" -- Heath Borders. http://twitter.com/heathborders/status/27376491643 [21:10] _announcer: Twitter: "@TechWraith How about just "Node.js Developers" /cc @izs" -- Micheil Smith. http://twitter.com/miksago/status/27376626717 [21:11] isaacs: micheil: the ship has sailed on that one. we're noders. that's how it is. [21:11] micheil: oh, well fine then :P [21:11] micheil: ACTION will stick to just "Developer" [21:11] jacobolus has joined the channel [21:11] micheil: I use the best tool for the job. [21:11] isaacs: micheil: sure.. but you use node for some jobs. [21:11] isaacs: micheil: and you sit in this room all day [21:11] isaacs: micheil: so you're a noder ;) [21:11] isaacs: you can be other things, too [21:12] mikeal: i don't like that term [21:12] micheil: isaacs: nawh, the sitting in this room all day is just to wind people up, y'know? [21:12] mikeal: we need to fire our marketing person [21:12] isaacs: hahah [21:12] _announcer: Twitter: "slides from my #strangeloop #nodejs talk http://nodejs.org/strange-loops.pdf" -- Ryan Dahl. http://twitter.com/ryah/status/27376780559 [21:12] _announcer: Twitter: "Another good technical #strangeloop talk. @ryah on #nodejs" -- Tim Taylor. http://twitter.com/toolbear74/status/27376800484 [21:15] Anti-X: mikeal, best tool for the job? [21:16] micheil: Anti-X: yes, which in my opinion is often node.js at the moment [21:16] mjr_: The best Tool for my job today is Tool, thanks to Pandora. [21:16] Anti-X: when you have a new car you want to use it :p [21:16] mikeal: i use node.js as a replacement for everything i did with Python for the previous 5 years [21:16] mikeal: it's actually easier [21:17] mikeal: even basic scripting tasks [21:17] mjr_: yeah, me too [21:17] mjr_: I think because things I do require coordinating with so many different things over the network. [21:17] isaacs: wow, facebook keeps coming up with new ways to try to convince me to cancel my account. [21:18] mjr_: Ends up being easier to write one-off programs in node than to do batchy things in perl/python [21:18] Anti-X: yeah node is damn easy to set up for communications [21:19] Me1000 has joined the channel [21:19] Anti-X: need a different name than noders though [21:19] SubStack: nodelings [21:20] micheil: ryah: good slides there [21:20] technoweenie: rauchg_: ping [21:20] isaacs: you know how like, in high school, someone might give you a nickname, and the harder you try to change it, the more it sticks? [21:20] rauchg_: technoweenie: [21:20] rauchg_: suuup [21:20] technoweenie: rauchg_: you work at learnboost right? [21:20] Anti-X: isaacs, did someone stick the name noders on us yet? [21:20] Anti-X: other than you [21:20] micheil: Anti-X: actually, no, it's not because node is a new car, it's because I'm a javascript programmer and I like evented code, it makes sense to me [21:20] rauchg_: technoweenie: yep [21:20] technoweenie: (making sure i have my irc nicks straight) [21:20] micheil: (I've never really heavily programmed anything else) [21:20] isaacs: Anti-X: we've been noders for about a year now [21:21] isaacs: Anti-X: at least, i've heard others use that term to refer to node.js developers [21:21] Anti-X: haven't noticed [21:21] isaacs: it's basically just a contraction [21:21] Anti-X: i guess it's an easy term to remember [21:21] micheil: isaacs: what? no, I'm a nodule. [21:21] Anti-X: but it sounds so weak [21:21] isaacs: node.js developers [21:21] micheil: Just a cog in the big machine. [21:21] Aria: I like being a cog. [21:21] Aria: There are no famous programmers ;-) [21:22] Anti-X: nodevs noders nodejs [21:22] micheil: Anti-X: although, serious, who gives a toss what we call our servers, if we unit together, we will strive for victory! To Victory! [21:22] Anti-X: noun, verb, noun [21:22] Anti-X: victoryjs! [21:22] Anti-X: :P [21:22] isaacs: noders node nodejs [21:22] micheil: ... [21:23] micheil: isaacs: I have fun every night noding node.js. [21:23] isaacs: all day long, noders node on nodejs. they node it at work, and they node it at home. [21:23] _announcer: Twitter: "Reading up on Node.js , I immediately want to mash it with CouchDB. Couch already has MapReduce in JavaScript, but they seem well paired." -- Branden Faulls. http://twitter.com/omphe/status/27377542263 [21:23] Anti-X: i node a lot every day [21:23] c4milo has left the channel [21:23] Anti-X: "so what are you, a coder?" "NNNNNoder!" [21:25] _announcer: Twitter: ".. doing some experiments with #nodejs, the twitter streaming api and #html5 audio tags .. .http://tweetpiano.notyce.net" -- michael schaerfer. http://twitter.com/notyce/status/27377687996 [21:25] _announcer: Twitter: ""Node will be useful nodejs" - @ Isaacs" [lv] -- Tor Valåmo. http://twitter.com/torvalamo/status/27377718939 [21:26] Anti-X: lol [21:26] Anti-X: that's not what i wrote at all [21:26] galaxywatcher has joined the channel [21:26] isaacs: heheh [21:26] isaacs: i'm @izs, btw [21:26] isaacs: @isaacs is some composer in LA [21:26] Anti-X: i wrote noders oh [21:26] Anti-X: sorry then [21:26] cognominal has joined the channel [21:26] isaacs: np [21:26] isaacs: happens all the time [21:26] isaacs: i've offered to buy the twitter ID, but he doesn't respond. [21:27] Anti-X: he hasn't been on since july [21:27] Anti-X: probably suicidal, like all musicians [21:27] Anti-X: (i'm one) [21:27] Anti-X: not cuicidal [21:27] Anti-X: s [21:27] trollface has joined the channel [21:27] trollface has left the channel [21:27] isaacs: hm. only 6 more months before i can bribe a twitter employee to give me the name [21:28] micheil: ? [21:28] eazyigz has joined the channel [21:28] micheil: isaacs: wanna bribe them for @micheil as well? [21:29] micheil: (I'm like one of the few in the world with the name) [21:29] _announcer: Twitter: "This is a perfectly valid english sentence (now): "noders node nodejs" -- @izs" -- Tor Valåmo. http://twitter.com/torvalamo/status/27378003044 [21:29] tpryme has joined the channel [21:30] Anti-X: there we go [21:31] isaacs: ok, work time. [21:31] _announcer: Twitter: "People think I'm crazy for this, but I really enjoy programming in C, C++, JavaScript and hacking node.js" -- Micheil Smith. http://twitter.com/miksago/status/27378154839 [21:32] Anti-X: i think you're crazy regardless [21:32] micheil: Anti-X: great, because I am. [21:32] micheil: and I enjoy it. [21:32] deepthawt has joined the channel [21:33] SubStack: but C is icky [21:33] SubStack: doesn't even have callbacks [21:33] micheil: it's fairly good. [21:33] micheil: but I'm mainly writing C++ [21:34] _announcer: Twitter: "Multi-node: Concurrent NodeJS HTTP Server | SitePen Blog http://ow.ly/19s3Zw" -- Javascript News. http://twitter.com/del_javascript/status/27378320663 [21:35] tjholowaychuk: you can have callbacks in c [21:35] tjholowaychuk: lol [21:35] tjholowaychuk: kinda awkward an inefficient but you can [21:36] mikeal: http://www.newty.de/fpt/functor.html [21:36] mikeal: it's not awkward or inefficient, it's something you do often to write good C :) [21:36] sixtus42 has joined the channel [21:36] mikeal: you just pass a pointer to the function [21:36] mikeal: it's pretty simple [21:36] tjholowaychuk: yeah, but in the right places [21:36] Aria: It just doesn't have closures. [21:36] _announcer: Twitter: "#tweetpiano a nice #nodejs experiment http://bit.ly/d1TaKr" -- Jean-Louis Huynen. http://twitter.com/gallypette/status/27378511170 [21:37] tjholowaychuk: i mean you dont want to go having callbacks all over just because you can [21:37] Aria: Which means you have to think ever more carefully about state-tracking, and do it very explicitly. [21:37] tjholowaychuk: ex function pointer in a struct [21:37] Aria: Why not? [21:37] mikeal: welcome to C tho :) [21:37] micheil: homework for tonight: read the source to libev. [21:37] mikeal: being careful when writing C is just called writing C [21:38] abrown28 has joined the channel [21:38] abrown28: it's a miracle I remember how to join a channel in irc after 15 years ;) [21:38] tjholowaychuk: i bet if you did some static analysis you could implement closures in C. you could grab all the declarations used within and moved the function body out with those as args [21:39] tjholowaychuk: would be interesting to play around with [21:39] mikeal: it adds a layer of introspection in to the scopes that you don't normally have [21:39] _announcer: Twitter: "Should I blog about something Node.js? Or interested in any?" [de] -- Peter. http://twitter.com/sir_pepe/status/27378708150 [21:39] mikeal: and once you add that you might as well be writing javascript [21:39] mjr_: My Objective C-loving colleagues tell me that "blocks" are like closures for C. [21:40] mikeal: it's not like we don't have a really fast js vm :) [21:40] overra has joined the channel [21:40] mikeal: then he's high [21:40] mikeal: :) [21:40] mikeal: blocks are like blocks [21:40] tjholowaychuk: im just saying conceptually lol :p [21:40] prettyrobots has joined the channel [21:40] mikeal: it's like have a limited closure that you apply to an operation in another scope [21:40] mikeal: but it's not like a closure [21:40] mjr_: mikeal: have you looked at obj-c blocks? [21:40] SubStack: this C apologetics is disappointing [21:41] mikeal: i think so [21:41] mjr_: It's not the same as lexical blocks [21:41] mikeal: it's been a long time since i looked at obj-c [21:41] mikeal: i messed around back when they released version 2 [21:41] mikeal: i was at that WWDC [21:41] mikeal: and was like "they have garbage collection now, i should see if this doesn't make me wanna rip my eyeballs out" [21:41] mjr_: http://thirdcog.eu/pwcblocks/ [21:41] prettyrobots: C has nothing to apologize for. [21:42] _announcer: Twitter: "Speaking Node.js WebOS2.0" [ja] -- ぐらンダー武蔵. http://twitter.com/grapswiz/status/27378881162 [21:42] mjr_: I think they might be high, but obj-c blocks really do sound a lot like closures in JS. [21:42] micheil_away: ACTION likes C and C++ but can't stand objective-c [21:43] abrown28: Can some one tell me if node uses edge triggered watches? [21:43] prettyrobots: ACTION Likes C and doesn't mid C++ if the code base hasn't gone overboard on templates. [21:43] abrown28: ahh... I like templates in c++ [21:44] micheil_away: there's a few cool things.. like that eio_##func stuff [21:44] Anti-X: i think c++ was made after a brainstorming lasting 5 years and none of the ideas were thrown out [21:44] micheil_away: that took me a while to work out [21:44] micheil_away: but it's pretty cool. [21:44] tjholowaychuk: operator overloading is lame [21:44] mikeal: mjr_: this looks really hard :) [21:44] tjholowaychuk: micheil_away: that is just cpp [21:44] mikeal: like you've gotta think a lot about using a block to use it [21:44] tjholowaychuk: macro stuff [21:44] micheil_away: tjholowaychuk: yeah. I looked it up last night. [21:45] mjr_: mikeal: yeah, I never said it was easy, but it is there [21:45] mikeal: it's definitely useful tho [21:45] bruse: what bugs me is that it takes ages to read just a few hundred lines of c++ [21:45] mikeal: if i had to write obj-c i would use it [21:45] bruse: following the code flow is a massive undertaking [21:45] bruse: if you're completely new to the project [21:45] mjr_: mikeal: the cool part is how they can use those blocks to distribute the computation using GCD, and how that lets you do GPU stuff. [21:45] micheil_away: bruse: not really. [21:45] mikeal: but it's not like a closure where you just write code and the scoping is magical [21:45] Anti-X: bruse, also "a few hundred lines" of c++ can be weeks worth of work :p [21:45] micheil_away: bruse: javascript can be just as bad. [21:45] pedrobelo has joined the channel [21:45] bruse: yes of course [21:46] deepthawtz has joined the channel [21:46] micheil_away: so, it's nothing that doesn't happen everywhere [21:46] bruse: it might be OO in it's nature that does it [21:46] bruse: or, people who design too complex OO architectures for small problems [21:46] micheil_away: ACTION gets disappointed when people don't use the header files and special stuff that the header files provide [21:47] Aria: I like that JS's OO is juuuust hard enough syntactically to make you consider other designs. [21:47] shaver: GCD can run on GPUs now? [21:48] Aria: It always has. [21:48] Aria: That's why they invented it. [21:48] prettyrobots: Anti-X: A few hundred lines of C++: Because you don't know if the operators are overloaded, or what that template invocation expands to... [21:48] Anti-X: yeah [21:48] prettyrobots: It is too clever. [21:48] prettyrobots: I like V8's use of C++. [21:49] prettyrobots: Generics, but no meta-programming. [21:49] Anti-X: i heard some google people are clever [21:49] Anti-X: maybe that's just a rumour [21:49] bruse: pfft. college people. [21:50] Anti-X: you wouldn't say that if they offered you a job [21:50] Anti-X: :p [21:50] bruse: i can't drop out of college just for a job :< [21:50] Anti-X: :o [21:50] Anti-X: education is overrated [21:50] Anti-X: we have the internet [21:50] mjr_: I get the email from a Google recruiter about every 6 months. [21:51] Anti-X: formal education i mean [21:51] _announcer: Twitter: "How do they do auto updates of counters over here? https://rubygems.org/gems/rails/versions/3.0.1 node.js or something?" -- Josef Richter. http://twitter.com/josefrichter/status/27379525153 [21:51] bruse: Anti-X: i think education is fun [21:52] bruse: and especially the things going on around the education [21:52] Anti-X: i think i knew too much already going in [21:52] tjholowaychuk: mikeal: you would have a lot of bloat, and this would no doubt not work in many situations but [21:52] tjholowaychuk: http://gist.github.com/627134 [21:52] Anti-X: i'd already read half the internet by the time i was 15 [21:52] tjholowaychuk: you could unroll c "closures" [21:52] bruse: drinking, sleeping, drinking, sleeping, coding something cool for school, drinking, sleeping [21:52] tjholowaychuk: decently easily I would think [21:52] _announcer: Twitter: ""@ Xguru: WebShell - Node.js using a Java script-based HTTP Client Shell http://j.mp/bk4RO0 useful when testing seobeoteseuteuna wepkeurolring hagetgunyo"" [ko] -- goodgene. http://twitter.com/goodgene/status/27379630669 [21:53] Anti-X: bruse, what kind of languages do they teach? [21:54] bruse: CS is not really about languages, is it? :) [21:54] creationix has joined the channel [21:54] Anti-X: no but they usually pick a language to demonstrate theory [21:55] bruse: but i've coded c, c++, java, haskell, prolog, python, matlab for school [21:55] bruse: java is the main one really [21:55] Anti-X: bummer [21:55] Anti-X: i have a theory that the starting language of a newbie programmer determines their mentality for at least 5 years [21:55] bruse: i guess it's pretty easy to get started with to teach people object orientation when they havnt coded before [21:55] bruse: besides, java isnt so bad [21:56] Anti-X: java is a horrible OO intro :p [21:56] bruse: give the newbie programmers c++ and they'll be damaged for a lot longer [21:56] Anti-X: but we've already had the OO discussion [21:56] mikeal: i learned assembly first [21:56] mikeal: when i was really young [21:56] wink_: good man. [21:56] Anti-X: i don't really remember what i learned first [21:56] mikeal: it definitely shaped how i though of high level languages [21:56] Anti-X: i think i dabbled in basic [21:56] creationix: I was a basic kid [21:56] Anti-X: lol [21:56] Anti-X: but i didn't learn it [21:56] mikeal: like i obsessed over stupid details [21:56] creationix: c64 basic mind tou [21:57] creationix: peek and poke hex offsets [21:57] creationix: :D [21:57] bruse: i started with c++, then c, then reverse engineering x86 code, then higher level languages [21:57] bruse: i havnt actually coded assembly languages much [21:57] _announcer: Twitter: "@rk @coda I believe it was an erudite snarky comment vis a vis node.js." -- Jay.. http://twitter.com/meangrape/status/27379978362 [21:57] creationix: for years, almost decades I could remember the exact memory offsets in hex to change the border color of the terminal [21:58] mikeal: i learned assembly cause i wanted to write buffer overflows :) [21:58] mikeal: then i wrote C with inline asm [21:58] siculars has joined the channel [21:58] mikeal: for the same raeson [21:58] mikeal: then i grew up [21:58] Anti-X: speaking hex, i remember opening all kinds of files in hex editors [21:58] Anti-X: no idea what i learned [21:58] Anti-X: "nothing to see here" probably [21:58] mikeal: got a real job, forgot all that stuff [21:59] bruse: man [21:59] bruse: real jobs seem so boring [21:59] bruse: you guys are not selling them to me at all [21:59] tpryme: First language was pascal, lol [21:59] mikeal: after like 5 or 6 years if you do real well you can get fun ones :) [21:59] Anti-X: oh yeah, that was it! [21:59] Anti-X: delphi! [21:59] bradleymeck: i want prolog [21:59] bruse: 5 or 6 years is like a life when you're 24 [21:59] creationix: bruse: beats flipping burgers [21:59] Anti-X: man, i've forgotten all about pascal languages [22:00] skohorn has joined the channel [22:00] Anti-X: nobody uses them anymroe [22:00] Anti-X: or mentions them at least [22:00] mikeal: yeah, at the time my early jobs seemed great [22:00] mikeal: but looking back they weren't :) [22:01] mikeal: the first job I can still say was good for me was in Jan 2006 [22:01] bruse: i want to do machine learning [22:01] mikeal: at that point i'd been working in the industry almost 6 years [22:01] bruse: i wonder if there is a real job for that [22:01] mikeal: bruse: nope! [22:01] mikeal: actually, i'm lying [22:01] mikeal: lots of geo stuff that needs machine learning [22:01] bruse: lots of stuff in general can benifit from machine learning [22:02] bradleymeck: i think prolog should be the first language to learn computational thinking, Java for classes and documentation, then finally C++ to show the nightmare [22:02] bruse: but i want to do the most interesting research stuff, not design some "if you liked this product you'll also like this product" system or "this guy suddenly started withdrawing money from across the world, lets block his account" [22:02] mikeal: Java seems like poison for the mind [22:02] creationix: bradleymeck: no way, start with self or some simple language [22:02] mikeal: bruse: the geo stuff is interesting [22:02] creationix: then javascript [22:02] aguynamedben has joined the channel [22:03] bruse: what kind of geo stuff? [22:03] bradleymeck: prolog is stupidly simple [22:03] creationix: then c and assembly to see how it really works [22:03] mikeal: like, learn that these image patterns in a map with this meta data means trees, water, house [22:03] creationix: C++ isn't needed, it's a crime against humanity [22:03] mikeal: then look at a new section and draw over it [22:03] Anti-X: bruse, attaching gps transmitters to foreigner's cars and then knockin on their door to get it back when they discover it kind of geo stuff [22:03] Anti-X: :P [22:04] Anti-X: did anyone else see that story? i lol'd [22:04] Gruni has joined the channel [22:05] Anti-X: expect fbi agents to flood the channel any minute [22:05] bradleymeck: C++ isnt a crime, RIIA + Meta Programming With Different Language + The C++ ABI is a crime (honestly, go look up how C++ abi / Symbol resolution occurs) [22:05] maqr has joined the channel [22:07] bruse: i didnt enjoy prolog much [22:08] stephenjudkins has joined the channel [22:09] Anti-X: did you make a sudoku solver? [22:09] Anti-X: :p [22:10] peritus- has joined the channel [22:10] bruse: i didnt [22:11] bruse: the lecturer did in one of his slides though [22:11] bruse: in three lines of code or somethiong [22:11] MikhX_ has joined the channel [22:13] skohorn has joined the channel [22:14] Anti-X: just noticed, console.log isn't explicitly documented... is it an ecmascript standard? [22:14] bradleymeck: nope [22:14] [[zz]] has joined the channel [22:15] Anti-X: i also noticed ryah uses printf formatting in his slides, which would be nice to have mentioned in the docs [22:15] Anti-X: in console.log [22:16] kjftw has joined the channel [22:17] mikeal: mjr_: your Redis client connection pooling [22:17] mikeal: so..... [22:17] hober: Anti-X: console.{log,warn,info,error} will likely be specced in w3c's webapps wg [22:17] mjr_: parse error [22:17] mikeal: trying to figure out how that would work [22:17] hober: that's the subset of the console object api that webkit needed to implement for web interop [22:17] mikeal: because a lot of the Redis protocol caries a state [22:17] mikeal: so it's not straightforward when it can be reused [22:18] _announcer: Twitter: "@ DanMarthz another man, the api ajax language, the proof of concept would be easy: that API and chat node.js (everything would be in javascript)" [es] -- Luis Felipe Borjas. http://twitter.com/lfborjas/status/27381470662 [22:18] mjr_: mikeal: I thought about connection pooling, but redis pipelines so well that I stopped worrying about it. [22:18] mjr_: mikeal: it really pipelines like crazy [22:18] hober: Anti-X: http://www.w3.org/Bugs/Public/show_bug.cgi?id=10694 for more [22:18] shaver: yeah [22:18] shaver: mostly you run out of buffer space on the node side before redis complains [22:19] kjftw has joined the channel [22:19] mjr_: Some sort of cap on the pipeline is useful. I expose the queue depth property so you can try to do that if you want. [22:19] vnguyen has joined the channel [22:19] mjr_: But then what? [22:19] Anti-X: hober, thanks [22:19] Anti-X: useful info [22:20] MikhX has joined the channel [22:20] maqr has joined the channel [22:21] _announcer: Twitter: "Hmm, node.js seems a little to on the lightweight side: seems like one must roll their own everything. Where was that haml.js I used before?" -- Khan Thompson. http://twitter.com/kfredt/status/27381736494 [22:23] hober: Anti-X: (the only reason I know any of this is that I'm the sucker who volunteered to write the console spec.) [22:23] prettyrobots has joined the channel [22:23] stephenjudkins has joined the channel [22:23] Anti-X: haha, well good luck on that ;) [22:24] hober: thanks [22:26] Anti-X: also lol @ the webkit expected document... over 20 functions... to me that looks like they have too many idle developers [22:29] mikeal: yeah [22:29] mikeal: the only thing i think would be useful it to keep some tcp clients up that aren't in use [22:29] mikeal: so that when you have a new session you don't hit slow start [22:29] mikeal: but really smart connection pooling like you would do for HTTP is kind of out of the question [22:30] Anti-X: oh you were replying to a conversation 10 minutes ago? i was like "wtf is this guy on about.. i didn't mentio... oh." [22:31] Anti-X: which tells me it's way past bedtime [22:31] mjr_: mikeal: I'm happy to incorporate some kind of connection pooling, but I haven't figured out how to do it in a way that'd help much. [22:31] davidascher has joined the channel [22:31] mikeal: yup [22:31] mikeal: also, what is the usage pattern [22:31] mikeal: because for a bunch of use cases this doesn't matter [22:32] mjr_: If you are talking to redis over more internet than non-internet, pooling makes way more sense [22:32] mjr_: That way a single dropped packet doesn't stall your entire operation. [22:32] mjr_: But most people talk to redis over some kind of local link, right? [22:33] mikeal: well, there is now some hosted Redis [22:33] mikeal: which i don't really understand, the main use cases for Redis make latency an issue [22:34] shaver: hosted by the same places that do app servers, right? [22:34] shaver: redis wants AF_UNIX so bad omg omg [22:34] mjr_: unix sockets should be easy, right? [22:34] sonnym has joined the channel [22:34] mjr_: it already talks stream sockets [22:35] mikeal: the hosted Redis is like over on ec2 or something , so not near the app servers [22:35] MikhX_ has joined the channel [22:35] mikeal: which is why i don't really get it [22:36] mjr_: same [22:38] bruse: how many weeks until vmware launches their own cloud servers? [22:39] _announcer: Twitter: "Looking for an excuse to use node.js" -- Andrew Edwards. http://twitter.com/ae0000/status/27383024553 [22:40] renatoelias has joined the channel [22:44] ossareh has joined the channel [22:45] dylang has joined the channel [22:47] davidascher has joined the channel [22:48] logix812 has joined the channel [22:48] prettyrobots has joined the channel [22:49] Tim_Smart has joined the channel [22:50] teemow has joined the channel [22:50] logix812: anyone run into any issues with formidible 0.9.8 & node 0.2.3 whereby calling form.parse() just hangs? I have some console.log's in the callback and I am also ending the response, but it's like it never even gets into the callback. [22:50] ajpiano has joined the channel [22:50] logix812: *i'm ending the response in the callback [22:51] bartt: Where does Y.log() from the YUI library write its output to under node? I don't see it appear in stdout or stderr. [22:51] tpryme has left the channel [22:54] _announcer: Twitter: "Make believe MacPort node.js environment and when I try installing using the Xcode build is outdated and can not be angry, I thought seeing this page attempts to use the Homebrew Homebrew can not install itself http: / / bit.ly/a516mZ" [ja] -- hiroshi oyamada. http://twitter.com/h5y1m141/status/27384198823 [22:54] bpot has joined the channel [22:55] mr_daniel has joined the channel [22:55] strmpnk has joined the channel [22:56] Tprice has joined the channel [22:58] eazyigz has joined the channel [22:58] devinus: ryah: do you know if v8 became thread-safe in one of it's recent updates? [22:59] Tim_Smart: /opt/redis/src/redis-server? [22:59] Tim_Smart: Whoops wrong chat. [23:03] _announcer: Twitter: "I don't like languages that compile to JavaScript, yet JS (esp. Node) needs many things that aren't possible, without macros. Catch 22." -- Sami Samhuri. http://twitter.com/_sjs/status/27384910453 [23:05] SubStack: it needs many things? [23:05] SubStack: sounds like a lisper is just upset that javascript isn't lisp [23:05] SubStack: but it almost is [23:05] hober: it's scheme with a shitty syntax. that's close enough for me! [23:06] SubStack: yep good enough [23:06] SubStack: I do wish "function" wasn't so long to type [23:06] Tim_Smart: SubStack: Get your editor to type it for you. [23:06] SubStack: and implicit returns would be so handy [23:07] SubStack: maybe &(x){ x * 2 } == function (x) { return x * 2 } [23:07] Tim_Smart: Heh. Maybe. [23:07] SubStack: I should take a look at coffee script at some point [23:07] Tim_Smart: Urgh, wrong chat again. [23:08] Tim_Smart: Fail. [23:08] ajpiano has joined the channel [23:09] gerred: the social network soundtrack is great to hack to [23:09] SubStack: something like &('*')(2) == (function (x,y) { return x * y }).bind(2) too [23:09] SubStack: er, .bind({}, 2) [23:09] SubStack: stupid 'this' [23:10] SubStack: I do recall a js module that did haskell-style currying with eval() [23:10] tjholowaychuk: SubStack: one of mine used to [23:10] tjholowaychuk: not via eval tho [23:11] tjholowaychuk: but it was dumb [23:11] _announcer: Twitter: "Rarr I'm having Mac rage! Give me a Ubuntu box any day.. NodeJS and Rails shall have to wait 'til tomorrow. Still, got my #CF9 and #Coldbox!" -- Chris Waugh. http://twitter.com/chriswaugh/status/27385462302 [23:11] tjholowaychuk: so i got rid of it [23:11] tjholowaychuk: i like IO's syntax tho: list(1,2,3,4,5) first(3) map(* 2) [23:11] tjholowaychuk: etc [23:11] tjholowaychuk: when i have time i might make it compile down to js [23:12] SubStack: that is one language I have not heard or read much about [23:12] SubStack: I like the pipe-line style though in that snippet [23:12] SubStack: *pipeline >_< [23:12] tjholowaychuk: conceptually it is pretty rad. you can pass expressions as messages that can be lazily evaluated [23:13] tjholowaychuk: so you can do stuff like: people map(person, person name) or people map(name) [23:13] tjholowaychuk: blah blah [23:13] SubStack: just like in haskell map (*2) . take 3 $ [1..5] [23:13] SubStack: except the other way around [23:14] SubStack: hah but you can flip ($) such that [23:14] SubStack: ghci> let (%) = flip ($) in [1..5] % take 3 % map (*2) [23:14] SubStack: [2,4,6] [23:14] SubStack: ^_^ [23:15] themiddleman has joined the channel [23:15] dnolen has joined the channel [23:15] SubStack: anyways, javascript [23:16] galaxywatcher has joined the channel [23:16] LionMadeOfLions has joined the channel [23:18] SubStack: runtime javascript source filters would be neat [23:18] SubStack: if simultaneously terrible [23:18] tjholowaychuk: haha neverrr [23:18] tjholowaychuk: jade can manipulate itself now, and it is awesome [23:19] tjholowaychuk: i just implemented transparent asset compression -> s3 -> cloudfront [23:19] tjholowaychuk: and the templates look completely normal [23:19] tmpvar: nice [23:19] tjholowaychuk: no special css.add() or whatever stuff [23:19] SubStack: aha now I find myself agreeing with that tweet about macros I was just complaining about! [23:20] SubStack: writing a javascript AST transformer lib is more yak shaving than I care to indulge in right now [23:21] tjholowaychuk: this is what i did for injecting stuff into the jade templates [23:21] tjholowaychuk: in production [23:21] tjholowaychuk: http://gist.github.com/627269 [23:21] tjholowaychuk: kinda cool [23:21] tjholowaychuk: looks hacky but it works great [23:22] SubStack: shit but I can't get this idea out of my head either [23:23] prettyrobots: SubStack: Source who whats? [23:23] prettyrobots: Sounds like LISP to me. [23:23] prettyrobots: ACTION Glowers. [23:23] SubStack: prettyrobots: source filters are to perl what macros are to lisp [23:23] SubStack: except hackier [23:24] SubStack: which I guess is implicit [23:24] shaver: SubStack: have you seen narcissus? [23:24] shaver: and DoctorJS? [23:24] SubStack: negatory [23:24] tjholowaychuk: SubStack: ahah that is funny i was juuust opening narcissus [23:25] tjholowaychuk: shaver ^^ [23:25] tjholowaychuk: my bad [23:25] shaver: narcissus is js-in-js [23:25] inimino: ACTION is working on JavaScript AST stuff [23:25] shaver: doctorjs uses the narcissus parse tree to do static analysis of JS [23:25] shaver: http://doctorjs.org/ [23:26] tjholowaychuk: inimino: what are you doing with it? [23:26] prettyrobots: SubStack: Is this a Perl6 thign? [23:26] prettyrobots: (thing) [23:26] SubStack: prettyrobots: no source filters are in perl5 [23:26] shaver: the source for doctorjs is somewhere in http://github.com/pcwalton/jsctags [23:26] SubStack: perldoc perlfilter [23:26] SubStack: perl6 uses mutable grammars [23:26] SubStack: which are.... insanely awesome [23:26] SubStack: but crazy hard [23:26] isaacs has joined the channel [23:26] isaacs: hey hey, node people inthe place to be [23:26] saikat has joined the channel [23:27] isaacs: i got a npm question for you all [23:27] SubStack: nested, mutable grammers no less [23:27] isaacs: let's say there are 3 registries (there aren't, but let's say) [23:27] SubStack: *grammars [23:27] inimino: tjholowaychuk ⋱ Lots of stuff planned for it, but I don't have the pretty-printer half finished yet, so not much. [23:27] isaacs: when you publish a package, shoudl it try to write to all of them, or just the first one? [23:27] isaacs: (and assume that they replicate or something) [23:27] tjholowaychuk: inimino: cool cool [23:27] isaacs: if that fails, should it try to then write to the second and third? or just die? [23:27] inimino: tjholowaychuk ⋱ Currently just source-to-AST, once I also have AST-to-source, then I can mess with the AST and do fun things. [23:28] BrianTheCoder has joined the channel [23:28] SubStack: isaacs: could you just have separate lists of repositories? [23:28] SubStack: that is, one list for publishing, one list for pulling [23:28] isaacs: ew [23:28] isaacs: i mean, i guess [23:28] isaacs: but, ew [23:28] isaacs: space-separated list of urls would be easier [23:28] mjr_: Maybe publishing should only ever use the "master", and if it can't be written there, then sorry, no publishing right now. [23:29] mjr_: And all of the replicas are for reading. [23:29] inimino: separate lists seems correct to me [23:29] cjheath: inimino: No answer still on my V8 AST questions, either in #v8 nor v8-dev :-( [23:29] SubStack: isaacs: maybe you could give them names in a hash too? [23:29] inimino: cjheath ⋱ Ah, which question was that? [23:29] isaacs: SubStack: nono, it's not git remotes. [23:29] isaacs: SubStack: i went down that path, it's awful [23:29] inimino: ...oh, any of them? [23:29] cjheath: The one we discussed about how to expose the v8 AST, for read and create [23:30] isaacs: the tricky bit is mostly publish, unpublish, and adduser [23:30] shaver: I think harmony is going to expose the reflect API [23:30] isaacs: DELETE should probably delete everywhere. [23:30] cjheath: so you could build an AST in JS and convert it to an executable function [23:30] isaacs: GET gets from the first thing to respond, so that's fine [23:30] tjholowaychuk: cjheath: i was hoping they would too [23:30] Me1000 has joined the channel [23:30] tjholowaychuk: but i highly doubt they ever will [23:30] eisd has joined the channel [23:30] inimino: isaacs ⋱ Are they supposed to be just mirrors? [23:30] cjheath: Well, I've looked at how to do it, but it might take a fork. I just hoped I could get some pointers [23:30] _announcer: Twitter: "Slides from Ryan Dahl's #strangeloop #nodejs talk http://bit.ly/b1MRsM #joyent @ryah" -- Joyent. http://twitter.com/joyent/status/27387031928 [23:31] isaacs: inimino: well, it's somewhat for failover, but also for having things that are maybe only behind the firewall or something. [23:31] isaacs: again, for GETting, that's a simple problem. [23:31] inimino: isaacs ⋱ Or are they supposed to be different sets of features, like extra apt repositories? [23:31] isaacs: "reg1 is down, try reg2" [23:31] cjheath: bbiab [23:31] isaacs: in which case, having something published in one and not the other is not so bad. [23:31] inimino: isaacs ⋱ In the second case I'd say separate lists, then. [23:31] isaacs: yeah... [23:31] inimino: having something published to the one you didn't want to publish to would be bad [23:31] isaacs: like a "registry.read" and "registry.write" configs, which are both delmited lists of urls [23:32] shaver: cjheath: fror the API, you could look at the one in spidermonkey [23:32] charlenopires has joined the channel [23:32] isaacs: and if you just have a single "registry" list, it'll use that for both, maybe? [23:33] inimino: cjheath ⋱ Ah, yeah, I don't know how to do that. [23:33] DTrejo_ has joined the channel [23:33] DTrejo_: hello [23:33] _announcer: Twitter: "Ryan played by Mr. Strange Loop Conference node.js slide in http://nodejs.org/strange-loops.pdf # nodejs_jp" [ja] -- koichik. http://twitter.com/koichik/status/27387245020 [23:33] inimino: cjheath ⋱ Parsing is fast enough you might just serialize it and use eval if necessary... [23:34] inimino: isaacs ⋱ or you could just have both and by default set them to the same place. [23:34] isaacs: inimino: suresure [23:34] inimino: ACTION wouldn't bother with three settings when two will do [23:34] isaacs: inimino: but there's a transition/upgrade issue at work. [23:34] isaacs: probably minor, though [23:34] inimino: Ah, ok, right. [23:36] MikhX has joined the channel [23:36] tjholowaychuk: wtf [23:36] tjholowaychuk: narcissus: catch (e if e === THROW) [23:36] tjholowaychuk: what kind of crazy js foo is that [23:38] isaacs: whoa wut? [23:38] isaacs: tjholowaychuk: i dont' think you can do that [23:38] inimino: Spidermonkey has pattern guards on catch clauses, but it's non-standard. [23:38] DTrejo_: isaacs: my friends and I made a scorched earth / worms style game that you control by calling a phone number and pressing the keypad. I'm working on cleaning up the server side code so I can put it on github and hopefully be a good example for anyone else who wants to have phone-controlled X [23:38] tjholowaychuk: inimino: ah that explains it [23:38] DTrejo_: long sentence [23:38] tjholowaychuk: spidermonkey does all kinds of weird non-standard stuff [23:39] isaacs: DTrejo_: that's super rad [23:39] tjholowaychuk: seems silly to write js in js, that is not valid js [23:39] shaver: catchguards were in ECMA [23:39] tjholowaychuk: i bet the js they wrote with js, is not valid js [23:39] tjholowaychuk: haha [23:39] shaver: as a draft [23:39] pedrobelo has joined the channel [23:39] tjholowaychuk: :D [23:39] DTrejo_: isaacs: :) [23:39] inimino: It's JavaScript, it's just not ECMAScript. [23:39] hsuh has joined the channel [23:39] shaver: MSFT made us take them out, because it made "debugging too hard" [23:39] DTrejo_: isaacs: demoing at NYTM next month [23:39] shaver: TC39 just agreed to put them in Harmony [23:39] isaacs: ewewewew [23:39] DTrejo_: isaacs: so at least someone likes what we made :) [23:39] isaacs: ACTION not a fan of catch guards [23:39] shaver: really? [23:40] isaacs: yeah [23:40] shaver: you like forgetting to rethrow? [23:40] isaacs: shaver: no, i like hardly ever using try/throw/catch [23:40] inimino: ACTION doesn't have a strong opinion [23:40] shaver: then I'm not sure why you would even have an opinion about catchguards [23:40] shaver: but we can discuss it over beers in a few weeks! [23:40] isaacs: shaver: history has taught us that catchguards make people feel a lot more comfortable using throw a lot. [23:41] isaacs: shaver: throw is like goto, but worse [23:41] inimino: shaver ⋱ Do you know who I should talk to about this: https://developer.mozilla.org/en/SpiderMonkey/Parser_API [23:41] shaver: throw is like return [23:41] bpot has joined the channel [23:41] isaacs: shaver: it's not, though [23:41] inimino: (sorry for the off-topic question) [23:41] shaver: it's categorically not like goto [23:41] isaacs: shaver: because it cuts through the stack [23:41] isaacs: shaver: i said "but worse" [23:42] inimino: I'm just wondering if there's an appropriate mailing list for that. [23:42] shaver: inimino: the dev-tech-js-engine list on mozilla.org [23:42] shaver: inimino: or #jsapi on irc.mozilla.org [23:42] inimino: ok, thanks [23:42] isaacs: shaver: it doesn't return to the point where the function was called. it jumps to the closest "catch" statement in the stack. [23:42] shaver: yeah, I'm familiary [23:42] shaver: it's structured unwinding [23:43] isaacs: shaver: right, but i'm saying, that's an antipattern that gets out of hand immediately. [23:43] shaver: it's WAY better than explicit return codes for everything [23:43] isaacs: only having a single type of catch makes it a lot less likely that you'll use it. [23:43] shaver: I don't understand that reasoning [23:43] isaacs: which makes you less likely to force (yes force) anyone using your code to use it [23:43] shaver: why is that the case? [23:43] bentruyman has joined the channel [23:43] isaacs: shaver: not sure, exactly. maybe it makes it more convenient? [23:44] Nevtus has joined the channel [23:44] shaver: to what history are you referring? [23:44] Nevtus has joined the channel [23:44] isaacs: i definitely consider throw harmful. [23:44] shaver: I think you may be reversing the causality here [23:44] shaver: in environments which use exceptions a lot (like the DOM) [23:44] isaacs: shaver: php, java, c++ [23:44] isaacs: shaver: exceptions should be extremely exceptional. [23:44] shaver: so what's your control? [23:44] shaver: I agree [23:44] isaacs: something that *cannot* continue [23:45] shaver: java uses exceptions stupidly [23:45] shaver: end-of-file is not an exceptional condition [23:45] MikhX has joined the channel [23:45] isaacs: i've been traumatized by big php frameworks that use throw instead of return, where you have to catch 4 different kinds of exceptions, and heaven forbid if you forget one of them [23:45] ossareh has joined the channel [23:45] shaver: yes, you can write tcsh in any language [23:46] shaver: one of the biggest problems with exception systems is that people catch over-broadly [23:46] isaacs: try { doA() ; doB(); doC(); } catch (ExceptionA $ex) { ... } catch (ExceptionB $bex) { ... } ... [23:46] shaver: which in my perhaps-narrow experience is lessened by guards [23:47] isaacs: guards make people feel ok about throwing, i think [23:47] isaacs: because they've documented what kinds of things their code throws, so You Oughtta Know [23:47] shaver: it's rarely the same people throwing as catching, though [23:47] isaacs: that's just it [23:47] isaacs: it's very imposing [23:47] shaver: no, checked exceptions are a different issue [23:47] fermion has joined the channel [23:47] tjholowaychuk: fuck this is lame, to much to rewrite to get it going [23:47] shaver: whether socially or statically [23:48] raz has joined the channel [23:48] raz: hi guys [23:48] raz: i've seen various node based visualizations of map images with dots placed on proper geo coordinates [23:48] isaacs: i mean, you can just put your guard in a switch or something inside the catch [23:48] raz: anyone here has done such a thing? i'm looking for a starter tutorial on how to create such map (no experience with the math involved) [23:48] shaver: yes, and people do [23:48] tjholowaychuk: isaacs: at least that does not require altering the grammar [23:48] shaver: and then they forget to rethrow [23:48] tjholowaychuk: thats the thing i dont like [23:48] HAITI: raz: google equirectangular projection [23:49] isaacs: try { foo() } catch (ex) { switch (ex.errno) { case ENOENT: blah blah ; break ; default throw e }} [23:49] shaver: nobody remembers to rethrow [23:49] tjholowaychuk: we dont throw much around here [23:49] shaver: I have seen bug after bug after bug that is brutal to debug because some exception just got swallowed [23:49] tjholowaychuk: we callback(err) [23:49] shaver: similarly with return codes [23:49] isaacs: shaver: when i see "try {..." my brain goes WHOAA.... ok... hold on a sec... this is Very Important... [23:49] _announcer: Twitter: "This is terrible. There are so many technologies I wanna play with and completely no time. What to choose #nodejs or #spring-mvc" -- Eldar Djafarov. http://twitter.com/edjafarov/status/27388523694 [23:49] shaver: people forget to signal error, or check result codes [23:49] ekidd has joined the channel [23:50] raz: HAITI: ah great, thanks for the keyword. do you if there's js toolkits for this already or do people usually roll their own? [23:50] shaver: isaacs: huh, I think the opposite: "this is something whose failure we know how to handle" [23:50] hassox has joined the channel [23:50] shaver: isaacs: if you have strong opinions about catchguards, es-discuss would probably be interested in hearing them [23:51] jahoni has left the channel [23:51] MikhX_ has joined the channel [23:51] tekky has joined the channel [23:51] isaacs: shaver: nah, i'll probably just keep on using the same JS i've always used. [23:51] shaver: *shrug* [23:51] isaacs: i kind of think js might not ever change dramatically [23:51] shaver: have you been following harmony? [23:52] mjr_: "might not" == "ought not" [23:52] shaver: (I was proposing that you contribute not because you need to get your way, but because you have experience that could be valuable to making good choices for the language) [23:52] shaver: (even though I disagree with your position personally!) [23:53] isaacs: shaver: i was following harmony, but then decided to do other things. [23:53] isaacs: language design isn't terribly interesting imo. [23:53] shaver: fair enough [23:53] isaacs: i mean, i'm using one of the ugliest languages ever, right? and i love it [23:53] isaacs: it's not very terrible. [23:53] shaver: I think harmony is probably proxies + simple modules + generators + misc [23:53] isaacs: proxies are neat. modules, feh. generators and iterators are dumb. [23:54] inimino: I'm kind of not enthusiastic about generators. [23:54] shaver: generators are so nice for async code [23:54] shaver: you can use...wait for it...the language's flow-control constructs! [23:54] shaver: like if! and loops! [23:54] mjr_: radical [23:54] inimino: They're convenient but unnecessary. [23:54] tjholowaychuk: im looking forward to let :d [23:54] isaacs: i'll believe it when i see it. [23:54] tjholowaychuk: :D * [23:54] inimino: I'm not sure how many more of those features the language really needs. [23:54] isaacs: and i'm thinking i'll probably never see it [23:54] shaver: instead of half of your code being callback chaining and function wrapping [23:54] tjholowaychuk: the desconstructor stuff is kinda meh [23:55] isaacs: something shorter than "function" would be nice. [23:55] shaver: destructuring is more narrowly useful, but nice for a lot of the object-as-arg-carrier APIs people are building [23:55] threeve has joined the channel [23:55] isaacs: "function(){}" is a lot of baggage [23:55] mjr_: Whenever I see python code that someone else wrote using lots of comprehensions and generators, it's like reading somebody else's perl. [23:55] mjr_: Bunch of fucking clever noise. [23:55] isaacs: f () { ... } would be nicer [23:55] inimino: destructuring assignment is great [23:55] isaacs: mjr_: ++ [23:56] isaacs: or even ƒ name (a, b) { ... } [23:56] isaacs: that'd be cool [23:56] shaver: there are no language features that are immune to abuse [23:56] mjr_: I like the fancy f character. I think it looks really cool. [23:56] tjholowaychuk: i dont mine "function" anymore, makes it painfully obvious what you are looking at, and highlights nicely in my editor lol [23:56] mjr_: But yeah, maybe "function" is fine forever. [23:56] shaver: JS has a function shorthand for "expression" functions [23:56] shaver: implied return and no braces, single-line [23:57] shaver: [1,2,3].map(function (e) e * 2) -> [2,4,6] [23:57] tjholowaychuk: ah yeah i remember seeing that [23:57] webr3 has joined the channel [23:57] Tim_Smart: It is called make a editor snippet, mine is fn [23:57] mjr_: protovis uses those function expressions everywhere, and then they regexify your JS on non-Firefox platforms. [23:57] hsuh has joined the channel [23:57] _announcer: Twitter: "Highlights of the day for #strangeloop (imho): node.js talk by @ryah, guy steele, and meeting wade & guys from t8webware." -- Andrew Lenards. http://twitter.com/alenards/status/27389169789 [23:58] isaacs: mjr_: maybe it is [23:58] WALoeIII has left the channel [23:58] tjholowaychuk: Tim_Smart: mine is just "f"tab [23:58] tjholowaychuk: :D [23:58] isaacs: the one thing i really dig about a lot of other interpreted languages is the "last statement evaluation" thing [23:58] isaacs: like an "if" block has a value, and it's just the last thing [23:58] Tim_Smart: tjholowaychuk: Nice. I have a few different ones. fun for named functions etc. [23:58] MikhX has joined the channel [23:58] isaacs: function (x) { x + 1 } is like function (x) { return x + 1 } [23:59] isaacs: etc [23:59] tjholowaychuk: Tim_Smart: ya i have abunch too i only remember to use a few [23:59] tjholowaychuk: isaacs: yeah i like when if/else/blah blah are expressions too [23:59] tjholowaychuk: starts to look weird when you get away from things like that tho [23:59] tjholowaychuk: like i hatttttte ruby method calls without parens now