[00:00] hassox: sorry for the ruby terminology ;) [00:00] tjholowaychuk: hassox: yeah you can build your stack, and plug that stack into another stack [00:00] mape: mde: not the last one I pasted? worked in ie678 and ff/chrome [00:01] creationix has joined the channel [00:01] hassox: how to be doing that? [00:01] mde: mape: The last one I saw, IE versions had the problem where the div containing the textarea was 10px wider on the right than the empty div. [00:02] mape: mde: http://mape.me/boxmodel.html doesn't that work in IE6 for you? [00:03] coolston_bro has joined the channel [00:05] mde: mape: I was using the same code, and the empty div underneath was 10px narrower, yes. [00:05] mde: So, the textarea doesn't protrude, but that's because IE has that default behavior of expanding to fix. [00:05] mde: Er. [00:05] mde: To fit. [00:05] creationix: hassox: I think tjholowaychuk put an example in the code base for that [00:07] mape: tjholowaychuk: thought about adding minification to jade? [00:07] tjholowaychuk: mape: it already sorta does, I dont have any fancy output [00:07] tjholowaychuk: not even newlines right now haha [00:08] mape: tjholowaychuk: http://gist.github.com/468831 [00:08] gb|work has joined the channel [00:08] mape: something I threw together for my assetManager, not really sure if it should handle html but works fine for me when using single page with connect [00:08] mape: (did that to get the pageSpeed raking up) [00:08] gb|work: hi there, i wrote my first app, and it's really weird, FF fires one request, where chrome does two [00:09] gb|work: does it have to do with connection keep-alive? [00:09] gb|work: how can i prevent it from happening [00:09] mape: tjholowaychuk: strips empty attributes and removes the " so attr="test" turns into attr=test but class="one two" stays the same [00:10] creationix: Does this site load fast? http://205.186.160.54/ It's my new MediaTemple instance [00:10] mape: not a lot of benefit really but fun to micro optimize [00:10] rictic has joined the channel [00:10] mape: creationix: loads fine [00:10] creationix: mape: should be real fast on refresh because of the 304 responses [00:11] mape: creationix: 1.56sec for page load on firefox running firebug from sweden [00:11] mape: with cleared cache [00:12] creationix: not bad [00:12] creationix: I get 1.03sec here in California [00:12] creationix: < 400ms with cache [00:12] mape: the background takes the longest, 791ms [00:12] creationix: yeah, it's a big file [00:13] mape: 156ms with cache [00:13] mostlygeek has joined the channel [00:13] creationix: sweet, thanks [00:13] creationix: I think I'll be moving my DNS soon [00:13] mape: or well, 43ms now.. only fetching analytics [00:14] gb|work: anybody? no word about keep alive? [00:17] admc has joined the channel [00:22] gwoo has joined the channel [00:23] creationix: gb|work: probably favicon.ico, check the req.url [00:23] gb|work: creationix: how would favicon.ico be a problem? this is my script http://pastie.org/1036879 [00:24] creationix: some browsers always request faviron.ico with every page load [00:24] creationix: so you'll get two hits for each refresh [00:24] gb|work: as a second request to the server? [00:24] creationix: yep [00:24] gb|work: that creates 2x times traffic [00:24] creationix: yep [00:24] gb|work: how can i prevent it from happening? [00:25] creationix: it doesn't do it for ajax or resources [00:25] creationix: just page loads [00:25] gb|work: so you are saying if i go to google.com, it loads twice? [00:25] gb|work: no [00:25] creationix: there is nothing you can do about it, it's part of the browser [00:25] creationix: just check the req.url and send a 404 if it's looking for favicon.ico [00:25] gb|work: i guess you are right [00:30] hpoydar has joined the channel [00:32] pufuwozu has joined the channel [00:38] tmpvar has joined the channel [00:38] derferman has joined the channel [00:40] brainproxy: I don't understand web development; I want to understand it but each time I get a little farther along my brain explodes and the complexity seems to go N^N [00:40] brainproxy: :/ [00:41] brainproxy: ACTION is moaning [00:41] Wandrewvious has joined the channel [00:41] pufuwozu has joined the channel [00:41] SubStack: web development covers a lot of ground [00:41] bradleymeck_ has joined the channel [00:41] brainproxy: heh, yep [00:42] SubStack: with node it feels much more like regular programming [00:42] brainproxy: yes, I'm enjoying node.js [00:42] brainproxy: and I really really like Joose [00:43] brainproxy: i dunno, my brain just thinks that way [00:43] brainproxy: i find it easier than working with "regular" js [00:43] SubStack: ACTION doesn't see a problem with javascript's vanilla object system [00:43] SubStack: especially since objects are just types of closures [00:45] SubStack: I don't like it when people expose what should be private members in javascript objects though [00:46] brainproxy: you mean they don't build their objects properly? [00:46] brainproxy: is that what you mean by "when people.. [00:47] Blackguard has joined the channel [00:47] SubStack: sure [00:47] SubStack: although I don't know about "properly" as there are some compelling reasons to do objects that way sometimes [00:47] creationix: here is my idea for a proposed API interface for template languages: http://gist.github.com/468862 [00:48] creationix: the module itself it the compiler function that takes a string or buffer and returns a function that takes locals [00:48] creationix: now to hash out async helpers... [00:48] brainproxy: creationix: did you look at shotenjin-joosed? [00:48] brainproxy: I've been using that for templating [00:49] creationix: brainproxy: that looks cool [00:49] brainproxy: the post-modern usage is really mind-bending [00:49] brainproxy: in a good way i mean [00:50] mikeal has joined the channel [00:50] creationix: I don't like that it interprets the template [00:51] creationix: but sometimes compiling to a static javascript file isn't ideal I guess [00:51] brainproxy: it seems pretty fast [00:51] pufuwozu has joined the channel [00:51] brainproxy: but maybe speed isn't your concern [00:51] brainproxy: i mean in not liking the compile step [00:51] creationix: partially speed, partially simplicity [00:52] creationix: are there any good template languages with async I/O built in [00:52] devinus has left the channel [00:52] brainproxy: you could use it in combo with JooseX.CPS [00:53] brainproxy: but I'm not trying to sell guys on joose, i just like it myself [00:54] khug has joined the channel [00:54] creationix: well, I'm not looking for something to use, but ideas for one I'm designing [00:54] brainproxy: ah gotcha [00:55] creationix: I seem to remember cramforce tweeting about async stuff, it must be joose he was talking about [00:55] brainproxy: yeah, cramforce did joose v2 [00:55] brainproxy: samuraijack did v3 [00:55] brainproxy: which was a total rewrite [00:55] brainproxy: of the internals [00:55] khug: how is a templating language *not* asyncronous? [00:56] brainproxy: maybe in reference to being able to render sections of a template w/o having the whole thing be evaluated and blocking [00:56] brainproxy: not sure [00:56] creationix: most templating languages just take in text and output text [00:56] khug: wouldn't it just be up to the compiler to accept a callback? [00:56] creationix: khug: yes, but proper placeholders and/or syntax for them is tricky [00:57] khug: how so? [00:57] brainproxy: creationix: are you rendering client side, server side, both? [00:58] Yuffster has joined the channel [00:58] khug: I guess the big question would be is templating the responsibility of the controller [00:58] brainproxy: i guess it depends where the view is, right? [00:59] khug: sounds like a case-specific question I guess [00:59] brainproxy: i've got views client side, so controller calls view, and view renders template, with a tail-end call to jquery which does the dom manip [00:59] creationix: brainproxy: both, yes [01:00] creationix: the framework will pass in helpers to the view as local variables, things like "partial", but these often are async calls [01:00] creationix: the template language needs to be able to handle async helpers and not finish till the helpers finish [01:00] mattly has joined the channel [01:00] creationix: or stream what's available as it comes in [01:02] brainproxy: it seems like the xfer/stream time would be the main thing there that would hang you up and that template rendering would be take much less time relatively speaking [01:02] brainproxy: but I get what you're describing [01:03] creationix: brainproxy: well, a helper function might need to do a db query or load an external file (or on the client, do some ajax) [01:03] khug: think streaming (x)html is practical? [01:03] creationix: I'm not sold on the practicality of streaming the actual html to the browser, but some people think it's really important [01:03] brainproxy: gotcha, so you want rendering before maybe even the helper is finished [01:04] creationix: and It is in some cases [01:04] creationix: for my use case, I don't mind buffering everything and sending it to the browser at once [01:04] creationix: makes caching easier that way [01:04] creationix: I just want async helpers to make the code much easier to read [01:05] creationix: ok, back to prototyping... [01:05] khug: how would an async helper / partial work, exactly? return promises? [01:05] creationix: maybe, I'm not a fan of promises personally [01:06] creationix: but it needs some sort of placeholder [01:10] bradleymeck1 has joined the channel [01:12] creationix: here would be an example of how to use an async capable template language: http://gist.github.com/468889 [01:12] creationix: quite a bit harder to implement [01:13] sechrist has joined the channel [01:14] creationix: brainproxy: ^ [01:14] brainproxy: looking [01:17] brainproxy: in other words, in the async mode it would output up to ..name is.. [01:17] brainproxy: then pause [01:17] brainproxy: then put the name [01:17] brainproxy: and then finally the age [01:17] brainproxy: understand it correctly or no? [01:18] creationix: well, mine wouldn't stream [01:18] creationix: it would store all the text into an array, fire off the async calls, and as they come back, fill in their places in the array [01:18] creationix: then after all are done, call it's callback [01:18] pydroid has joined the channel [01:19] bradleymeck1 has joined the channel [01:19] bradleymeck1: isaacs did you get that pull req? [01:22] sechrist has joined the channel [01:25] isaacs: bradleymeck: yeah, got it, haven't looked at it yet [01:25] isaacs: thanks!@ [01:26] mrdoob has joined the channel [01:26] JimBastard has joined the channel [01:26] piratepenguin has joined the channel [01:26] JimBastard: sup party people [01:27] brainproxy: nada mucho [01:30] ditesh|cassini has joined the channel [01:32] satori: \o/ I worked out how to use js2c.py in waf. Now my addon is a single binary file. [01:36] wattz: eveing sweethearts [01:39] creationix: how about this style API for async capable templates? http://gist.github.com/468889 [01:39] creationix: brainproxy: ^ [01:43] creationix: now to figure out loops and conditionals [01:44] creationix: shouldn't change the api, just make the compiler harder to write [01:45] WarBot has joined the channel [01:46] brainproxy: creationix: looks pretty smooth [01:47] creationix: yeah, but I just realized that loops and conditional are MUCH harder to implement, but I don't think that's a problem with the interface itself [01:47] mape: creationix: streaming ie flushing? [01:48] creationix: mape: I'm not sold on the importance of it [01:48] creationix: it makes the code much harder to write [01:48] mape: it is major for front end development [01:48] creationix: mape: usually ajax on page load can do the same thing [01:48] mape: Being able to flush right after you send the header so it can start fetching resources without waiting for the rest [01:49] creationix: but yeah, streaming html is better from the browser's point of view [01:49] mape: ajax on page load? You want the css to start loading as soon as possible [01:49] bradleymeck1: not sure you need to separate callback funcs and non-callback funcs [01:49] brainproxy: I don't pretend to understand this, but I know that JooseX.Namespace.Depended does a trick where "modules" loaded with its use: get pulled in asyncronously (i.e. xhr or filesystem), and some temp placeholder stuff is used in the body:, then when the use: items have all loaded [01:49] brainproxy: bang, it gets eval'd [01:49] creationix: brainproxy: why not, it's not hard and makes it easier to write helpers [01:49] mape: creationix: if you have 200KB of html it is better to flush the header so the browser can start getting the css instead of getting the remaining html [01:49] brainproxy: sure, i mean that sounds similar to what you're doing, except in that case it's not templates per se [01:50] mape: or well not instead, while its getting the rest of the html it starts fetching the css [01:51] creationix: mape: agreed, it is useful, but I don't think it needs to be implemented in the compiler, it's a special enough case that you can do multi-step renders and flush manually in your application logic [01:52] creationix: have two templates, one for the header and one for the rest [01:53] mape: yeah or a tag in the template for flushing, if you are doing templates like django, which is really nice [01:53] creationix: hmm, it does suck to break up your page into invalid partials just to get flushing [01:53] creationix: maybe it's not too hard to add in streaming [01:53] bradleymeck1: streaming is always nice [01:54] creationix: I still think it's better to ajax data to the browser and render it client-side when possible. 200k of html is not a good sign [01:54] bradleymeck1: why not stream each part of a template that doesnt need a callback up til a buffer limit, then stream out async stuff as it finishes (still filling buffers) [01:55] mape: creationix: well that isn't progressive enhancement [01:55] creationix: actually, it's not too hard to add streaming to my code, I just need a place-holder marker [01:55] creationix: let me try that... [01:56] creationix: how about id you don't supply a callback, it returns a stream object [01:56] creationix: s/id/if/ [01:56] creationix: that seems like a sane API [01:57] bradleymeck1: the adv to streaming and buffers is you dont have to hold a complete template, sounds sane [01:57] mape: Does anyone rember a recent post about removing sprites and base64ing it instead? [01:57] bradleymeck1: similair to what im using [01:59] bradleymeck1: no clue about removing sprites [02:00] markwubben has joined the channel [02:00] cadorn has joined the channel [02:01] mape: thinking of adding it to the assetsManager, just fetching all the files linked in the css and inject them as base64 [02:02] benbinary has joined the channel [02:02] meso_ has joined the channel [02:06] bradleymeck1: as data urls or just strings? [02:07] mape: they are the same? [02:07] bradleymeck1: data urls fail on ie6 if memory serves [02:07] creationix: mape: success! http://pastie.org/1036939 [02:08] creationix: that's not so bad after all [02:08] mape: bradleymeck1: yeah. then those get served another css [02:08] mape: creationix: nice :) [02:08] kodisha_ has joined the channel [02:09] creationix: now to write a real compiler and not just test code [02:10] c4milo has joined the channel [02:10] kodisha__ has joined the channel [02:19] aurynn has joined the channel [02:19] hdon has joined the channel [02:20] nrstott has joined the channel [02:20] nrstott has joined the channel [02:20] benbinary has joined the channel [02:21] mikeal has joined the channel [02:21] rtl has joined the channel [02:21] khug has joined the channel [02:26] sh1mmer has joined the channel [02:27] khug: been noodling abut with the whole streaming content thing, and have run into a potential issue - what if an async helper throws an error? the headers would have already been sent, thus no 50x could be returned [02:28] bradleymeck1: id just inject a script tag to redirect [02:28] khug: ew [02:28] stepheneb has joined the channel [02:28] bradleymeck1: best youre gonna get and almost everyone has js enabled [02:29] khug: I think I'd prefer buffering [02:29] khug: but that is one solution [02:29] bradleymeck1: could just be an option for one or the other [02:30] bradleymeck1: kinda like php's option to buffer, otherwise it streams [02:31] khug: hmmmm: http://en.wikipedia.org/wiki/Chunked_transfer_encoding [02:33] bradleymeck1: wonder how browsers deal w/ loading assets using that [02:34] bradleymeck1: still wont resolve the status code issue [02:34] admc_ has joined the channel [02:34] admc has joined the channel [02:35] khug: that's true [02:37] WALoeIII has joined the channel [02:38] Aaron_ has joined the channel [02:38] bradleymeck1: i guess for curl etc you gotta have it buffered [02:40] SamuraiJack has joined the channel [02:40] khug: yep, looks like buffering is the way to go :-/ [02:41] khug: will make templating libs easier to write [02:42] mde: khug: Right, streaming to templates for anything other than a simple list is pretty hard. [02:42] everton has joined the channel [02:42] jimmyjazz14 has joined the channel [02:43] bradleymeck1: nah, just make restful api's buffered, i think leaving browsers to streaming is fine for almost anything as long as you allow script injection if there is an error, which is not the best but a solution [02:43] mde: Even loading all the partials async means you have to jump through some hoops. [02:43] khug: and there's really no way to tell if there's a possible function inside a getter that will ruin your day [02:44] jimmyjazz14: is there a good way to create a blocking function from a nonblocking call? [02:44] bradleymeck1: nope doesnt work like that, you can chain stuff though [02:44] jimmyjazz14: there is no escape hatch? [02:45] isaacs: jimmyjazz14: nope [02:45] mde: Exactly for even a moderately complicated UI, if you want to stream, you're probably better off starting with a client-side stub, and rendering client-side. [02:45] bradleymeck1: unless it provides blocking yep [02:45] isaacs: jimmyjazz14: there are Sync fs calls, though [02:45] isaacs: jimmyjazz14: like fs.stat vs fs.statSync [02:45] jimmyjazz14: isaacs: I am actually looking to block on an exec call [02:45] isaacs: jimmyjazz14: yeah, no way to block on sub processes [02:46] bradleymeck1: ppl do seem to ask that a lot though [02:46] isaacs: maybe there ought to be a child_process.spawnSync? Is that even possible? [02:46] jimmyjazz14: I find that a little unfortunate, though I can kinda understand the reasoning for leaving that out [02:46] bradleymeck1: it is possible, but it means a wait loop :/ [02:48] isaacs: bradleymeck: i mean, is it possible without something dumb like a wait loop ;) [02:48] isaacs: bradleymeck: like, at the posix level [02:48] isaacs: i don't think there is [02:48] bradleymeck1: dont think so, esp since we could be getting events [02:48] aheckmann has joined the channel [02:48] isaacs: although, the execv calls are blocking normally, right? in the C? [02:49] bradleymeck1: yea, but they arent waiting on events normally like fs reads to my knowledge [02:50] jimmyjazz14: I kinda thought something like process.waitTick() might exist [02:50] isaacs: jimmyjazz14: nope [02:50] bradleymeck1: wouldnt make sense to have that [02:51] isaacs: jimmyjazz14: there used to be something like that [02:51] isaacs: when everything was promises, there was a Promise#wait function [02:51] isaacs: but it sucked [02:51] bradleymeck1: ewww wait loops [02:51] isaacs: using it a lot pretty much ensured that you'd have some race condition somewhere. [02:52] isaacs: when it returned to that stack, the state might've changed, and all kinds of things could go crazy and weird [02:52] jimmyjazz14: isaacs: yeah understandable but using it with caution could be useful [02:52] bradleymeck1: could be useful, but can be emulated w/ evenemitters w/o possible race cond [02:52] isaacs: jimmyjazz14: the problem is that it is almost impossible to summon enough caution for it to be safe. [02:53] isaacs: jimmyjazz14: chaining callbacks is easy once you wrap your brain around it. check out step or the promise-chain.js and chain.js inside npm [02:53] isaacs: jimmyjazz14: npm uses callback chaining for everything. the nice thing is that it means that fs ops and http ops and child processes all have a very similar interface. [02:54] jimmyjazz14: isaacs: I have no trouble with chaining callbacks really, I'm pretty used to the concept, I just wanted to build something a little like require() but for settings files [02:54] bradleymeck1: can still use blocking fs calls for things like that [02:55] isaacs: jimmyjazz14: that's interesting. [02:55] jimmyjazz14: bradleymeck yeah thats true, I was just trying to call 'hostname' to determine the hostname of the server (to load up a settings file based on the server hostname) [02:55] isaacs: jimmyjazz14: what do you end up having to use child processes for? [02:55] isaacs: oic [02:56] jimmyjazz14: there are other ways of doing what I want though I think [02:56] isaacs: process.env.HOSTNAME perhaps? [02:56] jimmyjazz14: Javascript needs 'do' blocks like in Haskell [02:56] isaacs: jimmyjazz14: do { ..... } while false; [02:57] isaacs: jimmyjazz14: do { ..... } while (false); [02:57] jimmyjazz14: isaacs: no its a different thing [02:57] isaacs: jimmyjazz14: what are 'do' blocks? [02:57] isaacs: jimmyjazz14: like ruby's blocks? [02:57] jimmyjazz14: its not a looping construct, its for flow control [02:57] phiggins has joined the channel [02:58] isaacs: do { ... } while (false) isn't exactly a looping construct either, since it doesn't loop [02:58] isaacs: it's a breakable block [02:58] isaacs: it is abusing the looping construct syntax, though ;) [02:58] jimmyjazz14: isaacs: do block are something like the following... do { settings <- getSettings; doSomething(settings) } [02:59] jimmyjazz14: which would in javascript turn into something like... getSettings( [02:59] jimmyjazz14: function(settings){ [02:59] jimmyjazz14: doSomething(settings) [02:59] jimmyjazz14: }); [02:59] jimmyjazz14: (sorta) [02:59] bradleymeck1: so its a chain that doesnt explicitly show itself? [02:59] isaacs: jimmyjazz14: you should check out narrative [02:59] jimmyjazz14: technically its for monads [02:59] nrstott: ug [02:59] jimmyjazz14: but monads are kinda like chains of functions (sorta) [03:00] nrstott: next youll be getting us to use FRP ;0 [03:00] isaacs: jimmyjazz14: i think maybe javascript and haskell are just too different to say "x needs y's z" about them [03:00] bradleymeck1: it looks pretty but seems like it takes away from clarity of separate execution blocks, kinda like evil goto [03:00] tmpvar has joined the channel [03:01] jimmyjazz14: isaacs: not really, Haskell uses the idea of continuation passing style very much (much like node does) [03:01] nrstott: jimmyjazz14, languages that compile to JS are the only hope for such features [03:01] isaacs: jimmyjazz14: node doesn't actually use continuation passing, though, it's callback passing, which is similar enough to be confusing, but different enough to be different :) [03:02] jimmyjazz14: isaacs: how do you think they are different? [03:02] nrstott: it would be nice to have a langauge that compiled to JS that had some of the Erlangy syntax for message passing [03:02] bradleymeck1: callbacks invoke a stackframe [03:02] jimmyjazz14: nrstott: there was once a project to make haskell compile to javascript but it died :( [03:03] isaacs: jimmyjazz14: that's a huge subject, and i gotta leave soon. [03:03] jimmyjazz14: isaacs: heh its okay [03:03] bradleymeck1: and you can return values from callbacks while spawning multiple [03:03] isaacs: jimmyjazz14: you know, node was almost in haskell? [03:03] nrstott: jimmyjazz14, I think Haskell is going to stay in the realm of academia for the foreseeable future :) [03:04] nrstott: isaacs, really? wow [03:04] jimmyjazz14: isaacs: they are similar enough where the names are at least almost interchangeable IMO [03:04] isaacs: jimmyjazz14: ryah chose javascript because v8 came out, and was fast, and it already has a tradition of callback-passing for IO, so there was cultural acceptance of non-blocking-ness [03:04] isaacs: jimmyjazz14: yeah, conceptually continuations and callbacks are very very similar, it's true. [03:05] isaacs: jimmyjazz14: "do this thing, and when you're done, go over there and do that thing" [03:05] jimmyjazz14: nrstott: hopefully my web framework will change that a little (Snap Framework) [03:05] nrstott: jimmyjazz14, link? [03:06] jimmyjazz14: http://snapframework.com/ [03:06] nrstott: I like Haskell a lot, but it was too hard to try ot use it for 'real' projects when I was messing with it [03:06] brianmario has joined the channel [03:06] jimmyjazz14: though for the record I still think node is cool :) [03:06] isaacs: haha [03:06] isaacs: looking at your benchmark bargraph [03:06] jimmyjazz14: nrstott: yeah there is no doubt that it is hard [03:07] isaacs: poor little rails, can't even get off the 0 line... [03:07] jimmyjazz14: isaacs: yeah those benchmarks need some work though [03:07] nrstott: jimmyjazz14, why Haskell instead of Erlang or OCaml [03:08] jimmyjazz14: nrstott: Haskell is unique do to its pure nature, and its type system is amazing [03:09] isaacs: jimmyjazz14: cabal is the package manager for haskell? [03:09] nrstott: I don't argue about the value of Haskell, just it seems like you would've ahd to reinvent a lot of things to make a web framework in haskell [03:09] jimmyjazz14: isaacs: yeah [03:09] nrstott: whereas those helkper libs already exist in Erlang and OCaml [03:09] bradleymeck1: wonder if coffee is going to make callbacks look like continuations [03:09] isaacs: jimmyjazz14: have you played with npm? [03:09] jimmyjazz14: nrstott: thats true but that was sorta the point [03:10] jimmyjazz14: isaacs: only a little [03:10] jimmyjazz14: why? [03:10] isaacs: i'm always curious when people have used another package manager a bunch, what they like about it, etc. [03:10] isaacs: ACTION wrote npm [03:10] wilmoore has joined the channel [03:11] jimmyjazz14: nrstott: Haskell actually has a very robust community so we did not have to reinvent as much as you might think [03:11] isaacs: especially when people say things like "wow, this is really a pita in npm, you should do it like X, it's so much easier" [03:11] sudoer has joined the channel [03:11] nrstott: jimmyjazz14, last i looked into haskell the only thing written in haskell was darcs and the only thing darcs was used for was source control for haskell :) [03:11] jimmyjazz14: isaacs: I've used so many package managers I can't even count them now [03:11] mikeal: apache releases take forever! [03:11] nrstott: glad to hear its evolving though [03:11] jimmyjazz14: nrstott: you should look again [03:12] mikeal: oh man, haskell [03:12] mikeal: poor poor haskell [03:12] mikeal: so much great shit, completely ruined by the academics that drive it :) [03:12] isaacs: jimmyjazz14: lmk when you get around to building/installing/publishing stuff with npm. i'll be curious about your feedback. [03:13] jimmyjazz14: isaacs: are you the author? [03:13] isaacs: jimmyjazz14: yeah [03:13] jimmyjazz14: ok [03:13] bradleymeck1: isaacs any plans on linking to repos? [03:13] nrstott: isaacs, speaking of npm, when I install it on cygwin, it just makes a node dir in ../lib from my current dir... is this the expected behavior? [03:13] isaacs: nrstott: hm... that's odd. [03:14] isaacs: nrstott: it should be in ../lib/node from the node exe [03:14] mikeal: awe shit [03:14] mikeal: issacs has to debug on windows now ;P [03:14] nrstott: isaacs, it just does it from my current dir [03:14] isaacs: mikeal: /o\ [03:14] isaacs: nrstott: well, that's not right. what version of node? what's the process.execPath in the repl? [03:15] nrstott: 0.1.99-20-gbbdd61d [03:17] isaacs: hey, gotta run [03:17] isaacs: nrstott: feel free to post an issue [03:18] isaacs: nrstott: it seems like it's not getting the right process.installPrefix or process.execPath [03:19] softdrink has joined the channel [03:20] donspaulding has joined the channel [03:23] sixthgear has left the channel [03:24] ajpiano has joined the channel [03:33] bpot has joined the channel [03:34] tilgovi has joined the channel [03:36] concernedcitizen has joined the channel [03:50] mape: Nice, got it working [03:51] creationix has joined the channel [03:56] mape: throw if a couple of css files, they get minified, merged into one file, vendor prefixes are generated and all images linked in the css are replaces by base64 so all the http requests are gone, and then you set a far ahead header that you invalidate with the modified string supplied in the template [03:57] mape: gotta love node [03:59] pufuwozu has joined the channel [04:00] creationix: mape: streaming interface http://gist.github.com/468889 [04:00] blorean has joined the channel [04:00] creationix: mape: sounds like your plugin is coming along great [04:00] creationix: put it on the connect wiki [04:00] mape: Yeah really liking it. [04:00] mape: Yup will do [04:01] mape: Only think I haven't figured out is how to handle html [04:01] mape: Since I have to create group, and they are cached as buffers [04:01] mape: Not sure how to took that into routers and whatnot [04:01] programble has joined the channel [04:01] programble: :\ [04:01] mape: Don't want to have to create a group for every single path [04:02] programble: hello [04:02] mape: hi [04:02] programble: i found node-wargame randomly on github :P [04:02] programble: it doesn't see me? [04:02] mape: The explore page? :) [04:02] programble: yeah [04:02] creationix: programble: how about now? [04:03] mape: programble: Seems it can't geolocate you [04:03] programble: beep [04:03] programble: er, how does it do that? [04:03] mape: curtis@botters/programble [04:03] mape: Whoises you and uses the host [04:03] mape: And since you are cloaked it can't find it [04:03] programble: hm.. my vhost [04:03] programble: can you even disable that on freenode? [04:03] programble: just for a bit [04:04] mape: Not sure, most people don't have it so not a big issue [04:04] jsilver has joined the channel [04:04] mape: But the bot only works on network that don't cloak the host [04:04] jsilver: hello ^ -> [04:04] mape: unless you alter the code of the bot [04:04] jsilver: what's cool in node land [04:04] jsilver: hi all friends [04:05] mape: could do something like !location Stockholm, Sweden and have the bot use googles APIs to find that [04:05] mape: should be easy enough to add [04:05] mape: Probly only like 10 lines of code [04:05] programb1e has joined the channel [04:05] programb1e: unidentified.. [04:06] mape: There you go [04:06] programb1e: oh yay i see me [04:06] mape: programb1e: peww peew [04:06] programb1e: hehe [04:06] programb1e: well i have to say [04:06] programb1e: that is cool [04:06] mape: Yeah people seem to like it [04:06] programb1e: tbh, usually github explore turns up shit [04:07] mape: old rust?.. :P [04:07] programb1e: yeah [04:07] pufuwozu has joined the channel [04:07] creationix: well, the trending repos are purely organic growth, the featured repos are everything thechangelog links to [04:07] programb1e: usually mostly rails crap too [04:07] chilts: programb1e: peoowwwwnnnn [04:07] chilts: heh [04:07] programb1e: chilts: long distance [04:07] chilts: yeah, it's a long range missile :) [04:07] creationix: I'm one of the changelog authors, so if you come across a neat node project that needs some github featuring let me know [04:08] mape: creationix: .. Like wargames? ;) [04:08] mape: Guess its old news now though, but good to know [04:08] chilts: I was on the front of GitHub once (with my distributed bug tracker) ... though that was 2 years ago now :) [04:08] creationix: yeah, I try to not abuse my power [04:08] programb1e: its ok, ive never written anything of interest [04:08] programb1e: at all [04:08] chilts: good plan [04:09] creationix: I do have to write up an article with everything I feature, so it's a bit of work too [04:09] programb1e: :O i feel like a target [04:09] programb1e: creationix: pew pew [04:09] creationix: mape: is there a way to fix my geolocation position [04:09] chilts: creationix: heh, that's so funny, I knew your nick on GitHub and now I've just related the two (here and there) ... funny when that happens [04:09] creationix: I'm wrong both at home and at work [04:10] programb1e: it got mine right :) [04:10] mape: creationix: sure give the the coordinates and I'll alter it in the cache [04:10] creationix: hmm, how do I look up coords? [04:10] creationix: I'm in Palo Alto, CA 94301 [04:11] mape: http://itouchmap.com/latlong.html [04:12] creationix: 37.446654,-122.164334 [04:12] creationix: that's for my house [04:12] tmpvar has joined the channel [04:12] creationix: work is a couple of blocks away, so close enough [04:12] WarBot has joined the channel [04:12] creationix has left the channel [04:12] jsilver has joined the channel [04:12] creationix has joined the channel [04:12] creationix has left the channel [04:14] programb1e: mape: pew [04:15] rtl has joined the channel [04:15] pufuwozu has joined the channel [04:15] creationix has joined the channel [04:15] mape: Hmm slow day, usually this time of day the channel is the most active [04:16] programb1e: ACTION hopes he will eventually have a good idea for a web app/site [04:16] khug has joined the channel [04:16] creationix: mape: yay, I moved! [04:16] mape: creationix: Jup [04:16] pavan_ has joined the channel [04:16] liucougar has joined the channel [04:18] bradleymeck1 has joined the channel [04:19] programb1e: too bad most people have cloaks though [04:19] benburkert has joined the channel [04:19] mape: programb1e: huh? most don't [04:20] programb1e: in the channel i would want to set it up in, a lot do [04:20] mape: Ah k, yeah depends on the network mostly [04:21] mape: But yeah, if the channel is a close group of people you could implement a !location command for manual changes [04:22] programb1e: i suppose [04:22] programb1e: well the rest on github explore are shit.. [04:22] programb1e: as usual [04:23] mape: hard to write something that most people enjoy [04:24] mape: So you poked around with node before or this is the first encounter? [04:24] programb1e: never even heard of it [04:24] programb1e: not much of a JS person [04:25] WarBot has joined the channel [04:25] matt_c has joined the channel [04:25] joshbuddy has joined the channel [04:25] mape: Well you are missing out [04:25] programb1e: :O http://github.com/mape/node-wargames/blob/master/public/js/raphael.js [04:25] programb1e: that makes me want to die [04:26] mape: Well that is minified code [04:26] nate__ has joined the channel [04:26] programb1e: make chrome want to die too apparently [04:26] nate__: has anyone had any luck building on an old mac with powerpc [04:26] mape: programb1e: http://github.com/mape/node-wargames/blob/master/public/js/jquery.wargames.js [04:26] mape: easier to read :) [04:26] mape: Hopefully.. hehe [04:27] skampler: hello world [04:27] nate__: trying to build on powerpc I get Build failed: -> task failed (err #1): {task: cc ares_strcasecmp.c -> ares_strcasecmp_1.o} [04:27] mape: skampler: There you go :) [04:27] derferman has joined the channel [04:27] skampler: sweet :) [04:29] nate__: anyone have any ideas how to solve? [04:29] mape: nate__: can't find anything on the google group? [04:29] nate__: nope [04:30] rictic has joined the channel [04:31] derferman has joined the channel [04:31] nate__: only that v8 doesn't build on powerpc but sometimes someone finds a trick [04:31] nate__: thought I would ask [04:31] nate__: suppose I need to upgrade [04:31] mape: nate__: To be honest I'm supprised you haven't [04:31] nate__: lol [04:31] mape: My Apple products tend to break right before a new release [04:31] nate__: yeah [04:31] mape: Like clockwork [04:32] programb1e: ew, apple [04:32] nate__: I only use the laptop occationally [04:32] mape: Have an iMac but use the laptop as a third monitor for twitter/irc [04:33] mape: Nice to have something you can move around [04:34] JSNewbie has left the channel [04:36] programb1e: compiling node... [04:37] programb1e: mape: how do i install the dependencies? [04:37] programb1e: for wargames [04:37] mape: programb1e: get npm [04:38] mape: http://github.com/isaacs/npm [04:38] mape: then you do sudo npm install irc && sudo npm install websocket-server [04:38] mape: and you should be pretty much set [04:38] mape: might have to change a require path but nothing to annoying [04:39] programb1e: well this is strange [04:40] programb1e: how can it permission denied when running as root/ [04:40] programb1e: ohhh [04:40] programb1e: silly me [04:41] SamuraiJack: hello [04:42] SamuraiJack: I recall there were a debuger for node but can't find exactly where was it [04:42] SamuraiJack: could someone point? [04:42] mape: eclipse? [04:42] SamuraiJack: no, something text-based [04:42] SamuraiJack: that was `ndb` or something, I saw it on github.. [04:43] programb1e: mape: can't find 'node-websocket-server/lib/ws' [04:43] mape: yeah try just websocket-server [04:45] programb1e: :\ [04:45] mape: no? [04:45] programb1e: no its running [04:45] programb1e: web server doesnt appear to be working though :\ [04:45] mape: yeah you need to change the path to the server in jquery.client.js [04:45] mape: so its pointing to your server [04:45] SamuraiJack: oh, I guess its modules page, nvm [04:46] mjr_ has joined the channel [04:46] programb1e: mape: i did [04:47] mape: have a fw on the machine running it? [04:47] mape: or running a httpproxy? [04:47] programb1e: no, im trying with localhost [04:47] siculars has joined the channel [04:48] mape: getting errors in the console? [04:48] programb1e: no... [04:49] mape: and no errors in the terminal? [04:49] programb1e: just this [04:49] programb1e: Failed update, frigg lacks coordinates. [04:49] programb1e: Fetching position for WGBotParen@67.68.24.98 [04:49] programb1e: Failed update, programb1e lacks coordinates. [04:49] programb1e: Fetching position for programb1e@67.68.24.98 [04:49] mape: so that works [04:49] mape: sure you aren't using a http proxy for the browser? [04:50] programb1e: nope [04:50] programb1e: er [04:50] programb1e: yes [04:50] programb1e: yes, no [04:50] jsilver: sup guys [04:50] programb1e: port 8080 is open [04:50] programb1e: but i cannot connect [04:50] jsilver: whats websocket-server [04:51] mape: programb1e: chrome/safari? [04:51] jsilver: i got npm node and coffee installed properly [04:51] programb1e: mape: chromium [04:51] jsilver: i need a tutorial or something to do [04:51] jsilver: or a ticket or something [04:51] jsilver: lol [04:51] mape: programb1e: hmm k, might be some wonky websocket revision stuff, not sure [04:52] mape: might want to try chrome just to rule it out [04:54] programb1e: cant [04:54] programb1e: and uh [04:54] programb1e: i cant even wget the page [04:55] mape: telnet it? [04:55] jsilver: whayt are you guys working on [04:55] jsilver: i wanna play [04:56] programb1e: jsilver: im trying to get wargames set up [04:58] programb1e: jsilver: pew pew [05:02] programb1e: argh, why wont it work [05:02] mape: tried telnet? [05:03] mjr_: have you run netstat to see if it is listening on the right port and right address? [05:06] dnolen has joined the channel [05:07] hassox has joined the channel [05:07] programb1e: the port is open.. [05:07] programb1e: well, i can connect to it [05:07] programb1e: nmap doesn't show it [05:07] programb1e: :\ [05:07] mjr_: nmap is not a good way to do this kind of testing [05:08] mjr_: If you run lsof, can you see that node is listening on the right TCP socket on the right address? [05:09] programb1e: node 22025 curtis 6u IPv4 317179 0t0 TCP *:1337 (LISTEN) [05:10] mjr_: port 1337. Nice. [05:11] programb1e: its default [05:11] mjr_: of course [05:11] mape: programb1e: have you tried using chrome? [05:11] programb1e: im not about to build chrome just for one test that i know will fail [05:11] jsilver: programb1e: cool cool [05:12] mape: k [05:12] subsume has joined the channel [05:12] programb1e: the HTTP server simply doesn't respond... [05:12] subsume: I'm attempting to adapt the node.js chat example but the sessions don't appear to be expiring when /part is called. [05:12] mjr_: Can you run some sort of packet capture thing to see if there are successful connections, and if so, any traffic on them? [05:12] programb1e: hm [05:13] tmpvar has joined the channel [05:13] subsume: What's strange is the session.destroy() function seems to being called and is returning the appropriate js. but when the page reloads, the nickname still seems to be taken within the server. [05:13] mape: programb1e: there is no http [05:13] programb1e: uh [05:14] programb1e: helps to know that [05:15] mape: that is why I told you to try telnet [05:15] mape: to see if it responds [05:18] programb1e: damn, everyone has cloaks [05:18] jsilver: whats wargames again [05:18] jsilver: that freenode node.js irc thingy right [05:18] programb1e: jsilver: http://wargamez.mape.me/ [05:19] jsilver: i think ive seen it [05:19] jsilver: its cool [05:20] jbr has joined the channel [05:21] jsilver: i think I am going to make a gedit pattern file for coffeescript [05:21] jsilver: :P [05:21] jsilver: i have it kinda started [05:23] hdon has joined the channel [05:27] mostlygeek has joined the channel [05:29] rolfb has joined the channel [05:29] SamuraiJack: is there a node module, which supports HTTP requests with 302 redirects? [05:30] mikeal has joined the channel [05:31] aurynn: SamuraiJack, what? [05:31] SamuraiJack: some module which will perform HTTP request and if it will reiceve the 302 response code it will follow the redirect [05:32] polotek has joined the channel [05:34] mjr_: SamuraiJack: I think this does what you want: http://github.com/mikeal/node-utils/tree/master/request/ [05:34] mjr_: But I haven't tried it myself. [05:34] mape: i have [05:34] mape: works fine [05:35] polotek: is anybody working on a robust http lib around http.Client? [05:35] tmpvar: just to let everyone here know.. jsdom development is probably going to be put on hold for the next 4 or so weeks [05:35] SamuraiJack: seems what I was looking for, thanks [05:36] tmpvar: I will be taking patches, and possibly submitting small commits (chipping away at level2/core) but I've run out of bandwidth [05:36] mde: tmpvar: Good to get a heads-up. We have been looking at perhaps using it here at Yammer. [05:36] tmpvar: mde, for what exactly? [05:36] aurynn: dear #node.js: Please reimplement LWP in javascript. Don't get clever like Python tried to be. [05:36] mde: We're doing some stuff right now with TheRubyRacer, but it's just a stopgap. [05:37] tmpvar: mde, can you be more specific? [05:37] mde: Eventually it'll likely be Node, but it's basically server-side rendering of templates. [05:37] tmpvar: ah, got ya [05:37] tmpvar: do you need level2/3? [05:37] mde: Right now strictly limited to EJS. We're not even doing any DOM stuff. Yet. [05:37] tmpvar: you want to take this off channel? [05:38] mde: But it would be awesome to provide people with that. [05:38] programb1e: mape: how do i set the coords in the cache manually? it doesn't seem to be working [05:38] mde: No, it's fine. There really aren't much more details than that. I have just been kicking the tires on it. [05:38] mape: programb1e: close the app, alter, start [05:39] mape: otherwise it will be overwritten every 10sec [05:39] tmpvar: mde, ok -- well I'm definitely alive, just sorting my priority list [05:39] mape: and only loads the cache on app start [05:39] mde: tmpvar: It's definitely something we will need. [05:39] mape: programb1e: so what was the problem? [05:39] programb1e: nvm [05:39] tmpvar: mde, a DOM or a specific level of the dom? [05:40] mape: programb1e: huh? Would be good to know if someone else have the same issue [05:40] mde: tmpvar: Basically as much of a faux-browser experience as we can give people. [05:40] programb1e: nah it was me being stupid [05:40] programb1e: too late at night [05:40] mape: Still, other people can be stupid as well [05:40] mde: With whatever caveats are reasonable. [05:40] mape: and there is at least one night a day [05:41] mde: I guess basic sort of benchmark is that I know people will ask "Can I use JQuery?" [05:42] tmpvar: you can use jQuery now, minus things like compareDocumentPosition .. which is a relatively minor feature [05:42] mikeal: someone pinged me [05:42] mikeal: i don't know who [05:42] tmpvar: but important.. [05:42] mjr_: mikeal: I pasted a link to your gh. [05:42] mape: just have to clean the html for it to be parseable [05:42] mde: tmpvar: Nice, okay. Yeah, people will be fine with caveats. [05:42] mikeal: ah [05:42] mikeal: which project? [05:42] mjr_: node-utils [05:43] mikeal: sweet [05:43] mikeal: i need to spend some more time on the streams library [05:43] mikeal: write some good tests [05:43] mape: mde: I've used jsdom and jQuery for web scraping, worked fine when I piped the pages through htmltidy first [05:43] tmpvar: mde, let me rephrase, its trivial to implement and allows for jQuery("parent child") queries.. thats in level3 though which is a ways off unless I get some help :) [05:43] mde: tmpvar: Actually, the one big thing is that it assumes CommonJS. [05:43] mape: programb1e: so mind saying what made it not work? [05:43] streblo has joined the channel [05:43] mikeal: request is really solid tho [05:43] mikeal: i use it daily [05:43] mikeal: it's so simple [05:43] mde: mape: That's pretty cool. [05:43] polotek: does anyone know where to look for the number of processes used in the io pool? [05:44] programb1e: mape: not stopping the app [05:44] mape: mde: yeah really handy [05:44] mde: tmpvar: And we're using it in plain TheRubyRacer. It's just embedded V8. [05:44] tmpvar: mde, mape: right.. you need to use a better parser. Aria's html5 parser might work a bit better than node-htmlparser [05:44] mikeal: polotek, you mean threads? [05:44] mjr_: mikeal: did any of the Oakland violence happen near the couchio office? [05:44] polotek: mikeal: er, yeah [05:44] mde: Right now it's not even Node. [05:44] tmpvar: mde, got ya [05:44] mape: programb1e: how did that make you unable to connect to it? Changed port without restarting the app? [05:44] tmpvar: mde, not only is it not node, but its not using a dom either [05:44] mikeal: mjr_: i don't think so, we're at 8th and it was mostly 14th and up [05:44] programb1e: oh er that [05:44] mde: So it's a Frankensteined mishmosh, kinda. [05:45] programb1e: thoguht you meant the other thing [05:45] mape: tmpvar: does arias work with jsdom now? [05:45] programb1e: no, it was just me being stupid [05:45] mde: tmpvar: Right, exactly. [05:45] programb1e: didnt start httpd [05:45] tmpvar: mape, aria's uses jsdom currently [05:45] mape: programb1e: ah k [05:45] mikeal: polotek: maybe, hopefully it's elastic and just has an upper limit [05:45] mape: tmpvar: k nice [05:45] polotek: mikeal: not last time I talked to ry about it [05:45] polotek: it's hard coded to 4 [05:45] polotek: which is why I'm looking for it [05:46] mikeal: interesting [05:46] mikeal: you know [05:46] tmpvar: mde, alright. sounds a bit far off, but I'll keep you in mind when I try and ignore xml namespace implementations ;) [05:46] polotek: do you know where the code is that sets it up? [05:46] mikeal: node is crazy fast, so we all kind of assume all these optmizations [05:46] mikeal: but there really aren't many [05:46] mde: tmpvar: Haha, nice. :) [05:46] mikeal: it's just built on a series of better ideas [05:46] mikeal: which are inherently faster and more awesome [05:47] mde: tmpvar: I'll check out aria's parser. There's a lot of stuff like sanitizing output and so on we'll have to do. [05:47] tmpvar: mde: im at 59% or 53% done with level2/core (xml namespaces) depending on the branch/perspective [05:47] mde: Oh, namespaces. :) [05:47] mikeal: tmpvar: jsdom? [05:47] polotek: oh mikeal nice article about databases and mongo [05:47] tmpvar: mde: sounds good, although its no tagsoup/beautiful soup [05:48] tmpvar: mikeal, yeah, more dom nonsense ;) [05:48] polotek: it was pretty enlightening [05:48] mikeal: polotek: thanks, the response is kind of huge, way bigger than i thought it would be [05:48] mikeal: tmpvar: is vmx using that branch? [05:48] mikeal: i know he really needed namespaces [05:48] tmpvar: vmx? [05:48] polotek: then you were fooling yourself :) [05:48] mape: mde: she had some serious testcases so I think it should be able to take pretty much any crap [05:48] mikeal: volker [05:48] mikeal: i wish i had the link handy [05:48] mikeal: he got it working in the couchdb view server [05:48] mde: mape: Excellent, because this will be for third-party devs. [05:48] tmpvar: mape, right, its not perfect though [05:49] mape: Well they never are [05:49] mde: Many of whom are not likely to be very good devs. [05:49] mape: at least she isn't using regex [05:49] mikeal: and was taking some raw geo xml and converting it to geojson in an update function [05:49] tmpvar: interesting [05:49] tmpvar: the branch is haphazard btw.. and I wouldnt recommend using it [05:49] tmpvar: mikeal, you are coming to nyc this month, right? [05:49] mikeal: maybe that isn't what he's using [05:50] mikeal: what happens in the master right now if you have namespaces? [05:50] mikeal: just ignored? [05:50] mikeal: tmpvar: yup [05:50] mikeal: i'll be there the 20th - august 2nd [05:50] tmpvar: nice, cant wait to meet ya [05:50] mikeal: in the last week i'm actually looking for places to crash [05:50] mikeal: you got a couch :) [05:50] tmpvar: in brooklyn [05:50] mikeal: i've got free CouchDB tshirts :) [05:50] tmpvar: you might want to talk to Marak [05:50] mikeal: that's where i'm staying most of the time [05:51] mikeal: my brother lives in brooklyn [05:51] tmpvar: ah, well sleep on his couch ;) [05:51] mikeal: i did, he also offered [05:51] mikeal: and marak [05:51] mikeal: i don't want to stay anywhere for too long tho [05:51] tmpvar: if you need one I'm sure I could work it out [05:51] mikeal: hate to wear out a welcome [05:51] tmpvar: im down in bay ridge though [05:51] tmpvar: so it might be a commute for ya depending on where you need to be/etc [05:52] mape: mikeal: will code for couch? [05:52] tmpvar: i dont generally bother offering because its pretty far down here, chill area though [05:52] mape: or you do already? eh.. couchio [05:52] mikeal: will code couchdb for couch :) [05:52] mikeal: tmpvar: i have like 5 places i'm speaking at [05:53] mikeal: and my good friend is a bartender at death and company so drinking will be happening [05:53] mikeal: other than that, not a lot of plans [05:53] tmpvar: word, well hit me up at tmpvar@gmail.com if you want contact infoz or need something [05:53] mape: mikeal: you should tell your friend their website throws a "this site will harm your computer" message from google [05:53] mikeal: hahaha [05:54] mikeal: tmpvar: i'm sure we'll get drinks when i get there [05:54] tmpvar: of course [05:54] mikeal: maybe a node meeting on the 23rd 24th ish [05:54] holydevil has joined the channel [05:54] mape: Nevertheless, the cocktails created by head bartender Brian Miller are killer. [05:55] mikeal: mjr_: maybe i'm selfish, but i'm pretty sure today just insured that my rent won't go up for a few more years :) [05:55] mikeal: mape: i haven't been yet, last time i went to Milk and Honey and PDT but i didn't make it to death & co [05:55] mjr_: mikeal: yeah, by as a homeowner, it also capped my properly value for the next few years. [05:55] tmpvar: mikeal, Brian mentioned that tonight [05:55] mikeal: renting FTW! [05:56] mape: mikeal: what happened today? [05:56] mikeal: which Brian? [05:56] mikeal: mape: riots [05:56] tmpvar: Mitchel [05:56] tmpvar: two l's? [05:56] mape: oh, where? [05:56] mikeal: they looted a foot locker [05:56] mikeal: who can find their shoe size that fast [05:56] mikeal: in the dark [05:56] mikeal: Oakland [05:56] mape: how come? just party times? [05:56] mape: they have an apple store there? [05:56] tmpvar: for the shoes [05:57] mjr_: mape: some cops executed a guy, and the cop's trial was today. The verdict was "just barely guilty" and people are pissed. [05:57] mape: oh k [05:57] mikeal: this cop that shot a detained black guy who was cuffed on the ground in front of like 8 video cameras was convicted on involuntary manslauter [05:57] mikeal: mape: nope, gotta go to emmeryville :) [05:59] mikeal: this whole thing is crazy tho [05:59] mikeal: really really nuts [06:00] creationix: almost done designing the plans for my new queen/twin bunk bed http://bit.ly/cIh7hU [06:00] mape: so just destroying public property or just general burning cards/looting private stores? [06:00] mikeal: one of the lawyers was saying he doesn't know of a time where any police officer was convicted of *anything* in CA and even in the US for shooting an african america male [06:01] mikeal: well, there was this rally at 6pm [06:01] mikeal: but the organizers of the rally just didnt' do anything, or maybe even show up [06:01] mikeal: so everyone just kind of stood around [06:01] creationix: mikeal: so who was mad and about what? [06:01] mape: 07:57:15 < mikeal> this cop that shot a detained black guy who was cuffed on the ground in front of like 8 video cameras was convicted on involuntary manslauter [06:02] mikeal: and then at like 8 a few groups of people started doing a few things and most of the other people left [06:03] mikeal: people are right to be pissed, and the riots last year came at a time when the city basically ignored what had happened and the mayor didn't say anything for 4 days, basically until after there were riots [06:03] mikeal: and the riots were basically angry protestors the cops decided to block in [06:03] mikeal: this stuff today, a lot of it, just felt really… opportunistic [06:03] mikeal: i mean, his family is on tv telling people to stay peaceful [06:04] mde: tmpvar: Thanks for the info, and the work on jsdom. [06:04] mjr_: Yeah, basically angry assholes running around because they think they can get away with it. Mostly unrelated to any sort of trial, race issues, justice, etc. [06:04] polotek: clearly I have no clue how the node codebase is organized [06:04] jetienne has joined the channel [06:04] mde: I'm headed out. Talk to y'all later. [06:04] mikeal: and they *were* in front of city hall, where a riot might have at least been symbolic, but instead they went on the street and tore up a foot locker [06:05] mikeal: polotek: what are you looking for? [06:05] mape: later [06:05] mikeal: the thread pool is in one of the deps [06:05] polotek: where the number of threads is set... still [06:05] mikeal: libeio [06:05] tmpvar: mde, np. feel free to hit me up if you have questions/suggestions/patches :) [06:05] polotek: yeah, that's where I am [06:06] polotek: I'm just saying I'm ignorant of how a lot of these low level libs work [06:06] mjr_: mikeal: this photo kind of sums it up for me: http://www.flickr.com/photos/arlette/4776448074/ Anyway, JavaScript. [06:06] mikeal: i love that theatre [06:07] mjr_: That's my neighborhood. [06:08] holydevil has joined the channel [06:08] polotek: I understand mikeal's point about opportunistic peoiple [06:08] mikeal: people have a right to be pissed [06:08] polotek: but more and more lately it seems like only drastic measures can keep the powers that be from pissing all over people [06:08] mikeal: oh, i'm all for that [06:08] mikeal: that's what it was like last year [06:09] mikeal: polotek: http://github.com/ry/node/blob/master/deps/libeio/eio.c#L226 [06:09] mikeal: i *think* that's it [06:09] mape: guess there is a reason there are 4? [06:10] mikeal: when people are that pissed and it's obvious the system isn't working a riot seems almost natural [06:10] mikeal: that's what it felt like last year for sure [06:10] mikeal: everyone here was pissed, it was crazy [06:10] mikeal: there are like 8 video on the internet of this execution and this guy isn't even suspended [06:11] mape: anyone got hurt or just property? [06:11] mikeal: and now, this verdict, i was ready for it to be the same [06:11] tmpvar: thats fucked [06:11] mikeal: just property [06:11] polotek: etp = "event thread pool" ? [06:11] mape: good [06:11] mikeal: oh, and way earlier a cop car was backing up and clipped someone [06:11] jsilver: hi all [06:12] mikeal: polotek: http://github.com/ry/node/blob/master/deps/libeio/eio.c#L215 [06:12] mikeal: that actually might be it [06:13] polotek: yes that's it [06:13] mikeal: but i don't understand this code enough yet to tell for sure [06:13] polotek: mikeal: yeah, that's my problem :) [06:13] polotek: what needs to happen is pretty simple [06:13] polotek: there are already three functions in there for controlling max threads, min threads, and max idle threads [06:14] mikeal: armed revolution? [06:14] polotek: these can be configured at runtime [06:14] polotek: and ry wanted to surface them as properties on process [06:14] polotek: so I need to a) make sure I'm in the right place [06:15] polotek: b) write some v8 wrappers to surface those functions [06:15] polotek: c) set them as setter functions on process [06:15] mikeal: when you do, make sure there is a way to ask for the current utilization [06:15] mikeal: i'd like to profile what kind of load it takes to max these out [06:16] pydroid has joined the channel [06:16] mikeal: and also, at what point does the thread overhead start to outweigh any benefits in increasing the pool size [06:16] pydroid has joined the channel [06:16] mikeal: erlang has a similar threadpool and with CouchDB we found that on most systems 4 is a pretty good number, but if you have a lot of slow connections like mobile phones it's fine to do like 8 [06:17] mikeal: at some point randall did 256 and things got SLOW [06:17] polotek: it always feels to me like having 1 per cpu core plus a couple for slack is the most reasonable [06:18] polotek: so for 4 cores, 6-8 [06:18] mikeal: it's not really all that related to cores tho [06:18] mikeal: the bottleneck is going to be disc [06:18] jsilver: yo guys [06:18] mikeal: because they block up while you're waiting on disc io [06:18] jsilver: what are the mimetypes of coffeescritp? [06:18] mikeal: jsilver: it doesn't have one [06:18] jsilver: i'm doing a gEdit gtksourceview [06:18] jsilver: k [06:19] jsilver: i thought it was text/coffeescript [06:19] mikeal: once compiled to js it's application/javascript [06:19] mikeal: or text/javascript [06:19] mikeal: i can never remember [06:19] SubStack: yay, published my second module to npm [06:19] jsilver: it doesnt have one for the raw form? [06:19] polotek: this code is pretty simple [06:19] jsilver: u sure? [06:19] polotek: the names are just esoteric [06:19] jsilver: how do you feed something to coffee.js? [06:20] jsilver: in browser [06:20] polotek: esoteric == "I don't know what they mean" :P [06:20] mikeal: jsilver: i don't think any coffescript people are around right now [06:20] mikeal: we have no idea [06:20] jsilver: me either [06:20] jsilver: that's cool [06:20] jsilver: thanks [06:21] mikeal: does coffescript have an irc channel yet? [06:21] creationix: I used to be a coffeescript person, but it's been rewritten since then [06:21] jsilver: yes [06:21] jsilver: i small one [06:21] jsilver: i'm trying to do new-style coffee/node [06:21] jsilver: actually [06:21] jsilver: i'm making a GTKsourceview lang def file for coffee [06:22] jsilver: nobody around there right now tho [06:23] mikeal: i would just email their list [06:23] mikeal: time for bed now [06:23] mikeal: gnight everyone [06:23] mikeal: polotek: ping me when you finish this, it sounds really interesting [06:23] polotek: mikeal: it wont be tonight. I'm fading fast [06:23] mikeal: i figured [06:24] mikeal: what TZ are you in? [06:25] mikeal: haha, i feel like i'm in Eastern Standard Tribe now :) [06:26] aubergine has joined the channel [06:32] gwoo has joined the channel [06:32] jbr has joined the channel [06:37] ph^ has joined the channel [06:37] polotek has left the channel [06:39] softdrink has joined the channel [06:53] jxson has joined the channel [06:53] aliem has joined the channel [06:59] creationix has joined the channel [07:03] matt_c has left the channel [07:06] kodisha has joined the channel [07:12] b_erb has joined the channel [07:15] jsilver: IM STILL HERE [07:19] mscdex: ME TOO [07:19] freshtonic has joined the channel [07:20] christkv has joined the channel [07:23] jsilver: cool [07:23] jsilver: i'm compiling e text editor [07:23] jsilver: but if i dont like it [07:23] mscdex: nano! [07:23] jsilver: i'm gonna make a tmLanguage -> gtk converter [07:23] jsilver: as a "fuck you" to textmate and a prank [07:24] jsilver: using ruby too [07:24] jsilver: as a "fuck you" to programming and stuff [07:24] mscdex: but not to node [07:24] jsilver: nope [07:24] mscdex: ok, awesome [07:24] jsilver: as a "big up" to node [07:25] mscdex: even bettar! [07:25] jsilver: and a "big fuck you" to Mycro$0ft [07:25] jsilver: idk lol [07:25] jsilver: lots of tings [07:25] benburkert has joined the channel [07:25] mscdex: steve ballmer is going to revoke your windows licenses now [07:25] jsilver: good [07:25] jsilver: i'm deleting windows if it wasnt for ableton live anyways [07:26] jsilver: :D [07:26] mscdex: and photoshop [07:26] jsilver: tea [07:26] jsilver: gimps ok [07:26] mscdex: not really unfortunately [07:27] mscdex: the UI is a mess [07:27] jsilver: yes [07:27] mscdex: :\ [07:27] mscdex: i guess you could run it under wine though [07:27] jsilver: i wish there was a 100% opensource port of ableton that used linux-rt kernel stuff [07:28] jsilver: the sound quality would outshine the windows version [07:28] jsilver: because of how rpc and shit work [07:28] jsilver: they interrupt I/O [07:28] jsilver: which is similar to the concepts behind node [07:28] jsilver: funnily enough [07:28] jsilver: :) [07:29] jsilver: concurrency shit [07:29] jsilver: multitasking and resource allocation at the kernal level [07:29] jsilver: kernel* [07:29] jsilver: it can have a momentous affect on sound quality [07:29] mscdex: if they only node [07:30] jsilver: glitches can be eliminated [07:30] jsilver: the audio latency goes to 2ms [07:30] jsilver: its just that linux audio apps mostly $uck [07:30] jsilver: something must be done [07:31] jsilver: the audio system (ALSA + JACK + rt Kernel + Pulse + whatever) is all good and stable enough on some chips to get super awesome direct I/O latency [07:32] jsilver: and apparently there's a driver called Wine ASIO that might be able to patch Ableton running Wine to ASIO to this system... but I havent tried it [07:32] jsilver: WineASIO [07:32] jsilver: not sure how stable it is either [07:37] mtodd has joined the channel [07:41] virtuo has joined the channel [07:43] teemow has joined the channel [07:44] creationix has joined the channel [07:47] crohr has joined the channel [07:51] sh1mmer: is there a udp module [07:51] sh1mmer: I can't see one in the docs [07:51] sh1mmer: but there is DNS [07:51] aurynn has joined the channel [07:53] mitkok has joined the channel [07:53] augustl has joined the channel [07:54] MattJ has joined the channel [07:54] augustl: I'm creating a "net" server, is there a way to parse HTTP-like headers there? [07:55] Clooth has joined the channel [07:55] augustl: data.split("\r\n"); doesn't feel very safe.. [07:58] satori: The is a UDP module. not in docs yet [07:59] satori: it is dgram.Socket [07:59] satori: i believe [08:00] mscdex: yep [08:00] stride: yep, at least require("dgram") exposes some Socket class [08:02] mscdex: augustl: why are you parsing http headers in tcp? [08:02] augustl: mscdex: websockets [08:03] mscdex: augustl: have you tried miksago's websocket module or socket.io? [08:04] augustl: socket.io does a bit too much for my likings. [08:04] augustl: tried http://github.com/ncr/node.ws.js, couldn't make it work [08:04] augustl: I'll look up miksagos module [08:04] mscdex: http://github.com/miksago/node-websocket-server [08:05] micheil: oh? [08:05] micheil: augustl: feel free to ask me anything about it, I'm the author. [08:05] mscdex: and you have questions, micheil is here for you :P [08:05] mscdex: ha [08:05] mscdex: *if [08:05] augustl: micheil: trying it now ;) [08:06] micheil: augustl: tell me what you think, and if you think there could be anything added. [08:06] micheil: I'm currently working on v1.3.10 (when I get time / take a break from my paid work) [08:07] augustl: out of curiousity, why doesn't the lib create the http server for you? [08:07] augustl: hmm perhaps it's optional, nvm [08:08] pquerna: http://journal.paul.querna.org/articles/2010/07/09/the-illusion-of-stability/ <- in which i mention node.js' modules for growing so quickly :-/ [08:08] mscdex: wordy method names = -1 [08:46] micheil: the reason for , or ; is ; is for charsets, , is for multiple types [08:47] micheil: (sorta like cookies) [08:47] mscdex: delicious! [08:47] micheil: or just do a string.match("application/json") [08:47] mscdex: that too hehe [08:47] micheil: or string.indexOf [08:48] augustl: I find the docs a bit hard to grok. Are there any collections of examples out there, perhaps? [08:48] mscdex: howtonode has some i think [08:49] mscdex: dunno what others off the top of my head [08:49] augustl: especially some http examples [08:49] augustl: trying to find out how I can read the request body etc [08:49] cloudhead has joined the channel [08:49] satori: I like how geeks use the word grok, and no-one else has any idea what it means. [08:50] mscdex: augustl: add a listener for the 'body' event [08:50] mscdex: augustl: the 'body' event will fire for each chunk of the body it receives, so you'll have to buffer it [08:51] augustl: cool :) [08:51] mscdex: er wait, not 'body', but 'data' [08:51] mscdex: request.addListener('data', function (chunk) { [08:51] mscdex: }); [08:51] mscdex: heh [08:52] mscdex: or if you are using head, you can optionally replace addListener with "on" [08:52] mscdex: :-) [08:53] javajunky has joined the channel [08:55] mscdex: augustl: and if you're going to be parsing html forms that may include file uploads, take a look at node-formidable: http://github.com/felixge/node-formidable [08:55] augustl: tnx [09:03] augustl: how do I know when I have the last 'data' event? [09:06] cloudhead: augustl: you get an 'end' event [09:06] augustl: dhe docs say "Emitted exactly once for each message" for the end event - what's a message? [09:06] augustl: the* [09:07] cloudhead: I guess an http request/response [09:07] brainproxy: hey, cloudhead [09:08] zomgbie has joined the channel [09:08] brainproxy: looking forward to investigating your couchdb adapter for node :) [09:08] cloudhead: brainproxy: hey, cool [09:09] brainproxy: i'm building an mvc framework thing on top of node and I'm hoping to use it to keep state on the backend [09:09] brainproxy: with object versioning and such [09:10] cloudhead: nice [09:10] cloudhead: I'm working on an orm on top of it [09:10] brainproxy: btw, i'm the dude that tweeted today asking if shotenjin-joosed might be made to work well with less.js [09:10] cloudhead: ohh [09:10] cloudhead: I saw, haven't looked into it yet [09:10] brainproxy: np [09:10] brainproxy: i imagine you're quite busy [09:11] brainproxy: are there some fun examples of less.js usage to sink my teeth into [09:11] augustl: is this code sensible? http://gist.github.com/469256 [09:11] cloudhead: you mean of the language? [09:12] ceej_ has joined the channel [09:12] brainproxy: yes, I'm coming at it from the perspective of somone who never used the ruby version [09:12] xla has joined the channel [09:12] brainproxy: and I tend to learn and build from looking at how someeone else used it [09:14] creationix has joined the channel [09:16] tomc has joined the channel [09:17] mscdex: augustl: any reason you're storing the chunks in an array initially? [09:17] cloudhead: brainproxy: http://vowsjs.org/less/main.less [09:17] cloudhead: brainproxy: it's a little messy, but has a couple good examples [09:18] brainproxy: okay, not that's great [09:18] brainproxy: so essentially there's no syntax change [09:18] brainproxy: between less and less.js [09:18] brainproxy: for the .less templates themselves? [09:18] augustl: mscdex: I need to parse the full body [09:18] cloudhead: brainproxy: not really no, there's only a couple of little things [09:19] cloudhead: which have changed [09:19] mscdex: augustl: why not make data a string and just append to the string? [09:19] augustl: mscdex: the chunks are parts of the body, right? [09:19] mscdex: augustl: yep [09:19] augustl: mscdex: not full bodies? [09:19] augustl: mscdex: cause that ends up generating lots of unneeded strings [09:19] augustl: premature GC optimization ;) [09:19] mscdex: augustl: it'd be one string [09:19] augustl: hmm, true, += appends [09:20] mscdex: augustl: http://gist.github.com/469260 [09:20] mscdex: er wait [09:20] micheil: augustl: I'd actually use a Buffer for it. [09:20] mscdex: ok there [09:21] augustl: micheil: I noticed the objects passed to 'data' aren't strings but Buffer instances [09:21] augustl: at least that's what they appear to be when sys.inspect-ing them [09:21] mscdex: probably [09:22] MrNibbles: morning gents [09:22] brainproxy: cloudhead: I don't understand writing tests; conceptually i have some notions after looking at your vows bdd and some other related approaches; but do you have a resouce you'd recommend for learning how to think in terms of tests [09:22] augustl: micheil: from the docs I can only see how to create a buffer with a known amount of data [09:22] micheil: augustl: in which case, Buffer.copy :D [09:22] augustl: new Buffer(size) etc [09:23] augustl: micheil: so I would append the new buffer to the previous buffer? Instead of creating my own buffer object and appending to that? [09:23] micheil: umm... [09:23] micheil: I guess [09:23] micheil: not 100% sure on it [09:23] augustl: ah, ok [09:24] cloudhead: brainproxy: I think of it as a todo [09:24] micheil: I actually use an array + a buffer in node-websocket-server [09:24] cloudhead: brainproxy: I write my tests in a way I want the software to work [09:24] cloudhead: brainproxy: and then it's a matter of checking them off by implementing it [09:24] javajunky: cloudhead: one issue I've had with (my understanding of) vows is how I would test a long running process..say to test whether a setInterval(…) function calls back 3 times.. do you think thats do-able with vows ? …and also where to put a hook to stop the timer :) [09:24] micheil: but I may change that. [09:25] micheil: eg, if there's a method available to grow a buffer, then I'll definitely change it. [09:25] micheil: I just don't want to restrict max message size for now [09:25] cloudhead: javajunky: Yea I got your message, maybe in the last assertion function [09:25] cloudhead: as those are run in order [09:25] brainproxy: cloudhead: that makes sense, i guess I'm having trouble figuring out how to work in the test writing and test implementation alongside my code [09:25] brainproxy: I'll think about it some more [09:26] cloudhead: javajunky: but maybe I could add a `cleanup` function in the api, which gets run after all tests [09:26] mscdex: bye _api! [09:26] cloudhead: brainproxy: it's especially good when writing apis or libraries [09:26] cloudhead: brainproxy: TDD/BDD, that is [09:27] mscdex: beam him back up scotty! [09:27] javajunky: cloudhead: ah, actuall that message is from a colleague, but yeah I'm speaking on his behalf as I couldn't figure out how to help him;) [09:27] cloudhead: brainproxy: testing in general is just necessary for libraries, things break often, you need to know when they do [09:27] aubergine has joined the channel [09:27] _api has joined the channel [09:27] cloudhead: javajunky: ah ok [09:27] cloudhead: javajunky: when would you ideally have it stop? [09:28] cloudhead: javajunky: oh and btw, you can do something like `this.timer = x` in the topic, and have access to it in the vows [09:28] javajunky: well I think he wants to do something like when 'I start this function [which kicks off a setInterval]' I expect this callback to be called twice ' .. … after it has been called twice then I need to stop this . [09:29] cloudhead: hmm [09:29] cloudhead: I'll think about it [09:29] brainproxy: cloudhead: is it / will it be possible to manipulate the styles defined in a .less file after the initial rendering of that file into css [09:29] javajunky: thx :) [09:30] brainproxy: on the browser-side i mean [09:30] mscdex: man i love building node ever since the builder defaulted to use all cores [09:30] mscdex: :-D [09:30] cloudhead: brainproxy: not currently, but with an api, it would [09:32] mscdex: beam him up again scotty! [09:32] cloudhead: brainproxy: you can also just create a new