[00:00] jashkenas: I was just being confused by the console output, I guess -- thanks. [00:00] jashkenas: Still coerces to the true value. [00:01] muk_mb has joined the channel [00:01] jashkenas: sstephenson: this is trying to fix your bug, btw.... [00:02] sstephenson: ha [00:04] stephenjudkins has joined the channel [00:06] gerred has joined the channel [00:08] dilvie has joined the channel [00:11] TheEmpath: does javascript have "class constants"? [00:11] jashkenas: not constants, but "class variables", yes. [00:12] jashkenas: ConstructorFunction.property = value; [00:12] TheEmpath: aye [00:12] TheEmpath: ooo an enums [00:13] dbathurst___ has joined the channel [00:15] rex_fernando has joined the channel [00:16] jakehow has joined the channel [00:19] heavysixer has joined the channel [00:22] MikhX has joined the channel [00:29] TheEmpath: how about inline argument setting? function flingPoo(a, b = null) [00:31] mikeal has joined the channel [00:32] pquerna: 20 odd mails about how to use semicolons, and 20 more about how to send ryah patches. good lists this week. [00:33] Tim_Smart: pquerna: Its the little things that cause most pain. [00:34] cloudhead has joined the channel [00:34] phiggins: TheEmpath: eich has suggested that for future js [00:34] TheEmpath: i see one example of extending the prototype object with a defaults method [00:34] TheEmpath: ACTION shivers. [00:34] TheEmpath: I look forward to future js! [00:34] phiggins: me too [00:35] pquerna: kwarrrrrrgs [00:37] Gruni has joined the channel [00:38] [[zz]] has joined the channel [00:42] ooooPsss_ has joined the channel [00:42] banjiewen_ has joined the channel [00:46] AAA_awright: Anyone have a recommendation for how to profile code? [00:47] ossareh has joined the channel [00:53] rauchg_: AAA_awright: node --prof [00:54] rauchg_: you might want to make the output easier on the eyes (http://github.com/mape/node-profile) [00:54] rauchg_: by mape [00:55] ossareh has joined the channel [01:02] Yuffster has joined the channel [01:02] PyroPeter has joined the channel [01:02] AAA_awright: Anything without python? [01:03] Tim_Smart: Nope :p [01:03] matt_c: muahaha (Pythonista's revenge) [01:05] creationix: AAA_awright: are you on osx? [01:05] liesen has joined the channel [01:06] Tim_Smart: Maybe dtrace [01:06] creationix: I use dtrace on osx [01:07] creationix: it doesn't label all the calls, but it often helps [01:07] creationix: it catches most the c++ calls in v8 [01:07] creationix: acitivity monitor has a nice gui for it [01:10] mikeal: do you ever use the xcode dtrace UI? [01:10] mikeal: it's beautiful, i've never used it :) [01:11] mikeal: it's like garage band for profiling [01:13] davidascher has joined the channel [01:14] davidascher: I'm having a hard time getting XHRs that come straight from node.js to get treated properly by Firefox (3.6 and nightlies). It's as if the response isn't actually received by the browser. I'm about to try and sniff network packets, but any suggestions? [01:15] bpot has joined the channel [01:15] mikeal: davidascher: do you have firebug running? [01:15] davidascher: tried w/ and w/o [01:15] mikeal: there is a bad bug with 4-beta and firebug and xhr [01:15] mikeal: it shows up in firebug but the event never fires [01:16] mikeal: but that sounds like it's not it [01:16] mikeal: might want to check out HTTPScoop [01:19] davidascher: (of course i wouldn't be surprised if i had console.logs() somewhere which cause a _different_ failure if i disable firebug =) [01:20] c4milo has joined the channel [01:20] AAA_awright: creationix: Gentoo [01:21] davidascher: mikeal: huh. reset by peer. [01:21] mikeal: on which side? [01:21] davidascher: wonder if that's by firefox or by node. [01:21] digitaltoad has joined the channel [01:21] davidascher: not sure how to know... [01:22] mikeal: is there an error in node? [01:22] dnolen_ has joined the channel [01:22] pengwynn has joined the channel [01:22] matt_c: would livehttpheaders or whatever the best thing for that is these days in Firefox? You could always sniff what's going over the wire with wireshark or http scoop. [01:23] matt_c: would it help even. [01:23] davidascher: matt_c: yeah, the reset by peer is from httpscoop [01:24] davidascher: not seeing an error in node, but i'm not sure i know where to find all of them =) [01:24] matt_c: davidascher: I usually see that on the server side rather than the client side. Extra logging might help find a code branch that it isn't getting to. [01:25] davidascher: gotta go, will be back later. this is frustrating =). [01:25] neytema has joined the channel [01:26] matt_c: ACTION goes back to writing tests. [01:26] isaacs: that ASI test is dumb [01:27] isaacs: a few of the "tests" of asi aren't actually asi -- they're just syntax errors. [01:31] banjiewen has joined the channel [01:32] radiofreejohn has joined the channel [01:33] grahamalot has joined the channel [01:34] cloudhead has joined the channel [01:35] Bren2010 has joined the channel [01:39] alexb_ has joined the channel [01:40] dmcquay has joined the channel [01:42] mopemope has joined the channel [01:42] zpoley has left the channel [01:42] jamescarr: what is all the buzz around pubsubhub??? [01:42] jamescarr: I watched the video and looked at the code [01:43] jamescarr: I dont see anything revolutionary? What does it offer that your usual message broker doesnt? [01:43] softdrink has joined the channel [01:45] robotarmy has joined the channel [01:46] matt_c: jamescarr: I think it's supposed to be useful and easy to implement but not necessarily revolutionary. [01:47] dbathurst_ has joined the channel [01:47] jamescarr: yeah... I dont see it being any better than ZeroMQ or RabbitMQ [01:48] benburkert has joined the channel [01:49] alexb_: Seems like another half project from google [01:49] mikelsi has joined the channel [01:50] matt_c: jamescarr: I think it's more lo-fi message brokering useful for things on the internet to notify each other about stuff without having to implement something like 0mq or amqp [01:51] matt_c: They remind me a lot of webhooks and those are handy at times too. [01:51] matt_c: I think lo-fi and cheap/quick to implement are its selling points. [01:52] benburkert has joined the channel [01:52] matt_c: http://superfeedr.com/ pushes a ton of stuff through PSHB. [01:52] threeve has joined the channel [01:54] jamescarr: ah [01:56] jchris has joined the channel [01:58] DozyPieman has joined the channel [01:59] benreesman has left the channel [01:59] jamescarr: oh wow [01:59] jamescarr: the socket.io page has changed [01:59] benreesman has joined the channel [02:01] chetan51 has joined the channel [02:02] chetan51: @maritz: Hey, it's Chetan, I'm here now [02:02] mAritz: hey :) [02:02] matt_c: I still just keep a copy of the source open for reference, but hooray for better out of the box experiences. [02:03] Tim_Smart: Ooo... Chromium 7 has websocket debugging? [02:03] test_ has joined the channel [02:04] Tim_Smart: Hmm maybe not. [02:04] matt_c: Tim_Smart: it wasn't there when I needed it last night... [02:04] test2 has joined the channel [02:04] jacobolus has joined the channel [02:04] matt_c: I guess I'm running the Chrome dev channel though. [02:04] test2: @test2: testing [02:05] Tim_Smart: There is a "WebSocket" tab under "Resources". Doesn't do anything though... [02:06] matt_c: I think that stuff is straight from WebKit. [02:07] nroot7 has joined the channel [02:07] abiraja has joined the channel [02:08] benreesman: isaacs around? [02:09] creationix: bradleymeck: you around? [02:09] MattJ has joined the channel [02:09] softdrink: any good js unit testing recommendations? i'm looking at Jasmine at the moment. [02:09] creationix: softdrink: I like the built-in assert module [02:10] matt_c: The tab doesn't do anything in the latest WebKit nightly either. But that could be pretty handy. [02:10] softdrink: i should clarify: client side, with as few dependencies as possible [02:10] jashkenas: softdrink: QUnit is nice. [02:10] CIA-77: node: 03TJ Holowaychuk 07master * r9481bc1 10/ (src/node.cc src/node.js): Added -e, --eval - http://bit.ly/cXIiXH [02:10] creationix: yeah, I've heard lots of good things about QUnit [02:10] CIA-77: node: 03isaacs 07v0.2 * r31fcf37 10/ CONTRIBUTING : Add a brief "contributing to node" doc. - http://bit.ly/cfP3xW [02:10] softdrink: 'cept i'm using mootools ;) [02:10] ryah: uh [02:10] ryah: shit [02:11] creationix: ryah: did you now mean to commit that? [02:11] creationix: *not [02:11] ryah: i didn't mean to commit isaacs patch [02:11] creationix: reset hard and push force [02:12] creationix: anything is undoable ;) [02:12] matt_c: creationix: isn't that like crossing the streams? :) [02:12] ryah: creationix: already done [02:12] creationix: it will mess up anyone who pulls in the 2 minutes it's there [02:13] creationix: ryah: interesting, github says you committed it 5 hours ago [02:14] creationix: I wonder where the timezone issue is [02:14] TheEmpath: i want to create new modules in for my node.js project. i know how to unshift directors to the require.paths. im using these modules as prototype definitions for objects i wish to instantiate later on. however, im having problems instantiating them. [02:14] ryah: creationix: ? [02:15] creationix: ryah: nevermind, I think I just misunterstood git for a second [02:15] creationix: commit !== push [02:16] creationix: TheEmpath: what's the issue [02:16] TheEmpath: for example, i have a require('user') and I have a user.js file. in that file, i have function user() { this.test = 6; } and in the server.js, i do a var user = require('user'); and if i try var bob = new user(); it says "Object is not a function" [02:17] creationix: you have to export user from the module [02:17] creationix: the return value to require is that module exports object [02:18] creationix: TheEmpath: module.exports = function user() {…} [02:18] TheEmpath: ah [02:18] TheEmpath: nifty [02:19] TheEmpath: hey thats lovely [02:19] TheEmpath: and i do that for each of my prototype definitions in all my custom modules? [02:20] nroot7: Is there a markdown lib for node js ? npm install markdown fails with compilation errors. [02:22] matt_c: nroot7: there are bindings for discount, node-discount. [02:22] itissid has joined the channel [02:22] throughnothing has joined the channel [02:23] itissid: Hi I am running wheat on http://itissid.com:3005/ but the relative links are not working... I installed node from GIT on ~/opt and then npm using curl... and all the dependencies using npm... I believe that this is not a node issue but a s/w issue cause the same process is working on my local machine... [02:24] itissid: sorry not s/w n/w* issue [02:25] itissid: I ran wheat using node... Changed the app.js to listen rather than using spark [02:25] langworthy has joined the channel [02:26] tzmartin_ has joined the channel [02:27] hzin has joined the channel [02:29] TheEmpath: hrmm modules.exports appears to instantiate the object [02:29] TheEmpath: thats good but bad for me because i have an object that requires another prototype to be instantiated first [02:30] creationix: TheEmpath: it should't make an instance [02:30] TheEmpath: i have a configuration prototype that sets a property like this.... this.logging_mode = log.mode.alpha [02:31] TheEmpath: at the time of instantiation, it will check that [02:31] TheEmpath: but simply defining the function it wont matter [02:31] creationix: TheEmpath: can you gist your code? [02:31] TheEmpath: sure [02:32] TheEmpath: http://gist.github.com/614453 [02:32] TheEmpath: line 14 in configuration.js gives this error: ReferenceError: log is not defined [02:33] sh1mmer has joined the channel [02:35] stagas: physics in games are so cool [02:36] stagas: once you get them working [02:36] TheEmpath: ya :D [02:36] TheEmpath: thoughts creationix? its kinda weird. it definitely feels like its being instantiated [02:37] creationix: TheEmpath: but log isn't defined? [02:37] TheEmpath: line 20, server.js [02:37] creationix: each module lives in it's own scope [02:37] TheEmpath: oh [02:37] TheEmpath: aww crap [02:37] TheEmpath: D: [02:37] creationix: it's not shared like in the browser [02:38] TheEmpath: awwww [02:38] creationix: pass it in the function as a param [02:38] TheEmpath: but i can put things in the global scope, ya? [02:38] creationix: you *can* but shouldn't [02:38] hzin has joined the channel [02:38] TheEmpath: i mean line 20 server.js puts it global, ya? [02:39] creationix: nope [02:39] creationix: var variables are always local to the current scope [02:39] davidwalsh has joined the channel [02:39] creationix: it "global" to that module in that it's a local variable in the top scope [02:39] creationix: TheEmpath: http://howtonode.org/object-graphs [02:40] creationix: see my third diagram for a visual explination of global vs top-level local [02:41] TheEmpath: i see [02:42] mr_daniel has joined the channel [02:43] creationix: I plan on writing more articles using the visual diagrams [02:43] sudoer has joined the channel [02:43] creationix: lots of people liked that one [02:44] TheEmpath: hrmm that puts me in a pickle [02:45] pengwynn has joined the channel [02:45] TheEmpath: there are times i need things like static public variables [02:46] Tim_Smart: TheEmpath: That is what CommonJS exports is for :p [02:46] mjr_ has joined the channel [02:47] steadicat has joined the channel [02:47] Tim_Smart: Or, you do things like: config.log = new log(); [02:47] TheEmpath: thats like from/import in python [02:48] softdrink has joined the channel [02:53] TheEmpath: okay i've updated configuration.js [02:53] TheEmpath: http://gist.github.com/614453 [02:53] TheEmpath: TypeError: undefined is not a function [02:54] TheEmpath: its blaming line 8 in conifguration, saying ALL_NON_FUNCTION_AS_CONSTRUCTOR (native) [02:55] MikhX_ has joined the channel [02:55] bartt has joined the channel [02:56] bencc has left the channel [02:59] banjiewen_ has joined the channel [02:59] temp02 has joined the channel [03:00] dipser_ has joined the channel [03:01] creationix_ has joined the channel [03:03] frodeniu1 has joined the channel [03:03] slpsys_ has joined the channel [03:03] blowery_zzz has joined the channel [03:04] ben_alman has joined the channel [03:05] nroot7: matt_c: what are the discount bindings. I have install markdown from code. [03:05] devinus has joined the channel [03:05] matt_c: nroot7: discount is a C implementation of Markdown. node-discount is a node wrapper around those. [03:06] matt_c: I'm not sure what the Markdown npm module is. [03:06] matt_c: http://github.com/visionmedia/node-discount is node-discount [03:07] matt_c: nroot7: I haven't used node-markdown so I'm not sure how to troubleshoot your issue. [03:07] TheEmpath: ahhh [03:07] TheEmpath: figured it out [03:08] everton has joined the channel [03:09] creationix: TheEmpath: s/log()/log_class()/ [03:09] creationix: TheEmpath: the best practice is to Capitalize constructor functions and lowercase instances [03:09] TheEmpath: i wish my superiors would address [03:09] TheEmpath: agree [03:09] TheEmpath: pythonic people [03:10] creationix: tell them it's not python [03:11] MikhX has joined the channel [03:11] nroot7: matt_c: node-discount is not available in npm. Have you installed it sometime ? [03:13] steadicat has joined the channel [03:14] matt_c: nroot7: the README build instructions aren't quite right. You need to have discount installed already and check that out, cd to src and run "node-waf configure" followed by "node-waf build" [03:14] itissid: creationix: Ok i have tried on prgmr. server and chunk host both give me Cannot GET / on accessing relative liked files [03:14] matt_c: nroot7: the that I refer to is node-discount [03:15] creationix: itissid: ? [03:15] itissid: I mean the wheat server is not working on both the places... [03:16] itissid: http://173.245.73.71/ [03:16] itissid: and [03:16] creationix: oh, the wheat instance [03:16] creationix: right [03:16] itissid: http://itissid.com:3005/ [03:16] creationix: there is a bug in wheat where it will do that if there is a certain kind of error on the page [03:17] creationix: like if there is a ENOENT error in reading one of the sub files, then it will 404 the entire request [03:17] itissid: so how can i debug? [03:18] itissid: if at all.. [03:18] creationix: itissid: you're running against a bare git repo or a working one? [03:18] creationix: itissid: you can always write a small connect layer that converts 404 responses to 500 responses with a stack trace [03:19] itissid: no i copied howtonode.org and i see those... files present in the articles directory... [03:19] creationix: itissid: try emptying out the content of one of the articles, leave only the header data [03:19] itissid: hmm [03:19] itissid: one sec [03:19] nroot7: creationix: I am trying to run wheat blogging engine as well. If it helps in debugging - I cloned howtonode.org and ran spark in its directory. It works fine on my local debian box but not on chunkhost [03:20] creationix: nroot7: do you get the main page [03:20] nroot7: yes [03:20] creationix: I wonder if it's a git version thing [03:21] mAritz: Tim_Smart: how do you define a default value for properties in biggie-orm? [03:21] creationix_: iPad has my colloquy ;) [03:21] creationix: let's see, I have 1.7.2.2 on my laptop and 1.7.0.4 on my server [03:21] jashkenas has joined the channel [03:21] Tim_Smart: mAritz: Haven't added that yet. Feel free to patch it :p [03:21] creationix_: And a toddler opened it [03:22] creationix: creationix_: type /nick miranda [03:22] mAritz: ugh... i'm not awake enough anymore to do that. 5:22 am here :( [03:22] creationix_: Lol [03:23] mAritz: while i'm on the topic: gn8 [03:24] TheEmpath: hrmm [03:24] TheEmpath: nope [03:24] TheEmpath: still have the issue but in a new way [03:24] TheEmpath: i guess i just dont understand what module.exports does [03:25] TheEmpath: i see exmaples for module.exports and exports.Whatever [03:25] Tim_Smart: unix piping hot-ness https://gist.github.com/1563b794d011199cee1c [03:25] TheEmpath: i just dont see a way to have objects with static properties in node.js [03:25] nroot7: matt_c: I have installed markdown in a custom location (~/opt) how can i tell node-waf configure that [03:26] dohtem has joined the channel [03:26] TheEmpath: or class constants [03:26] Tim_Smart: TheEmpath: Sure you can... [03:26] TheEmpath: while cutting those objects into their own libraries [03:27] TheEmpath: example: http://gist.github.com/614453 [03:27] TheEmpath: i can call this up in other libraries and its fine [03:27] itissid: creationix: that is not the problem... i did test to make sure... [03:27] cloudhead has joined the channel [03:27] TheEmpath: var configuration = require('configuration').Configuration [03:28] TheEmpath: and it works fine [03:28] TheEmpath: but if i add methods to configuration, i can't instantiate it [03:28] itissid: Well i think the landing page would have failed if it was some thing else.. [03:28] itissid: Any one here has a working wheat blog? [03:28] Tim_Smart: TheEmpath: https://gist.github.com/2baef7eb72adc650ff40 [03:28] creationix: I do ;) [03:28] creationix: so does JimBastard [03:29] TheEmpath: Tim_Smart: now put user in its own file and try doing that form another file [03:29] Tim_Smart: Doing what? [03:29] TheEmpath: accessing an instance of the object [03:30] TheEmpath: while accessing the constant [03:30] TheEmpath: things break down [03:30] ben_alman has joined the channel [03:30] TheEmpath: i dont see a way for module.exports to make it possible [03:31] Tim_Smart: TheEmpath: Like this? https://gist.github.com/2baef7eb72adc650ff40 [03:31] jarfhy has joined the channel [03:31] TheEmpath: but you are defining var User [03:31] TheEmpath: what if i instantiate multiple users? [03:32] Tim_Smart: You would have several users... [03:32] TheEmpath: ACTION is boggled. [03:32] TheEmpath: wouldn't i overwrite the old var User? [03:32] TheEmpath: im not used to thinking of class definitions as objects [03:32] TheEmpath: sorry [03:32] TheEmpath: they're constructs everywhere else [03:32] TheEmpath: its a hard adjustment [03:33] itissid: tjgillies: Hey is that the author of markdown? [03:33] saikat has joined the channel [03:33] Tim_Smart: TheEmpath: As long as you don't go 'User = new User()' you will be fine [03:33] TheEmpath: but i am [03:33] TheEmpath: i need new users [03:33] Tim_Smart: I usually declare instances in lower case 'var user = new User()' [03:33] TheEmpath: i need new instances [03:33] itissid: markdown says Error: markdown@0.1.2 preinstall: `node-waf configure build` [03:34] TheEmpath: well not User = new User() [03:34] itissid: error in installing through npm.. [03:34] TheEmpath: more like var new Array(new User(), new User()) [03:35] Tim_Smart: TheEmpath: Your log module doesn't export a 'Log'... [03:35] TheEmpath: not yet [03:35] TheEmpath: it will after your help [03:35] dicon has joined the channel [03:35] TheEmpath: ACTION forces you at gunpoint to do things. [03:36] TheEmpath: im applying my new learnings [03:36] TheEmpath: brb [03:36] Tim_Smart: module.exports is what require() returns. [03:36] Tim_Smart: so if you go exports.Log, then it will be require().Log [03:36] davidwalsh has joined the channel [03:37] Tim_Smart: If you go module.exports = 123; require() === 123 [03:37] nsm has left the channel [03:37] chetan51 has joined the channel [03:38] chetan51: Hey guys, what's a good static site generator for Node.js? And how does it compare to something like Jekyll or Hyde? [03:38] siculars has joined the channel [03:39] creationix: chetan51: wheat is kinda like those [03:39] noahcampbell has joined the channel [03:39] TheEmpath: my next question then [03:40] TheEmpath: if i do var ClassDefinition = require('classLibrary'); [03:40] TheEmpath: is there a way to instantiate the object in the same line as well? [03:41] Tim_Smart: Yeah, var class_instance = new (require('classLibrary'))(); [03:41] TheEmpath: ah [03:42] TheEmpath: TypeError: Cannot call method 'start' of undefined [03:42] TheEmpath: var httpServer = require('httpServer')() [03:42] benburkert has joined the channel [03:42] TheEmpath: :( [03:42] TheEmpath: ohh [03:42] TheEmpath: oh weird [03:42] TheEmpath: ok [03:42] TheEmpath: lemme try that [03:43] rauchg_ has joined the channel [03:45] chetan51: @creationix: thanks, but i'm looking for an actual static site generator, not just a blog engine. anything else in mind? [03:46] chetan51: for example, http://github.com/caolan/petrify [03:47] TheEmpath: Tim_Smart: here's wher eim at now http://gist.github.com/614453 [03:47] pengwynn has joined the channel [03:47] JimBastard_ has joined the channel [03:47] TheEmpath: line 1 configuration.js, TypeError: object is not a function [03:47] JimBastard_: does anyone have any regex kicking around that determines if a string is a valid git url [03:47] TheEmpath: note that log requires configuration and configuration requires log [03:48] Tim_Smart: TheEmpath: Circular dependencies don't work ;) [03:48] TheEmpath: :9 [03:49] auser has joined the channel [03:49] auser: hola [03:49] JimBastard_: sup beans [03:49] Tim_Smart: TheEmpath: I'll show what I do in biggie-orm [03:50] auser: anyone here know expressjs' request stuff well? Is the body captured on the entire request? [03:50] Tim_Smart: TheEmpath: http://github.com/biggie/biggie-orm/blob/master/lib/orm.js#L17-21 http://github.com/biggie/biggie-orm/blob/master/lib/model.js#L40-44 [03:50] TheEmpath: lost [03:51] chapel: mind looking at my code to see why it isn't working right, check the two comments at line 15 and 17 http://gist.github.com/614517 [03:51] TheEmpath: i dont understand why making three vars all referencing the same var is a good thing [03:51] Tim_Smart: TheEmpath: References are cheap. [03:51] TheEmpath: i dont understand how this relates to my issue [03:51] Tim_Smart: OK I'll update your gist accordingly. [03:52] TheEmpath: and module.exports = new Log(); doesn't appear to work either [03:52] Tim_Smart: TheEmpath: So why are you making everything a constructor? [03:53] Tim_Smart: Do you need multiple instances of configuration? [03:53] Tim_Smart: And log? [03:53] TheEmpath: i have some objects which will only exist once [03:53] TheEmpath: httpServer, socketServer, configuration, and log all need to only exist once [03:53] auser: hm [03:53] Tim_Smart: OK, they can be plain objects. [03:53] TheEmpath: my problem is module.exports [03:53] TheEmpath: i dont understand what is going on under the hood [03:54] chorrell has joined the channel [03:54] TheEmpath: in my mind, something like module.exports = new Obj() should work [03:54] TheEmpath: but it doesn [03:54] TheEmpath: t [03:54] TheEmpath: further more, each of these objects is isolated to its own library [03:54] TheEmpath: and these objects need to reference each other [03:55] prettyrobots has joined the channel [03:55] auser: anyone here know much about express.js? [03:55] Tim_Smart: TheEmpath: OK. I'll put something together then explain it. [03:55] TheEmpath: thanks... its been rather frustrating so far [03:55] statim has left the channel [03:56] TheEmpath: i've tried at least 5 different ways to handle module.exports in this setup, and they all hit hte same problem [03:56] prettyrobots: Does anyone here still use RDBMS with Node.js? [03:56] prettyrobots: Happily? [03:56] mjr_: I hear tales of felixge using mysql [03:56] mjr_: happily [03:57] prettyrobots: Yes. I thought of him. [03:57] abiraja has joined the channel [03:57] prettyrobots: I was hoping to get some feedback on PostgreSQL versus MySQL. [03:57] mjr_: It'd be good to get the story on "regular" databases better understood with node [03:58] TheEmpath: async nonblocking with RDMNS? yikes... lots of manual table locking going on im sure [03:58] hzin has joined the channel [03:58] ctp_ has joined the channel [03:58] mjr_: prettyrobots: I believe the pgsql driver is good. It's something ryah did a long time ago. [03:58] prettyrobots: TheEmpath: Or do it my way -> The Great Data Race [03:59] TheEmpath: first one to the result set wins? [04:00] prettyrobots: ACTION Hangs head in shame. [04:00] auser: hm. [04:00] prettyrobots: Its survival of the fittest. [04:01] dispalt: anyone using cassandra and node? [04:01] prettyrobots: I've enjoyed using the MySQL driver and it keeps me from delving into MongoDB the way I thought I would when I came over to Node. [04:02] prettyrobots: I'm just afraid of having a Ma.gnolia like MySQL meltdown someday, though. [04:02] yhahn has joined the channel [04:03] prettyrobots: displat: I've started using MongoDB. [04:05] ysynopsis has left the channel [04:05] Tim_Smart: TheEmpath: http://gist.github.com/614525 [04:06] TheEmpath: ahhhh [04:06] TheEmpath: i see [04:06] TheEmpath: lemme give that a go [04:06] TheEmpath: i understand that [04:07] digitaltoad has joined the channel [04:08] hzin_ has joined the channel [04:10] Viriix has joined the channel [04:10] hassox has joined the channel [04:10] TheEmpath: so if i want it to be something that only exists once, just make it a json/dict/object [04:10] TheEmpath: and if i need to instantiate [04:10] TheEmpath: module.export the function [04:11] TheEmpath: what of the case of httpServer calling up config and log? [04:12] Tim_Smart: They can just require('log') and require('config') [04:13] noahcampbell has joined the channel [04:13] Yuffster_work has joined the channel [04:14] TheEmpath: you dirty son of beach [04:14] TheEmpath: you made it work [04:14] TheEmpath: ACTION loves you. [04:15] softdrink has joined the channel [04:17] creationix: yay [04:18] creationix: I was on the phone with creationix_ [04:18] creationix: Tim_Smart: thanks for helping out [04:18] auser: yay [04:18] Tim_Smart: creationix: With? [04:18] creationix: my wife has my iPad [04:18] creationix: in Texas [04:19] creationix: auser: so I haven't used express actually [04:19] creationix: you thinking of switching to it? [04:19] TheEmpath: and i got one more... i used to know the answer but now i forgot [04:19] TheEmpath: http://gist.github.com/614546 [04:19] BHSPitMonkey has joined the channel [04:20] auser: yeah, but it looks like the request is already "gathered" by the time it hits the server.use()... was just wondering if that's just me or not... wanted to use request.on('data'...) [04:20] TheEmpath: when i have prototypes that create callbacks and i need to reference the object creating the callback... [04:20] TheEmpath: this doesn't work, obviously [04:20] auser: was wondering if that's the right assumption I'm making or not [04:20] creationix: auser: yeah, not sure, but there are express users in here [04:21] creationix: TheEmpath: sorry, I'm not sure I understand [04:21] auser: yeah, I was curious if there were [04:22] creationix: auser: also i believe there is an express mailing list [04:22] TheEmpath: var HttpServer = function() { this.name = 'bob'; this.server = http.createServer(function(req, res) { console.log(this.name) }); } [04:23] auser_ has joined the channel [04:23] TheEmpath: that doesn't work as the this. in the callback is the callback reference itself, not the HttpServer object [04:23] auser_: sorry, internet on the train can suck [04:23] creationix: TheEmpath: since you're defining all your functions inside the constructor, why not just use closure variables [04:23] creationix: it's a lot easier than "this" stuff [04:23] creationix: you only need "this" when you share functions via .prototype [04:23] TheEmpath: im not sure what that means [04:24] creationix: TheEmpath: http://howtonode.org/what-is-this, http://howtonode.org/why-use-closure [04:24] creationix: :D [04:26] TheEmpath: var sel = this? [04:26] TheEmpath: would that help [04:26] TheEmpath: before the callbacks [04:26] creationix: yep, that creates a closure [04:26] creationix: but I'm saying that there is no need to use this at all since you're creating everything in the constructor [04:27] creationix: just use all closures and return an object with everything you want public [04:27] creationix: using the factory pattern [04:28] bartt has joined the channel [04:30] Tim_Smart: closure can lead to GC problems if you aren't careful though. [04:30] saikat has joined the channel [04:31] EyePulp has joined the channel [04:32] TheEmpath: hrmm [04:32] davidascher has joined the channel [04:34] TheEmpath: im not sure how to apply that concept to my code [04:34] davidascher: matt_c: still there? [04:34] Tim_Smart: TheEmpath: You don't need for log and config, as they are one-time use variables. [04:34] Tim_Smart: need it* [04:35] matt_c: davidascher: Yep. A little distracted by work but definitely around. [04:35] TheEmpath: they are used in many places [04:35] davidascher: i wanted to followup on somehting. You mentioned extra logging (presumably of the node response handling) is there a way to enable that w/ env't vars etc., or what did you have in mind? [04:35] creationix: closure factories are great for things that you're not going to be making lots of instances of [04:36] TheEmpath: i may only need one, but i need them everywhere [04:36] creationix: TheEmpath: they can be used several places, but you're not going to create thousands of unique instances of them [04:36] TheEmpath: but what choice do i have? [04:36] creationix: for thousands of instances, then you would want prototypes to share function [04:36] creationix: *functions [04:36] TheEmpath: there are no singletons and node.js scoping isolates anything thats in its own file [04:36] creationix: sure there are singletons [04:37] creationix: just not in a java sense [04:37] TheEmpath: last time i asked that question in here, i was told it wasn't possible [04:37] TheEmpath: and that it was pointless to try [04:37] creationix: depends on what you mean by singleton [04:37] matt_c: davidascher: I was thinking as simple as adding in some temporary console.log statements or using one of the logging frameworks to set up things that are only logged when you want to log at DEBUG level. [04:37] TheEmpath: what i need is the following: [04:38] matt_c: davidascher: it's a little brute force but might let you narrow in on where things are going wrong. [04:38] TheEmpath: i dont' like god code, i need to take a modular approach to creating libraries [04:38] davidascher: right -- i got that, i was just hoping that node had some logging built in for its response handling, but that's probably not compatible w/ high performance in JS =). [04:38] TheEmpath: 2.) I need to OOP as much as I can so I don't repeat code later on or so i can pass objects in events easily [04:38] davidascher: (my code seems to run fine, i'm just trying to figure out who ends up closing the connection and why =) [04:38] creationix: TheEmpath: sounds great [04:39] TheEmpath: 3.) I need static methods and static properties [04:39] creationix: TheEmpath: that's all very possible with node modules [04:39] malkomalko has joined the channel [04:39] TheEmpath: i dont doubt that, i just dont see it intuitively [04:39] creationix: TheEmpath: what's your background? [04:39] TheEmpath: C++, but i spent too damn long in PHP [04:40] creationix: ok, so C++, PHP5, Java, and C# all have very close semantics with classes [04:40] TheEmpath: form what i understand javascript doesn't have multiple layers of inheritence [04:40] creationix: javascript looks like them, but acts very different [04:40] creationix: there is inheritance [04:40] creationix: it's purely prototypal [04:40] TheEmpath: i dunno what that means [04:40] creationix: there are no classes [04:40] creationix: but there are constructor functions with associated prototypes [04:40] matt_c: davidascher: oh, I didn't realize your issues were happening deep within node. In those cases logging "before I had this off to node to do this" and "after I had this off to node to do this" might still be helpful at least in determining where in node you need to go spelunking. [04:40] creationix: which is close to a class [04:41] TheEmpath: if i ask a 100 people how to do OOP in javascript, i'll get 1000 answers [04:41] creationix: yep [04:41] creationix: JavaScript is super flexible [04:41] davidascher: matt_c: well, i have no idea where the issue is -- it could be a browser bug (only seems to happen w/ FF), could be node is generating responses that trigger a different behavior from gecko, could be... [04:41] creationix: but the two main styles are constructors with prototypes and factoryies [04:41] TheEmpath: i dont need super flexibility. i need a scalable system of code that follows rules on where things are so new coders and quickly get up to speed [04:41] creationix: (and pure prototypes, but that's less popular) [04:42] TheEmpath: and = can [04:42] creationix: TheEmpath: right, so either ALWAYS use the basic constructor + prototype style and pretend there is nothing else [04:42] creationix: or use what makes sense for the problem [04:42] melpad has joined the channel [04:42] Tim_Smart: creationix: Pure prototypes are __proto__ and prototype right? [04:42] creationix: Tim_Smart: by pure prototypes I mean only __proto__ and never messing with .prototype or .constructor [04:43] Tim_Smart: Ah. [04:43] TheEmpath: i've never seen __proto___ anywhere [04:43] TheEmpath: ACTION adds 1001 answers to how to do OOP in JS. [04:43] creationix: TheEmpath: it's non standard, but it's inheritance [04:43] creationix: (non-standard is the .__proto__ property that you can access and change) [04:43] creationix: it's always there, just not always accessable [04:44] creationix: anyway, just a sec, I'll dig up a good example of both styles [04:45] creationix: ok, this article seems like a good starting place http://howtonode.org/why-use-closure [04:45] creationix: here is a constructor+prototype "class" http://howtonode.org/why-use-closure/personclass.js [04:45] matt_c: davidascher: hmm. It might still be useful if you can see if the request comes in to your request/response handler but doesn't make it back out. I would imagine that's the case though unless there's something really wrong with your FF. [04:45] SubStack: be careful about modifying it though since the ref is shared so changes are reflected in the original prototype [04:46] TheEmpath: right i undestand the personclass example [04:46] SubStack: but you can just make a copy, which breaks instanceof but otherwise is pretty useful [04:46] creationix: TheEmpath: ok, that's the most popular style of OO and the closest to classical classes without using a "class" library [04:46] TheEmpath: cool [04:46] davidascher: If I'm reading the HTTPscoop UI right, this seems to imply that the client is sending the finalization packet: http://ascher.ca/grabs/f85a8136ba787225bf19620a5d119793.png [04:46] TheEmpath: what of inheritence? [04:46] creationix: it's super efficient since the prototype is shared among all the instances [04:47] creationix: but comes at a complexity cost [04:47] creationix: you have to wrangle "this" and make sure you understand what is going on [04:47] TheEmpath: this is EDP... theres is no simplicity in EDP ;) [04:48] creationix: so if I want a "class" that inherits from Person, I simple make sure my new constructor's prototype inherits from Person's prototype [04:48] TheEmpath: but theres no super or parent, is there? [04:48] creationix: function SpecialPerson() {}; SpecialPerson.prototype = Object.create(Person.prototype) [04:48] TheEmpath: you manually instantiate the parent [04:48] creationix: or SpecialPerson.__proto__ = Person.prototype [04:48] creationix: no, not instantiate it [04:48] TheEmpath: Object.create()? [04:48] creationix: though that works too since instances inherit from it's prototype too [04:49] creationix: but then you have the side effects of the constructor [04:49] matt_c: davidascher: does that differ from a regular successful request/response pair? It looks like it's also sending RST. [04:49] creationix: everything is an object, there are no "instances" or "classes" [04:49] davidascher: apparently that's a whole set of packet exchanges, i forgot to clear. [04:49] TheEmpath: yeah thats a tough one to ge tmy head around [04:49] creationix: the prototype of a "subclass" and the instance of a "class" are the same thing [04:50] saikat has joined the channel [04:50] creationix: only the "instance" went through the constructor [04:50] TheEmpath: can i see an example of this inheritence? [04:50] creationix: sure [04:50] TheEmpath: i undestand code better than concepts [04:50] creationix: I'm actually writing an article about this topic [04:50] creationix: I hope to finish it today [04:51] TheEmpath: i'll be in this channel for a while [04:51] panpainter has joined the channel [04:51] TheEmpath: node.js is promising. i just have to understand some javascript concepts that frequently aren't used in the web world [04:51] creationix: TheEmpath: https://gist.github.com/7e534e4ff5bfffb3c836 [04:51] creationix: warning I use a lot of ES5 stuff, if it's too confusing I can make an ES3 version [04:51] TheEmpath: what is that get perimeter business? [04:51] creationix: but line 23 if the inheritance [04:51] creationix: that's es5 magic [04:52] creationix: it's a dynamic property [04:52] TheEmpath: i hate magic :( [04:52] creationix: when I access .perimeter on the object it uses the function to dynamically calculate it [04:52] creationix: it's only magic if you've never seen it [04:52] creationix: but since not all browsers support it, it's rarely seen in the wild [04:53] creationix: ok, just a sec, I'll convert it to es3 [04:53] TheEmpath: flex has the same thing + code completes in the IDE [04:55] Tim_Smart: creationix: http://jsperf.com/contructor-vs-prototype [04:55] Tim_Smart: Damn V8 and its way of doing things. [04:56] creationix: Tim_Smart: I know, it sucks [04:56] creationix: Tim_Smart: though I refactored pattern.js to use new internally and it's almost as fast with proto semantics [04:56] LionMadeOfLions has joined the channel [04:57] TheEmpath: thank both of you for the intervention [04:57] TheEmpath: i've learned much and look forward to learning more [04:57] TheEmpath: adding var self = this for closure, for now, works [04:57] creationix: TheEmpath: https://gist.github.com/bfcce1490bea68fcf002 [04:57] TheEmpath: but i know there is something more elegant and scalable somewhere [04:58] TheEmpath: i'll wrap my head arond creationix's stuff [04:58] TheEmpath: i've been at work for 12 hours... time to crash! [04:58] creationix: TheEmpath: just keep learning, JavaScript is a wonderful language once you learn it, but it's very different than it looks on the surface [04:58] creationix: ok, take care [04:59] creationix: Tim_Smart: I assume you've seen this http://github.com/creationix/pattern ? [04:59] Tim_Smart: Once you wrap you head around prototypes, they are awesome. [04:59] Tim_Smart: Not in detail, just read teh article. [04:59] softdrink1 has joined the channel [05:00] creationix: Tim_Smart: here is the original, simple implementation http://github.com/creationix/pattern/blob/fafa13a6912776dfd8ace91028c87878e8e42900/lib/pattern.js [05:00] creationix: then after finding out that V8 much favors "new" I rewrote it to http://github.com/creationix/pattern/blob/master/lib/pattern.js [05:02] nsm has joined the channel [05:03] jchris has joined the channel [05:03] dicon has joined the channel [05:04] davidascher has joined the channel [05:04] Tim_Smart: creationix: I have played with control flow using prototypes. [05:04] creationix: really [05:04] creationix: how so? [05:04] chapel: So I would like to make a nodejs program that takes a known url to a website, then scrapes said site for specific links, at which point it takes those links and scrapes them for certain information, then processes the information, to output what is requested [05:05] chapel: I found information about using request and jsdom (with jquery) to do most of that [05:05] Tim_Smart: creationix: Using closures in libraries with lots of ops/s wrecks havoc on the GC [05:05] creationix: chapel: you'll want html5 parser, jsdom, sizzle, and node's http client [05:05] creationix: yeah, that works too [05:05] chapel: the problem I have found is more in my program logic [05:05] JimBastard_: chapel: you'll want http-agent [05:05] creationix: Tim_Smart: yep [05:05] JimBastard_: to help crawl [05:06] chapel: I am having trouble getting my head around the asynchronous nature of nodejs [05:06] creationix: chapel: if it's short, gist it [05:06] creationix: chapel: we all are [05:06] chapel: and I tried http-agent, but it wasn't working for me [05:06] JimBastard_: chapel: i got the author 5 feet away from me, mind telling me the issue you had? [05:06] chapel: http://blog.nodejitsu.com/jsdom-jquery-in-5-lines-on-nodejs << that is the site I got information about scraping from [05:06] JimBastard_: aye, thats mine [05:07] creationix: JimBastard: what's http-agent, did you guys write a scraper? [05:07] chapel: well when I tried it, it just wouldn't actually execute the 'next' part [05:07] chapel: would fire agent.addListener('stop', function (agent) { [05:07] chapel: sys.puts('the agent has stopped'); [05:07] chapel: }); [05:07] chapel: every time [05:07] JimBastard_: http://github.com/indexzero/http-agent [05:07] chapel: but nothing else [05:07] Tim_Smart has joined the channel [05:07] JimBastard_: chapel: do the tests pass? [05:07] chapel: I used the code exactly from the link, and it didnt work [05:08] chapel: but I didn't try any of the tests [05:08] JimBastard_: well id say try running the test suite first to make sure its working, but im sure it is [05:08] JimBastard_: let me double check that code [05:08] banjiewen has joined the channel [05:08] creationix: JimBastard: have I met indexzero? [05:09] JimBastard_: chapel: using http://blog.nodejitsu.com/jsdom-jquery-in-5-lines-on-nodejs/http-agent.js ? [05:09] JimBastard_: creationix: i think he was afk the week you were here [05:09] creationix: ahh [05:09] Tim_Smart: JimBastard_: I'm thinking of attempting a HTTP Client re-write. [05:10] chapel: okay, I did a copy and paste, it worked [05:10] JimBastard_: chapel: i just ran that code copy and paste it seems to have parsed all 3 pages [05:10] chapel: hmm [05:10] JimBastard_: :-D [05:10] chapel: but when I try to put in my urls [05:10] chapel: it doesnt work [05:10] chapel: not changing anything [05:10] JimBastard_: gist? [05:10] chapel: let me try again [05:11] chapel: Ive been through about 3 rewrites using different code, so I will let you know in a sec [05:11] JimBastard_: you dont have to use http-agent, you could use the request module [05:11] badaxx has joined the channel [05:12] chapel: JimBastard << http://gist.github.com/614586 [05:12] chapel: well http-agent seems nicer [05:12] chapel: or at least, seems to be what I want for multiple pages [05:12] chapel: I just have one url in there [05:12] chapel: that url works with request [05:12] chapel: but when I try it with http-agent, it doesn't seem to execute [05:13] JimBastard_: chapel: you gotta RTFM [05:13] chapel: could it be the ?player [05:13] chapel: lol [05:13] chapel: okay [05:13] JimBastard_: you are doing it wrong [05:13] JimBastard_: check this out [05:13] JimBastard_: http://github.com/indexzero/http-agent [05:13] JimBastard_: Using http-agent to visit a set of URLs on a single host with complex parameters [05:14] JimBastard_: it looks like you send the server to create [05:14] JimBastard_: first [05:14] JimBastard_: in your example ,you do var agent = httpAgent.create('http://www.bungie.net/stats/reach/playergamehistory.aspx?player=thechapel&vc=2'); [05:14] JimBastard_: should be something like [05:14] chapel: well, I tried it based on that code in the readme [05:14] JimBastard_: var agent = httpAgent.create('www.bungie.net', ['/stats/reach/playergamehistory.aspx?player=thechapel&vc=2')']) [05:14] mikeal has joined the channel [05:14] chapel: separating those two [05:14] chapel: ie the base url [05:15] chapel: and the rest [05:15] chapel: but maybe I was wrong, you need just the domain, and then options hmm [05:15] JimBastard_: var agent = httpAgent.create('www.bungie.net', ['/stats/reach/playergamehistory.aspx?player=thechapel&vc=2']) [05:15] JimBastard_: works for me [05:15] JimBastard_: yeah [05:15] JimBastard_: the first argument to create is the domain [05:15] JimBastard_: not a url [05:16] chapel: well that solves http-agent for me [05:16] JimBastard_: huzaah? [05:16] amerine has joined the channel [05:17] indexzero has joined the channel [05:17] prettyrobots has joined the channel [05:18] JimBastard_: ohh shit chapel, you summoned industrial [05:18] JimBastard_: err [05:18] JimBastard_: indexzero: [05:18] chapel: lol [05:18] kuya has joined the channel [05:18] chapel: so now, to take the urls from the first page [05:18] chapel: I can parse them fine [05:19] chapel: would I use agent.addUrl to add them? [05:19] indexzero: chapel: yes [05:19] JimBastard_: or you could put them in that array [05:19] indexzero: yeah, but that's what addUrl is made for [05:20] chapel: with the jsdom stuff, the first jquery parser is not needed for the other urls, should I just leave it inline since it will just pass over it? [05:20] indexzero: chapel: you got a gist you could share? [05:21] chapel: http://gist.github.com/614517 mind you this is a quick hack of the ninja code and mine [05:21] JimBastard_: >.> [05:22] JimBastard_: <.< [05:22] JimBastard_: ^_^ [05:22] indexzero: chapel: What I usually do is a dispatch pattern based on url, I'm updating your gist to show you what I mean [05:23] chapel: oh yeah, another issue, jsdom is not defined when called in the var window line? [05:25] amerine has joined the channel [05:26] chapel: var window = jsdom.jsdom(agent.body).createWindow(); [05:26] chapel: ^ [05:26] chapel: ReferenceError: jsdom is not defined [05:26] chapel: nvm [05:27] chapel: noob mistake there, no jsdom issue [05:27] indexzero: chapel: check this out [05:27] indexzero: http://gist.github.com/614593 [05:28] JimBastard_: thats kinda sexy [05:28] chapel: thats what I was looking for, gah I need to learn more about node.js [05:28] JimBastard_: you are in the right place friend! [05:28] chapel: I guess I jumped in above my head [05:28] chapel: no wonder I was having so many issues [05:29] JimBastard_: async is not easy to dive into [05:29] chapel: yeah [05:29] indexzero: chapel: nah, it's a common problem. You just need a good way to dispatch to parsing logic based on page [05:29] chapel: well I could do it in straight js or php no problem [05:29] JimBastard_: stick around you'll figure it out [05:29] indexzero: cloudhead is working on something that's pretty bad ass too [05:29] Tim_Smart: Its great to swim in though. [05:29] chapel: awesome [05:29] indexzero: http://github.com/cloudhead/node-crawler [05:29] indexzero: it's not ready yet [05:29] indexzero: but I might incorporate some of his patterns into the next version of http-agent [05:29] creationix: indexzero: I just got sucked into you blog and lost 20 minutes of my life :P [05:29] chapel: well I need to go, Ill be around in an hour or so, might bug yall then [05:30] creationix: indexzero: I guess it's just interesting [05:30] chapel: thanks I really appreciate the help [05:30] indexzero: creationix: I spent a lot more time writing it :) [05:30] creationix: I'm sure [05:30] indexzero: chapel: np [05:30] chapel: oh and JimBastard if you created that site or whatever the ninja one, I had to add window.jQuery, just jQuery didn't work [05:30] creationix: each howtonode article that takes 3 minutes to read takes me 8 hours to write [05:30] chapel: anyways bbiab [05:30] indexzero: creationix: Yeah, I know the feeling [05:31] indexzero: important to share the knowledge though [05:31] indexzero: I wish I had more time to write [05:31] creationix: though if 2000 people read it, then it's a net savings [05:31] JimBastard_: creationix: LOL [05:31] creationix: my last article did really well, so I'm working on a sequel [05:32] bartt has joined the channel [05:32] Tim_Smart: I'll write an article for biggie when I think it is polished enough. Might even boot into Mac and do a screencast... [05:32] creationix: Tim_Smart: that would awesome, it's looking really nice [05:32] creationix: did you see meryl is using connect modules now? [05:32] Tim_Smart: Nope. [05:33] Tim_Smart: I think that middleware repo is due though, might give it a shot now. [05:33] creationix: yep, it's finally starting to become a cross-framework standard [05:33] f00li5h has joined the channel [05:35] bartt1 has joined the channel [05:36] dilvie: do you guys know of anybody doing html5 form validation with node? [05:36] CIA-77: node: 03Joshaven Potter 07master * r3d4e4d8 10/ (28 files in 4 dirs): syntax fixes to pass jslint - http://bit.ly/dCHHQz [05:36] creationix: uh oh [05:36] Tim_Smart: creationix: I'll start porting connect's and biggie-router's middleware modules over. [05:37] creationix: last time joshaven commited a jslint patch it spawned a semicolon debate that lasted for days [05:37] Tim_Smart: creationix: Uh oh to the linting? [05:37] creationix: it was epic [05:37] Tim_Smart: creationix: Meh, they can get over it. Eventually. [05:37] creationix: Tim_Smart: awesome, I would love a middleware repository [05:38] dilvie: semi-colons are good in javascript, damnit. As linus torvalds would say, anybody who disagrees with me is ugly and stupid. ;) [05:38] creationix: though we probably need better names than "middleware" and the "connect" style [05:38] Tim_Smart: Heh node-middleware is fine for now. A repo rename isn't hard. [05:38] creationix: true [05:39] creationix: and actually connect isn't a bad name for the interface [05:39] dbathurst_ has joined the channel [05:39] creationix: I just don't want people thinking they have to use connect's dispatcher to use them [05:39] panpainter has joined the channel [05:40] dohtem has joined the channel [05:40] dohtem has joined the channel [05:41] bartt1 has joined the channel [05:41] creationix: wow, pngout is nice [05:42] creationix: http://www.olegkikin.com/png_optimizers/ [05:42] unomi has joined the channel [05:43] creationix: I always used optipng [05:43] bartt has joined the channel [05:43] auser has joined the channel [05:45] EyePulp has joined the channel [05:45] mape: creationix: http://imageoptim.pornel.net/ [05:46] mape: if you are on osx, really handy application [05:46] creationix: nice [05:46] creationix: and it supports ongout [05:46] creationix: *pngout [05:46] mape: think it uses as many as possible to find the best result [05:47] bartt1 has joined the channel [05:47] ceej has joined the channel [05:48] prettyrobots has joined the channel [05:49] indexzero: hey, anyone know of a good lib for mimetypes in node? [05:50] devkorcvince has joined the channel [05:51] indexzero: oops, seems like it's in core :) [05:51] creationix: really, where? [05:51] creationix: I just keep copying the same table around [05:51] indexzero: oops, just in a fork [05:51] indexzero: http://github.com/rsms/node/blob/mimetypes-module/lib/mimetypes.js [05:52] indexzero: looks like there was discussion about it: http://groups.google.com/group/nodejs/browse_thread/thread/4f62516338a108ce/f80943781c13ffc8?#f80943781c13ffc8 [05:52] indexzero: reading through it now [05:52] JimBastard_: indexzero: id prob just rip the file out of express or connect [05:53] creationix: indexzero: here is my latest one http://github.com/senchalabs/connect/blob/master/lib/connect/utils.js#L140-337 [05:53] JimBastard_: yeah there you go [05:53] indexzero: creationix: Thanks, need it for node-cloudfiles [05:53] indexzero: http://github.com/nodejitsu/node-cloudfiles [05:53] creationix: here is the one from biggie http://github.com/biggie/biggie-router/blob/master/lib/biggie-router/utils.js#L39-233 [05:53] creationix: looks the same though [05:54] radiofreejohn has left the channel [05:56] Tim_Smart: creationix: Which was from connect, I think ;) [05:56] Tim_Smart: A while ago though. [05:56] creationix: yeah, figured so [05:56] creationix: not sure where the connect one came from [05:57] creationix: I for my original node-router table from one that someone for from rack that rack got from ... [05:57] creationix: it's been around [05:57] creationix: (holy typos batman, must be bed time) [05:57] indexzero: creationix: tell me about it [05:58] creationix: yeah, it's really late there on the east coast [05:58] indexzero: must not sleep. must warn others. trust blocks creep where the dust storm hovers [05:58] creationix: lol [05:58] creationix has left the channel [06:00] margle has joined the channel [06:02] pquerna: anyone bored and want to give feedback on a blog post. [06:02] omarkj has joined the channel [06:02] mjr_: pquerna: I'm not bored, but I'm happy to read your article. [06:03] pquerna: mjr_: http://journal.paul.querna.org/?p=577&shareadraft=baba577_4cacdf2641ff3 [06:04] pquerna: mjr_: i need to finish the section about node.js, but most of the other stuff is semi'done i think. [06:05] Tim_Smart: It is a start http://github.com/Tim-Smart/node-middleware [06:05] Tim_Smart: Lets see if the work... [06:05] Tim_Smart: they* [06:08] ossareh has joined the channel [06:09] a_meteorite has joined the channel [06:09] killfill has joined the channel [06:09] mjr_: pquerna: I like how the user is a heart. [06:10] mjr_: pquerna: also, are you going to talk about how node lets you ignore the stream API and just does magically buffering if you don't care? [06:10] mjr_: Because I think that's a unique and awesome thing about node and streams. [06:11] a_meteorite has joined the channel [06:11] mjr_: Also I think it is worth mentioning that the stream, pump, and throttling stuff is still relatively new and need a bit of tidying up. [06:11] pquerna: yeah. I wasn't sure if I wanted to include the 'magic' buffer in the diagram [06:11] pquerna: but i guess it makes sense :| [06:11] JimBastard_: fuck, writing good a UX is hard. how am i suppose to know where to use the batman jokes versus the futurama jokes and mc hammer jokes [06:12] JimBastard_: everybody stop, configuration time [06:12] pquerna: always use futurama jokes? [06:12] JimBastard_: good news everyone! [06:12] JimBastard_: your application is ready to be deployed! [06:12] pquerna: mjr_: i would of used a companion cube if I could of made one. [06:13] Tim_Smart has joined the channel [06:14] Tim_Smart1 has joined the channel [06:15] dbathurst has joined the channel [06:17] micheil: Tim_Smart: that parser seems to have a bug in it. [06:18] jetienne has joined the channel [06:18] Tim_Smart: Which one? [06:18] micheil: websockets [06:18] micheil: http://gist.github.com/614648 [06:18] micheil: it should work. [06:19] micheil: but if I send two messages that are 1024*1024 in size, then I get a collision [06:20] micheil: and then the bug is really hard to reproduce [06:21] killfill has joined the channel [06:22] JimBastard_: AHAHAH [06:22] JimBastard_: http://mrdoob.com/lab/javascript/effects/ie6/ [06:24] trave has joined the channel [06:26] alexb_ has joined the channel [06:27] Tim_Smart has joined the channel [06:29] Tim_Smart: micheil: You seem to have a lot of method calls. Try cut down on those. [06:29] micheil: hm.. [06:29] Tim_Smart: Anyway, so it isn't joining properly? [06:32] peritus- has joined the channel [06:32] reid has joined the channel [06:33] chapel: okay I am back, if anyone is still around, on a future note, what would be the best way to handle stored data? I was thinking redis (though I have no experience with it) [06:34] JimBastard_: couch is very easy [06:34] meso has joined the channel [06:35] mjr_: chapel: redis is nice and fast, but doesn't provide much durability for your data in the nice and fast mode. CouchDB is more generally a better choice if you want you data to be saved regularly. [06:36] digitalspaghetti: ^^ [06:36] digitalspaghetti: i'm using couch, very nice [06:36] ngw has joined the channel [06:36] chapel: okay [06:36] digitalspaghetti: 4Square is another mongo-based project that recently went down for 11h's [06:37] digitalspaghetti: just adding to my dis-trust of mongo [06:37] digitalspaghetti: http://blog.foursquare.com/2010/10/05/so-that-was-a-bummer/ [06:38] pquerna: cassandra... damn no thrift driver yet. [06:39] Tim_Smart: mjr_: The aof file options is cool though, and more options for persistence are coming. [06:39] virtuo has joined the channel [06:40] mjr_: Tim_Smart: yeah, AOF is a nice option. I think for what most people want, redis is kind of misleading. [06:40] mjr_: If you know what it does though, it is a mighty powerful tool. [06:41] Tim_Smart: mjr_: Yeah most people don't realise it is a data store, and that is it. No indexing etc etc. [06:42] chapel: for what I want to do, persistence isn't as important, though if couchdb is fast enough its not that much of an issue [06:42] Tim_Smart: Mind you, biggie-orm is coming along nicely. Pretty fast. [06:42] mjr_: couchdb is pretty fast for a lot of things. I'd start there, and if it isn't fast enough, then start looking at other options. [06:43] Tim_Smart: It would be interesting to compare biggie-orm to mongoose and the like in terms on performance. [06:43] Tim_Smart: s/on/of/ [06:44] chapel: are you working on biggie-orm Tim_Smart ? [06:44] hannesw has joined the channel [06:44] Tim_Smart: chapel: Yeah. [06:44] chapel: a friend of mine is working with it [06:44] chapel: not on it, using it that is [06:44] Tim_Smart: It is that dipser? [06:44] chapel: developer behind linkinus www.linkinus.com [06:45] chapel: not sure exactly what he is using it for, since he says they are 'top secret' [06:45] Tim_Smart: I would love to hear feedback from him. [06:45] chapel: but mentioned using it for their activation server and some other things [06:45] micheil: Tim_Smart: I'm not sure. [06:45] Arro has joined the channel [06:46] chapel: Ill mention to him that he should come in here and talk about it [06:46] Tim_Smart: Or tell him to give me an email: tim@fostle.com [06:47] chapel: kk [06:48] chapel: in lay mens terms, describe biggie orm [06:48] Tim_Smart: "Redis powered ORM, which leverages Redis to implement associations, indexes, views and queries. Biggie ORM also has validations and type casting." [06:48] Tim_Smart: From the readme. [06:49] jesusabdullah: chapel: If you know what an orm is, and if you know what Redis is, then you got the gist of it I'd think [06:49] Arro: are people here familiar with socket.io? I have an idea I want to bounce off someone [06:49] chapel: kk [06:50] indexzero: ACTION needs sleep. Peace out y'all [06:50] jesusabdullah: Might as well try bouncing, Arro [06:51] jesusabdullah: I haven't used socket.io directly, but I know the gist of what it does :) [06:51] devkorcvince has joined the channel [06:51] Arro: hah, well i suppose this just involves websockets in general [06:52] Arro: it would seem that if you were making a chatroom site (with mulitple chatrooms) with node, you would have a socket for every room [06:53] mjr_: Seems like you'd want a socket per user that's connected. [06:53] ivanfi has joined the channel [06:53] Druide__: you have one socket for every user.... [06:53] Arro: for every user, huh [06:54] Arro: alright, thoughts confirmed, thanks [06:54] aubergine has joined the channel [06:54] chapel: how hard would it be to make an irc bouncer with node? [06:55] ryah: pquerna: regarding sendfile [06:55] tpryme has joined the channel [06:55] micheil: Tim_Smart: found it! [06:55] ryah: great post btw [06:56] micheil: ryah: would you be against a patch to make buffer errors more verbose? [06:56] SamuraiJack has joined the channel [06:56] omarkj has joined the channel [06:56] micheil: (like, instead of saying "targetStart is out of range", actually list the target start and range) [06:56] ryah: i think we can do something where a file stream emits something that is neither a buffer nor string, but simply a reference to offsets [06:56] ryah: that is tagged somehow as being a file [06:56] ryah: when that makes it down to the socket [06:57] ryah: (oh, and supposing we're doing the post-iteration writev) [06:57] ryah: we can do the sendfile there [06:57] ryah: uh [06:57] ryah: if that makes any sense.. at all [06:57] ryah: :/ [06:57] omarkj_ has joined the channel [06:58] ryah: micheil: go for it [06:58] ryah: micheil: i'd like that [06:59] micheil: yeah, because it's the only way I found this current error my parser has been having [06:59] pquerna: ryah: yes, it makes sense. [06:59] micheil: pquerna: may I ask which article? [07:00] pquerna: http://journal.paul.querna.org/?p=577&shareadraft=baba577_4cacdf2641ff3 [07:00] dguttman has joined the channel [07:00] abiraja has joined the channel [07:00] pquerna: its still work in progress, will have a final url in a bit. [07:00] pquerna: ACTION kicks the shareadraft wp plugin a bit [07:00] mjr_: Old timers will tell you that PHP needs some kicking now and again. [07:01] ryah: pquerna: http://gist.github.com/614169 :D [07:01] ryah: we need an ascii art version of the troll face. [07:02] Tim_Smart: ryah: That only works for ascii right? [07:02] ryah: Tim_Smart: yeah [07:02] ryah: Tim_Smart: well - it works for 16bit strings too [07:02] ryah: but we're going to want to utf8 those [07:02] ryah: so it wont be helpful [07:02] aubergine_ has joined the channel [07:03] stephank has joined the channel [07:03] ryah: Tim_Smart: but i think there's a lot of 8bit strings floating around [07:04] ryah: Tim_Smart: importantly it works for cons strings [07:04] micheil: ryah: I'm sure I could probably find an ascii art troll face for you. [07:04] Tim_Smart: Yeah, there is. [07:04] ryah: Tim_Smart: so high characters will be the slow case [07:04] ryah: (which is what we have now) [07:05] ryah: punishment for not speaking english [07:05] Tim_Smart: Haha damn racist's. [07:05] Tim_Smart: "They make my node.js slow!" [07:06] Tim_Smart: -er [07:06] ryah: :) [07:06] ryah: nah, it has to be slower - the stuff isn't stored natively as utf8 in v8 [07:06] ryah: so some transformation has to happen [07:06] ryah: in the ascii case we should be able to dump to the socket directly [07:07] micheil: hm... [07:07] ryah: the problem now is that i actually have to do this writev thing i've been talking about forever... [07:07] softdrink has joined the channel [07:08] pquerna: the problem? [07:08] pquerna: oh [07:08] micheil: Tim_Smart: check this out.. it's kinda odd: http://gist.github.com/614696 [07:09] micheil: the packets should be at max 1048576 [07:09] micheil: like, that's the length of message I'm sending. [07:09] ryah: oh. the other exciting news is this thread: http://lists.schmorp.de/pipermail/libev/2010q4/001101.html [07:10] ryah: in which i'm an idiot and learn something [07:10] Tim_Smart: OK... I'll take a look after I eat some tasty sausages. [07:10] micheil: Tim_Smart: k, thanks [07:10] Tim_Smart: libevent and win32, ryah? [07:11] micheil: libev and win32 [07:11] Tim_Smart: No use making compromises to the unix version though... [07:11] Tim_Smart: If libevent is the poorer solution. [07:12] micheil: I think people are more likely to run stuff off unix type distros when it comes to servers vs running of windows for servers. [07:12] pquerna: "maybe you should check first next time" [07:14] sh1mmer has joined the channel [07:14] ryah: pquerna: it sounds dick-y until you open libev, immediately spot ev_win32.c and look at the first function: http://github.com/ry/node/blob/5986a582d9d43d2a58ff5dd5f59377c280fac802/deps/libev/ev_win32.c#L53 [07:14] pquerna: oh [07:15] ryah: marc's right. i should've looked. [07:15] ryah: but if libev is support on windows - then we've got very little to go [07:16] pquerna: indeed, native mingw would be very nice. [07:16] ryah: node_child_process.cc will probably need a new version, and libeio probably needs some help [07:16] ryah: and perhaps some shit witht he paths [07:17] chapel: out of curiosity, would using redis as your 'buffer' for information, where you write to and read from, while periodically writing to a proper db like couchdb for long term stores? [07:19] Tim_Smart: chapel: redis already periodically writes to disk. [07:19] digitaltoad has joined the channel [07:19] chapel: ACTION reads up more on redis before making a fool of himself anymore than he already has [07:19] Tim_Smart: It just has a append-only-file option if you need durability. [07:20] Tim_Smart: (Which can write on every change, or every second, [07:23] Tim_Smart: ryah: It will be sad to see win32 specific hacks in the node code though :( [07:24] pquerna: just makes a case for native webworkers :) [07:24] pquerna: and child process should be ported [07:24] pquerna: popen()ish things are portableish [07:25] Tim_Smart: I can imagine all the "// TODO: Windows sucks" comments... [07:26] beawesomeinstead has joined the channel [07:26] beawesomeinstead has joined the channel [07:26] Tim_Smart: ACTION is happy he doesn't have to do it. [07:27] ryah: Tim_Smart: :) [07:27] delapouite has joined the channel [07:29] devkorcvince: Does any here use screeninator? [07:29] bpot has joined the channel [07:30] liesen has joined the channel [07:30] chapel: no, what is it? [07:30] Tim_Smart: Nope, but I regularly use GNU screen. Looks interesting... [07:33] Blink7 has joined the channel [07:36] devkorcvince: oh, I thought it is just a GNU screen plugin... cause i have problems navigating screeninator regular C-a-# is not doing anything [07:37] Tim_Smart: I usually just have a few splits. [07:40] murphy has joined the channel [07:41] Tim_Smart: pquerna: In your article, %s/sendife/sendfile/g [07:41] Tim_Smart: sorry, sendifle [07:41] Tim_Smart: Or something. [07:42] adambeynon has joined the channel [07:42] ryan[WIN]: ryah, node doesn't compile with mingw yet? [07:42] pquerna: Tim_Smart: fixed,thanks. [07:43] hellp has joined the channel [07:43] ryan[WIN]: i would assume it would work - there isn't any component of node that isn't already on windows [07:43] JimBastard_: i wonder if M$ will cease and desist us if we use paperclip guy for our contextual help [07:43] victorcoder has joined the channel [07:43] Tim_Smart: ryan[WIN]: Tell the author of libev and libeio that ;) [07:44] ryan[WIN]: hey i'm not defending winsock and windows i/o but [07:44] ryan[WIN]: it's really not that bad [07:44] JimBastard_: schmorp [07:44] margle: JimBastard: what's better than paper clips? [07:44] ryan[WIN]: is that it though? just libev and libeio? [07:44] JimBastard_: i think he has his own irc room [07:44] viktors has joined the channel [07:44] Tim_Smart: Duct tape is better than paper clips at many things. [07:45] margle: I agree with Tim_Smart, duct tape dude would be better. [07:46] ryah: ryan[WIN]: just need someone to do it [07:46] ryah: it doesn't happen magically [07:47] Tim_Smart: You need a wizard for that.. [07:47] ryan[WIN]: i'm wrist deep in mingw right now so shoot it might be good timing [07:48] teemow has joined the channel [07:48] ryan[WIN]: only one way to find out [07:50] hansek_ has joined the channel [07:51] sh1mmer has joined the channel [07:53] siculars has joined the channel [07:54] hoodoos has joined the channel [07:55] xla has joined the channel [07:57] elliottcable: SubStack 3↼ second place for what? [08:03] foobarfighter: how blasphemous is it to the node community if i dont use the node loader for cross environment code? [08:03] foobarfighter: i mean... how are people really doing this? [08:04] Tim_Smart: foobarfighter: As in the commonjs api? [08:05] foobarfighter: if i want my code to run under the browser as well as node, i have to write some whack ass loader (which im having trouble with), or i have to circumvent the way node loads stuff... or some other weird thing that i havent thought of yet [08:05] foobarfighter: source code transformation or something [08:05] JimBastard_: foobarfighter: [08:05] JimBastard_: i jumped deep into that rabbit hole [08:06] JimBastard_: it made me go crazy [08:06] foobarfighter: Tim_Smart: yes... as in the commonjs api [08:06] JimBastard_: i havent been the same since [08:06] foobarfighter: i think the API is awesome, its just not how browsers work [08:06] foobarfighter: id like to think that im smarter than all of the people that have tried this before but im definitely not [08:06] JimBastard_: foobarfighter: i tried to transmorgrafiy it [08:06] JimBastard_: http://github.com/marak/gemini.js [08:06] Tim_Smart: foobarfighter: Someone needs to make a packaging system. [08:07] foobarfighter: Tim_Smart: well requireJS just replaces it right? [08:07] JimBastard_: i tried to do a lot of things, like everywhere node created a service, it would auto-generate the client for the browser, using the same code [08:07] foobarfighter: JimBastard_: I'm trying to avoid shit like that [08:07] foobarfighter: but i keep coming back to the fact that im goin to have to fuck with the source somehow [08:07] JimBastard_: so what does http.createServer do in the browser [08:08] foobarfighter: ewww.... ok [08:08] foobarfighter: maybe i should explain what im trying to do [08:08] JimBastard_: im half awake [08:08] foobarfighter: so im writing a test runner [08:08] Tim_Smart: foobarfighter: I'm make a library that generates client side models from 'live' code. [08:08] Tim_Smart: mak [08:08] Tim_Smart: making* [08:09] foobarfighter: that is able to test code that runs on the server and the client [08:09] Tim_Smart: Its pretty simple fundamentally. [08:09] foobarfighter: im trying to find out where to draw the line [08:09] foobarfighter: i feel like application code should deal with loading in its own way [08:09] foobarfighter: however it wants [08:10] foobarfighter: but the test harness should be able to load code in both envs [08:10] foobarfighter: client and server [08:10] foobarfighter: does this make sense? [08:10] Tim_Smart: foobarfighter: Take a look at this: http://github.com/biggie/biggie-sync/blob/master/lib/sync.js#L46-106 [08:11] foobarfighter: JimBastard_: just looked at gemini... not sure if thats what i have in mind [08:12] JimBastard_: it shouldnt be [08:12] foobarfighter: JimBastard_: actually... thats not really what i have in mind [08:12] foobarfighter: hehe [08:12] JimBastard_: its a terrible terrible idea [08:12] foobarfighter: lol [08:13] foobarfighter: at least i know that im not completely retarded [08:13] foobarfighter: if its a tough enough problem that other people havent quite "figured out" [08:14] foobarfighter: Tim_Smart: is that some client/server abstraction dealie? [08:14] Tim_Smart: foobarfighter: It takes some models from a ORM instance, then turns them into browser source code [08:14] foobarfighter: im really only tripping up on how browsers load JS modules is different than the "require" method that node uses [08:15] Tim_Smart: Think dynamic code generation. [08:15] foobarfighter: Tim_Smart: maybe i need to look a little closes [08:15] foobarfighter: closer* [08:15] foobarfighter: Tim_Smart: ya... i think this is slightly different than what i meant [08:16] foobarfighter: im really just trying to figure out how to load stuff in a way that is consistent between browser land and node land [08:16] foobarfighter: so the test runner that im making is called foo-unit [08:16] foobarfighter: closed source at the moment [08:16] foobarfighter: hoping to demo at dojo developer day [08:17] foobarfighter: i have a method called foo.require [08:17] Tim_Smart: Well source transformation is a valid option I guess. [08:17] foobarfighter: ah... [08:17] foobarfighter: ok [08:17] foobarfighter: so you understand what im doing now :) [08:17] felixge has joined the channel [08:17] felixge has joined the channel [08:17] foobarfighter: that just sucks [08:17] foobarfighter: so im lamenting [08:18] foobarfighter: the other option is to do something like requireJS and just eval files [08:18] Blink7 has joined the channel [08:18] foobarfighter: i havent verified that its doing that [08:18] foobarfighter: but thats what i assume it does [08:18] foobarfighter: since it replaces the node loader [08:19] Tim_Smart: Unless you feel like packing each file with some packaging system, wrapping them in a function that give require and friends as arguments. [08:20] Tim_Smart: E.g. '(function (require, exports, module, __filename, __dirname) { \n' + code + '\n})(...);' [08:20] Tim_Smart: Then create your own registry. [08:20] foobarfighter: Tim_Smart: ah thats a pretty interesting idea [08:20] SamuraiJack: hello [08:21] Tim_Smart: foobarfighter: That is how node.js does it internally. [08:21] foobarfighter: i was working on something sorta like that browser side [08:21] JimBastard_: http://github.com/cramforce/streamie is kinda hard to install [08:21] SamuraiJack: is there an -I command line option for node, which prepend NODE_PATH with its value for a single run? [08:22] foobarfighter: but that still involves "replacing" the node loader right? [08:22] Tim_Smart: nope [08:22] sideshowcoder has joined the channel [08:22] Tim_Smart: Just means any module you require() mustn't rely on node specific modules. [08:23] foobarfighter: you are talking about doing this on the browser right? [08:23] Tim_Smart: Yeah. [08:23] foobarfighter: ahh... [08:24] Tim_Smart: Well, generate the script on the server first. [08:24] foobarfighter: thats a pretty good idea. i wasnt wrapping in a function but i think that makes perfect sense [08:24] tpryme: foobarfighter: what are you trying to do? [08:25] nsm has left the channel [08:25] foobarfighter: tpryme: im working on a test harness that needs to load files when the same tests execute in the browser as well as in node [08:26] SamuraiJack: ACTION has such thing for a long time already [08:26] foobarfighter: potentially rhino, rubyracer and other envs as well [08:26] foobarfighter: i work with mde if any of this is sounding familiar [08:26] foobarfighter: i havent found anything out there that match what *I* like [08:26] Tim_Smart: mde uses source code transformation for geddy and the models I think. [08:27] foobarfighter: ya... [08:27] foobarfighter: not a huge fan of that [08:27] foobarfighter: but i can see why he did it [08:27] ntelford has joined the channel [08:27] foobarfighter: my tests runner works in all the environments im targeting already [08:28] foobarfighter: but it doesnt do well when running code in dual environments [08:28] Tim_Smart: Me neither, that is why I decided to generate my models from live running code. [08:28] foobarfighter: so thats the piece im trying to get going [08:28] tpryme: foobarfighter: what issues are you running into in the browser? [08:28] Tim_Smart: Then you can have whatever file structure you please. [08:28] foobarfighter: tpryme: basically scoping [08:28] tpryme: foobarfighter: scoping with respect to? [08:28] foobarfighter: Tim_Smart: so you have some sort of "client representation" [08:29] Tim_Smart: Yes. [08:29] foobarfighter: makes sense... [08:29] foobarfighter: you need that anyway right? cause you dont want your credit card processing code getting sent down to the client [08:29] Tim_Smart: Yeah, I will add things like model interception and stuff. [08:30] foobarfighter: if you are running that sort of stuff in the model code [08:30] foobarfighter: ah ya... thats pretty cool [08:30] foobarfighter: i think im gonna take a look at some of the node internals [08:30] foobarfighter: and look at the loading [08:31] Tim_Smart: So the client goes save(), you can then intercept it, md5 a password or something, then let it continue. You can also do the opposite when getting models (blank a attribute) [08:31] Tim_Smart: Well it isn't implemented yet, but that is the plan. [08:32] foobarfighter: the two things that seem to be at odds with each other in my approach seem to be the tenents that 1. the test harness shouldnt dictate how you write code and 2. if you need to load and test code in multiple environments, the test harness loader and the application code need to agree on *something* [08:32] sschuermann has joined the channel [08:32] sschuermann: heya [08:32] Tim_Smart: foobarfighter: So why do you need require()? [08:33] aubergine has joined the channel [08:33] foobarfighter: SamuraiJack: can you send me a link to your project? i'd like to see how you solved this problem [08:33] Tim_Smart: And when do you need to run the same tests on client and server? [08:33] foobarfighter: Tim_Smart: i dont need require unless somebody wants to run the code under node [08:34] evanpro has joined the channel [08:34] matjas has joined the channel [08:34] foobarfighter: because my thinking is that people writing code under node use require, and using a completely custom loader is weird [08:34] foobarfighter: maybe im wrong on that [08:34] tpryme: foobarfighter: Can't you write a script to replace all the commonjs require code with the actual contents of the target (required) files? Sproutcore does something similar with sc_require, albeit it's not commonjs. [08:34] hannesw has left the channel [08:34] foobarfighter: Tim_Smart: are you in the bay area? [08:34] Tim_Smart: New Zealand area ;p [08:35] foobarfighter: tpryme: ya... but i was trying to avoid transformation [08:35] markwubben has joined the channel [08:35] foobarfighter: its very clear that some sort of hackery is necessary [08:35] foobarfighter: its just a matter of how dirty i want toget [08:35] Tim_Smart: Wrapping is the cleanest solution. [08:35] foobarfighter: Tim_Smart: yes... thats what im thinking tooo [08:36] foobarfighter: if the code is running on the client and the server, then people shouldnt be requiring node specific libraries [08:36] foobarfighter: in my particular instance i need to do this to test a core JS lib that im writing [08:36] tpryme: Tim_Smart: How would the wrapping work? [08:36] SamuraiJack: foobarfighter: sure [08:36] foobarfighter: which really shouldnt have any dependencies anyway [08:37] Tim_Smart: (21:20:01) Tim_Smart: E.g. '(function (require, exports, module, __filename, __dirname) { \n' + code + '\n})(...);' [08:37] Tim_Smart: tpryme: --^ [08:37] stagas has joined the channel [08:37] foobarfighter: Tim_Smart: is that the definitive list? [08:37] foobarfighter: :) [08:37] foobarfighter: im lazy [08:37] foobarfighter: haha [08:37] Tim_Smart: It would be done server-side. foobarfighter: yes. [08:38] Tim_Smart: And then there is the 'global' object. [08:38] Tim_Smart: And process is global as well. [08:38] SamuraiJack: foobarfighter: http://jsan.symbie.org/Joose3/mutability/t/ [08:38] foobarfighter: Tim_Smart: bummer you arent in the SF area... we would definitely hire you at yammer [08:38] SamuraiJack: ups [08:38] SamuraiJack: foobarfighter: http://github.com/SamuraiJack/test.run [08:38] Tim_Smart: foobarfighter: Hah :) [08:39] foobarfighter: has mde already hit you up? [08:39] Tprice has joined the channel [08:39] Tim_Smart: Nope. I'm looking for work though. [08:39] foobarfighter: actually... how many times has mde already hit you up [08:39] Tprice: oh my god there is an irc!!! [08:39] foobarfighter: :) [08:39] foobarfighter: Tim_Smart: you looking to move? [08:40] Tim_Smart: If I can afford to, I don't really care where I am. [08:40] foobarfighter: staring at sheep all day has got to be getting old :) jk [08:40] foobarfighter: Tim_Smart: yammer will relocate you [08:40] foobarfighter: for freeeeeee! [08:40] Tim_Smart: And find me accomodation? [08:40] Tim_Smart: hehe [08:40] foobarfighter: probably temporary housing [08:40] peritus- has joined the channel [08:41] foobarfighter: interested? [08:41] Tim_Smart: Possibly :p [08:41] foobarfighter: maybe we should PM [08:41] SamuraiJack: foobarfighter: as about scoping solutions: http://github.com/SamuraiJack/Scope-Provider/blob/master/lib/Scope/Provider/IFrame.js [08:41] SamuraiJack: and http://github.com/SamuraiJack/Scope-Provider/blob/master/lib/Scope/Provider/NodeJS.js [08:41] Tim_Smart: foobarfighter: Do they have a website? [08:41] foobarfighter: yammer? [08:41] foobarfighter: yammer.com [08:41] tpryme: Tim_Smart: Dude, yammer's kicking ass [08:42] foobarfighter: SamuraiJack: did you write joose? [08:42] SamuraiJack: yes, the 3rd version [08:42] foobarfighter: yup... hiring like crazy for good JS devs [08:42] ryan[WIN]: tomorrow's project: build node on mingw32/msys/python 2.x for winders :D [08:42] foobarfighter: lots of very interesting work [08:42] Tprice: can someone give a hand with node and objects? [08:42] ryan[WIN]: wel today [08:43] zomgbie has joined the channel [08:43] tpryme: SamuraiJack: What do you think of JS.Class? [08:44] tpryme: foobarfighter: What are you powering with node at yammer? [08:44] SamuraiJack: tpryme: well, I think people with ruby background will prefer it [08:44] Tim_Smart: foobarfighter: Well, once I have a semi polished first revision of biggie framework, I would be strongly considering moving if I have to. [08:44] JimBastard_: def.js [08:44] TomY has joined the channel [08:44] SamuraiJack: people with Perl or C++ or Java background may prefer Joose [08:45] JimBastard_: http://github.com/tobeytailor/def.js [08:45] JimBastard_: def ("Ninja") << Person ({ [08:45] JimBastard_: toooo funny [08:46] tpryme: JimBastard: lol [08:48] Tprice: this is my server [08:48] Tprice: http://pastebin.com/20PhS4FW [08:48] Tprice: and client [08:48] Tprice: http://pastebin.com/9Wafzhch [08:48] Tprice: line 63 on the server [08:49] Tprice: its coming back as [object Object] [08:49] Tprice: should it not be a string? [08:50] JimBastard_: from search: why node.js is require 4:48:29 0 seconds to load India [08:50] JimBastard_: WHY NODE.JS IS REQUIRE!?!?! [08:51] JimBastard_: wheres my pudding [08:52] Tim_Smart: Hmm.. You just reminded me to make a milkshake. [08:52] Nohryb has joined the channel [08:53] SamuraiJack: ryan[WIN]: feature request: add '-I' command line switch, which will prepend its value to the NODE_PATH for this run, thanks [08:53] JimBastard_: when doing npm deps in a package.json, how do you specify latest [08:53] JimBastard_: "dependencies": { "git-fs": ">=0.0.5", [08:54] JimBastard_: "dependencies": { "git-fs": "@latest", [08:54] JimBastard_: or something [08:57] stagas: I think >= will do [08:57] hansek_ has joined the channel [08:57] benreesman has joined the channel [08:58] Tim_Smart: Mmm.. Tasty milkshake. [08:59] devkorcvince: exit [09:02] xla has joined the channel [09:02] kjeldahl has joined the channel [09:03] peritus- has joined the channel [09:04] elliottcable: awarawr [09:06] MikhX has joined the channel [09:06] badaxx has joined the channel [09:06] deoxxa: JimBastard_: do you -actually- require the latest version? like, if the user doesn't have the very latest revision installed, will the application break? [09:06] stagas: deoxxa: npm installs it [09:06] deoxxa: obviously it's recommended for the user to have the latest version, but it's a requirement, not a recommendation [09:06] romainhuet has joined the channel [09:06] stagas: automatically [09:06] JimBastard_: deoxxa: in this circumstance it makes the most sense [09:07] JimBastard_: not for one of my own applications [09:07] JimBastard_: im doing a pull request to add a package.json, i want the dev to add his own versions [09:07] Tim_Smart: Hot http://lenaherrmann.net/files/async-bad.png [09:07] JimBastard_: defaulting to latest for now [09:07] deoxxa: i... see [09:08] V1 has joined the channel [09:09] benreesman: should the libev and libeio headers be installed into the node prefix /include ? [09:09] guybrush: Tim_Smart: imagine this with a 4space indent :D [09:09] Tim_Smart: guybrush: Yeah, that guy was just making it hard for himself. [09:11] Tim_Smart: guybrush: Funny enough, my most nested code isn't async... [09:11] brainfck` has joined the channel [09:12] badaxx has joined the channel [09:12] rvanrooy has joined the channel [09:15] Tprice: can someone give a hand? [09:18] aubergine has joined the channel [09:19] disqk has joined the channel [09:19] Tprice: nvm [09:22] Tim_Smart: Eww. Who decided alert should be the javascript hello world http://github.com/git/hello-world/blob/master/javascript.js [09:23] Blink7 has joined the channel [09:25] V1 has left the channel [09:25] V1 has joined the channel [09:27] agnat has joined the channel [09:28] foobarfighter: ACTION i had a problem with stealing my neighbors internet [09:28] foobarfighter: either he is downloading some porn or he has been booting me off his wireless router [09:30] foobarfighter: tpryme: right now we are powering our platform. we are allowing devs to make third party apps in JS/HTML and CSS [09:30] foobarfighter: a lot like facebook without the FBML [09:30] rvanrooy has left the channel [09:30] foobarfighter: and we are building out a lot of infrastucture that is similar to facebook [09:30] foobarfighter: a lot of that is powered by SSJS [09:31] tpryme: cool, mostly on node? or another commonjs fw? [09:32] q_no has joined the channel [09:33] foobarfighter: tpryme: its a combination of node and rubyracer integrated via rack [09:34] foobarfighter: i cant speak to intelligently about the platform stuff.... mde is really the guy to talk to there [09:34] foobarfighter: i mostly work on our client stuff.... but our client is JS code will be powering a lot of integration pieces [09:35] foobarfighter: hence the focus on testing [09:35] foobarfighter: pieces of the client-side JS will be also running on the server [09:35] foobarfighter: utils and core js stuff [09:35] foobarfighter: basically stuff that all JS programmers need [09:36] foobarfighter: thats specifically the piece that im working on [09:37] tpryme: foobarfighter: cool, yeah, it's an interesting challenge porting from server to client [09:37] tpryme: foobarfighter: you have to fork implementations at times [09:38] tpryme: foobarfighter: rubyracer is interesting. doesn't that get messy, though? [09:40] foobarfighter: tpryme: again... the rubyracer stuff is all mde. but from our convos...absolutely [09:41] tpryme: foobarfighter: You going to open source your testing fw? I've tried vows and expresso for node, but none have really struck a chord with me. [09:41] ph^ has joined the channel [09:43] matic has joined the channel [09:44] foobarfighter: tpryme: ya... for sure ill open source it. its a BDD style framework with all of the tools you would expect. if you're used to rspec it will be a lot like that without what i think is kinda janky about vows. [09:44] foobarfighter: dont know anything about espresso [09:45] tpryme: foobarfighter: expresso's what the guys at Learnboost are using internally [09:46] Tim_Smart: I use expresso, it's simple and gets the job done. [09:46] evanpro has joined the channel [09:49] foobarfighter: Tim_Smart: as long as people write tests then im usually happy. the test framework thing is really my attempt to make something that i really like [09:49] jstemmer has joined the channel [09:50] ctp_ has joined the channel [09:53] aubergine has joined the channel [09:54] ctp has joined the channel [09:57] Tprice: whast the best database manager for node? [09:58] digitalspaghetti: depends on your use [09:58] digitalspaghetti: and what database you are using [09:59] Tprice: well i have mysql [09:59] Tprice: but anything that is clean [09:59] andrewvhs has joined the channel [09:59] Tprice: does not matter [10:00] digitalspaghetti: node-mysql for lower level, or sequelize for more ORM-like functionaliy [10:00] digitalspaghetti: (both on github) [10:00] prettyrobots has joined the channel [10:01] ryan[WIN]: anyone here stoked about clang going production [10:03] path[l] has joined the channel [10:04] ooooPsss has joined the channel [10:06] herbySk has joined the channel [10:09] zomgbie has joined the channel [10:09] tpryme: digitalspaghetti: mongoose for mongodb is also pretty popular [10:09] rnewson has joined the channel [10:09] Tim_Smart: Tprice: biggie-orm for redis :p [10:13] tpryme: Tim_Smart: You guys using that in production yet? [10:13] Tim_Smart: tpryme: Nope. Will be soon though. [10:14] tpryme: Cool [10:14] mbrochh has joined the channel [10:14] mbrochh has joined the channel [10:14] tpryme: Tim_Smart: I'm also finishing up an ORM/OHM for Redis, but with swappable adapters for other DBs [10:14] tpryme: Tim_Smart: We should compare notes later [10:14] Tim_Smart: tpryme: I started that way, but found I had to do too many redis specific stuff. [10:15] Tim_Smart: much* [10:15] Tim_Smart: But all the database specific stuff is abstracted into its own module. [10:16] tpryme: Tim_Smart: You check out mongoose's new chaining api for its orm? [10:16] tpryme: Tim_Smart: It's pretty sick [10:17] devkorcvince has joined the channel [10:18] Tim_Smart: tpryme: My queries use chaining. [10:18] Tim_Smart: Everything else doesn't though. [10:18] Tim_Smart: http://github.com/biggie/biggie-orm/blob/master/lib/finder.js [10:18] tpryme: Tim_Smart: Makes sense. Their model definitions are defined with chaining [10:18] tpryme: Tim_Smart: They use a cool hack [10:19] Tim_Smart: tpryme: Yeah, my find() just returns a instance of Finder: http://github.com/biggie/biggie-orm/blob/master/lib/model.js#L286-289 [10:22] gerred has joined the channel [10:24] skohorn has joined the channel [10:24] tpryme: Tim_Smart: Have you thought of turning the Finder into a Promise? [10:25] chapel: hmm [10:25] tpryme: Tim_Smart: If you did that, you could re-use earlier parts of the chain [10:25] tpryme: Tim_Smart: in multiple queries [10:25] chapel: so I am trying to use indexzero's code he gave me, but its not working [10:27] tpryme: Tim_Smart: Or add a Finder.prototype.where to do that [10:27] Tim_Smart: Tprice: It does filtering at the database level. [10:28] Tim_Smart: Well, as much as it can. [10:28] Tim_Smart: I'll add similar methods to collections, do you can do user-land filtering just as easy. [10:30] chapel: http://gist.github.com/614593 this is what he gave me [10:30] chapel: I had to make some changes to get it to work at the start [10:30] chapel: but it halts down the line [10:30] chapel: line 29, says agent.body is undefined [10:32] chapel: I tried moving the var agent outside of exports.start [10:32] Tim_Smart: chapel: On line 10, pass dispatch the agent argument. [10:32] chapel: didn't have any effect [10:32] chapel: ok [10:32] sideshowcoder has joined the channel [10:33] chapel: thanks, seems to have worked, I had to change agent.current.uri to agent.url [10:33] chapel: on line 12 [10:34] alexb_: What does the on function of event emitter return? [10:34] chapel: and add exports.start(); at the end to actually run it [10:34] Tim_Smart: alexb_: Returns the emitter instance. [10:39] agnat has joined the channel [10:40] Tim_Smart: tpryme: Also, because collections inherit from Array, you get all the cool ecma5 array methods. [10:40] peritus- has joined the channel [10:40] Tim_Smart: So implementing user-land filtering is pretty easy. [10:41] zk has joined the channel [10:42] agnat has joined the channel [10:42] muhqu has joined the channel [10:44] donnex has joined the channel [10:45] chapel: http://gist.github.com/614942 so this is what I have now, when running it, the urls output right, but it says the agent has quit before the urls output (for debugging) [10:45] peritus-: wink_: FYI http://github.com/ry/node/pull/330 [10:47] chapel: hmm, it seems like its not adding urls [10:48] hellp has joined the channel [10:48] margle has joined the channel [10:51] peritus-: wink_: hash and sign both segfault for me, but in the .update() step .. hm. [10:52] chapel: any ideas, maybe Tim_Smart ? [10:52] path[l] has joined the channel [10:53] Tim_Smart: chapel: Nope. I have worked with agent, let alone jsdom. [10:53] Tim_Smart: haven't* [10:53] chapel: :) [10:57] adambeynon has joined the channel [10:58] tpryme has left the channel [10:59] chapel: hmm [11:01] Akufen has joined the channel [11:01] Akufen has joined the channel [11:02] chapel: okay, so the agent seems to be stopping before seeing the other urls [11:02] chapel: could it be due to the asynch nature of node? [11:03] chapel: http://gist.github.com/614942 41 and 43 [11:04] chapel: don't know if its agent related or just a simple node thing I am missing [11:05] Tprice: how do i deal with [11:05] Tprice: node.js:50 [11:05] Tprice: throw e; // process.nextTick error, or 'error' event on first tick [11:05] elliottcable: I suggest hiring a platoon of baboons. [11:05] Tim_Smart: chapel: Yes, if that function is aync, then that is expected. [11:06] elliottcable: You may wish to feed them with a spoon, else you’ll need to provide a spitoon [11:06] chapel: so what is the best way to go about that, I am new to node.js [11:07] elliottcable: (sometimes they also like to watch a cartoon!) [11:07] chapel: even if its just telling me to go read something, that is help I need atm [11:07] Tim_Smart: Go read some articles and stuff on javascript? [11:07] Tim_Smart: :p [11:07] chapel: lol [11:07] chapel: well a little more specific would be nice [11:07] elliottcable: I am contributing absolutely nothing to this channel. I am going to go sleep. [11:07] elliottcable: Goodnight, #Node.js. [11:07] Tim_Smart: Google is how I learn my programming bit and pieces. [11:08] Tim_Smart: elliottcable: baboons are... useful? [11:08] badaxx: hey, i'm merging 3 files by doing exec "cat file1 file2 file3 > newfile"... is there a callback that is called after the cat command has finished? [11:09] Tim_Smart: badaxx: cat.on('exit') [11:09] Tim_Smart: <3 [11:09] elliottcable: (parting shot: harpoon some macaroons in the afternoon, you racoon goon!) [11:09] badaxx: Tim_Smart: thanks <3 [11:09] chapel: at this point in time, I am not getting an error, I have searched high and low for an idea of what the problem is, but I have yet to find anything detailing my issue in any form I know [11:10] elliottcable: chapel: if you’ve still not figured it out by the time I wake up, poke me; I’d be glad to help (-: [11:10] chapel: lol [11:10] elliottcable: (it may surprise you to learn that I know of more than baboons and macaroons) [11:10] Tim_Smart: elliottcable: You baboon! Go eat ice-cream with a spoon, I'll see you soon? [11:10] Tim_Smart: lolwut [11:10] elliottcable: Tim_Smart 3↼ I hope so, my lovely goon. [11:10] kjy112 has joined the channel [11:11] chapel: I know its probably below your guys levels, a bone would be helpful, so I know where to search [11:11] Tim_Smart: Yeah, I need sleep too. [11:11] chapel: appreciate the help though, to all that have offered or tried [11:11] Tim_Smart: chapel: You shouldn't have said a bone, otherwise we will take it literally. [11:12] chapel: lol [11:12] elliottcable: boon* [11:12] elliottcable: :D [11:12] elliottcable: you know you love me. [11:12] zorzar_ has joined the channel [11:13] liesen has joined the channel [11:14] Tim_Smart: Oh how the stars twinkle, embossed by a moon. The night sky is reeling, feathers reside in weaved casing - eager for attention. [11:16] Tim_Smart: Oh how your eyes twinkle, subsetted by a boon - elliottcable. Bed calls you. [11:17] Tim_Smart: chapel: http://tinyurl.com/3xzp8ah ;) [11:18] chapel: lol [11:18] chapel: I did get it to fire off the next url, I moved agent.next() inside the jsdom function [11:18] niko has joined the channel [11:19] Tim_Smart: Anyway, speaking of dogs, I need to feed them, then go to sleep. [11:19] Tim_Smart: chapel: Oh good. [11:19] chapel: but its hanging up on the dispatch, so fun stuff [11:19] chapel: thanks though [11:22] aliem has joined the channel [11:22] chapel: yes!!! [11:22] chapel: breakthrough [11:26] hzin has joined the channel [11:30] MattJ has joined the channel [11:32] rauchg_ has joined the channel [11:33] adambeynon has joined the channel [11:41] mif86 has joined the channel [11:43] DoNaLd` has joined the channel [11:43] DrunkDwarf has joined the channel [11:44] malkomalko has joined the channel [11:45] proppy has joined the channel [11:45] proppy: ryah: ping [11:45] proppy: did you had a change to review http://github.com/proppy/node/commit/52a55f210b72ce442cd8f15705c0828be123b9ef ? [11:46] fermion has joined the channel [11:47] bradleymeck has joined the channel [11:48] fermion has joined the channel [11:48] abiraja_ has joined the channel [11:54] kriszyp has joined the channel [11:54] proppy: it seems that node_amqp is broken with node git head [11:54] proppy: var s = buffer.utf8Slice(buffer.read, buffer.read+length); [11:55] c4milo has joined the channel [11:55] proppy: TypeError: Object [11:57] zomgbie has joined the channel [12:01] sudoer has joined the channel [12:01] path[l] has joined the channel [12:05] badaxx has joined the channel [12:05] path[l] has joined the channel [12:05] badaxx: did anyone ever manage to download a binary file via node.js? [12:06] ysynopsis has joined the channel [12:06] V1: Has anybody ever encountered an "assertion error" in node? : http://gist.github.com/615009 [12:07] V1: I have "no clue" where it comes from [12:08] V1: And it only happens if my app is running for a long time it seems 4 hr > [12:09] c4milo: what node version ? [12:10] V1: v0.2.0 [12:11] V1: aka latest deployment that no.de is running [12:13] V1: The only thing I could find on google is: http://stackoverflow.com/questions/2886191/how-do-i-close-a-socket-after-a-timeout-in-node-js [12:14] V1: But i have a .setTimeout(0); [12:14] V1: Oddness ;9 [12:16] DrunkDwarf has joined the channel [12:16] c4milo: V1: yes :) [12:18] c4milo: V1: if you want something into the loop as soon as possible, you should use nextTick and not setTimeout(0) [12:18] c4milo: s/loop/event loop/ [12:26] DrunkDwarf: anyone know of any Node.js MSN Protocol modules in the works? [12:30] margle has joined the channel [12:31] V1: c4milo: It's a method of sockets. not a regular setTimeout ;p [12:32] Ori_P has joined the channel [12:37] stagas has joined the channel [12:38] hansek_ has joined the channel [12:40] c4milo: V1: puff okay :x [12:43] cferris has joined the channel [12:43] liesen has joined the channel [12:45] margle has joined the channel [12:46] path[l] has joined the channel [12:53] zomgbie has joined the channel [12:56] mif86 has joined the channel [12:58] chapel: anyone done much work with jsdom? [13:00] ben_alman has joined the channel [13:01] Akufen has joined the channel [13:01] Akufen has joined the channel [13:04] jashkenas has joined the channel [13:04] Tprice: what storage model's do i have to play with? [13:05] jashkenas: Has anyone experimented with pseudo-arrays in JS, a-la jquery? benefits & drawbacks? [13:06] blowery: we messed around with subclassing Array in dojo for a while, as we wanted NodeList to be an Array, but it's difficult cross-browser. might work fine in node though. [13:07] blowery: actually, probably works fine [13:07] jashkenas: blowery: this would be cross-browser. ... so that's a warning against trying it -- thanks much. [13:07] blowery: it's only IE that gets angry about it [13:07] blowery: and most of the issues came up with cross-frame work iirc [13:08] blowery: doing it the jquery way works, and it actually what we ended up doing. just have a class that quacks and walks like an array and you're mostly fine. [13:08] blowery: instanceof breaks, but meh [13:08] jashkenas: blowery: but it's my understanding that the jQuery object doesn't actually have most Array methods... [13:08] jashkenas: Just length and [] work ... everything else doesn't really. [13:09] blowery: like push and friends? [13:09] blowery: push / forEach / map / etc [13:09] blowery: come to think of it, i'm not sure we ended up supporting those on NodeList [13:09] jashkenas: sort(), etc. [13:09] blowery: the functional methods are there, but not sure about sort or push [13:10] jashkenas: thanks -- that's really helpful. [13:10] jlecker has joined the channel [13:10] charlenopires has joined the channel [13:15] trotter has joined the channel [13:15] sudoer has joined the channel [13:18] jherdman has joined the channel [13:19] jashkenas has left the channel [13:19] saimon_ has joined the channel [13:20] aubergine_ has joined the channel [13:25] davidwalsh has joined the channel [13:26] leeeb has joined the channel [13:27] jashkenas has joined the channel [13:28] jashkenas: One more terminology question, generally speaking: do y'all prefer "bind/trigger" for events, or "on/emit" ? [13:29] scnd has joined the channel [13:31] mattc has joined the channel [13:32] hpoydar has joined the channel [13:32] proppy: got the utf8 error, utf8Slice moved to buffer.parent object [13:35] adambeynon_ has joined the channel [13:35] ctp has joined the channel [13:36] benreesman has joined the channel [13:37] herbySk has joined the channel [13:38] mAritz has joined the channel [13:39] liesen has joined the channel [13:42] chapel: anyone have any experience with jsdom and using jquery with it? [13:46] stride: jashkenas: on/emit++, but mostly because ryah's stuff in uses those terms [13:49] jashkenas: stride: but with Node out of the picture, hypothetically. Which do you prefer inherently? [13:52] halogenandtoast has joined the channel [13:52] pengwynn has joined the channel [13:53] technoweenie has joined the channel [13:54] aheckmann has joined the channel [13:54] sveisvei has joined the channel [13:55] jchris has joined the channel [13:56] proppy: woot, node-amqp seems totally broken with node 0.3-pre [13:56] proppy: there is more than buffer.utf8* method breakage [13:58] scoates has joined the channel [13:58] scoates: anyone using soda (SeleniumRC lib/client for node.js)? I'd like to queue up some arbitrary commands (not selenese), but I'm not sure how to best go about that. Advice appreciated. [13:59] gorakhargosh has joined the channel [14:00] omarkj has joined the channel [14:00] stagas has joined the channel [14:01] romainhuet has joined the channel [14:03] c4milo: ryan[WIN]: ? [14:03] chapel has joined the channel [14:03] stride: jashkenas: if it's just a personal preference thing, I like bind/trigger - then again I don't really care about naming as long as it's used consistently [14:04] jashkenas: thanks. [14:04] romainhuet has joined the channel [14:04] Yuffster has joined the channel [14:05] romainhuet has joined the channel [14:05] figital has joined the channel [14:06] jdalton has joined the channel [14:06] _figital has joined the channel [14:09] dilvie has joined the channel [14:14] jtsnow has joined the channel [14:19] TomsB has joined the channel [14:20] proppy: micheil: ping [14:22] proppy: micheil: ping node websocket server [14:22] micheil: ? [14:24] sschuermann: question: is there a good example of code i can look up when i want to build my own piece of evented javascript code? [14:25] thejefflarson has joined the channel [14:25] sschuermann: In my case i want to port over a state machine to event based, but i am a bit puzzled atm [14:26] sschuermann: a good piece of work as a hint would be nice so that i can borrow ;) [14:26] daniellindsley has joined the channel [14:29] micheil: sschuermann: can you show the state machine? [14:29] mikew3c has joined the channel [14:29] Anti-X has joined the channel [14:29] dshaw has joined the channel [14:29] adambeynon has joined the channel [14:31] stagas has joined the channel [14:31] sschuermann: not yet that much [14:32] sschuermann: micheil: http://github.com/sebs/node-fsm/blob/master/lib/fsm-table.js [14:32] mikew3c has joined the channel [14:32] sschuermann: micheil: the usage http://github.com/sebs/node-fsm/blob/master/test/test-fsm-table.js [14:32] sschuermann: i left all, exactly all clutter out [14:32] sschuermann: ;) [14:33] micheil: hmm... I'm not sure. [14:33] micheil: Event's are different to state machines [14:34] micheil: sschuermann: like, what you've currently got it fine, although, it's not a real-world example [14:35] rcy has joined the channel [14:35] proppy: micheil: I noticed that websocket-server doesn't forward server 'error' event [14:35] micheil: proppy: yeah, that'd probably be right. [14:35] proppy: micheil: are you interested in a patch ? [14:35] micheil: proppy: it'll be fixed in a coming release [14:35] proppy: oh ok [14:35] proppy: because I introduced an error event with http://github.com/proppy/node/commit/52a55f210b72ce442cd8f15705c0828be123b9ef [14:36] proppy: I was wondering why it was not working on websocket-server [14:36] proppy: and I've noticed that the event was not forwarded [14:36] proppy: micheil: I found a workaround by registering on ws.server instead of ws [14:36] micheil: proppy: yeah [14:37] proppy: but I could work on a proper patch if you're interested [14:37] micheil: there's two kind of error events though [14:37] tj has joined the channel [14:37] nerdEd has joined the channel [14:37] langworthy has joined the channel [14:37] micheil: on which is the client / connection errors bubbling up to the server [14:37] micheil: and the other is a server error [14:38] proppy: micheil: yes, I'm interested in the server ones [14:38] proppy: EADDRINUSE [14:38] proppy: to be precise [14:38] hpoydar has joined the channel [14:40] micheil: proppy: you know you can pass node-websocket-server another http.Server instance to use? [14:41] seanouimet has joined the channel [14:42] proppy: micheil: yes, I noticed that by reading the code [14:42] dnolen has joined the channel [14:42] charlenopires has joined the channel [14:42] proppy: the mixin server: new http.Server() trick [14:43] micheil: yeah [14:43] chapel: http://gist.github.com/614942 at line 45, query is not being defined, noob here, any help? [14:44] micheil: chapel: look at what is calling jqwindow [14:44] davidascher has joined the channel [14:44] micheil: also, a stack trace would help [14:44] chapel: well, figured it out, lol selected wasn't defined as an array [14:44] chapel: cant push on a non-array I guess [14:45] jashkenas has left the channel [14:45] chapel: so it runs now, just isn't actually returning any data [14:46] sschuermann: micheil: na, there is lot to improve: transitions in-out, pre transition loading of data, async call of next state [14:46] sschuermann: etc [14:46] sschuermann: but i do not need a fsm example, i need a pice of code that is truely evented [14:46] micheil: sschuermann: put it this way, just because a lot of things use events, events are just a way of hooking code together [14:46] sschuermann: yeah, youre probably right [14:46] micheil: for instance, node-websocket-server, each connection and parser has an internal state (machine) [14:47] scoates: (repost) Anyone using Soda (SeleniumRC lib/client for node.js)? I'd like to queue up some arbitrary commands (not selenese), but I'm not sure how to best go about that. Advice appreciated. [14:47] sschuermann: micheil: ty ;) [14:47] sschuermann: illcheck that [14:47] tjholowaychuk: scoates: i do :) haha [14:47] micheil: then we I want the end-developer to know something, I emit it. [14:47] sschuermann: ah [14:47] sschuermann: the emit stuff as well as the stuff with next is not so clear to me [14:47] tjholowaychuk: scoates: you are just wanting to use the chaining api or something? [14:47] scoates: heh [14:47] sschuermann: 2 different things: use evented code, write evented code [14:48] jdalton has left the channel [14:48] ginader has joined the channel [14:48] micheil: well, your form of (I'm guessing) ruby-style state machine isn't generally something I've seen in node [14:49] sschuermann: ;) [14:49] micheil: like, it feels ruby-ish, not like javascript. [14:49] scoates: tjholowaychuk: I'd like to inject arbitrary functions into the chain, yeah. e.g. browser.chain.session().do(function() { /* some sort of non-selenese prep */ }).open('/')/*etc*/ [14:49] sschuermann: hmm [14:49] sschuermann: need to think about it [14:49] sschuermann: fsm code = =much thinking ;) [14:49] technoweenie: state machines arent rubyish [14:49] sschuermann: depends on how u implement it i guess techno [14:49] technoweenie: unless you're talking about a specific bit of code [14:50] tjholowaychuk: scoates: ahhh I gotcha. Yeah I would not mind that either [14:50] tjholowaychuk: maybe I will whip something up [14:50] sschuermann: I dont have coding time the next two weeks, so chances are good i come up with a solution [14:50] scoates: tjholowaychuk: cool.. I guess there's no way to do it currently? [14:51] tjholowaychuk: scoates: not with the chaining api ATM [14:51] micheil: technoweenie: have a look at it. http://github.com/sebs/node-fsm/blob/master/test/test-fsm-table.js [14:51] daniellindsley has joined the channel [14:51] tjholowaychuk: scoates: I can add that in a few minutes though [14:51] tjholowaychuk: just gotta finish some other stuff [14:51] scoates: tjholowaychuk: it will also help with repetitive tasks in a chain; e.g. a custom doLogout() or doLogin() etc. [14:51] scoates: tjholowaychuk: sweet. let me know, and I'll pull. [14:51] micheil: tjholowaychuk: btw, with the routing middleware, wouldn't an array of middleware be better? [14:52] tjholowaychuk: scoates: I just modify the proto and add our specific stuff in. .login('user', 'pass').openDashboard() blah blah [14:52] tjholowaychuk: micheil: it supports both [14:52] micheil: oh? [14:52] tjholowaychuk: micheil: nested arrays, many arrays, many functions, one function, mix and match [14:52] micheil: the documentation doesn't speak that way, iirc. [14:52] scoates: tjholowaychuk: yeah, I guess I'm just unclear how to make that work within a chain [14:52] dshaw: tjholowaychuk: +1 for arbitrary injection [14:53] dshaw: Also, been using Soda a lot this past week. <3 <3 <3 [14:53] mytrile has joined the channel [14:53] tjholowaychuk: nice :) [14:53] tjholowaychuk: just deploying some of our tests right away actually haha but then I can get to adding this [14:53] technoweenie: sschuermann: a good node state machine would be a cool project [14:54] technoweenie: does ragel output to js yet [14:54] tjholowaychuk: dshaw / scoates: i should make it async though, do(fn){ fn() } or at least conditionally if arity > 0 [14:54] tjholowaychuk: technoweenie: I think it does [14:54] tjholowaychuk: probably insanely slow though [14:54] tjholowaychuk: like the ruby one [14:54] chapel: can you do this? ratings = exports.jqwindow(agent, 'td[id$=arenaRating]', ratings); [14:55] dshaw: that would be nice [14:55] scoates: I'd actually prefer it to be synchronous (within a chain).. stuff like login/logout needs to happen before subsequent steps [14:55] chapel: ie, sending ratings to the function, and having the function return a value, which is then set to ratings? [14:56] tjholowaychuk: scoates: it would be in sequence still [14:57] scoates: ah, ok [14:57] tjholowaychuk: scoates: so you thought like .do(login('user', 'pass')).foo() ? [14:57] tjholowaychuk: that woudl be good i guess, no need to alter proto [14:58] scoates: yeah. .do() could just be "run the callback before continuing on the chain" [14:58] scoates: would be great if the browser/client object could be passed in, somehow, too [14:58] jpld has joined the channel [14:58] jpld has joined the channel [14:58] tjholowaychuk: scoates: "this" could be the client [14:59] c4milo: tjholowaychuk: !!! [15:00] tjholowaychuk: c4milo: yo [15:00] scoates: cool. [15:00] murphy has joined the channel [15:00] dguttman has joined the channel [15:01] c4milo: tjholowaychuk: I have a test case that fail and it doesn't have stack [15:01] dshaw: tjholowaychuk: Is there a way to do a store command? http://seleniumhq.org/docs/04_selenese_commands.html#store-commands-and-selenium-variables [15:02] c4milo: so expresso http://github.com/visionmedia/expresso/blob/master/bin/expresso#L699 <--- in this line throws an exception because stack isn't defined [15:02] teemow has joined the channel [15:03] chapel has joined the channel [15:03] aubergine has joined the channel [15:04] tjholowaychuk: dshaw: hmm maybe not, I am no selenium pro, I had never used it before writing soda [15:04] c4milo: tjholowaychuk: it doesn't let me know what specific test failed [15:04] matt_c_ has joined the channel [15:05] c4milo: tjholowaychuk: http://gist.github.com/615238 [15:05] tjholowaychuk: c4milo: shit [15:05] c4milo: that's the exception [15:05] c4milo: ahahaha [15:06] dshaw: tjholowaychuk: I'm currently just storing the values in a variable before my chain. It would be nice to be able to keep the definition of the variable close to execution. [15:07] tjholowaychuk: dshaw: ya thats all i am doing too [15:07] chapel: is there a way to keep node from running or kill it while running it? [15:07] ivanfi has left the channel [15:07] chapel: I mean like 'node blah.js ' [15:07] chapel: or whatever [15:07] bradleymeck: tjholowaychuk, any idea how to get connect to give me the session for a specific fingerprint without having a hold of the store? [15:07] softdrink has joined the channel [15:07] bradleymeck: chapel ctrl+c? [15:08] chapel: well I guess [15:08] bradleymeck: im not sure what you are asking for [15:08] bradleymeck: you want to run node without it doing anything? [15:08] chapel: nvm [15:08] elliottcable: http://twitter.com/elliottkember/status/26656694862 [15:09] ajpiano has joined the channel [15:09] tjholowaychuk: bradleymeck: hmmm req.sessionID should have the sid.hash [15:09] tjholowaychuk: if thats what you mean [15:09] tjholowaychuk: i believe req.session.id is the same [15:09] chapel: I am trying to figure out why my function on line 45 isn't returning values to line 59 and 61 http://gist.github.com/614942 [15:09] tjholowaychuk: been a while [15:09] tjholowaychuk: haha [15:09] bradleymeck: yea, but i cant get a hold of the actual session object just using that, i have to have a live request :/ [15:11] chapel: is there a way to limit node to a certain amount of memory usage? [15:11] sanderjd has joined the channel [15:11] bradleymeck: chapel, it has neither a return statement nor a callback so idk how the values would get back [15:12] chapel: well it has a return, though I see an issue hold on [15:12] sanderjd has left the channel [15:12] tjholowaychuk: bradleymeck: I dont think we expose the store in a way that it is accessible without a request ATM [15:12] bradleymeck: the function inside of that does, it wont send the value to the outer function to be returned [15:12] chapel: okay [15:13] chapel: hmm [15:14] dshaw: tjholowaychuk: last night I was thinking it would be nice to write .store('myselector', 'css=#myid input')waitForElementPresent(myselector).type(myselector, 'yo').fireEvent(myselector), 'blur') [15:15] dshaw: With long tests, I think it would be more readable. [15:16] dshaw: Maybe not exactly .store() since it references variables defined by it with JSP style: ${ }. [15:16] romanb has joined the channel [15:16] tmpvar has joined the channel [15:16] chapel: hmm, well how do I get query out of the jsdom.jqueryify function, because just returning it outside of it, returns nothing [15:17] tmpvar: it takes a callback [15:17] tmpvar: because loading the file and eval'ing is async [15:17] chapel: oh its tmpvar of jsdom fame [15:18] V1 has left the channel [15:18] sschuermann: technoweenie: if you have any whishes additions etc, youre welcome to add stuff ideas and tickets [15:19] gorakhargosh has joined the channel [15:19] tmpvar: chapel, here's a good example: http://blog.nodejitsu.com/jsdom-jquery-in-5-lines-on-nodejs/jquery-http-agent.js [15:20] chapel: well my code originated from that [15:21] chapel: then the guy who made http-agent helped me and gave me the form it is now [15:21] chapel: well, the layout using dispatch [15:21] chapel: but the way jsdom was made, i couldn't use multiple jquery calls in one jqueryify call [15:21] tmpvar: hrm [15:22] chapel: or at least, no matter what I did, it didn't work for me [15:22] tmpvar: can you gist the code? [15:22] peritus- has joined the channel [15:22] jakehow has joined the channel [15:23] chapel: take my code in the gist, and I was trying to make another window.jQuery(selector).each [15:23] chapel: but each time it wasn't working, hold on [15:24] bpot has joined the channel [15:26] chapel: http://gist.github.com/615270 rough idea of what I tried [15:26] chapel: that didn't work [15:26] chapel: it didn't work if I duplicated the jsdom.Jqueryify stuff too [15:26] chapel: of course, I attribute it to not knowing [15:27] chapel: so my way around it, was to move it into a function or whatever [15:27] devkorcvince has joined the channel [15:27] tmpvar: hrm [15:27] chapel: I need two separate selectors, with separate data [15:27] tmpvar: right, that should work fine [15:28] chapel: I tried having an or selector inside of one jquery block [15:28] chapel: but I had no way to check which selector was which [15:28] tmpvar: got ya, do either of the selectors work? [15:29] chapel: the selectors work [15:29] chapel: when used separately, or in the function I setup [15:29] chapel: atm Im having asynch issues, since I am new to it [15:30] chapel: not familiar with callbacks tbh [15:30] tmpvar: ah [15:30] chapel: so I understand the issue [15:30] chapel: but not exactly familiar with the solution [15:31] tmpvar: hehe, well what is the issue? [15:31] tmpvar: you are running queries before jquery is attached to the window? [15:31] tmpvar: or.. [15:31] admc has joined the channel [15:31] admc__ has joined the channel [15:31] admc_ has joined the channel [15:32] chapel: well, it looks like my function is returning query before its actually got the value from jsdom [15:33] Anti-X: async's a bitch, innit [15:33] chapel: heh [15:33] chapel: just new to me [15:33] Anti-X: no trust me, it's a bitch [15:33] chapel: my linear brain is having trouble [15:33] tmpvar: yeah, I'd suggest futzing with it, and if you run out of rope throw up a gist with the selectors and annotate where the problem is [15:33] chapel: I never was a great coder, but I had a grasp of the languages I dealt with [15:34] Anti-X: you should try step [15:34] chapel: the whole asynch thing keeps throwing me problems, though I am excited that its a new problem [15:34] Anti-X: http://github.com/creationix/step [15:35] bradleymeck: async reminds me of lisp, and lisp makes me happy when it doesnt only use parens [15:35] Anti-X: what, lisp promises to be nice, and then next thing you know it runs over your dog? twice? [15:36] hornbeck has joined the channel [15:36] tmpvar: hey bradleymeck, how goes? [15:37] bradleymeck: im looking for jobs, thats about it [15:37] bradleymeck: you? [15:37] tmpvar: keeping busy [15:38] bradleymeck: yea, waiting on apps is going to kill me, writing up a simple websocket session keeper in meantime for the lord knows how many times ppl have recreated that [15:38] tmpvar: heh [15:40] steadicat has joined the channel [15:41] Nohryb_ has joined the channel [15:42] creationix has joined the channel [15:43] Mobbit has joined the channel [15:44] Nohryb has joined the channel [15:46] benburkert has joined the channel [15:49] trotter_ has joined the channel [15:51] devkorcvince has joined the channel [15:52] aurynn has joined the channel [15:52] scoates: tjholowaychuk: no pressure, but could you ping me when you'd like a tester for that change? I'll stop reloading the github page (-: [15:52] tjholowaychuk: scoates: done, just releasing [15:53] tjholowaychuk: scoates: just to reconfirm, you guys just wanted an arbitrary queued callback? [15:53] tjholowaychuk: nothing else? [15:53] tjholowaychuk: "this" is the client [15:53] scoates: yeah, I think that will work for me [15:53] tjholowaychuk: k cool one sec [15:53] scoates: can I chain new events from within the callback? [15:53] isaacs has joined the channel [15:54] tjholowaychuk: scoates: yup, that should be fine I will add a test case [15:54] scoates: nice. thanks. [15:55] isaacs: anyone have any experience using fs.sendfile to upload a file? [15:55] isaacs: it seems like i can sendfile into the http server's fd, but when i try to sendfile into the http client's fd, it just doesn't do anything [15:56] matt_c has joined the channel [15:56] EyePulp has joined the channel [15:56] tjholowaychuk: scoates: why not just have a var though? with your client and say you want to queue more stuff, just loop or do whatever you need [15:56] tjholowaychuk: and keep executing methods? [15:56] tjholowaychuk: they will queue until you end() [15:56] tjholowaychuk: trying to think of the use-case [15:57] bradleymeck: isaacs i think creationix does [15:57] isaacs: creationix: ping [15:57] creationix: upload? [15:57] creationix: I serve files to browsers using sendfile [15:57] creationix: it's Tim_Smart's code [15:58] ivan has joined the channel [15:58] scoates: so my use case (and maybe I'm just thinkng about it poorly) is browser.chain.session().whatever().do(loginFunction(user,pass))...end() and loginFunction would do something like this.chain.open('/login').type('u',user).clickAndWait('submit'); (or whatever) [15:58] scoates: tjholowaychuk: ^ [15:58] creationix: isaacs: https://gist.github.com/e095c7fdbcbdbc72b152 if you're interested [15:58] isaacs: right [15:58] isaacs: yeah, that works. [15:59] creationix: most the code comes from biggie-router [15:59] Nohryb_ has joined the channel [15:59] tjholowaychuk: scoates: ah right i forgot already haha :) [15:59] dbathurst_ has joined the channel [15:59] Nohryb has joined the channel [15:59] isaacs: creationix: yeah, i saw that [15:59] isaacs: creationix: http://gist.github.com/615340 [16:00] zomgbie has joined the channel [16:01] creationix: isaacs: is that the code you're trying to figure out / fix [16:01] isaacs: yeah [16:02] creationix: Tim_Smart said something about having to write an empty string before using sendfile [16:02] creationix: or it send out of order [16:02] isaacs: oh... interesting, lemme try that [16:02] isaacs: maybe it's not writing the headers first or something [16:02] creationix: line 71 in sendfile.js [16:03] isaacs: hm... the cb gets called, but no data is sent [16:03] chapel: tmpvar << curious, is it jsdom that is making my script use 40mb + to run? [16:04] tjholowaychuk: isaacs: is the tagging stable still required for "npm install foo" without the semver? [16:04] isaacs: tjholowaychuk: nope [16:04] creationix: isaacs: also Tim_Smart had to listen to EAGAIN and EPIPE errors and keep calling sendfile till it was all sent [16:04] tjholowaychuk: oh [16:04] tjholowaychuk: haha [16:04] tjholowaychuk: damnit [16:04] tmpvar: chapel, that is impossible for me to answer accurately. If you have a huge document then it is possible [16:04] isaacs: tjholowaychuk: the "magic" version is "latest" [16:04] isaacs: creationix: i'm not getting *any* errors [16:04] tjholowaychuk: ive been doing it all the time [16:04] isaacs: tjholowaychuk: there's no harm in it. but "stable" isn't magical [16:04] chapel: okay, well it only loads html right? [16:04] tjholowaychuk: isaacs: but if you dont do you have to "npm install foo@latest" ? [16:04] creationix: maybe the http client works different than the http server [16:05] isaacs: tjholowaychuk: no, it assumes @latest, just like it used to assume @stable [16:05] ehaas has joined the channel [16:05] tjholowaychuk: isaacs: ah ok sweet, didnt know that was changed [16:05] isaacs: since no one tags anything [16:05] isaacs: except you, apparently ;) [16:05] tjholowaychuk: ahaha yeah [16:05] tjholowaychuk: i thought it was annoying before so i got all religious about tagging [16:05] creationix: isaacs: well, you did tell us to stop tagging things ;) [16:06] chapel: 350k for 1 page, 680k for another, iterated over yeah I could see it using a lot, not sure 40mb is right [16:06] isaacs: i'd like to someday see maybe a registry with restricted write access, and some review processes, and then "stable" would mean somethign [16:06] chapel: hmm [16:06] isaacs: but for now, it was trying to build the fuel injection while we still have a push cart [16:06] tmpvar: chapel, so that means it is working? [16:06] chapel: I feel like there is an even better way to approach my script, but I just cant see it [16:07] chapel: and no, its not working past where I was earlier [16:07] chapel: I can't figure out callbacks or whatever, I would like to learn them, but dont know how to apply them to my code [16:08] stephank: Is there something like rubigen for node? I'm looking at express and geddy and it seems they all baked their own, which is sad. [16:08] creationix: stephank: what is rubigen [16:08] tmpvar: chapel, I'd take a peek at http://howtonode.org/ [16:08] q_no has joined the channel [16:08] stephank: creationix: Basically script/generate extracted from rails. [16:09] creationix: stephank: how would that work outside of a framework? [16:09] tjholowaychuk: generators are a big fail, asside from initial app generation [16:09] tjholowaychuk: -1223424234 [16:09] creationix: I mean, we have template languages [16:09] fcoury_ has joined the channel [16:10] creationix: how can you do more than a standard template language without tightly coupling the library to some specific framework's file structure [16:10] isaacs: tjholowaychuk: imo, even then generators are kinda weird. [16:11] creationix: there are valid uses for rails generators [16:11] isaacs: tjholowaychuk: i know people love it with express and rails and stuff, but i dunno... maybe i'm just old fashioned. [16:11] tjholowaychuk: isaacs: for people who dont know what they are doing its nice [16:11] tjholowaychuk: to get started [16:11] creationix: just not for most early-adopter type developers [16:11] isaacs: tjholowaychuk: i'd like to rip the generators out of npm [16:11] isaacs: tjholowaychuk: and they don't even do much [16:11] tjholowaychuk: hell i mean i use it mostly just so i dont have to mkdir/touch a bunch of shi [16:11] tjholowaychuk: t [16:11] isaacs: just shims, kind of a necessary evil [16:11] stephank: creationix: I'm thinking just the basics would be useful. Checking what already exists, warnings on overwriting, etc. [16:11] isaacs: yeah, i mean, i can see the use case. [16:12] creationix: stephank: I guess so, yeah, I don't think anything like that exists yet [16:12] creationix: stephank: go for it! [16:12] isaacs: it just worries me. you start with something like what express or npm has, where it's pretty reasonable and limited, and then one day you wake up, and you've got rails [16:12] stephank: creationix: heh [16:12] gorakhar` has joined the channel [16:12] tjholowaychuk: i just hate how rails organized plugins, like WTF a plugin should live in its own damn directory [16:12] tjholowaychuk: and not spam its shit [16:12] stride: isaacs++ [16:12] v8bot: stride has given a beer to isaacs. isaacs now has 3 beers. [16:12] tjholowaychuk: all over my god damn appp [16:12] isaacs: yeah [16:13] isaacs: it's funny how everyone seems to hate on rails a lot, but when you look at the history of ruby, i mean, it woudln't have nearly the following it does if not for rails [16:13] tjholowaychuk: for sure [16:13] isaacs: not saying that the hate isn't justified. [16:13] tjholowaychuk: definitely not [16:13] isaacs: it's just ironic [16:13] creationix: stephank: so far i node's history, most the developers have been the type that hate generators, so a general library hasn't been built [16:14] stephank: tjholowaychuk: oh wow, I didn't notice the interweaved conversation. Well, I'm not a fan of generators in regular use. But they are useful to get a project started. [16:14] creationix: isaacs: don't worry, there are more people that love and praise rails then those that hate it [16:14] stephank: also, stuff that you don't really write by hand, such as migration versioning in rails. But I'm not even interested in that. [16:14] tjholowaychuk: stephank: yeah i agree with that part [16:15] creationix: well, that used to be the case, I'm not sure anymore, rails is starting to get old [16:15] stephank: Oh, it still holds. [16:15] isaacs: i think generators are a good way to create the boilerplate, rather than writing it. but a better way to deal with boilerplate is to make it go away. [16:16] creationix: isaacs: yes [16:16] creationix: boilerplate is a sign of bad apis [16:17] creationix: the only real solution is to make it unneeded [16:18] aconbere has joined the channel [16:18] isaacs: jed should quit the translation gig and just do (fab) full time. [16:18] bpot has joined the channel [16:18] isaacs: my only complaint about it is that it moves too slowly :) [16:18] isaacs: creationix: so, i think i figured out the sendfile issue. [16:19] isaacs: (if you're curious) [16:19] creationix: isaacs: what was it? [16:19] isaacs: you have to write "", and then check whether that went through right away, and if not, then wait for "drain" [16:19] creationix: ahh [16:19] creationix: we should bring up sendfile with ryah tonight, he had some ideas the other day when I was struggling with it [16:20] amerine has joined the channel [16:20] aurynn: creationix, handling prepared statements in a way that doesn't shite all over the place is *damn hard* [16:21] creationix: aurynn: what do other libraries do? [16:21] aurynn: Block. [16:21] creationix: I used the PHP PDO one for a while and liked it [16:21] creationix: does blocking solve the problem? [16:21] aurynn: the protocol is easy enough to work with [16:21] aurynn: Doing it all with events is much more complex. [16:21] creationix: btw, I talked to postgres people at CouchCamp [16:21] aurynn: yeaH? [16:21] ph^ has joined the channel [16:22] creationix: they said the async api isn't really used and they are willing to possibly change it [16:22] creationix: many parts haven't been battle tested api wise [16:22] zpoley has joined the channel [16:22] Guest22628 has joined the channel [16:22] Guest22628 has left the channel [16:22] aurynn: ? I wasn't sure there was an internal async API? [16:22] tmpvar: yikes [16:22] bartt has joined the channel [16:22] aurynn: or is that the libpq stuff? [16:22] creationix: so, you should ask questions on their mailing list, they will have ideas about how to work around it, or even fix it [16:23] creationix: I'm not sure it's on libpq, or if they just mean the wire protocol [16:23] aurynn: since the wire protocol docs don't really have anything about async... [16:23] creationix: I did mention we're implementing the protocol outselves [16:23] zemanel has joined the channel [16:23] aurynn: http://www.postgresql.org/docs/8.3/static/libpq-async.html [16:23] aurynn: Looks like it's libpq [16:24] creationix: well, I asked specifically about issues in the protocol [16:24] creationix: like not being able to tie a error to a request [16:24] creationix: and that's when they said that everyone just blocks and so it's not an issue for them [16:24] aurynn: Yeah. [16:24] aurynn: Also, you can tie errors to requests [16:24] sanderjd has joined the channel [16:25] aurynn: by watching the state that's returned with ReadyForQuery [16:25] aurynn: If it's E, the last whatever you did broke. [16:25] sanderjd has left the channel [16:25] creationix: hmm, will the error messages always come back in the same order you caused them [16:25] creationix: otherwise that's not quite good enough [16:25] aurynn: but, yes, having protocol-level support for named constructs would be SO FUCKING HANDY. [16:26] aurynn: "this data row is from portal foo." [16:26] creationix: yeah, but even if they added the feature, all the databases in the world would still use the old protocol [16:26] aurynn: except us [16:27] aurynn: In any case, I'm almost at a working mechanism [16:27] scoates: tjholowaychuk: can point out what I'm doing wrong here? I get "Error: open(/): ERROR Server Exception: sessionId should not be null;" http://gist.github.com/615392 [16:28] tjholowaychuk: scoates: you only need .chain once [16:28] bradleymeck: mmm is socket.io head acting funny? [16:28] tjholowaychuk: scoates: it just "activates" the chaining api [16:28] scoates: ah [16:28] tjholowaychuk: likewise with end [16:29] tjholowaychuk: only one end() [16:29] tjholowaychuk: I should document that [16:29] ceej has joined the channel [16:31] pgriess has joined the channel [16:32] scoates: tjholowaychuk: nice. is there a way for me to catch a failed assertion from within the callback? [16:33] tjholowaychuk: scoates: not currently, i might be able to work in support for multiple end() calls [16:33] tjholowaychuk: scoates: ATM its bascically just if anything fails, the one end() will know about it and report [16:33] tjholowaychuk: didnt see a use-case for multiple [16:33] scoates: I tried try/catch to no avail (-: [16:33] scoates: tjholowaychuk: did you see my use case? [16:34] tjholowaychuk: scoates: I think you can do that sort of stuff with selenium's api [16:34] tjholowaychuk: via a command [16:34] tjholowaychuk: you can execute arbitrary js [16:34] xraid has joined the channel [16:34] mape: tjholowaychuk: node-profile [16:34] mape: the tick processor failing, if you do it manually, does it "work" the same? [16:35] tjholowaychuk: mape: nah works fine manually [16:35] tjholowaychuk: for some reason [16:35] mape: Hmm.. strange [16:35] tjholowaychuk: node-profile seems to work on small profiles [16:35] tjholowaychuk: but larger ones explode [16:35] tjholowaychuk: same goes for the tick processor in general it seems to explode when large but can handle more than node-profile for whatever reason [16:35] mape: Size shouldn't matter, it is just waiting to execute stuff [16:35] tjholowaychuk: even though it is essentially the same thing lol [16:35] mape: Yeah.. [16:35] tjholowaychuk: not sure what was going on [16:36] scoates: tjholowaychuk: http://gist.github.com/615412 (FWIW). I can live without it for now. [16:36] tjholowaychuk: scoates: cant catch async exceptions [16:36] ginader has joined the channel [16:36] scoates: right [16:36] mape: Well its very icky all over, not sure what breaks it and what doesn't [16:36] mikeal has joined the channel [16:36] scoates: I just added that to show what I'd like to do, logically (I didn't expect it to actually work) [16:36] tjholowaychuk: scoates: ah :) k cool [16:37] scoates: well, thanks for the other change (-: [16:37] mape: tjholowaychuk: the strerr thing, was that just off totally or did it output to strerr sometimes? [16:37] mikeal has joined the channel [16:38] tjholowaychuk: mape: seemed like all the time [16:38] ph^ has joined the channel [16:38] onar has joined the channel [16:38] mape: that would be an issue with the processor though? not the node part [16:38] mikeal has joined the channel [16:39] tjholowaychuk: i think so [16:39] tjholowaychuk: not sure [16:39] tjholowaychuk: i gave up pretty quick and just used the processor directly [16:40] mape: Guess I should just disect the script and try manually/automagic and see where it breaks [16:42] tjholowaychuk: i might just wrap around node and if --prof is there execute the processor after automatically [16:42] gerred has joined the channel [16:42] mape: Should just make a better profiler that gives more useful info ;) [16:44] TheEmpath has joined the channel [16:45] trotter_ has joined the channel [16:47] saikat has joined the channel [16:48] devkorcvince has joined the channel [16:48] bradleymeck: ugg im missing something here, the npm socket.io doesnt seem to be working when i use it, but the example is fine http://gist.github.com/615435 [16:48] slashxr has joined the channel [16:48] noahcampbell has joined the channel [16:49] TheEmpath: i had hte same issue [16:49] brianmario has joined the channel [16:49] antares_ has joined the channel [16:49] dshaw: bradleymeck: I had to move to HEAD [16:49] bradleymeck: i tried head [16:50] TheEmpath: how i solved it was changing to to [16:50] TheEmpath: err [16:50] TheEmpath: change it to [16:50] TheEmpath: provided that your node.js server is serving the html output [16:50] ossareh has joined the channel [16:50] dshaw: Yeah, I didn't have any luck with using the CDN either. [16:51] TheEmpath: you wont be able to [16:51] TheEmpath: you have to use node.js as your web server as well as hte socket server [16:52] TheEmpath: you can't have apache serve webpages while running a node.js server and hope that socket.io works [16:52] TheEmpath: node.js has to be the server handing out the html as well [16:52] bradleymeck: i have a connect server handling the http so... [16:53] TheEmpath: i was unable to figure out a way to make socket.io work while a non-node.js instance was acting as the server :( [16:53] creationix: TheEmpath: I think it's possible, but I personally don't know how [16:53] creationix: 'course I always just use connect to serve everything [16:54] bradleymeck: f me i forgot to fire .connect() from html [16:54] dshaw: :) [16:55] tjholowaychuk: dshaw: got that change into soda [16:55] tjholowaychuk: dshaw: will be a nice pluggable interface [16:55] dshaw: tjholowaychuk: Awesome! I'll check it out tonight. [16:56] dshaw: tjholowaychuk: Any experience with extended characters when writing your soda scripts? [16:57] tjholowaychuk: dshaw: all i know is saucelab chokes (currently) on multibyte chars [16:57] tjholowaychuk: not sure if it is a selenium rc issue or what [16:57] dshaw: yep [16:57] tjholowaychuk: but i hit that the other day [16:57] prettyrobots has joined the channel [16:57] bpot has joined the channel [16:58] tjholowaychuk: are you using saucelabs too? [16:58] dshaw: Even just international chars seems to be an issue. [16:58] dshaw: yes [16:58] dshaw: I've had an account with them for ~6 months. [16:58] dshaw: Amazing service. [16:58] brianmario has joined the channel [16:58] tjholowaychuk: ah nice :) [16:58] tjholowaychuk: ya its rad [16:59] dshaw: They should pay me money for all the promo I give them. [16:59] tjholowaychuk: hahaha [16:59] TomsB has joined the channel [16:59] dshaw: Sauce On Demand is the ultimate toy for non-programmers too. [16:59] dshaw: Run it and show to a suit [16:59] dshaw: ooh ahh [17:00] tjholowaychuk: we are integrating into our deploy [17:00] tjholowaychuk: so nothing gets passed our test suite [17:00] tjholowaychuk: should be good [17:00] dshaw: Yeah, I've been tracking that. [17:00] dylang has joined the channel [17:01] dshaw: and working to emulate it. :) [17:01] dshaw: I hope the team will continue to blog about it. [17:02] tjholowaychuk: our stuff? [17:02] tjholowaychuk: im sure we will [17:02] dshaw: deploy process [17:02] tjholowaychuk: soda has already caught some stuff even tho its not really integrated yet [17:02] dshaw: totally [17:03] dshaw: it helps you see what's going on at a different level. [17:04] dshaw: tjholowaychuk: Do you have something that hooks an espesso test to soda yet? [17:04] tjholowaychuk: dshaw: nah, not sure I will [17:05] dshaw: that is, unit tests pass —> Soda [17:05] tjholowaychuk: expresso is really just unit tests [17:05] tjholowaychuk: ah [17:05] tjholowaychuk: well you could just $ make test && make test-acceptance [17:05] dshaw: Right [17:05] davidascher has joined the channel [17:05] dshaw: I haven't gotten that far yet. [17:06] dshaw: Just been thinking about how to integrate the two when I'm done with Soda. [17:06] tjholowaychuk: cool cool [17:07] dshaw: Right now, the general scenario that I'm working on is: espresso, soda, git tag, deploy [17:07] dshaw: ??? [17:07] dshaw: PROFIT! [17:08] dshaw: s/espresso/expresso/ [17:08] jesusabdullah: Sounds like too much sugar and caffeine [17:09] tjholowaychuk: ahha [17:09] tjholowaychuk: yes yes it does :p [17:09] jesusabdullah: I'd recommend water [17:09] dshaw: lol [17:09] jesusabdullah: and green tea [17:09] jesusabdullah: :D [17:09] isaacs: tjholowaychuk: my gf buys clothes from express sometimes, and keeps the bags, cuz they're big and useful. [17:09] isaacs: tjholowaychuk: every time i see it, i think, "hey, that's tj's web thing..." [17:09] tjholowaychuk: haha sweet [17:10] isaacs: also, you ever notice that if you write "express" over and over again, it starts to look like "sex press"? [17:11] jesusabdullah: expres sex press express? [17:11] mape: isaacs: expert sexchange? [17:11] isaacs: yeah, exactly :) [17:11] jesusabdullah: I'd hope the operators were experts! [17:11] isaacs: "sex press... oh yeah" [17:11] isaacs: it's like bench press but hotter [17:11] mape: groovy framework [17:12] jchris has joined the channel [17:12] TomsB has joined the channel [17:13] quirkey has joined the channel [17:13] mbrochh]2 has joined the channel [17:14] benreesman has joined the channel [17:14] dmcquay has joined the channel [17:15] tjholowaychuk: haha, slick http://dev.markup.io/v/a2knj53wpc90 [17:15] sideshow has joined the channel [17:15] bpot has joined the channel [17:16] TomsB has joined the channel [17:18] Tprice: what database should i use? [17:18] Tprice: something clean [17:19] jesusabdullah: What do you mean by clean? [17:19] jesusabdullah: What do you actually want out of the database? [17:19] sprout has joined the channel [17:19] jesusabdullah: and the interface? [17:19] sideshow has joined the channel [17:20] Tprice: im looking for some for of sql [17:20] Tprice: maybe sqlite? [17:20] jesusabdullah: hmm [17:20] jesusabdullah: There are node sqlite bindings [17:21] mape: Man I love my automagic frontend shnizzle, no refersh on CSS changes, auto refresh on template changes and have 5 different browsers and they all follow eachother around [17:21] jesusabdullah: The standard ones are at http://github.com/orlandov/node-sqlite iirc [17:21] jesusabdullah: but I believe http://github.com/pkrumins/node-sqlite has some bugfixes or something [17:25] shockie has joined the channel [17:25] adambeynon has joined the channel [17:25] TheEmpath: howdy team [17:25] CIA-77: node: 03Ryan Dahl 07master * r54e844c 10/ (doc/api.markdown src/node.js): add require.cache - http://bit.ly/bDd5cU [17:26] TheEmpath: jsperf shows that in nearly every case prototypes are way faster than any other OOP implementation [17:26] sideshow has joined the channel [17:27] TheEmpath: is this the consensus? or is there another way? [17:27] aurynn: When in JS, use prototypes. [17:28] [[zz]] has joined the channel [17:30] creationix: bradleymeck: you there? [17:30] deepthawtz has joined the channel [17:30] bradleymeck: ACTION glops about crazily [17:30] creationix: TheEmpath: also you'll find this interesting [17:30] siculars has joined the channel [17:30] creationix: bradleymeck: 72.14.187.119:3000/object-graphs-2 [17:30] creationix: sneak peek at my next article [17:30] bradleymeck: theempath if you dont have to hide data use prototypes, if you do use closures [17:31] TheEmpath: \o/ [17:31] creationix: what do you think about the graph of prototypes [17:31] creationix: TheEmpath: it's the constructor+prototype style I mentioned the other day [17:31] sideshow has joined the channel [17:31] killfill: whats the easiest way to persist hashes?.. [17:31] TheEmpath: im concerned on Tim_Smart's comment about potential GC issues [17:31] killfill: (dont need a funky database like riak or anything yet) [17:31] delapouite has joined the channel [17:32] creationix: killfill: node-dirty, nstore, fs.writeFile(JSON.stringify(…)) [17:32] creationix: there are a few options [17:32] isaacs: killfill: couch and mongo are pretty easy, too [17:32] TheEmpath: its okay for gc problems to exist on front-end js as a user just has to reload a webpage [17:32] TheEmpath: its a big deal for a standalone server [17:32] isaacs: killfill: couch if you care about your data, mongo if you don't [17:32] isaacs: killfill: or what creationix suggested :) [17:32] isaacs: killfill: you could also just keep a hash in memory. [17:32] creationix: TheEmpath: the gc issues are more performance issues and less memory leaks [17:33] TheEmpath: i'd love to delve into those [17:33] creationix: TheEmpath: and it only matters if you're going to be making thousands of instances of the objects [17:33] tjholowaychuk: creationix: do you work? lol [17:33] TheEmpath: its possible with what im doing :( [17:33] bradleymeck: creationix, nice but whats with the tim/jack dot graph XD [17:34] creationix: bradleymeck: it's in progress, the second and third graphs are completely wrong [17:34] creationix: bradleymeck: mainly I was asking about the first graph [17:34] killfill: oh node-dirty is dirty.. :P [17:34] killfill: thanks guys! [17:34] stephenjudkins has joined the channel [17:35] bradleymeck: seems to be in order [17:35] creationix: bradleymeck: technically all functions have a ..prototype property that points to a objects that points back via .constructor [17:35] creationix: but I tend to ignore that for most functions [17:35] creationix: except ones being used as constructors [17:35] creationix: also I'm fudging a little on the inheritance [17:36] bradleymeck: yea, the .constructor for objects is a bit odd [17:36] creationix: I could have a .__proto__ property with a normal black reference line [17:36] creationix: but I think it's more clear to just say "it inherits" and leave it at that [17:36] creationix: since __proto__ isn't official [17:36] creationix: but I am using __proto__ in my code [17:36] bradleymeck: well dont forget using new gives you .constructor to the function [17:36] bradleymeck: but that can be overriden [17:37] sideshow has joined the channel [17:37] creationix: bradleymeck: nope, not new [17:37] creationix: it's when the function is created [17:37] creationix: in new Function() [17:37] creationix: constructor is in the prototype, not the instance [17:37] creationix: I thought it was in the instance, but experience and reading the spec proved me wrong [17:37] bradleymeck: v8: function foo(){}; var x = new foo; var c = x.constructor; x.constructor = 3; [x.constructor,c] [17:37] v8bot: bradleymeck: [3, function foo(){}] [17:38] creationix: v8: function Foo(){}; Foo.prototype.constructor [17:38] v8bot: creationix: function Foo(){} [17:38] creationix: v8: function Foo(){};a = new Foo();a.hasOwnProperty('constructor') [17:38] v8bot: creationix: false [17:38] dahankzter has joined the channel [17:39] bradleymeck: oh, nm i was confused then [17:39] creationix: I was too [17:39] tjholowaychuk: bradleymeck: I looked at v8's source [17:39] tjholowaychuk: yesterday [17:39] tjholowaychuk: about that [17:39] creationix: but while writing this article things didn't work the way I expected [17:39] tjholowaychuk: its in some %InitializeFunction() .. function haha [17:39] creationix: and I double checked the spec, v8 is doing it right [17:39] creationix: ALL functions have a .prototype that points back [17:40] TheEmpath: woah.... [17:40] creationix: which sucks because we create throw-away functions all the time in node [17:40] vnguyen has joined the channel [17:40] TheEmpath: in js, if i change the parent prototype, all the children get adjusted on the fly!? [17:40] creationix: TheEmpath: yep [17:40] tjholowaychuk: bradleymeck: ah sorry it was this one http://gist.github.com/613704 [17:40] TheEmpath: descendant awareness!? [17:40] creationix: TheEmpath: nope [17:40] TheEmpath: woooooooooow [17:40] creationix: TheEmpath: just references [17:41] creationix: everything is run-time and dynamic [17:41] TheEmpath: its not direct awareness [17:41] q_no has joined the channel [17:41] TheEmpath: its an infered one [17:41] creationix: the prototype has no clue about all the sub objects that inherit from it [17:41] creationix: they all look up their chain of inheritance EVERY time the property is accessed [17:41] creationix: and so if you change it in the parent, then the effect if immediete [17:42] creationix: *is [17:42] TheEmpath: so if i change a parent's property "a" to equal 7, and i have three children of that prototype, then when the children access "a" they all get 7? [17:42] Gruni has joined the channel [17:42] creationix: TheEmpath: exactely [17:42] TheEmpath: D: [17:42] sideshow has joined the channel [17:42] TheEmpath: but [17:42] yenz has joined the channel [17:42] creationix: but if you override that property in the child, then it never looks at the parent [17:42] creationix: TheEmpath: in my diagram, the blue lines are inheritance [17:42] TheEmpath: if i change a parent's property "a" to equal 8 through a child object, then for that object only the parent's "a" it will equal 8 [17:43] TheEmpath: ahhh [17:43] TheEmpath: wow [17:43] TheEmpath: that's interesting [17:43] tjholowaychuk: its just a chain [17:43] tjholowaychuk: lol [17:43] bradleymeck: how does this look for a session keeping api for websockets (only server is aware of the session) http://gist.github.com/615517 [17:43] tjholowaychuk: grrr [17:43] tjholowaychuk: drr* [17:43] creationix: primitive values are immutable singletons [17:43] creationix: all of them [17:43] creationix: you can't change them [17:43] TheEmpath: the idea of changing a parent and having it affect all children in runtime is.... very powerful [17:43] isaacs: TheEmpath: but if you do child.__proto__.a = 8, then that'll change it for all of them [17:43] creationix: just point to new ones [17:43] mbrochh has joined the channel [17:43] bradleymeck: powerful but not useful too often [17:44] creationix: [].__proto === Array.prototype [17:44] killfill: there is something i dont get: http://pastebin.ca/1957020 [17:44] killfill: how do i specify the path correctly? [17:44] creationix: anyway, back to finishing my article [17:44] aurynn: Aren't [] instanceof Array? [17:44] creationix: yep [17:44] sideshow has joined the channel [17:45] isaacs: killfill: remove the path.dirname() call on 06 [17:45] creationix: instanceof means that somewhere in my inheritance chain if the .prototype of Foo [17:45] aurynn: ah [17:45] DozyPieman has joined the channel [17:46] creationix: I really don't like the indirection, but it's javascript's most popular OO style and the way the language was designed to be used [17:46] creationix: and it's quite powerful and effecient [17:46] killfill: hm.. now i get Cannot find module 'constants' :S [17:46] melda has joined the channel [17:47] sanderjd has joined the channel [17:47] sanderjd has left the channel [17:47] creationix: killfill: constants is a node v0.3.x thing [17:47] banjiewen has joined the channel [17:47] creationix: killfill: what library are you using? [17:48] melda: I'm hoping to get an answer to a npm question... can anyone help? [17:48] killfill: hm.. using node-dirty.. i guess ill use nstore.. [17:49] sh1mmer has joined the channel [17:50] benburkert has joined the channel [17:50] reid has joined the channel [17:50] zemanel has joined the channel [17:51] franksvalli has joined the channel [17:53] creationix: killfill: I think node-dirty is more stable [17:53] creationix: nstore is more powerful though [17:53] MikhX has joined the channel [17:54] creationix: killfill: if you submit a ticket to node-dirty, felix might fix it right away, it's 8pm where he lives [17:55] killfill: heh.. look like every one knows each other in nodejs.. :) [17:55] killfill: ok [17:58] saikat has joined the channel [17:58] langworthy has joined the channel [18:00] isaacs: melda: what's up? [18:00] zpoley has left the channel [18:00] isaacs: killfill: yeah, it's a pretty close community still :) [18:01] sideshowcoder has joined the channel [18:01] melda: Thanks Issac. :) I'm trying to install it. I've changed permissions (recursively) on /usr/local, but I'm still getting a permission error. [18:02] isaacs: ah, you're ajtacka? [18:03] franksvalli has joined the channel [18:03] isaacs: melda: ^ [18:03] melda: issac: yeah, I'm her too :) [18:04] isaacs: kewl, ok. [18:04] isaacs: so, the error you reported is with the mkdir that the script does, not with the actual install itself [18:09] melda: Aha. So is there anything I can do or I should check to be able to install? [18:09] isaacs: melda: are you running the curl|sh command in your home directory? [18:09] isaacs: cd ~ [18:09] isaacs: and then do it [18:09] v8bot has joined the channel [18:09] isaacs: if you cant' mkdir there,then something is very wrong [18:10] melda: ah, I'm not. I didn't check where I was before I started. [18:10] melda: that works, thanks heaps. And I feel a bit silly :) [18:11] gerred has joined the channel [18:11] robotarmy has joined the channel [18:12] isaacs: no problem :) [18:14] creationix: alright, got the second diagram done [18:15] c4milo has joined the channel [18:15] melda has left the channel [18:17] Me1000 has joined the channel [18:17] muhqu has joined the channel [18:17] bootlaces has joined the channel [18:17] bootlaces has joined the channel [18:20] dilvie: What content management solutions are available for Node? [18:20] shockie has joined the channel [18:21] AAA_awright: dilvie: What features are you looking for? [18:21] c4milo: hey guys ! [18:21] c4milo: what do you think about this [18:21] c4milo: http://www.infoworld.com/d/developer-world/w3c-hold-html5-in-websites-041 [18:21] c4milo: ? [18:21] c4milo: I like to know your thoughts [18:22] dilvie: AAA_awright: An admin interface similar to WordPress for adding pages and content. Would be ideal if I can easily in-line my application views for individual pages. [18:23] AAA_awright: c4milo: Whatever it is, HTML5 is overrated, and still doesn't seem to have any XML standard for using XML namespaces >:( [18:23] AAA_awright: Yeah that's pretty much what the article says anyways isn't it [18:23] tmpvar: no [18:24] dilvie: AAA_awright: Oh rilly? http://blog.whatwg.org/xhtml5-in-a-nutshell [18:24] tmpvar: xml sucks btw [18:25] tmpvar: they are just saying that "there isnt enough browser support" and "the spec is changing" [18:25] AAA_awright: dilvie: I don't know of any that can even do that, I'm actually working on a CMS though, that can work off of multiple data sources/databases and uses an RDF data model [18:25] AAA_awright: dilvie: I know people have implemented basic page editors [18:26] tilgovi has joined the channel [18:26] dylang has joined the channel [18:26] AAA_awright: What browser support, for what new features? [18:27] AAA_awright: A stupid