[00:01] isaacs_mobile: No, but that sounds neat.
[00:03] isaacs_mobile: You can just use process.compile like require does.
[00:04] isaacs_mobile: mikeal: ^^
[00:04] mikeal: awesome
[00:05] mikeal: that doesn't get cached anywhere right?
[00:05] mikeal: running it again with a new string and the same scriptOrigin will re-eval
[00:05] isaacs_mobile: Nope. Youjd be in "custom require" land
[00:05] isaacs_mobile: Beware
[00:06] isaacs_mobile: ;)
[00:06] mikeal: isaacs: process.compile doesn't have exports
[00:06] mikeal: so it's not like require()
[00:06] isaacs_mobile: Mikeal: no, you'd have to wrap in the function boilerplate
[00:07] isaacs_mobile: See src/node.js
[00:09] mikeal: yeah, i'm looking already
[00:09] mikeal: all of these internals aren't provided to GLOBAL
[00:13] mikeal: oh man, this is crazy
[00:14] rtomayko has joined the channel
[00:21] rtomayko has joined the channel
[00:22] binary42 has joined the channel
[00:29] rtomayko has joined the channel
[00:40] brapse has joined the channel
[00:47] tmpvar has joined the channel
[00:49] tmpvar: yo yo
[00:50] Tim_Smart: Yo yo yo
[00:54] tmpvar: whats good?
[01:06] rtomayko_ has joined the channel
[01:08] emyller has joined the channel
[01:17] rtomayko has joined the channel
[01:19] blackdog` has joined the channel
[01:21] dnolen has joined the channel
[01:27] cloudhead has joined the channel
[01:27] pjb3_ has joined the channel
[01:33] tlrobinson_ has joined the channel
[01:33] Booster has joined the channel
[01:34] bpot has joined the channel
[01:59] dnolen has joined the channel
[02:02] tmpvar: my workspace: http://img714.imageshack.us/img714/7623/1000023.jpg
[02:04] stephenlb: tmpvar: pretty bg. old ms mouse.
[02:05] stephenlb: tmpvar: sea shell? heh
[02:05] tmpvar: lol
[02:05] tmpvar: no comments on the mousepad?
[02:06] stephenlb: tmpvar: marlboro
[02:07] tmpvar: 27's, whut
[02:07] tmpvar: old habits (addictions) die hard
[02:07] stephenlb: tmpvar: so the mouse pad is cool. what's i made of?
[02:07] tmpvar: a peice of wood, and some fabric stabilizer
[02:08] stephenlb: nifty
[02:10] tmpvar: just thought i'd share
[02:10] rryan has joined the channel
[02:11] tmpvar: im trying to augment jsdom tonight to run sizzle
[02:12] stephenlb: tmpvar: is nifty what's ur monitor real quick?
[02:13] tmpvar: 1 sec
[02:13] tmpvar: http://www.newegg.com/Product/Product.aspx?Item=N82E16824009125 -- discontinued
[02:13] stephenlb: ACTION looks
[02:14] tmpvar: acer was making some great / cheap gamer gear there for a bit
[02:14] tmpvar: gear being monitors (as far as i noticed)
[02:14] stephenlb: tmpvar: nice
[02:16] Connorhd__ has joined the channel
[02:20] tmpvar: how does this work? http://github.com/jeresig/sizzle/blob/master/test/unit/selector.js -- resig tests sizzle with jQuery?
[02:24] jed has joined the channel
[02:25] stephenlb: tmpvar: what do u mean?
[02:26] tmpvar: there are references to jQuery in his tests
[02:27] tmpvar: i guess he is testing jQuery as a wrapper of sizzle
[02:27] tmpvar: dunno, not very usefull for me heh
[02:27] stephenlb: heh
[02:28] Tim_Smart: tmpvar: jquery uses sizzle...
[02:29] tmpvar: exactly.. why would sizzle tests include jquery?
[02:30] Tim_Smart: Compatibility? Not sure
[02:30] tmpvar: same
[02:33] RayMorgan has joined the channel
[02:33] tlrobinson__ has joined the channel
[02:35] tlrobinson_ has joined the channel
[02:42] isaacs: js sax in under 500 lines: http://github.com/isaacs/sax-js
[02:42] tmpvar: nice
[02:42] tmpvar: you make me happy
[02:43] tmpvar: what about entities?
[02:43] isaacs: yeah, it doesn't do entities.
[02:43] isaacs: but that's on the todo list.
[02:43] tmpvar: ah
[02:43] tmpvar: word man
[02:43] isaacs: it DOES do html, though
[02:43] tmpvar: great stuff
[02:43] ZhouYu has joined the channel
[02:43] tmpvar: GOOOOD
[02:43] isaacs: in fact, that's teh default.
[02:43] tmpvar: can I mark you as a sister project to jsdom? :P
[02:43] isaacs: you pass in "true" to make it strict.
[02:43] tmpvar: wish that were possible.
[02:43] tmpvar: this is good, is it efficient?
[02:44] isaacs: eh.
[02:44] isaacs: it doesn't store more than it needs to.
[02:44] isaacs: haven't benchmarked it or anything.
[02:44] tmpvar: ah
[02:44] tmpvar: im sure its "fine"
[02:44] isaacs: it was more a response to a challenge.
[02:44] tmpvar: what could go wrong in 500 lines?
[02:44] tmpvar: hah
[02:44] isaacs: http://twitter.com/ryah/status/8821779145
[02:44] tmpvar: nice
[02:44] tmpvar: way to go man
[02:45] isaacs: thanks
[02:45] isaacs: what's jsdom?
[02:45] isaacs: oh, found it
[02:45] tmpvar: http://github.com/tmpvar/jsdom
[02:45] tmpvar: heh
[02:45] isaacs: yeah, this is specifically intended to not build a dom tree.
[02:46] tmpvar: well, it could build one, if the user intended
[02:46] isaacs: right
[02:46] isaacs: you'd just have to listen to the various events, and create whatever kinda nodes you wanted.
[02:46] tmpvar: correct
[02:46] isaacs: it gives you as much info as you need to do that.
[02:46] tmpvar: yes it does :)
[02:46] isaacs: it also emits errors in strict mode for non-wellformedness
[02:46] tmpvar: not bad
[02:46] isaacs: (emits, not throws, since it might be async from the calling code.)
[02:46] tmpvar: when are you porting to C? :P
[02:47] isaacs: haha
[02:47] isaacs: the challenge was to do it in js
[02:47] tmpvar: yeah yeah.. hah
[02:47] inimino: making fast parsers in C is easy :)
[02:48] isaacs: shouldn't be terribly hard, i don't think.
[02:48] isaacs: although, withotu closures and String.indexOf, it'd be a lot longer.
[02:48] isaacs: i hardly know how to program without closures.
[02:48] isaacs: totally spoiled.
[02:48] fictorial: heh
[02:48] fictorial: they are very handy
[02:49] tmpvar: isaacs, i know you are in the post completion glow.. but if you get a chance would you mind looking at jsdom and telling me how retarded I am?
[02:49] fictorial: lol
[02:49] isaacs: hah
[02:49] fictorial: hey guys. I'm a few weeks away from node.js. I was wondering if you wouldn't catching me up on a few things... binary and/or "buffers"? add-on examples/tutorials? inter-node.js-process communications?
[02:49] fictorial: did I hear something about amqp too?
[02:50] tmpvar: i heard ryah was working on amqp something or another (helpful)
[02:50] fictorial: hehe
[02:51] isaacs: tmpvar: i'd like to, buti really should not procrastinate any more.
[02:51] fictorial: is there any new support for handling buffers as binary instead of strings?
[02:51] isaacs: fictorial: nope.
[02:51] tmpvar: isaacs, of course.. if you have time
[02:51] fictorial: isaacs: thanks (BTW, I finally did leave Yahoo for good)
[02:51] isaacs: fictorial: i keep hitting spots where i really feel the lack of a ByteString/ByteArray class.
[02:52] fictorial: yeah me too - I took a hiatus from node for a few weeks to drop into low level C data store land
[02:52] isaacs: and i've poked a bit at narwhal-v8 to see theirs, but it's got a lot of narwhal/k7 macros, and i just haven't gotten around to porting it.
[02:52] fictorial: learned a lot but I would have liked to have done that experimenting in node itself
[02:52] fictorial: ah I see
[02:52] isaacs: fictorial: maybe while you're still in C-thinking-mode, you could write a binary.node add-on
[02:52] fictorial: hehe
[02:52] isaacs: it's implemented for v8 in narwhal already.
[02:52] isaacs: just have to unravel the macros and crazines.
[02:52] fictorial: nice - yeah eek
[02:53] isaacs: port to node's way of doing things.
[02:53] isaacs: might be easier to just read through the spec, and implement from scratch.
[02:53] fictorial: btw, was there ever any follow-up on the "can you get 1,000,000 simultaneous clients connected?" thread? is there some sort of stress-induced bug in node for big loads?
[02:53] fictorial: heh, where's the spec? I'll read it at least
[02:53] fictorial: not that I expect 1MM clients in a single node process but ...
[02:54] fictorial: I'd love to hear stories about what's possible there.
[02:54] fictorial: 100K?
[02:54] isaacs: fictorial: http://wiki.commonjs.org/wiki/Binary/B
[02:54] isaacs: the upper limit keeps getting higher.
[02:54] fictorial: that's a good trend ;)
[02:54] isaacs: yep
[02:55] isaacs: so, thta's the spec for the Binary proposal.
[02:55] isaacs: narwhal and flusspferd have implementations.
[02:55] fictorial: any ballpark idea and/or standard stress test script that people have been using for that testing?
[02:55] isaacs: narwhal-v8 has a binary-engine module for v8, even.
[02:55] fictorial: ok thanks I'll read it -
[02:55] isaacs: i usually just use ab for that stuff. i'm not looking ot have 1MM users on a single server, so i haven't pushed that.
[02:56] fictorial: right - me neither. I just want to do some basic capacity planning. how many clients can and should I allocate per process and/or host? that kind of thing
[02:56] tmpvar: isaacs, what are you working on?
[02:57] isaacs: tmpvar: i'm at the very early stages of designing a modular customer portal for an enterprise software company that has 4 different products.
[02:57] tmpvar: nice, freelance?
[02:58] isaacs: no, i'm an employee here.
[02:58] isaacs: but, i'm the only member of my team, so it's a bit like freelancing.
[02:58] tmpvar: hehe, thats good
[02:58] tmpvar: fresh ideas / code is good.
[03:01] mikeal has joined the channel
[03:01] tmpvar: isaacs, they are letting you use node for this nonsense?
[03:01] isaacs: tmpvar: yep.
[03:02] isaacs: well, "letting". i mean, i basically said, "i'm using node for this, because it's the best" and they're all "we hired you cuz you know, so ok!"
[03:02] tmpvar: awesome, I love my job.. but are you looking for help? :P
[03:02] isaacs: tmpvar: hopefully soon.
[03:02] isaacs: what do you do?
[03:02] tmpvar: jack of most things programming
[03:03] isaacs: whereat?
[03:03] tmpvar: http://arc90.com
[03:03] isaacs: oh, hey, you guys made the readability thingie, i use that all the time!
[03:03] fictorial: readability rocks
[03:03] tmpvar: word :P
[03:03] tmpvar: yeah, thats us heh
[03:04] fictorial: I'd like to make that the default for every page out there
[03:04] fictorial: and toggle it OFF as needed - not the reverse
[03:04] tmpvar: im secretly working on a way to make a proxy
[03:04] tmpvar: for readability :P
[03:04] tmpvar: hence the dom impl, etc
[03:04] fictorial: ohh cool idea -
[03:05] tmpvar: i mean, env.js / htmlunit.. its cake, but also very slow
[03:05] deanlandolt: tmpvar: couldn't you just use something like greasemonkey for that? it works on chrome now i hear
[03:05] tmpvar: anyhow, there are many other applications to having a server-sided dom
[03:05] tmpvar: deanlandolt, you could, yeah
[03:05] tmpvar: just one of those hair brained ideas :P
[03:06] isaacs: tmpvar: so, my issue with doing the dom in js is that the dom kinda sucks a lot.
[03:06] deanlandolt: well, if you run everyone's browsing through your servers you'll get some pretty interesting stats at least :D
[03:06] tmpvar: isaacs, yeah.. i completely agree
[03:06] isaacs: like, it's just sort of a hair-brained API.
[03:06] tmpvar: isaacs, its sort of clever.. i guess
[03:06] isaacs: i mean, most of what it offers doesnt' even make sense, there's 3 differnet ways to do everything, etc.
[03:06] tmpvar: browsers do their best to taint it
[03:07] isaacs: sure, but you could probably do something way better without much effort, which would perform a lot better.
[03:07] tmpvar: how can you beat a tree of objects that is eventable? .. hah
[03:07] fictorial: tmpvar: I'm guessing this is you? http://arc90.com/people/elijah-insua/
[03:07] tmpvar: :P
[03:07] tmpvar: how'd you guess
[03:07] mikeal: haha!
[03:07] fictorial: cigarettes in your workspace pic and then hovering on the team pic you had cigs
[03:07] fictorial: :)
[03:07] mikeal: not one hour after I wrote a new post on my blog
[03:07] tmpvar: good ol' web programmer as i've been labeled heh
[03:08] mikeal: i started looking at isaacs blog and realized you wrote a post with the same damn title
[03:08] fictorial: ACTION is a crazy evil stalker .. ok, not really
[03:08] stephenlb: lol fictorial's link
[03:08] tmpvar: thas my link!
[03:08] tmpvar: hah
[03:08] tmpvar: way to go fictorial
[03:08] tmpvar: you in nyc?
[03:08] isaacs: which same damn title?
[03:08] fictorial: north of nyc yeah
[03:09] mikeal: ch-ch-ch-changes
[03:09] isaacs: hahaha
[03:09] stephenlb: heh
[03:09] tmpvar: you going to nyc.js this thursday?
[03:09] fictorial: lived in nyc for 7 years now I'm doing the burb thing with wife and kids
[03:09] isaacs: well, it's not like i made that up
[03:09] mikeal: hehe, yeah
[03:09] fictorial: I might be - I need to get down there soon
[03:09] isaacs: we both just decided to infringe the same copyright.
[03:09] mikeal: http://www.mikealrogers.com/archives/726
[03:09] mikeal: haha
[03:09] mikeal: i expect a call from the RIAA
[03:09] tmpvar: fictorial, you should, it'll be my first attendance.. the more people i "know" the better haha
[03:10] fictorial: nice - yeah
[03:11] fictorial: how is couchdb's performance nowadays? I gave it a good look a while ago and while I loved it, it was very slow
[03:11] mikeal: what was slow?
[03:11] tmpvar: its the "indexing" that is slow, no?
[03:11] deanlandolt: fictorial: what kind of stuff where you trying to do?
[03:12] mikeal: view generation performance is much better in trunk
[03:12] fictorial: lots of writes... I'm always trying to write fast game servers
[03:12] mikeal: concurrent writes perform very well
[03:12] tmpvar: game servers in couchdb?!
[03:12] fictorial: exactly ;(
[03:12] tmpvar: do they have a udp interface?
[03:12] fictorial: not Quake mind you!
[03:12] tmpvar: http over udp.. lawlz
[03:12] mikeal: in fact, concurrent writes are faster than single writer performance by a mile
[03:12] fictorial: casual turn-based games -
[03:13] mikeal: like Chess with Friends
[03:13] fictorial: yep
[03:13] mikeal: and Words with Friends
[03:13] mikeal: i LOVE those games
[03:13] fictorial: chesspark, etc
[03:13] isaacs: mikeal: http://github.com/mikeal/node.couch.js/blob/master/changes/service.js#L19
[03:13] fictorial: mochigames etc that kind of thing
[03:13] mikeal: chesspark uses twisted
[03:13] isaacs: why not process.compile(wrapper, "changeHandler")?
[03:13] mikeal: isaacs: yup
[03:13] fictorial: chesspark used XMPP - not sure what server - was it twisted based XMPP server?
[03:14] mikeal: that argument is suppose to be a filename right
[03:14] isaacs: yeah
[03:14] isaacs: the thing that'll get reported if it throws an error.
[03:14] mikeal: well, i don't have a file :)
[03:14] isaacs: ok.
[03:14] isaacs: that's why it's something fake ;)
[03:14] mikeal: i didn't know if there were any caching concerns either
[03:14] isaacs: rocess.compile(wrapper, "VirtualFile: changeHandler")
[03:14] isaacs: nope.
[03:14] isaacs: it's strictly for error reporting.
[03:14] mikeal: ok, so it just makes the errors look better?
[03:14] isaacs: yep.
[03:14] mikeal: ok, i'll definitely change it then
[03:15] isaacs: also, then the code doesn't have access to the eval'ed scope.
[03:15] mikeal: ah, very nice
[03:15] isaacs: eval traps the current scope, process.compile runs the code at the global scope when it's executed.
[03:15] mikeal: i need to find a way to override setInterval and setTimeout as well
[03:15] mikeal: in the eval environment
[03:15] isaacs: add them to the wrapper, and then pass in null.
[03:15] isaacs: or undefined
[03:16] isaacs: or, actually, just don't pass in anything ;)
[03:16] mikeal: because if you have a setInterval in your handler, then you edit the code and save in CouchDB, it's going to eval again and there is no way to clear the old handler
[03:16] isaacs: http://github.com/mikeal/node.couch.js/blob/master/changes/service.js#L12 var wrapper = "(function (exports, require, module, __filename, __dirname, setInterval, setTimeout) { "
[03:16] isaacs: also prolly wanna remove eval
[03:16] tmpvar: haha
[03:16] tmpvar: cut it off at the base
[03:16] mikeal: i want to pass a wrapper, so that the interval is set but I have a list of them and can remove them when it reset
[03:16] mikeal: that'll work
[03:17] tmpvar: yeah, same noise, right?
[03:17] mikeal: for some reason i was thinking I needed to do something special because it was defined globally, but you're right
[03:17] isaacs: oh, i see, yeah, then implement your own setTimeout and setInterval, and pass that in
[03:17] tmpvar: <3 js
[03:17] tmpvar: scope the planet!
[03:18] stephenlb: s/scope/hack/
[03:18] mikeal: i spent like 3 hours writing all this code to write these strings to the filesystem to require them
[03:18] mikeal: and then I thought, "I should look at how modules are actually implemented in node.js"
[03:18] mikeal: and when I saw that function wrapper I almost fell over
[03:19] mikeal: coming from Python I just assume there is some massive infrastructure behind the module system
[03:21] isaacs: fictorial|bbl: srsly, if you implement Binary/B for node, you'll be my hero.
[03:21] isaacs: mikeal: it's crazy how much you can do with closures, isn't it?
[03:21] bacon has joined the channel
[03:21] deanlandolt: isaacs: python has closures
[03:21] mikeal: crazy and AWESOME
[03:22] mikeal: yeah, but they suck
[03:22] mikeal: they are incredibly poorly optimized
[03:22] isaacs: deanlandolt: but they're not as awesome as javascript's
[03:22] deanlandolt: oh, i didn't know that
[03:22] mikeal: they look like how javascript closures look when you use eval() in the function :)
[03:22] deanlandolt: i /did/ know they're not as awesome (mainly because anon functions in python blow -- the lambda syntax makes me cry)
[03:22] isaacs: yeah
[03:23] isaacs: the only language with a worse anonymous function syntax is php.
[03:23] isaacs: even c's function pointers are better.
[03:23] tmpvar: oh wow
[03:23] tmpvar: lets keep php out of this.. its blatantly horrible
[03:23] isaacs: hahaah
[03:24] mikeal: php can get away with not optimizing pointers because you just keep everything in the global scope anyway, it's not like you're gonna muck it up anymore
[03:24] mikeal: closures aren't exclusive to anonymous functions tho
[03:25] isaacs: mikeal: no, php has actual closures, now.
[03:25] isaacs: but they're so hideous
[03:25] mikeal: the really issue is that Python compiles in to byte code it's variable resolution by name
[03:25] mikeal: so the close is really just a lookup through all the parent scopes
[03:25] isaacs: well, js works roughly teh same way.
[03:25] mikeal: which means that every closure contains a reference to all parent scopes it can access, and each var lookup traverses it
[03:25] isaacs: the activation object proto's to its parent scope.
[03:26] isaacs: that's why local vars are so much more fast than globals
[03:26] mikeal: js looks at the function before compilation an creates references to only the variables used in that scope, at least in all modern js platforms
[03:26] isaacs: right, it does a lot of optimizations around that.
[03:26] mikeal: unless there is an eval, then it does more or less what Python does
[03:26] isaacs: right. eval is ridiculous.
[03:27] Tim_Smart: interwebs... going... slow...
[03:27] mikeal: also, Python function execution is just really slow for some reason totally unknown tome
[03:27] Tim_Smart: >.>
[03:28] tmpvar: Tim_Smart, you are down under, right?
[03:28] tmpvar: or am i completely off my rocker
[03:28] Tim_Smart: tmpvar: Down under is one thing I are
[03:28] tmpvar: enjoy the warmth *shakes fist*
[03:29] tmpvar: I'm not a huge fan of python
[03:29] Tim_Smart: I <3 python
[03:29] isaacs: ACTION has seriously considered being migratory
[03:29] tmpvar: beautifulsoup is nice, twisted is nice
[03:29] mikeal: i'm not a Twisted fan
[03:29] tmpvar: isaacs, you are in cali, what do you care lol
[03:29] mikeal: i like beautifulsoup before pyquery
[03:29] mikeal: s/like/liked
[03:29] isaacs: tmpvar: we have rainy wet awful during this time of year. and it gets pretty chilly.
[03:30] isaacs: ACTION is not in socal
[03:30] Tim_Smart: I prefer python over ruby
[03:30] tmpvar: isaacs, does it freeze?
[03:30] isaacs: tmpvar: not where i'm at. it just gets dreary and chilly and wet for a few months.
[03:30] tmpvar: sounds amazing. there is snow here in ny
[03:30] isaacs: tmpvar: i grew up in CT. i know your pain. it is not ok there.
[03:31] tmpvar: went upstate last week.. spun off the road due to ice/snow
[03:31] isaacs: yikes
[03:31] tmpvar: yeah, i like when business gets interesting.. hah
[03:31] mikeal: Tim_Smart: i'm with you on the > Ruby part
[03:31] mikeal: but i've been divesting from Python for a few months now
[03:31] tmpvar: wow, seriously?
[03:31] tmpvar: ruby < python
[03:32] mikeal: everything i was doing is just a lot easier in node
[03:32] tmpvar: crazy... ruby is much more expressive
[03:32] isaacs: javascript > ruby
[03:32] deanlandolt: tmpvar: sometimes that's part of the problem
[03:32] tmpvar: ah
[03:32] mikeal: i don't care about expressivity as much as I do abut consistency and tidyness
[03:32] tmpvar: i havent delved too far down the ruby path
[03:32] mikeal: javascript is super small, i love it
[03:32] deanlandolt: looking at ruby code just confuses me...too much metamagic
[03:32] isaacs: i do like coffeescript a lot, though
[03:33] isaacs: but yeah, the rules are simple here.
[03:33] tmpvar: i do know that ruby has a shit ton of good efforts going on though
[03:33] isaacs: there's syntax, but it's relatively consisten.
[03:33] mikeal: I hate all languages that use :: in their syntax, it makes my eyes want to bleed
[03:33] tmpvar: haha
[03:33] brainproxy has joined the channel
[03:33] tmpvar: c++ spanks you
[03:33] isaacs: :: is mikeal crying.
[03:33] isaacs: :_:
[03:33] mikeal: haha
[03:34] tmpvar: haha
[03:35] rektide: javascript needs Strawman Proxy API bad
[03:35] rektide: until then, its the bastard child of dynamic languages
[03:35] rektide: and i will never regard it as contendor to the thrown
[03:35] deanlandolt: rektide: it'll always be the bastard child...but i kinda like that :D
[03:36] mikeal: except it's the only language in the largest platform in the world, the browser
[03:36] deanlandolt: still, no doubt -- a proxy api would be spectacular
[03:36] rektide: not fit to fight, sorry
[03:36] mikeal: so, i've actually written a ridiculous amount of proxy code in Python
[03:36] rektide: also, sandboxing
[03:36] rektide: eval(source,globalContext) was pretty integral, yet never official
[03:36] mikeal: and i wrote a proxy in node.js as my first project to learn node.js, and it took about an hour
[03:36] deanlandolt: hopefully we won't have to wait for harmony...maybe the the current strawman gets any traction
[03:37] deanlandolt: err...maybe the current strawman /can/ get traction
[03:37] mikeal: rektide: v8 has a sandbox model, it's just a matter of exposing it
[03:37] deanlandolt: mikeal: i htink rektide means some variation on __noSuchMethod__ as a language feature
[03:37] rektide: two separate issues
[03:37] deanlandolt: there's a harmony strawman on it
[03:37] mikeal: that's unnecessary
[03:37] rektide: kind of
[03:38] mikeal: seriously
[03:38] mikeal: it's not necessary
[03:38] rektide: eval(source,globalContext)
[03:38] deanlandolt: there's also some ideas floating about re: hermetic eval, which would give you safer sandboxing
[03:38] mikeal: it's about as necessary as interfaces
[03:38] rektide: thats a pretty damned important capability to me
[03:38] deanlandolt: mikeal: it's necessary for some use cases
[03:38] rektide: be able to load some code, & eval it against a specific context.
[03:38] bryanl has joined the channel
[03:38] deanlandolt: there's simply no other way to do certain things
[03:39] mikeal: rektide: v8 has that
[03:39] deanlandolt: wait, which one are you talking about? method missing or hermetic eval?
[03:39] mikeal: have you looked at the v8 context system?
[03:39] rektide: deanlandolt: both are important
[03:39] tmpvar: yeah strawman proxies would be superb
[03:39] deanlandolt: yeah, i agree
[03:39] mikeal: hermetic eval is totally necessary
[03:39] mikeal: method missing is not
[03:39] rektide: mikeal: i spent ~1.5 hours poking through v8 and node source code
[03:39] deanlandolt: mikeal: there are some things you simply can't do without it
[03:39] rektide: between the two, proxy api is far far more important.
[03:39] tmpvar: deanlandolt, you can do them, but its waaaay slower
[03:40] mikeal: sure there are, there are also things you can't do without pattern matching, that doesn't mean the language needs them :)
[03:40] mikeal: if you treat javascript as a functional language, you don't really need it
[03:40] tmpvar: its either way slower, or you leak memory
[03:41] mikeal: and javascript is a great functional language, with some convenient OO features
[03:41] deanlandolt: tmpvar: you can't proxy an object without a proxy api without some kind of platform extension
[03:41] Tim_Smart: The dynamical magical prototypical awesome-ness of Javascript is teh sex
[03:41] rektide: prototypes get you a ways
[03:41] rektide: but sometimes you dont know ahead of time
[03:41] tmpvar: deanlandolt, you can simulate it
[03:41] deanlandolt: mikeal: i'll buy that, but javascript /isn't/ just a functional language
[03:41] tmpvar: emulate it if you will
[03:42] deanlandolt: not fully
[03:42] tmpvar: i'll need an example
[03:42] rektide: no you cant emulate or simulate __noSuchMethod__
[03:42] inimino: obj("method name", args, ...)
[03:42] rektide: thats a stupid proposition
[03:42] mikeal: so, this is what ES4 was trying to do and failed
[03:42] inimino: sure you can :-)
[03:42] stephenlb: heh
[03:42] mikeal: add a bunch of OO features to the language
[03:42] mikeal: and it failed misserably
[03:43] deanlandolt: yeah, the only way you can simulate it is by iterating over the current state of the object you're proxying constantly
[03:43] mikeal: and ES5 is all about adding the bare minimum OO features to allow you to add that kind of stuff in yourself on top of the language
[03:43] mikeal: so you have getters and setters
[03:43] rektide: ES4 was sweet
[03:43] mikeal: and anything else you wanna do you can hack on top of that
[03:43] rektide: i'm not sure what to chalk the failure up to
[03:43] deanlandolt: inimino: that's not a proxy :)
[03:43] inimino: deanlandolt: it can be, if you use that pattern everywhere :-)
[03:44] tmpvar: deanlandolt, do you have an example?
[03:44] inimino: you just can't use dot notation anymore
[03:44] Tim_Smart: I think Javascript need some sort of built-in inheritance model, and it will be sorted
[03:44] mikeal: haha, nope
[03:44] rektide: .prototype aint bad
[03:44] inimino: Tim_Smart: you mean another one?
[03:44] mikeal: never. going. to. happen.
[03:44] rektide: its not inheritance
[03:44] tmpvar: deanlandolt, a sort of workaround: http://github.com/tmpvar/jsdom/blob/master/lib/level1/core.js#L875
[03:45] Tim_Smart: Well I have a base prototype, and I want base others on top of it
[03:45] tmpvar: live lists in the dom is painful
[03:45] rektide: proxy api is there for dealing with the unexpected
[03:45] rektide: tmpvar, have you seen/used livequery jquery?
[03:45] deanlandolt: tmpvar: for instance right now i'm writing store wrappers for pintura...they should intercept certain fns to do things but push everything else to the base store
[03:46] tmpvar: deanlandolt, could you better define the api? dynamically add getters?
[03:46] tmpvar: getters/setters.. everything else is fubar
[03:46] tmpvar: rektide, i have
[03:46] deanlandolt: i could add getters, sure, but what's underneath could change out from under me
[03:46] tmpvar: rektide, mostly unfortunately
[03:46] deanlandolt: the object i'm proxying could get a new method dynamically and i'll miss it
[03:46] rektide: ooohh. :(
[03:46] tmpvar: deanlandolt, but its your responsibility to provide a consistent api?
[03:47] deanlandolt: no, i'm writing store wrappers -- i can't dictate what the stores will look like
[03:47] tmpvar: rektide, i mean that in the kindest of ways.. it was a means to and end and it worked well for what it was supposed to do
[03:47] deanlandolt: just that they should, for instance, have certain methods that i want...and everything else should get proxied through
[03:48] rektide: tmpvar: principally it seemed really freaking sweet
[03:48] tmpvar: rektide, sure, but I'm really happy live events were properly solved in jquery proper
[03:48] deanlandolt: so for instance i'm writing an adaptive indexing store wrapper right now...i don't care if it's sql, mongo, couch, whatever underneath...i just want to intercept all query calls and ensure there's a setIndex, and if there's a removeIndex use it based on user-provided fns
[03:49] pjb3 has joined the channel
[03:49] tmpvar: deanlandolt, yeah.. that is a bit hairy without
[03:49] rektide: oh v8 context gods
[03:49] rektide: speak to me
[03:49] tmpvar: you "could" wrap all the api calls in a method.. solves the problem
[03:49] rektide: while i lay slumbering come and bestow your divine wisdom unto me
[03:49] tmpvar: get("attr")
[03:50] rektide: tmpvars right its just .... ugly as fuck
[03:50] tmpvar: are you calling my code ugly?
[03:50] tmpvar: lol
[03:50] Tim_Smart: tmpvar: What are you trying to achieve
[03:50] rektide: in this case well um yes yes i am
[03:50] Tim_Smart: or whoever it is
[03:50] deanlandolt: tmpvar: not really -- because the api is defined by the w3c :-/
[03:50] tmpvar: live nodelist
[03:50] deanlandolt: it's just the IndexedDB api (plus whatever else someone wants to extend it with)
[03:51] tmpvar: basically the only way to do it is to re-run the query every time (in this case its tag name)
[03:51] tmpvar: length, and item(x)
[03:51] tmpvar: sure, you can cache, but its.. a hairball
[03:51] rtomayko_ has joined the channel
[03:52] rtomayko_ has joined the channel
[03:53] tmpvar: caching requires modifications to any node to propagate up to the document and when you run the query again you store it off. large memory usage or large cpu usage
[03:53] rtomayko has joined the channel
[03:53] tmpvar: or you turn if off.. which i need to add to plan.md.. because many people hate the fact that nodelists are live
[03:55] tmpvar: deanlandolt, i think your only option as of now is to wrap the core api calls .. like i mentioned .get("attr"), .set("attr", value).. that sort of thing
[03:55] tmpvar: internally you can do all sorts of detection and call into a "not found" method if need be
[03:56] deanlandolt: tmpvar: well, i'm just using rhino's __noSuchMethod__ hook for now but i'd like a /real/ solution sooner rather than later :-/
[03:56] tmpvar: i agree, i ran into the same problem
[03:56] tmpvar: but, it _can_ be worked around
[03:57] tmpvar: unfortunately its messy, and painful
[03:57] deanlandolt: adaptive indexing just wont be usable on node...not a huge deal -- it's just a convenience feature
[03:57] tmpvar: who implements strawman proxies?
[03:57] deanlandolt: tmpvar: yeah, your solution would work but like i said, can't change the api -- it's the IndexedDB api
[03:58] deanlandolt: tmpvar: noone implements the actual strawman but mozilla engines expose the necessary hooks
[03:58] tmpvar: ah
[03:59] deanlandolt: my /hope/ is that as discussion continues on harmony some of the strawmen will gain enough agreement to start seeing implementations, even if just as __wunderbar'd__ vendor-specific crap for now...we can featuretest and wrap it in a nice api
[04:01] Yuffster has joined the channel
[04:01] deanlandolt: who /knows/ when harmony will land, but perhaps jsc (and in turn v8) will get a few of these nicities well before that
[04:02] mikeal: isn't harmony dead?
[04:02] Tim_Smart: wow felixge, my poor poor github news feed
[04:02] deanlandolt: mikeal: no, harmony's just a codename for es-next
[04:03] mikeal: ES-Harmony was the come to jesus spec between the ES-3.1 and ES-4 camps
[04:03] mikeal: that spec became ES5
[04:03] inimino: the name changed
[04:03] deanlandolt: i think at one point they called what's now es5 harmony, but as far as i know they're referring to the /next/ version as harmony
[04:03] mikeal: since when?
[04:03] inimino: Harmony was a proposal for ES5 which died
[04:04] mikeal: it didn't really die, it kind of "became" ES5
[04:04] deanlandolt: well i've seen harmony thrown around quite a bit
[04:04] mikeal: ES4 is what died
[04:04] inimino: it's also, now, what remains of that proposal, and is still planned for the future
[04:04] deanlandolt: inimino: what are they calling the next thing then? i've seen both es next and harmony on esdiscuss
[04:04] mikeal: i've never heard anyone mention harmony at Mozilla after ES5
[04:05] inimino: mikeal: Brendan Eich still uses the term
[04:05] inimino: (for something in the future, not the past)
[04:05] deanlandolt: hmm...that would explain that
[04:05] mikeal: weird
[04:05] inimino: yes...
[04:05] deanlandolt: oh...and...
[04:05] deanlandolt: http://wiki.ecmascript.org/doku.php?id=harmony:proxies#feedback
[04:05] mikeal: i never heard him say it
[04:05] deanlandolt: that's the proxy proposal
[04:06] inimino: lots of things about the ES standardization process are ...weird
[04:06] deanlandolt: no doubt...i thought i was going crazy for a sec...but i'll stop using harmony now and just go w/ esnext
[04:07] mikeal: this isn't going to make it
[04:07] mikeal: not while Crockford is alive :)
[04:08] rektide: so would strawman have to be ES6 ?
[04:08] mikeal: yup
[04:08] rektide: is there any other place in the ecmascript world for it
[04:08] rektide: doesnt seem to be any major incentive ot increment JS now that ES5 is final
[04:08] mikeal: as Brendan said during the 3.1 vs 4 battle, ECMA doesn't have a process for dot releases of a specification
[04:08] rektide: which bodes ill for ProxyAPI
[04:09] deanlandolt: rektide: i disagree...there's a lot of discussion and seemingly a lot of agreement on some of the strawmen
[04:09] mikeal: this introduces more new methods to Object than currently exist
[04:09] rektide: but is strawman alone enough to go from ES5 -> ES6 ?
[04:10] rektide: strawman seems well supported, just incredibly badly timed as far as release cycles go
[04:10] deanlandolt: mikeal: new methods on Object are fine
[04:10] mikeal: no, they aren't
[04:10] inimino: I'm pretty sure now that the webapi people and the ES people are talking, this kind of crap will eventually be fixed
[04:10] deanlandolt: rektide: what do you mean by that?
[04:10] mikeal: this is the kind of stuff that gets cut
[04:10] tmpvar: mikeal, why?
[04:10] rektide: this is the kind of stuff that gets cut, IF theres not damned good reason
[04:10] mikeal: because it's unnecessary, if you look at the process for ES5
[04:10] inimino: (though possibly just by not making non-ES-implementable DOM interfaces anymore)
[04:10] mikeal: what they ended up doing
[04:11] deanlandolt: mikeal: but that was the idea behind es5...push off all the major stuff
[04:11] mikeal: was removing anything that could conceivably be built on top of the language without adding to ES
[04:11] deanlandolt: and standardize on the stuff most browsers are already doing
[04:11] mikeal: and things that couldn't be done, in any way, were the things added
[04:11] rektide: deanlandolt: well, if there is no ES5.1 for strawman, are people going to ratify an ES6 whose only difference is ProxyAPI ?
[04:11] mikeal: the ES5 spec didn't use syntax already used in existing implementations
[04:12] deanlandolt: rektide: there are other strawmen that have been well-received
[04:12] rektide: mikeal: that bodes really really well for ProxyAPI
[04:12] rektide: as there is no way to do it and its a pretty integral dynamic language feature
[04:12] mikeal: the gettr and settr APIs look nothing like ActionScript or the Mozilla platform gettrs and settrs
[04:12] mikeal: no, you could hack this in
[04:12] brainproxy has joined the channel
[04:12] rektide: its all about the public api, and there really arent very many ones being proposed.
[04:12] mikeal: it wouldn't look exactly the same, but it would have the same outcome
[04:12] deanlandolt: mikeal: they were careful to keep everything meta and hang it all off Object...and that's the direction all the strawmen seem to take too...it's uglier but it gives us a safe extension point
[04:13] deanlandolt: libraries can fix the ugly
[04:13] mikeal: hehe, ok man, I just left Mozilla
[04:13] mikeal: i spent a lot of time with these guys
[04:13] mikeal: I don't think this is ever gonna happen
[04:13] rektide: mikeal instilling the fear of god itc
[04:13] brainproxy has joined the channel
[04:13] rektide: crushing our js hopes and dreams
[04:13] Tim_Smart: Is anyone else seeing this: http://yfrog.com/euscreenshot019p ?
[04:13] deanlandolt: mikeal: you would know better than i...but i'm still an optimist :D
[04:13] rektide: (fofofofo)
[04:14] mikeal: this is the kind of stuff that everyone gets excited about during an onsite, and then gets killed on the list
[04:14] deanlandolt: and hell, mozilla already /has/ method-missing
[04:14] rektide: TG39 had a good reception of Strawman ProxyAPI
[04:14] mikeal: this has a slightly better chance of being implemented as the EphemeronTable
[04:14] rektide: the list of raised issues is quite minimutive
[04:14] mikeal: Mozilla has lots of awesome stuff that won't go in to ES proper
[04:14] mikeal: like array comprehensions :)
[04:15] deanlandolt: mikeal: good point
[04:15] rektide: and now look at the folks this guy associates with! v8 js runtime scum!
[04:15] rektide: ;)
[04:15] mikeal: the EphemeronTable is NEVER going to happen
[04:15] deanlandolt: i'm skeptical of anything that extends the syntax ever being standardized
[04:15] mikeal: any specification based around new objects/syntax that are designed around an optimization are dead in the water
[04:15] rektide: i'm skeptical something so damned useful would get embraced
[04:15] deanlandolt: so array comprehensions, generators, they'd be out
[04:16] rektide: but its the void, the drastic necessity
[04:16] mikeal: see: type annotations
[04:16] bentomas has joined the channel
[04:16] rektide: that gives me hope. its not something you can monkeypatch in, the __noSuchMethod__ / ProxyAPI capability is something obviously necessary in the runtime
[04:16] mikeal: i like generators, but I've seen what they do to javascript code and I'm not convinced they are necessary
[04:16] deanlandolt: mikeal: i'll buy the point on ephemeron tables, but hermetic eval? method missing? come on, these aren't just optimizations
[04:17] mikeal: i see code all the time that uses generators in the mozilla platform and it just doesn't fit
[04:17] mikeal: same with let
[04:17] rektide: hermetic eval could probably be hacked in by proxy api'ing the global object
[04:17] mikeal: hermetic eval doesn't need to be ECMA
[04:17] deanlandolt: wait, let's already standardized, isn't it?
[04:17] mikeal: it needs to be implemented in each platform, DEFINITELY
[04:17] rektide: its just something i kind of find damned useful
[04:17] mikeal: but it doesn't really belong in ECMA
[04:18] pavelz has joined the channel
[04:18] rektide: why.... what.... why would you back each runtime hacking its own solution? what sane agent would back that?
[04:18] mikeal: look at the eval and sandbox model between platforms
[04:18] deanlandolt: rektide: i'd be cool with it -- libraries would just wrap it with a nice api and we'd be done with it already...not optimal but whatever, i'll take it
[04:18] mikeal: they differ way a lot
[04:19] mikeal: esspecially at the implementation level
[04:19] tmpvar: ouch
[04:19] mikeal: it's one of those things that will just get exposed and everyone will write a good API on top of
[04:19] rektide: i'd re-iterate, i believe most hermetic eval's can be written via proxy api
[04:19] rektide: maybe not elegantly, but... ;)
[04:19] deanlandolt: rektide: that's fine, but we still need the proxy api :D
[04:19] rektide: CONFIRM
[04:19] mikeal: my favorite thing about ES4
[04:20] mikeal: was that it REQUIRED proper tail recursion
[04:20] rektide: noice
[04:20] rektide: thats one of htose little anal retentive nitpicks that makes me happy
[04:20] mikeal: would have been awesome if it worked, but clearly wasn't going to happen
[04:21] rektide: iterative code is so much easier to write than fucking around with loops, but *ug* stack growth is the enemy
[04:21] brainproxy has joined the channel
[04:21] mikeal: that's why you do them in a forEach(function (item)
[04:22] brainproxy has joined the channel
[04:22] rektide: binary search.... generative systems....
[04:22] mikeal: again tho, can't design language features around optimization ideas
[04:22] mikeal: they tried to do that with type annotation because "it was the only way to make it faster"
[04:22] rektide: BAH
[04:22] mikeal: then tracing happened and everyone went "good thing we didn't do type annotations"
[04:22] rektide: hi we're from v8, we just use hidden classes magic. you're mortal, you dont understand, but it works.
[04:23] mikeal: it's just function inlining
[04:23] mikeal: but the function inline stuff starts to suck when you have a loop inside your callback that references stuff from the closue
[04:23] rektide: i dont know the details i'm only mortal
[04:23] mikeal: er closure
[04:23] mikeal: that's why forEach(function(item)
[04:24] mikeal: if you're not using Rhino, functions are so damn cheap you should just use them for everything
[04:24] rektide: thats still a leap from the recursive iterative design patternas
[04:24] inimino: ACTION uses them for everything
[04:24] rektide: which come to me more naturally
[04:24] inimino: mikeal: why would type annotations not still be a nice thing?
[04:24] deanlandolt: if you /are/ using rhino you probably don't care much about performance and just use them for everything anyway ;)
[04:24] rtomayko has joined the channel
[04:25] mikeal: all type annotations do is move the point of failure to the front
[04:25] rektide: also, just re: the language design discussion
[04:25] mikeal: which makes it less dynamic, and is a terrible fit for the web
[04:25] rektide: type annotations are brand new feature. demanding tail recursion is just adding some specs to function call behavior.
[04:25] mikeal: you want things to fail as late as possible
[04:25] kriszyp: calls are actually pretty fast in rhino, rhino's slow parts are more associated with string manip, regex, and evals
[04:25] inimino: mikeal: ah, well... you seemed to be saying they would have had a bad performance impact... if it's just a style preference I'll stay out of it :)
[04:26] mikeal: rektide: right, but it's also an implementation detail, you can have the same top level language API work exactly the same with/without tail calls
[04:26] inimino: ACTION would have liked type annotations
[04:26] mikeal: inimino: no, it's not that, it's just that tracing is better/faster optimization than the type annotations would have brought
[04:26] mikeal: and they were one of the reverse incompatible language semantics
[04:27] tmpvar: kriszyp, and nothing to do with java...
[04:27] inimino: I think the problem with ES4 was that everyone got excited when they saw it had their pet feature... and didn't notice that it had everyone's pet features until a little later
[04:27] mikeal: they aren't slow by Java standards, but they are slow by js standards :)
[04:27] kriszyp: what does that mean mikeal?
[04:28] tmpvar: i hate java for the reason of lack of perf
[04:28] kriszyp: java is vastly faster than even v8
[04:28] tmpvar: wow
[04:28] tmpvar: ok
[04:28] mikeal: not for function calls
[04:28] mikeal: with closures
[04:28] kriszyp: hmm, java doesn't have closures
[04:28] deanlandolt: mikeal: java doesn't have closures...that's not really fair ;)
[04:28] rektide: hiya kris
[04:28] mikeal: Clojure does :)
[04:28] inimino: aren't Java people still arguing over whether they even want them?
[04:28] mikeal: i meant JVM
[04:29] tmpvar: use closure or groovy
[04:29] tmpvar: jvm is faster than the js jvm in v8?
[04:29] tmpvar: er..
[04:29] tmpvar: js vm in v8
[04:29] mikeal: i actually hear nothing but good things about Clojure
[04:29] kriszyp: yeah, Java is certainly plenty terrible, but it's problem is certainly not performance
[04:29] mikeal: but i have no faith in it's success
[04:29] tmpvar: same
[04:29] mikeal: non-Java JVM languages are only moderatly successful, and there hasn't been a wildly successful Lisp.... ever
[04:29] tmpvar: im wary about anything jvm based
[04:29] bronson has joined the channel
[04:29] mikeal: no matter how much people love it
[04:30] RayMorgan: though Java does use waaaay too much memory.. I will take a small hit in perf for a lot less memory usage
[04:30] rektide: i'd rather stab myself in the heart with a fork than use groovy
[04:30] inimino: the argument is that you can use the JVM and all the libraries...
[04:30] inimino: but nobody actually chooses Java because of the libraries or the JVM
[04:30] mikeal: the memory thing is a choice they made
[04:30] RayMorgan: yeah
[04:30] deanlandolt: inimino: i'm using rhino and the jvm because of the libraries
[04:31] tmpvar: the whole thing seems clunky to me
[04:31] tmpvar: where is the C extensions?
[04:31] mikeal: i'm not using Rhino because of the libraries :)
[04:31] tmpvar: env.js runs on rhino
[04:31] inimino: I'm not using Rhino because of Java ;)
[04:31] tmpvar: albeit.. there is a 64k limit for scripts
[04:31] mikeal: I'm not interested in ported Java libs, I would much rather have a solid javascript + C binded libraries for a non-blocking platform
[04:31] deanlandolt: mikeal: i'm in the enterprisey world...as much as i wish i didn't i need that crap sometimes :-/
[04:32] tmpvar: mikeal, of course.
[04:32] deanlandolt: mikeal: they're not ported libs...you have direct access to the jvm libs
[04:32] deanlandolt: errr, java libs
[04:32] mikeal: there is a world out there where you MUST use the JVM
[04:32] inimino: enterprises choose Java because you can easily hire interchangable Java programmers
[04:32] inimino: which is why Clojure etc aren't really interesting, IMO
[04:32] tmpvar: mikeal, that world is ludicrous
[04:32] mikeal: i'm just not in that world
[04:32] tmpvar: im entering that world unfortunately
[04:32] mikeal: yeah, we have no problem hiring great developers
[04:32] rektide: please stop talking about the real world guys
[04:33] tmpvar: man. what a waste of talent haha
[04:33] mikeal: rektide: hahaha
[04:33] rektide: when we'd rather all be building utopias
[04:33] rektide: all rather?
[04:33] rektide: v0v
[04:33] tmpvar: dude, just because something is labeled "enterprise" and costs tens of thousands of dollars.. doesnt mean its good.
[04:34] mikeal: i wish the non-Java JVM guys all the luck in the world, at least they are trying not to write Java
[04:34] bentomas has left the channel
[04:34] mikeal: in a JVM dominated world
[04:34] mikeal: I need a tshirt that says "Java doesn't scale"
[04:34] tmpvar: lol
[04:34] rektide: scala is good shit; i just found scouchdb's scala couchdb view engine
[04:34] mikeal: that would go over GREAT at ApacheCon
[04:34] tmpvar: "sick of java, write scala"
[04:34] rektide: i'm psyched to have a chance to play raound with scala again
[04:34] mikeal: scala seems like Erlang without the awesome
[04:35] tmpvar: fail
[04:35] rektide: but plus not being an insane illegible tart of a language
[04:35] mikeal: it's a lot of hand holding and shared memory
[04:35] mikeal: to make OO people comfy with writing functional code
[04:36] tmpvar: we've really taken a dive here :P
[04:36] mikeal: tmpvar: definitely
[04:36] tmpvar: /topic we hate languages
[04:36] mikeal: node.js is awesome
[04:36] mikeal: and done.
[04:36] rtomayko has joined the channel
[04:36] inimino: :)
[04:36] rektide: seconded
[04:36] rektide: raise of hands for? against? passed
[04:36] tmpvar: nth'd?
[04:36] mikeal: i still need to write a blog post on why I'm not writing Python anymore, ever
[04:36] rektide: you already voted for
[04:36] tmpvar: mikeal, im the same way with php
[04:36] rektide: i did a bunch of boo programming
[04:37] rektide: i really miss metaprogramming
[04:37] tmpvar: but i have to launch a blog..
[04:37] tmpvar: boo?
[04:37] mikeal: we're looking at supporting an R view server
[04:37] rektide: template metaprograms in javascript, that'll be the day
[04:37] inimino: :)
[04:37] rektide: Boo is a "python inspired" .NET language, with by far the best metaprogramming on the planet
[04:37] mikeal: some people just want to use R for crazy map/reduce stuff
[04:37] rektide: that doesnt say much
[04:38] mikeal: i don't like things with "meta" in the title
[04:38] tmpvar: .NET is another horrible vm
[04:38] rektide: its VM is ok, its the languages and the fucking MS written stdlibs that are god awful
[04:38] mikeal: tmpvar: but you get that awesome gigantic IDE :)
[04:38] tmpvar: lol
[04:38] rektide: MS seems to like to excrete a replacement for whatever their last stdlib was, on an 18-24 month basis
[04:38] tmpvar: i will give you the fact that visual studio is the absolute pwn for c/c++ dev
[04:38] mikeal: no matter how big Visual Studio gets
[04:38] mikeal: Eclipse will still use more memory
[04:39] tmpvar: lol
[04:39] tmpvar: JAVA
[04:39] mikeal: and this conversation has reached it's final low point
[04:39] rektide: ENTERPRISE JAVA
[04:39] tmpvar: or you could use netbeans
[04:39] rektide: who was the first to embrace OSGI?
[04:39] rektide: oh yeah, it was eclipse
[04:39] tmpvar: lol
[04:39] tmpvar: blarg
[04:39] mikeal: someone should sell Eclipse with 2gigs of memory
[04:39] tmpvar: fail whale circus
[04:39] rektide: have we offended your delicate sensibilities mikeal ?
[04:40] rektide: scala's portable delimited continuations
[04:40] mikeal: no, today was entirely too productive, i needed a solid bitch session
[04:40] rektide: i at least have some idea how its useful. i spent a while looking through and fiddling with mono.continuations, and its like a non-hackjob version...
[04:40] mikeal: ACTION coughs "Erlang!"
[04:40] rektide: but i think i can only grasp about 15-10% of how it could be used
[04:40] tmpvar: i wrote docs and sat in meetings
[04:41] rektide: indeed!
[04:41] rektide: erlang!
[04:41] rektide: minus the language i cannot humanly fathom
[04:41] mikeal: haha
[04:41] mikeal: it's actually not that bad
[04:41] mikeal: because you have to think about writing code entirely differnetly anyway
[04:41] rektide: i found out two days ago akka actor framework's promises sleep threads. :(
[04:41] mikeal: might as well be a syntax from another planet
[04:41] tmpvar: erlang compiles to asm, no?
[04:41] rektide: and immediately i was like
[04:41] rektide: i need to write jonas boner
[04:41] mikeal: erlang runs in it's own VM
[04:42] tmpvar: what in the fsk
[04:42] rektide: and tell him he needs to figure out how delimited continuations can be used to fix that
[04:42] rektide: but i dont have the sentience to write a decent email saying that
[04:42] tmpvar: "i believe i did, bob"
[04:42] mikeal: i'm not going to invest in any language that has a strategy for multi-cpu and multi-machine that includes some kind of crazy shared memory hack
[04:42] rektide: excuse me here
[04:42] rektide: YOU DONT HAVE TO SHARE MEMORY
[04:43] mikeal: that's not going to work
[04:43] rektide: sure it will!
[04:43] rektide: especially with delimited continuations
[04:43] rektide: you could do it before too!
[04:43] rektide: i've written plenty of ridiculous kludges that abuse the haystack out of thread local storage
[04:43] mikeal: continuations are great, but that's not the entire problem
[04:43] mikeal: message passing FTW
[04:44] rektide: continuations are far better mated to the problem of concurrency
[04:44] rektide: than any other imperative construct we've had before
[04:44] rektide: to the problem of immutability / non-shared memory
[04:44] rektide: but even message passing
[04:44] mikeal: continuations don't solve concurrency, they just give you a way to not "block" in a way that your code can still be writing synchronously
[04:44] rektide: makes me want better ability to capture and describe contexts
[04:45] joshbuddy has joined the channel
[04:45] joshbuddy has joined the channel
[04:46] mikeal: Erlang solves all these problems in a very elegant way, it's just not usable by humans
[04:46] rektide: or by strings
[04:46] rektide: apparently
[04:46] mikeal: strings work great in Erlang
[04:46] mikeal: a string is just an array, and if you use iterations over an array for manipulation then it's crazy fast
[04:46] rektide: arent they arrays of string
[04:47] rektide: but they're not necessarily going to be in order
[04:47] tmpvar: wow
[04:47] rektide: and the memory consumption is like... holy shit
[04:47] mikeal: nope
[04:47] mikeal: tail calls :)
[04:47] rektide: sorry but you're still going to be thrashing your cache
[04:47] rektide: afaik
[04:47] mikeal: instead of writing normal iterations you use recursive functions
[04:47] sveisvei has joined the channel
[04:48] technoweenie has joined the channel
[04:48] rektide: and i doubt even the native-threads will hide that kind of colossal indirect access penalty
[04:48] mikeal: but strings are no fun in Erlang just due to that fact that the standard modules don't do much for you
[04:48] technoweenie has joined the channel
[04:48] mikeal: binary operations are awesome tho :P
[04:48] rektide: each cahracter is a lookup? really/
[04:48] rektide: ?
[04:49] rektide: anyways....
[04:49] cagdas has joined the channel
[04:49] mikeal: i gotta make some popcorn
[04:49] tmpvar: heh
[04:49] mattly has joined the channel
[04:49] rektide: i should stop pretending like i'm doing anything useful and roll out
[04:50] tmpvar: boom
[04:50] rektide: headshot
[04:51] tmpvar: ok, so im curious.. and i intend on proofing this
[04:51] tmpvar: but.. can i modify a prototype of a module i'm require()ing?
[04:52] frodenius: there is stuff on the mailing list
[04:52] inimino: .oO( ...? )
[04:52] frodenius: about using a more prototypal style with require
[04:52] Tim_Smart: tmpvar: I think so, looking at the cache system, it caches the 'exports' object
[04:53] frodenius: but usually you just use eports and change the prototypes of those exports
[04:53] inimino: a module doesn't have a prototype
[04:53] frodenius: *exports
[04:54] inimino: tmpvar: what do you mean by "modify a prototype of a module"?
[04:54] Tim_Smart: inimino: I assume he was meaning modify the prototypes contained in a module, and have them affect all instances
[04:54] inimino: oh...
[04:54] inimino: well, sure, then
[04:55] inimino: yeah, you can do that
[04:55] tmpvar: sorry, i went off and tried it
[04:55] inimino: a module is just a file full of code... the system runs it with an 'exports' object in scope and gives you back that object with whatever the module did do it
[04:56] inimino: that's it, that's the whole module system
[04:56] inimino: everything else is just plain old regular JavaScript semantics
[04:57] tmpvar: hrm.
[04:57] tmpvar: not sold
[04:58] inimino: hm?
[04:59] JimBastard has joined the channel
[05:00] tmpvar: http://gist.github.com/298927
[05:01] JimBastard: sup
[05:01] tmpvar: sorry faulty paste
[05:01] tmpvar: what up JimBastard
[05:02] inimino: tmpvar: what's the trailing dot on line 9?
[05:02] tmpvar: http://gist.github.com/298927
[05:02] tmpvar: yeah, that was faulty
[05:02] tmpvar: i hope this is just a slow moment for me. haha
[05:03] tmpvar: sorry
[05:03] JimBastard: tmpvar you know anything about PEGs?
[05:03] tmpvar: yep
[05:03] tmpvar: slow moment
[05:03] tmpvar: umm, a small bit, whats up?
[05:03] mikeal has joined the channel
[05:04] JimBastard: i started up this opensource project with a few coworkers over the weekend
[05:04] brainproxy has joined the channel
[05:04] JimBastard: got a google doc going
[05:04] JimBastard: working name is "Mr. Regex"
[05:04] tmpvar: have you written code?
[05:04] tmpvar: or its all conceptual?
[05:04] inimino: tmpvar: so it's working now?
[05:04] JimBastard: its more of a DSL , so writing the language and regex equivs
[05:05] JimBastard: maybe gonna use treetop
[05:05] tmpvar: inimino, yeah.. i was having a moment.. thanks for listening hah
[05:05] JimBastard: sup inimino
[05:05] inimino: hey JimBastard
[05:05] JimBastard: you wanna peep this thing im working on? whats your gmail
[05:05] tmpvar: JimBastard, ah, hook it up :P
[05:05] JimBastard: ill send an invite now
[05:05] tmpvar: tmpvar@gmail.com
[05:05] inimino: inimino@inimino.org
[05:05] inimino: JimBastard: you're using Ruby?
[05:06] JimBastard: well IM not
[05:06] JimBastard: but someone is
[05:06] JimBastard: ahaha
[05:07] Tim_Smart: tim@fostle.com >.> Did I miss the doyouhaveanemail competition?
[05:07] JimBastard: ahaha
[05:07] omygawshkenas has joined the channel
[05:08] unomi has joined the channel
[05:08] JimBastard: so ya, its very very broken now in syntax
[05:08] JimBastard: im aiming to have it work with really small cases first
[05:08] JimBastard: and then move forward and possibly break the syntax
[05:08] JimBastard: feel free to make edits
[05:09] omygawshkenas: JimBastard: (looking at the log) -- what's the DSL for?
[05:09] tmpvar: is this really peg? or an implementation upon a peg parser?
[05:09] tmpvar: really peg, wtf
[05:11] tmpvar: time for me to roll out
[05:11] tmpvar: peace!
[05:12] inimino: looks like SQL
[05:13] rektide: why stop at pegs?
[05:14] JimBastard: i gotta write it as a peg
[05:14] rektide: just go straight to ometa
[05:15] JimBastard: thats not a bad idea
[05:15] JimBastard: im still trying to make it work on paper first
[05:16] JimBastard: i need a regex monkey too , so he can figure out the regex equivalents for each "noun"
[05:16] omygawshkenas: JimBastard: I'm curious -- is there a link you can share?
[05:16] JimBastard: we just got a google doc going
[05:17] JimBastard: its really basic now
[05:17] JimBastard: i can send invite if you want
[05:17] omygawshkenas: sure
[05:18] omygawshkenas: jeremy at ashkenas dot com
[05:18] inimino: JimBastard: what's this for?
[05:19] JimBastard: ohh heeeh
[05:19] JimBastard: forgot your irc name
[05:19] JimBastard: inimino so i never have to write regex ever again
[05:19] inimino: hehe
[05:19] JimBastard: ill ask mr. regex to do it
[05:19] JimBastard: (working title)
[05:20] inimino: and it gives you a regex?
[05:20] JimBastard: yeah
[05:20] JimBastard: english in regex out
[05:21] JimBastard: mr. regex please find all "cake" and replace it with "pies", thanks!
[05:21] JimBastard: (non-matching operators are ignored)
[05:21] JimBastard: find "cake" replace "pies"
[05:21] JimBastard: then you get nouns
[05:22] JimBastard: like url, date, email, letters, numbers, credit card, etc
[05:22] JimBastard: and you can build more nouns
[05:22] inimino: hm...
[05:23] JimBastard: you think its a good idea?
[05:24] inimino: hm, hard to say
[05:24] inimino: maybe
[05:26] JimBastard: it would make a nifty little webpage
[05:26] JimBastard: to start
[05:27] JimBastard: aight i gotta get back to real work
[05:27] JimBastard: bbl
[05:28] binary42 has joined the channel
[05:53] joshbuddy has joined the channel
[05:53] joshbuddy has joined the channel
[06:05] unomi has joined the channel
[06:08] aguynamedben has joined the channel
[06:12] erichocean has joined the channel
[06:38] micheil has joined the channel
[06:46] _sh has joined the channel
[06:52] rryan has joined the channel
[07:12] micheil_mbp has joined the channel
[07:12] micheil has joined the channel
[07:14] kennethkalmer has joined the channel
[07:18] micheil_mbp has joined the channel
[07:27] r11t has joined the channel
[07:50] micheil has joined the channel
[07:53] mikeal has joined the channel
[07:53] micheil_mbp has joined the channel
[07:57] ZhouYu has joined the channel
[08:02] blackdog` has joined the channel
[08:05] r11t has joined the channel
[08:17] jspiros has joined the channel
[08:20] paulca has joined the channel
[08:22] jed has joined the channel
[08:30] jspiros has joined the channel
[08:30] paulca has joined the channel
[08:31] piranha has joined the channel
[08:36] felixge has joined the channel
[08:36] felixge has joined the channel
[08:47] pdelgallego has joined the channel
[08:47] micheil has joined the channel
[08:50] tlrobinson__ has joined the channel
[08:50] tlrobinson___ has joined the channel
[09:15] olivvv has joined the channel
[09:19] teemow has joined the channel
[09:33] ijsthijs has joined the channel
[09:35] blackdog` has joined the channel
[09:47] paulca has joined the channel
[09:48] markwubben has joined the channel
[10:01] sveimac_ has joined the channel
[10:15] geelen has joined the channel
[10:27] sveimac has joined the channel
[10:27] sveimac has joined the channel
[10:30] sztanpet has joined the channel
[10:41] ithinkihaveacat has joined the channel
[10:43] lifo has joined the channel
[11:00] lifo_ has joined the channel
[11:10] felixge_ has joined the channel
[11:12] _sh has joined the channel
[11:14] elliottcable: ’sup noders?
[11:26] zmoog has joined the channel
[11:27] bryanl has joined the channel
[11:31] edds has joined the channel
[12:05] rtomayko has joined the channel
[12:12] rolfb has joined the channel
[12:20] joshbuddy has joined the channel
[12:20] joshbuddy has joined the channel
[12:41] piranha_ has joined the channel
[12:57] bryanl has joined the channel
[13:11] piranha has joined the channel
[13:17] charlenopires has joined the channel
[13:30] mahemoff has joined the channel
[13:35] joshbuddy has joined the channel
[13:35] joshbuddy has joined the channel
[13:51] atcrabtree has joined the channel
[14:04] unomi has joined the channel
[14:07] rudebwoy has joined the channel
[14:09] kriszyp has joined the channel
[14:14] davidsklar has joined the channel
[14:16] brandon_beacher has joined the channel
[14:17] blackdog` has joined the channel
[14:33] Booster has joined the channel
[14:50] bronson has joined the channel
[14:51] cloudhead has joined the channel
[14:54] dnolen has joined the channel
[14:54] bryanl has joined the channel
[14:54] felixge_: is anybody working on a tag soup parser for node?
[14:58] _nate_ has joined the channel
[15:02] zoka has joined the channel
[15:04] dnolen has joined the channel
[15:10] atcrabtree: for long polling, is anyone familiar with the reason for the need to kill any hanging requests at a predefined interval?
[15:10] atcrabtree: or with nodejs, is that not an issue? maintaining an infinitely long / open request
[15:14] alex-desktop has joined the channel
[15:15] charlenopires has joined the channel
[15:17] paul_ has joined the channel
[15:22] pmuellr has joined the channel
[15:23] bentomas has joined the channel
[15:31] binary42 has joined the channel
[15:31] CraigW has joined the channel
[15:32] dnolen_ has joined the channel
[15:48] steadicat has joined the channel
[15:54] joshbuddy has joined the channel
[15:54] joshbuddy has joined the channel
[15:57] inimino: nice quiz :-)
[15:57] inimino: oops
[15:58] inimino: ...wrong channel
[15:59] dgouldin has joined the channel
[16:00] sudoer has joined the channel
[16:01] felixge_: atcrabtree: I believe some browsers will naturally time out, so killing the request yourself helps you to have more control / consistency with it
[16:03] atcrabtree: felixge_: awesome. thx. my CTO insists reinitializing request every 30 seconds will take up significant resources, I don't know much about that SA side of things, but I know node is supposed to be highly concurrent and resource light
[16:04] felixge_: atcrabtree: I think the re-connect will be the least of your worries
[16:05] felixge_: I think the other problem is that you wouldn't know if the request went stale
[16:05] felixge_: due to network issues
[16:05] ryah: good morning
[16:05] inimino: well, in case anyone wants to see the quiz: http://perfectionkills.com/javascript-quiz/
[16:05] inimino: ryah: morning
[16:05] felixge_: ryah: morning. I was crying for an XML/HTML parser all day :(
[16:06] felixge_: If somebody writes that for me I'll build a full AWS module for all of their services :)
[16:06] ryah: felixge_: have you checked out isaacs's ?
[16:06] felixge_: ryah: no, I didn't know he was crazy enough to work on it
[16:08] felixge_: ryah: I'll check it out
[16:09] ryah: felixge_: http://github.com/isaacs/sax-js
[16:10] ryah: i was thinking this morning.. node is pretty cool :)
[16:10] ryah: happy it's come this far
[16:11] ryah: i think i'm going to write a roadmap email today
[16:11] ryah: try to map out the next few months
[16:13] davidjrice: felixge_: hey dude
[16:13] inimino: ryah: great
[16:13] davidjrice: I had a think about the fab + static html issue. Could render some html via fab with authentication okay right?
[16:15] technoweenie has joined the channel
[16:19] cagdas has joined the channel
[16:22] paulca has joined the channel
[16:23] gbot2 has joined the channel
[16:24] creationix has joined the channel
[16:25] tmpvar has joined the channel
[16:28] creationix: does anyone know how to make node's "make test" run only a particular test and not the entire suite?
[16:29] inimino: creationix: you can just run the test
[16:29] inimino: node tests/foo.js
[16:29] creationix: ok, so they run standalone then, that will save me a lot of time
[16:30] inimino: yep
[16:30] creationix: sweet works. I'm refactoring sys.inspect to be more reliable and a lot simpler code
[16:32] ryah: creationix: nice
[16:32] technoweenie has joined the channel
[16:32] ryah: ACTION likes less code
[16:33] creationix: It's now just a single function with a nested recursive function inside it, no crazy maze of intermingled callbacks.
[16:33] felixge_: davidjrice: yeah, but the way fab is build right now it would be hard to add auth to a page served by paperboy - but I talked with jed about it and he may change things a bit
[16:33] davidjrice: felixge_: oh, sure
[16:33] davidjrice: what I'm talking about is instead rendering a view
[16:34] davidjrice: that would work imho
[16:34] felixge_: davidjrice: yeah, that should be pretty simple
[16:34] davidjrice: awesome
[16:34] felixge_: davidjrice: and the auth would work
[16:35] vickaita has joined the channel
[16:37] rryan has joined the channel
[16:41] paul_ has joined the channel
[16:42] ryah: isaacs parser doesn't look so bad
[16:42] ryah: :)
[16:43] ryah: what i really want is a sax parser with a jquery frontend
[16:44] ryah: jquery-like i should say
[16:44] ryah: and maybe a dom frontend too
[16:51] ako has joined the channel
[16:51] creationix: ryah: inspect patch http://gist.github.com/299390
[16:51] kriszyp_ has joined the channel
[16:52] ryah: creationix: is that for a particular bug?
[16:52] creationix: there was one yes
[16:52] creationix: http://github.com/ry/node/issues/#issue/61
[16:52] creationix: and one I never filed where you can't see hidden(not enumerable) properties
[16:53] ryah: creationix: i'd perfer you didn't pre-declare local variables
[16:53] creationix: why is that?
[16:53] ryah: it's hard to see that they're not being declared global
[16:55] creationix: I can see that. The reason I do it is because Javascript moves them to the top regardless of where you declare them and I've had some nasty bugs in the past because I didn't pre-declare them.
[16:55] creationix: I can move them if you want though
[16:55] creationix: this function is small enough
[16:55] ryah: it's not a big deal. just for next time
[16:55] jdee has joined the channel
[16:56] ryah: i think its easier to remember that js declares them at the top of the scope than to accidentally forget a 'var'
[16:56] felixge_: ryah: by jQuery frontend you mean something like xpath?
[16:57] ryah: felixge_: i like the css selectors
[16:57] felixge_: ryah: I'm actually just thinking about building something like this
[16:57] felixge_: ryah: so you'd get events firing for matching selectors, right
[16:57] felixge_: ?
[16:58] ryah: yeah
[16:58] felixge_: ryah: what about the sub-nodes, would those get buffered before firing the event?
[16:58] ryah: well, i guess there could be different things
[16:58] ryah: $("input[name*='man']").val("has man in it!");
[16:58] ryah: ^-- nice
[16:58] felixge_: another problem is that '#' and '.' selectors a meaningless as there are no ids/classes
[16:58] felixge_: unless you deal with HTML
[16:59] felixge_: I guess
[16:59] felixge_: ryah: oh, so you want something that modifies the data as well?
[16:59] ryah: having something to work with xml easily would be great
[16:59] felixge_: ryah: I guess that would require a DOM implementation
[16:59] ryah: shrug
[16:59] ryah: i guess
[17:00] ryah: or we could rewrite it
[17:00] felixge_: ryah: rewrite the stream?
[17:00] ryah: i guess having a DOM would be useful though
[17:00] ryah: i mean just have jquery on top of a sax parser
[17:01] ryah: i have the application of using node for scraping
[17:01] ryah: not that i actually want to do that - i just think it's a good general purpose use-case
[17:01] felixge_: ryah: yeah, I think so too
[17:02] felixge_: ryah: but you'd probably be limited to selectors
[17:02] ryah: like it or not (and ___jan definitely hates it) but HTML is one of the major communication protocols of our civilization
[17:02] felixge_: I guess you could use it to act as a filter as well, that outputs a second SAX stream
[17:02] ryah: we should have good support for it
[17:02] charlenopires has joined the channel
[17:03] felixge_: yeah, html has a certain adoption that's hard to deny
[17:03] felixge_: ;)
[17:03] ryah: i'd like to be able to do selectors on a stream
[17:03] ryah: but mutable buffered documents also are useful
[17:04] RayMorgan has joined the channel
[17:04] felixge_: I think I have an idea
[17:04] felixge_: let me play with it
[17:04] ryah: the basis of this should be a nice sax parser
[17:04] ryah: and i think it can be done quite fast in js
[17:06] felixge_: ryah: what's wrong with isaacs ?
[17:06] felixge_: looks good to me
[17:06] ryah: needs tests
[17:07] ryah: looks like a good start
[17:07] ayo has joined the channel
[17:07] felixge_: ryah: yeah
[17:10] CIA-78: node: 03Tim Caswell 07master * re33c666 10/ (lib/sys.js test/mjsunit/test-sys.js): Rewrite sys.inspect to be more reliable and handle crazy edge cases. - http://bit.ly/9kc6RE
[17:10] ryah: creationix: thanks--^
[17:10] tmpvar has joined the channel
[17:10] creationix: ryah: just a sec
[17:10] creationix: I'm updating the api.txt file and remove some debug statements from sys.js
[17:10] ryah: okay - do it in a separate commit
[17:10] creationix: ok, will do
[17:14] creationix: ryah: Di I just update the api.txt file or is there somewhere else that needs updating?
[17:15] ryah: creationix: yeah ust that
[17:16] creationix: http://gist.github.com/299423
[17:19] bpot has joined the channel
[17:22] creationix: ryah: Thanks for taking the patch, now I can work off mainline node again. Iminio convinced me my other outstanding patches don't belong in node so this was all I had left custom.
[17:23] CIA-78: node: 03Tim Caswell 07master * r3aca908 10/ (doc/api.txt lib/sys.js):
[17:23] CIA-78: node: Document the changes to sys.inspect's API.
[17:23] CIA-78: node: It now takes an optional showHidden argument that shows hidden/non-enumerable properties of objects.
[17:23] CIA-78: node: Also cleanup the lib/sys.js file a bit. - http://bit.ly/dl1CyX
[17:23] okito has joined the channel
[17:29] charlenopires has joined the channel
[17:31] kennethkalmer has joined the channel
[17:37] felixge_: ryah: I'm thinking the API could just add 'query' as a method to the parser and this returns a new parser that emits all SAX events below the selector
[17:37] felixge_: ryah: There should also be .buffer() function that can be used to buffer any SAX stream into a JSON object
[17:38] ryah: are you talking about isaacs's parser?
[17:38] felixge_: yeah
[17:38] felixge_: ryah: so you could do: parser.query('input[type=text]').buffer().addCallback(...;
[17:39] sveimac has joined the channel
[17:39] sveimac has joined the channel
[17:39] ryah: felixge_: yeah maybe. i don't like the chaining though.
[17:39] ryah: i just want this working:
[17:39] felixge_: ryah: why?
[17:39] ryah: var p = new Parser();
[17:40] ryah: p.onText = function (text) { puts(text); }
[17:40] ryah: p.execute(" [17:40] ryah: p.execute(">hello world")
[17:40] ryah: p.execute("

")
[17:40] ryah: p.finish()
[17:41] felixge_: ryah: issacs parser already supports that
[17:41] felixge_: it just used addListener() which I think is nicer
[17:41] ryah: yeah, i needs to be cleaned up a bit :)
[17:41] ryah: s/i /it /
[17:42] felixge_: anyway
[17:43] felixge_: I'm talking about building a layer on top of that
[17:43] ryah: i think the buffer thing should be in a higher layer
[17:43] felixge_: in the spirit of jQuery
[17:43] ryah: yeah
[17:56] eikke has joined the channel
[17:59] stephenlb has joined the channel
[18:00] felixge_: damn JS is nice
[18:01] felixge_: a buffer function that can be used to agument a SAX parser prototype: https://gist.github.com/46907a5f03198d7855d9
[18:01] felixge_: so simple
[18:01] felixge_: :)
[18:01] RayMorgan_ has joined the channel
[18:02] inimino: :)
[18:03] pmuellr has joined the channel
[18:04] rryan` has joined the channel
[18:08] qFox has joined the channel
[18:10] RayMorgan_ has joined the channel
[18:14] ericflo has joined the channel
[18:15] ryah: felixge_: :)
[18:17] okito has joined the channel
[18:21] mikeal has joined the channel
[18:23] dnolen has joined the channel
[18:24] onar has joined the channel
[18:27] ryah: i'm going to release a new version today
[18:27] ryah: ping me if i'm forgetting some patch
[18:28] mattly has joined the channel
[18:30] isaacs has joined the channel
[18:30] rryan`` has joined the channel
[18:30] isaacs: felixge_: wanna help with the sax?
[18:30] isaacs: i need to rewrite it a lot. pull stuff out of the ctor.
[18:30] gwoo: ryah: RAD
[18:30] gwoo: +1 for felixge_ working on sax
[18:30] gwoo: :)
[18:31] felixge_: isaacs: yeah. Well the first thing I'm interested in is adding a way to buffer and to query
[18:31] felixge_: isaacs: at that point I'd start to use it and care about fixing stuff
[18:31] isaacs: so, i think that a sax parser itself shoulnd't do those things.
[18:31] felixge_: isaacs: righty
[18:31] isaacs: but you could build it on top of that pretty easily.
[18:31] isaacs: it gives you everything you need.
[18:32] felixge_: isaacs: but I'd like the sax-js repo to include libs for it
[18:32] isaacs: if you wanted to build a dom out of it, you totallycould.
[18:32] mikeal: btw, sax-js looks awesome
[18:32] felixge_: isaacs: i.e. include lib/buffer.js : https://gist.github.com/46907a5f03198d7855d9
[18:32] mikeal: :)
[18:32] isaacs: right, i saw that.
[18:32] isaacs: at that point, maybe it makes sense to not call it sax-js, but rather xml-js or something
[18:32] felixge_: isaacs: and then do SAXParser.prototype.buffer = require('./buffer');
[18:32] okito has joined the channel
[18:33] isaacs: i see, so your buffer is building a domish tree thing
[18:33] felixge_: isaacs: or nax-js (Nice API for XML)
[18:33] isaacs: hahah
[18:34] felixge_: isaacs: yeah, the other thing I'd like is a .query() method which creates a child parser that only the parent events that match a given selector
[18:34] felixge_: isaacs: so you can stream an XML document but buffer the parts you are interested in
[18:34] isaacs: interesting.
[18:35] felixge_: isaacs: I'm thinking about using CSS as the query language
[18:35] felixge_: isaacs: XPath requires buffering and more people are familiar with CSS queries
[18:35] isaacs: yeah, xpath is rough
[18:36] mikeal: you don't need xpath
[18:36] isaacs: but building a good robust CSS parser is extraordinarily nontrivial.
[18:36] isaacs: check YUI or jQuery for examples.
[18:36] ryah: isaacs: http://pastie.org/816738
[18:36] mikeal: xpath is being replaced by selectors
[18:36] tmpvar: sizzle
[18:36] tmpvar: for css selectors
[18:36] mikeal: and if you have a DOM you can just stick sizzle on top of it
[18:36] isaacs: ryah: .execute instead of .write?
[18:37] ryah: isaacs: .execute is what i use for http - but it doesn't matter
[18:37] mikeal: everyone who was using xpath for windmill tests has moved to jquery locators because they are far less brittle and significantly faster
[18:37] isaacs: ryah: well, it'd be good to synchronize on a standardish api for streaming parsers.
[18:37] tlrobinson has joined the channel
[18:38] isaacs: ryah: they're all over the map right now
[18:38] isaacs: ACTION is partly responsible for this, of course.
[18:38] piranha has joined the channel
[18:39] ryah: isaacs: main thing - keep the interface very simple. no dependencies on eventemitter, nothing besides write() and finish()
[18:39] felixge_: isaacs: I don't think it's difficult if you applying it against a SAX stream
[18:40] felixge_: isaacs: it should be much simpler than applying the selector against the DOM
[18:40] ryah: isaacs: also, i see you're using nextTick there - that shouldn't be necessary
[18:40] ryah: this doesn't need any i/o
[18:40] isaacs: yeah, i kinda had the thought that it'd be parsing a stream
[18:41] isaacs: anddidn't go back and update it.
[18:41] isaacs: but you could always do something like myStream.addLIstener("data", function (chunk) { sax.write(chunk) })
[18:42] isaacs: so, yah, it's unnecessary to do the streaming stuff in the sax itself.
[18:42] felixge_: ryah: why not use event emitter?
[18:43] ryah: not necessary
[18:44] felixge_: ryah: not, but convenient
[18:44] felixge_: ryah: are you concerned about performance?
[18:45] tlrobinson has joined the channel
[18:45] isaacs: felixge_: well, i kinda see the point.
[18:46] isaacs: i mean, it adds a dependency, and it's largely unnecessary.
[18:46] isaacs: you're not likely to have more than one listener on a single sax parser's events.
[18:49] isaacs: and, actually, that's kinda how the Java SAX parsers all work. You write a class that implements the sax parser interface, and you put your handler functions in the right spots, and then you write 8000 lines of code and punch yourself in the face for choosing Java as a language.
[18:49] isaacs: but logically, it's the same as sax.ontext = myCallback
[18:49] ryah: felixge_: 1) slower 2) unnecessary coupling
[18:50] felixge_: ok, makes sense
[18:52] isaacs: felixge_: so, lemme get the second draft done, and then i'll bug you for help?
[18:52] isaacs: it's still very much a "lunchbreak hack" type of thing.
[18:53] Booster has joined the channel
[18:53] felixge_: isaacs: that's ok. It's a good start and I want to build a node-aws module implementing all aws services
[18:57] isaacs: hey, that'd be cool
[18:57] felixge_: yeah
[18:57] felixge_: but I need a good XML lib for that :)
[18:59] felixge_: once I got the aws module, I can build my server farm for scraping the entire web :)
[19:00] isaacs: i'd also like to see xmpp services with node.
[19:00] isaacs: sax-style parsing is key there.
[19:00] felixge_: yeah
[19:01] felixge_: Also RSS feed parsing will rock with this
[19:01] isaacs: oh, jeez, rss...
[19:01] isaacs: don't get me started on rss
[19:01] felixge_: because RSS can be just as messy as HTML due to the people who implemented it
[19:01] felixge_: ;)
[19:01] isaacs: yeah
[19:01] konobi: someone ported XMPP libs to node recently, right?
[19:02] mikeal: really?
[19:02] mikeal: XMPP is more XML than normal humans can handle :P
[19:03] ryah: yeah
[19:03] rryan``` has joined the channel
[19:03] ryah: i don't think the code is online yet
[19:04] konobi: Matthew Wild ported Strophe.js to Node.js! Server side XMPP JavaScript WIN!!! # fosdem #xmpp
[19:04] konobi: (to quotes)
[19:05] ryah: http://xmppjs.prosody.im/
[19:06] ryah: vaporware
[19:07] bryanl has joined the channel
[19:07] tmpvar: poof! ... and for my next trick..
[19:08] onar has joined the channel
[19:10] felixge_: isaacs: alright, I have a few diffs against the current version of sax-js, but I'll wait for your changes before I push them out, ok?
[19:11] isaacs: felixge_: yeah, i'd wait. i can virtually guarantee that they won't apply cleanly.
[19:11] isaacs: or, i should merge it in now before i do anything .
[19:11] tlrobinson has joined the channel
[19:11] felixge_: isaacs: np, they are tiny changes. Really just augmenting the prototoype with my buffer and the query thing I started on
[19:11] felixge_: :)
[19:11] isaacs: oh, ok
[19:12] felixge_: isaacs: I'll update them once you got the new stuff out
[19:12] isaacs: yeah, i think maybethat should wait.
[19:12] isaacs: since it'll have to change all over the place anyhow.
[19:12] felixge_: kk
[19:16] felixge_: isaacs: one request, in loose mode could you lowercase tag name's instead of uppercase?
[19:16] isaacs: felixge_: that's to do it the way that html parsers do.
[19:16] felixge_: isaacs: no biggie, but nice since we already do that with headers in node
[19:16] isaacs: ie, browsers.
[19:16] konobi: browsers are stupid
[19:16] isaacs: yeah, ucase sucks, i know.
[19:16] isaacs: but that's the standard for HTML.
[19:16] felixge_: hm
[19:16] isaacs: there's tons of code out there doing if (this.tagName === "DIV")
[19:17] tmpvar: but thats a dom function
[19:17] isaacs: sure
[19:17] isaacs: but it's the parser that does that.
[19:17] felixge_: isaacs: I think we should be able to pass an option array to the parser
[19:17] felixge_: isaacs: make the default lowercase, but let people specify which way they want
[19:17] isaacs: go back in time and convince the standards committees they're idiots.
[19:17] tmpvar: i dont think thats a requirement
[19:17] jdee: hi guys. can I ask whats the best method of updating the client screen without refresh? does node.js go some way to solving cross domain ajax restrictions?
[19:17] tmpvar: createElement("div") in html mode should make this.tagName==="DIV"
[19:17] felixge_: or have the guts and fuck what everybody else is doing :)
[19:18] konobi: ryah: thought about doing anything similar to ctypes?
[19:18] felixge_: I mean it's not like anybody is gonna use legacy DOM code with a node.js SAX parser
[19:18] ryah: konobi: is that python?
[19:18] konobi: (way out there in terms of timelines, etc,etc)
[19:18] konobi: yup
[19:18] konobi: http://python.net/crew/theller/ctypes/
[19:18] tmpvar: felixge_, i am :P
[19:18] isaacs: jdee: nodejs isn't a client-side dhtml library. but you could use jquery or yui to make ajax requests, or do comet stuff, or whatever.
[19:19] tmpvar: but im saying.. case sensitive tag names are ok in the parser
[19:19] tmpvar: unless there is a requirement in sax itself...
[19:19] isaacs: the requirement is in html parsing.
[19:19] isaacs: ifyou do blah then the tag is closed.
[19:19] isaacs: but not in XML mode.
[19:19] isaacs: because in XML, and are different
[19:20] felixge_: isaacs: what about just internally lowercasing the tagname in loose mode
[19:20] ryah: konobi: not really. would be cool though.
[19:20] tmpvar: its in the dom
[19:20] felixge_: isaacs: but passing the original casing to the event handler ?
[19:20] tmpvar: not in the parser lol
[19:20] ryah: konobi: someone was working on a libffi thing
[19:20] isaacs: felixge_: then i have to maintain two things.
[19:20] isaacs: meh.
[19:20] felixge_: isaacs: right, don't
[19:20] felixge_: hm :|
[19:20] felixge_: well fuck it, leave it uppercase
[19:20] isaacs: the parsers i played with in loose mode uppercase the tag names.
[19:20] felixge_: not like I care that much
[19:20] isaacs: yeah, i don't like it either.
[19:21] isaacs: it's hard to look at.
[19:22] tmpvar: i wouldn't do it
[19:23] tmpvar: but then again, who cares.. its one line of code to u/lcase
[19:23] felixge_: ryah: did you ever have a chance to look into stderr failing to output long strings?
[19:24] isaacs: so, i'm probably going to add an "options" object to the sax parser. if you pass in true/false it'll just be a strict switch, but otherwise it'll be an object so you can customize some things like this.
[19:24] isaacs: but the default will remain uppercase.
[19:24] ryah: felixge_: no
[19:24] isaacs: felixge_: that's also for the trimming whitespace thing.
[19:24] ryah: felixge_: stderr is just bound to fprintf(stderr)
[19:24] okito has joined the channel
[19:25] ryah: felixge_: so - either its a problem with stdio.h or it's missing a fflush() somewhere :)
[19:25] isaacs: btw, i've found piping to cat seems to make it work.
[19:25] isaacs: not sure why
[19:25] felixge_: ryah: maybe some cosmic rays hit my RAM when compiling my toolchain :(
[19:26] felixge_: isaacs: so you have the same problem with stderr?
[19:26] isaacs: yeah
[19:26] isaacs: node big-long-error.js 2>&1 | cat works though
[19:26] felixge_: ryah: I was debugging the stderr thing for quite a bit and tried stuff like adding fflush(), but no luck
[19:26] geoff_blair has joined the channel
[19:27] isaacs: multiple little writes always seem to work, but one big write always fails.
[19:27] isaacs: gets the end cut off.
[19:27] isaacs: also, type "process" in the repl, same deal.
[19:27] felixge_: isaacs: crazy, yeah
[19:27] felixge_: isaacs: I get the same
[19:27] felixge_: I'd say it's specific to OSX, but it seems that isn't the case
[19:27] felixge_: I get it on Linux as well
[19:27] isaacs: interesting
[19:28] felixge_: but it's gotta be terminal related somehow
[19:28] tmpvar: same, it is a problem in linux
[19:28] ryah: felixge_: send me a unit test commit - i'll submit it
[19:28] felixge_: ryah: it cannot be unit tested
[19:28] felixge_: ryah: I tried an eloquent test with child processes and everything.
[19:28] felixge_: ryah: the problem only appear when the text goes to the terminal
[19:29] felixge_: ryah: just type 'node-repl' and 'process' to see it
[19:29] felixge_: ryah: as isaac said
[19:29] felixge_: * isaacs
[19:30] felixge_: ryah: whenever you find a quite moment that would be a really awesome bug to look into, I mean it's annoying me every other day or so when working with node : )
[19:30] ryah: oh
[19:30] felixge_: I could imagine it to be related to converting the JS string to char
[19:30] felixge_: but the amount of text displayed in the terminal can actually vary
[19:30] felixge_: randomly it seems
[19:31] tmpvar: this is the issue where it chops the end of the output off?
[19:31] isaacs: felixge_: it's very consistent to me.
[19:31] felixge_: tmpvar: yeah
[19:31] felixge_: isaacs: I've seen it vary
[19:31] isaacs: piping to a file always works.
[19:31] felixge_: by multiples of 256, 512, 1024
[19:31] isaacs: or to cat
[19:31] isaacs: ah, interesting.
[19:31] tmpvar: isaacs, ive had it fail when piping to a file
[19:31] felixge_: piping to a file / cat work for me
[19:31] ryah: meh. now you've got me looking at it :/
[19:31] felixge_: :)
[19:31] felixge_: ryah: sorry
[19:31] felixge_: :)
[19:32] felixge_: isaacs: think this format could work for buffering?
http://pastie.org/816843
[19:33] felixge_: isaacs: node's are objects, text is strings
[19:33] felixge_: pretty simple, but works great
[19:34] isaacs: yeah
[19:34] isaacs: with just a tiny bit of effort, you could put in getters for innerHTML and innerText
[19:35] tmpvar: did I miss something? what is that referring to?
[19:36] felixge_: isaacs: I guess that would be nice to have
[19:36] felixge_: isaacs: would you mind using 'innerData' to stay neutral?
[19:36] felixge_: isaacs: or 'innerSoup' ?
[19:36] isaacs: haha
[19:36] isaacs: it's up to you
[19:36] isaacs: i'm sure there'll be a lot of opinions
[19:37] felixge_: tmpvar: this is a format for converting XML -> JSON
[19:37] quirkey has joined the channel
[19:37] felixge_: tmpvar: which I'd like to contribute to isaacs SAX parser for buffering nodes
[19:37] isaacs: well, it's a format for converting xml->object
[19:37] isaacs: it's lighter than the w3c dom, but it IS a dom
[19:38] felixge_: isaacs: if you add the getters it's not JSON anymore, yeah
[19:38] felixge_: isaacs: right, whatever : ). It's simple
[19:39] tmpvar: i hear that
[19:39] tmpvar: much lighter.. i like light haha
[19:39] tmpvar: i mean.. i probably could get away with implementing just enough to appease sizzle and be done with the dom haha
[19:39] mindware has joined the channel
[19:43] tlrobinson has joined the channel
[19:43] felixge_: tmpvar: I would expect sizzle to have quite some browser-specific code in it
[19:43] felixge_: tmpvar: with agent checks and crazyness all over the place
[19:43] felixge_: not sure how easy it would be to port
[19:44] tmpvar: yeah, there are a ton of checks
[19:44] tmpvar: mostly feature sniffs though
[19:44] tmpvar: which is fine
[19:45] blackdog` has joined the channel
[19:45] jwm: anyone know of any other node websocket projects
[19:46] jwm: other than the one I found on google heh
[19:47] gwoo: the plurk one?
[19:48] jwm: it includes a redis logger
[19:48] jwm: damn firecrap crashed again
[19:48] jwm: 3.6 sucks
[19:48] gwoo: jwm: creationix and others were working on a new post for howtonode
[19:49] jwm: heh
[19:49] jwm: hmm
[19:49] jwm: well I've got it running was just curious
[19:49] jwm: this is actually perfect since I needed a good redis example too
[19:49] jwm: killed two birds with one stone
[19:49] jwm: hehe
[19:50] jwm: I know about redis-node-client too I haven't looked at it yet
[19:50] paulca has joined the channel
[19:52] kriszyp has joined the channel
[19:54] felixge_: isaacs: Ecma5 supports String.trim() - should come in very handy when adding support for auto-trimming text nodes :)
[19:55] isaacs: felixge_: well, i'll just skip over whitespace in that case.
[19:55] felixge_: do web workers support cross-domain requests?
[19:55] isaacs: if (is(whitespace, c) && options.trimText) { continue; } or something
[19:55] felixge_: * web sockets
[19:55] felixge_: isaacs: even nicer :)
[19:55] rictic has joined the channel
[19:55] isaacs: well, not quite that..
[19:55] isaacs: if (is(whitespace, c) && options.trimText && !textNode) { continue; }
[19:56] isaacs: that'll trim the beginning... not sure about the end. also, maybe you want to actually not just trim, but normalize, so all whitespace gets shortened to a single space.
[19:56] isaacs: yeah, mabye just doing a trim() and then not emitting if it's "" would be best.
[19:57] felixge_: isaacs: yes.
[19:57] felixge_: isaacs: I don't want to normalize
[19:57] quirkey has joined the channel
[19:57] felixge_: isaacs: trim + check for "" = win
[19:58] isaacs: normalizing would be nice, too, though
[19:58] felixge_: isaacs: for what?
[19:59] isaacs: i dunno.
[19:59] isaacs: if you just want to get the text value of a node, and don't care about whitespace except as adelimiter, i guess
[20:00] felixge_: isaacs: let's not implement that until somebody needs it
[20:00] felixge_: isaacs: I don't see value in it
[20:00] isaacs: well, that's the "logical value" of text nodes.
[20:00] isaacs: since whitespace in html/xml is not relevant past the first char.
[20:00] isaacs: that's why proxies sometimes squish it all out.
[20:01] isaacs: but, ok, normalize and trim are two separate concerns.
[20:09] felixge_: isaacs: right, I guess you could support normalize if you care :)
[20:10] figital has joined the channel
[20:10] gf3 has joined the channel
[20:10] figital: is this a good place for a v8cgi question?
[20:12] isaacs: ugh, autoclosing html rules...
[20:12] isaacs:

hello

world.
[20:12] isaacs: ew.
[20:13] tmpvar: thats a "small" pain, no?
[20:14] isaacs: tmpvar: that's a really annoying pain.
[20:14] isaacs: :)
[20:14] isaacs: like a "screw it, make html an extension" kinda pain.
[20:14] isaacs: but yeha.
[20:14] isaacs: it's doable. the rules are well documented.
[20:14] tmpvar: yeah
[20:14] tmpvar: where is this documented?
[20:17] sveisvei has joined the channel
[20:18] RayMorgan has joined the channel
[20:19] isaacs: tmpvar: http://www.w3.org/TR/html4/strict.dtd
[20:20] teemow has joined the channel
[20:21] isaacs: but i worry that that's getting too far down the road of validation.
[20:22] isaacs: there's a lot of edge cases there.
[20:22] isaacs:

hello
[20:22] isaacs: etc.
[20:22] stephenlb: isaacs: auto closing does indeed rule
[20:22] joshbuddy has joined the channel
[20:22] isaacs: some parsers will turn that into

hello


[20:22] joshbuddy has joined the channel
[20:22] isaacs: and others will turn it into

hello


[20:23] stephenlb: heh
[20:24] isaacs: early html specs basically let anything go inside anything else, and later ones said that blocks can't go inside inlines, and so you've got this odd tension between backwards compatibility and "correctness"
[20:24] isaacs: for now, if you're using sax-js, close your tags.
[20:24] stephenlb: good to know.
[20:24] isaacs: but that makes it much weaker as an html parser.
[20:25] isaacs: which is a shame.
[20:25] isaacs: need to make that work eventually.
[20:25] deanlandolt: isaacs: "screw it, make html an extension"
[20:25] isaacs: yep
[20:25] deanlandolt: xml parsing is xml parsing...html parsing is something else entirely
[20:25] jdee has joined the channel
[20:26] deanlandolt: start going down that road and you might as well implement sgml parsing ;)
[20:26] isaacs: so far, i've been basically saying that non-strict mode IS html mode, but that's not right.
[20:26] deanlandolt: (yes, i stil have to work in sgml for the federal gov't)
[20:26] tmpvar: isaacs, what about things like ?
[20:26] isaacs: tmpvar: so, i'm self-closing the self-closing tags in loose mode.
[20:26] isaacs: and, in loose mode, /> is ignored, because html doesn't actually care about that.
[20:27] tmpvar: got ya
[20:27] isaacs: so
is still an opening tag.
[20:27] isaacs: but in strict mode,
is self-closing.
[20:27] eikke has joined the channel
[20:27] brapse has joined the channel
[20:28] pdelgallego has joined the channel
[20:28] isaacs: but really, all the html-specific stuff needs to be pulled out, and just done as a subclass or something.
[20:29] ithinkihaveacat has joined the channel
[20:32] mikeal has joined the channel
[20:32] felixge_: isaacs: Use the WWWD-principle when in doubt
[20:32] felixge_: isaacs: = what would webkit do?
[20:32] isaacs: hehe
[20:33] felixge_: deanlandolt: the main point of writing a non-strict SAX parser is to support HTML
[20:33] felixge_: deanlandolt: isaacs's parser would have a hard time actually complying to the real XML spec
[20:33] felixge_: (because it's a long and ugly monster with more exceptions than rules)
[20:34] deanlandolt: felixge_: heh...i'm aware of just how hideous it is but still, html's got even more exceptions ;)
[20:34] isaacs: well, xml itself isn't THAT wonky of a language.
[20:35] felixge_: isaacs: I actually wouldn't even try to go by the HTML spec
[20:35] isaacs: in strict mode, this sax parser is pretty good.
[20:35] deanlandolt: isaacs: not that wonky? just look at the rules for legal element names...ugh
[20:35] isaacs: ok, so there's that..
[20:35] isaacs: .
[20:35] isaacs: i'm doing "Starts with a char, contains nothing but alphanums, underbar, dash, and colon"
[20:36] deanlandolt: yeah, that's close enough
[20:36] isaacs: i'm aware that you can use all manner of utf chars in there, though
[20:36] _nate_ has left the channel
[20:36] isaacs: <üî> is a valdi XML tag
[20:36] isaacs: and i've seen japanese xml
[20:36] deanlandolt: like felixge_ said, actually /complying/ would be insanity...but Good Enough is fine
[20:37] felixge_: yeah
[20:37] felixge_: I think we should have a pragmatic parser that is easy to fix when problems occur
[20:38] felixge_: whoever invented XML/HTML has probably caused IT overhead in the excess of a small financial crisis :)
[20:39] deanlandolt: felixge_: aye, but look at the alternatives available at the time
[20:39] deanlandolt: everyone rolling their own parsers for /everything/
[20:39] felixge_: deanlandolt: My doctor told me health insurance doesn't cover self-induced eye cancer
[20:39] felixge_: ;)
[20:39] deanlandolt: i'm sure it seemed like the right thing at the time :D
[20:44] tlrobinson has joined the channel
[20:47] voodootikigod has joined the channel
[20:48] jackyyll: Just made this using node.js + websockets :D http://xdg.us/chat.html .. It's still very basic though
[20:48] piranha has joined the channel
[20:49] jackyyll: nevermind i broke something.
[20:51] joshbuddy has joined the channel
[20:51] joshbuddy has joined the channel
[21:07] felixge_: ryah: did you look at the stderr thingie?
[21:11] ryah: no
[21:11] dgouldin_ has joined the channel
[21:19] lifo has joined the channel
[21:24] n8o has joined the channel
[21:26] okito has joined the channel
[21:29] felixge_: ryah: congratz on release
[21:29] felixge_: ;)
[21:31] bronson has joined the channel
[21:33] piranha has joined the channel
[21:33] CIA-78: node: 03Ryan Dahl 07master * r49de41e 10/ (ChangeLog doc/api.txt doc/index.html wscript): bump version - http://bit.ly/aMjsyd
[21:34] mikeal: the "Module system refactor", does that include the hot reloading?
[21:35] ryah: no
[21:35] mikeal: ok, cool
[21:42] mikeal: ryah: do you have a list of anything you want for future releases?
[21:42] mikeal: like, if I'm bored some night and wanted to write something, is there a wish list :)
[21:45] hassox has joined the channel
[21:46] rektide: wait mikeal isnt mickael, *sigh*
[21:47] mikeal: it's hard to keep all the crazy spellings in order :)
[21:51] ryah: mikeal: i'm writing a roadmap email right now
[21:51] ryah: with the hope that people can help me doing feature development
[21:51] eikke has joined the channel
[21:57] rektide: what is being roadmapped?
[21:58] hassox: morning folks
[21:58] rektide: sax parsing work? or?
[21:59] RayMorgan: rektide: future features of Node
[21:59] rektide: i assign my zero votes to magical balloons
[22:04] tilgovi has joined the channel
[22:04] okito has joined the channel
[22:09] CIA-78: node: 03Ryan Dahl 07master * r88b9359 10/ src/node_stdio.cc : Fix stderr flushing problem - http://bit.ly/9EKUSv
[22:09] ryah: felixge_: ---^
[22:10] ryah: well, at least i think it fixes it
[22:10] felixge_: ryah: <3 !!
[22:10] felixge_: ryah: I'll try it now
[22:17] inimino: isaacs: HTML5 actually does define parsing in enough detail to write a useful-in-the-real-Web HTML parser
[22:17] inimino: (HTML4 did not)
[22:17] isaacs: inimino: sure, but how much of the web is conformant html5?
[22:18] inimino: isaacs: HTML5 doesn't just define how to parse conforming HTML5
[22:18] isaacs: inimino: i guess you could just use html5's failure definitions
[22:18] inimino: it defines how to parse the Web
[22:18] inimino: (all of it)
[22:18] isaacs: right
[22:18] inimino: as browsers do, which is what you want
[22:19] inimino: "you" meaning "someone that wants an HTML parser"
[22:20] inimino: not sure you really want to implement full HTML parsing in JavaScript :)
[22:21] isaacs: inimino: that is sort of the plan, yes
[22:21] binary42 has joined the channel
[22:22] isaacs: node now has parsing capabilities for http, multipart, querystrings, urls, etc. it'd be good to have a streaming html parser, too
[22:24] jdee has joined the channel
[22:26] ryah: felixge_: does it work?
[22:28] okito has joined the channel
[22:28] unomi has joined the channel
[22:29] isaacs: ryah: now,instead of cutting off, i get this: https://gist.github.com/08e3b994246672150047
[22:29] isaacs: looks like the flush is tripping a Error: Resource temporarily unavailable
[22:31] r11t has joined the channel
[22:36] mikeal has joined the channel
[22:38] ithinkihaveacat: ryah: i have a patch that adds a (passing) test for some event things, is this something you're interested in?
[22:39] ryah: ithinkihaveacat: can i see it?
[22:39] felixge_: ryah: I don't get any difference
[22:40] felixge_: ryah: when calling 'process' in node-repl
[22:40] ithinkihaveacat: ryah: http://gist.github.com/299779
[22:42] ithinkihaveacat: (i've been experimenting a little to try to figure out if it's possible to add/remove listeners from within a callback, and what the semantics are.)
[22:43] CIA-78: node: 03Ryan Dahl 07master * r3eaaaff 10/ src/node_stdio.cc :
[22:43] CIA-78: node: Ignore EAGAIN in stderr dumps.
[22:43] CIA-78: node: (Going out of the way to be sync) - http://bit.ly/blrHLa
[22:43] ryah: felixge_, isaacs --^
[22:44] isaacs: ryah: WORKS!!!
[22:44] tmpvar has joined the channel
[22:45] isaacs: wow, that's super handy.
[22:45] jan____: (party)
[22:45] CIA-78: node: 03Michael Stillwell 07master * r9f6f19d 10/ test/mjsunit/test-event-emitter-modify-in-emit.js : Add test: modifying event listeners during callback. - http://bit.ly/anSk8n
[22:45] ryah: ithinkihaveacat: thanks--^
[22:47] ithinkihaveacat: ryah: great, thank-you!
[22:48] paulca has joined the channel
[22:49] dgouldin has joined the channel
[22:55] felixge_: ryah: +1, works for em as well. THANKS A TON :)
[22:58] jan____: felixge_: sorry for going MIA, our office internet situation wasn't great. do you have any more questions?
[22:58] felixge_: jan____: well, I wasn't able to get 0.11.x running on my machine so far. Looks like the new auth system is quite some more work
[22:59] felixge_: jan____: everything but auth is 100% done so at this point
[22:59] felixge_: jan____: should be quite fun to use the module
[22:59] jan____: felixge_: major coolness :)
[22:59] jan____: felixge_: if you feel we maxed out the allocated time, feel free to not do the auth for now
[23:00] jan____: felixge_: have you tried the couchdbx nightly builds?
[23:00] mikeal: felixge_: where should i send API feedback?
[23:00] felixge_: jan____: I'll add it at some point. I'm going to donate the whole thing to you guys anyway, so don't worry about hours : )
[23:00] felixge_: mikeal: felix@debuggable.com
[23:00] felixge_: jan____: yeah, but I get corrupt zips from those
[23:00] felixge_: on the download page
[23:00] jan____: felixge_: wow
[23:00] jan____: lessee
[23:00] bryanl has joined the channel
[23:01] felixge_: jan____: well good couch support on node means other interesting projects happening with node, so this is win-win for all of us :)
[23:01] jan____: yea :)
[23:02] felixge_: once I get 0.11.x running i'll work on auth
[23:02] felixge_: after that my next big goal is to implement all amazon aws services in node
[23:02] felixge_: will probably take a while, but it's world domination after that :)
[23:05] jan____: felixge_: see privmsg :)
[23:09] bentomas: felixge_, jan____: are you talking about http://github.com/felixge/node-couchdb ?
[23:10] felixge_: bentomas: y
[23:12] felixge_: mikeal: you can also open issues on github if you'd like, might be better if it's more than a short list of things to fix
[23:12] mikeal: it's a long list
[23:12] mikeal: just small API things
[23:12] mikeal: and it's up for discussion
[23:12] mikeal: so they aren't necessarily bugs
[23:12] jan____: +1 for ussing issues
[23:12] jan____: *using
[23:13] dschn has joined the channel
[23:14] mikeal: oh, just saw the dual nature of saveDoc(doc), that removes one of my comments :)
[23:14] felixge_: mikeal: yeah, well issues can be anything. I'll label things if it gets out of control
[23:14] mikeal: issues are awesome, but i like having a conversation in email and then turning the conclusions in to issues
[23:15] jan____: mikeal: that's not really well tracable for 3rd parties tho
[23:15] felixge_: mikeal: feel free to shoot me an initial email if you prefer, otherwise issues ++
[23:16] mikeal: jan____: you're the third party, you're in the email :)
[23:16] Tim_Smart has joined the channel
[23:16] jan____: haha
[23:19] mikeal: hehe, you also wrote a changes EventEmitter
[23:24] jed has joined the channel
[23:27] paulca has joined the channel
[23:30] isaacs: hey, what're those things called when you have [23:30] isaacs: like [23:30] isaacs: [23:30] isaacs: i can't find the specific term for it, though
[23:32] bronson has joined the channel
[23:34] jan____: isaacs: it's old SGML heritage
[23:35] mahemoff has joined the channel
[23:37] bentomas: mikeal: I'm a third party and curious!
[23:37] dschn: anyone working on a env-js equivilent? (for reference: http://github.com/jeresig/env-js)
[23:43] stephenlb: dschn: that code looks like it wouldn't be too tricky to port.
[23:44] stephenlb: dschn: running s/load/require/ is a good first step.
[23:45] stephenlb: s/e\//e\/g/ rather...
[23:45] jan____: mikeal: hah, told ya! :) *gives bentomas $5)
[23:46] felixge_: gn8
[23:48] bentomas: felixge_: gn8?
[23:51] ryah: isaacs: have you seen http://www.whatwg.org/specs/web-apps/current-work/#parsing
[23:51] isaacs: ryah: yep
[23:51] ryah: isaacs: you don't have to worry about all the character encoding stuff - just operate on strings
[23:52] isaacs: that page makes firefox cry.
[23:52] isaacs: not sure why
[23:52] isaacs: maxes out a CPU, too
[23:53] tlrobinson: isaacs: didn't you hear, all the cool kids use a webkit browser these days
[23:53] isaacs: i know, i know
[23:53] binary42 has joined the channel
[23:56] okito has joined the channel
[23:59] mikeal: i talked to Firefox people about that page
[23:59] mikeal: https://bugzilla.mozilla.org/show_bug.cgi?id=481131
[23:59] mikeal: it's logged