[00:00] robotarmy has joined the channel [00:03] Huvet: anyone? [00:03] pyrotechnick: whats up [00:03] pyrotechnick: nah no idea sorry [00:03] pyrotechnick: you guys trying to get the client on the server [00:03] pyrotechnick: you guys are crazy [00:03] pyrotechnick: why dont use make bindings to chromium or something [00:04] Huvet: yep, that's how I roll [00:04] pyrotechnick: do it properly [00:04] Huvet: well, I've tried every other possible way to get a reliable screen scraping going [00:04] Huvet: the folks behind readability have done the work for me, in 1800 lines of js [00:05] Huvet: I should rewrite it for the server-side, but that's a hell of a lot of work [00:05] pyrotechnick: yeah theres a fine line between things feeling 'right' and it just taking too much time [00:05] pyrotechnick: we constantly struggle to determine what we should and shouldnt rewrite [00:06] Huvet: I can understand that [00:07] pyrotechnick: we kind of draw the lines at APIs [00:07] pyrotechnick: if its effecting our app in terms of the APIs we have to link against then its got to be rectified, usually by rewriting or wrapping it in an adapter [00:08] pyrotechnick: so things can be ugly as hell on the inside but as long as they work and have a decent API then they do not warrant a rewrite [00:08] pyrotechnick: but if the API feels very clientside or server side it's got to go [00:09] Huvet: I'm handling this script as a blackbox... in goes an url, out comes the most relevant text from that page (determined algorithmically)... so the interface is pretty clean [00:10] perezd: ES5 spec is a good read [00:10] Blackguard has joined the channel [00:10] pyrotechnick: perezd: it has bugs [00:11] perezd: pyrotechnick: what should I be looking out for in particular [00:11] pyrotechnick: so even if browsers fully complied with es5 we'd still have bugs [00:11] pyrotechnick: slicing [00:11] pyrotechnick: array operations [00:11] pyrotechnick: that kind of thing [00:11] perezd: pyrotechnick: I am reading it more for the node end than browser end [00:11] pyrotechnick: then that's ok [00:11] perezd: so less about browsers [00:11] pyrotechnick: u wanna read the page on the wiki [00:11] pyrotechnick: ill find it [00:11] pyrotechnick: you're lucky perezd [00:11] perezd: ? [00:12] pyrotechnick: our code has to work client/server [00:12] pyrotechnick: but coffee kinda takes the load off [00:12] perezd: pyrotechnick: we will be writing client/server as well [00:12] perezd: but [00:12] perezd: different codebases [00:12] perezd: with different concerns [00:12] pyrotechnick: this is what you want [00:12] pyrotechnick: https://github.com/ry/node/wiki/ECMA-5-Mozilla-Features-Implemented-in-V8 [00:12] perezd: so, I can do the right thing where I can [00:12] pyrotechnick: nah not really [00:12] pyrotechnick: perezd: we write everything that can possibly be X-platform, X-platform [00:12] perezd: ? [00:12] pyrotechnick: even if it doesnt really make sense sometimes [00:13] pyrotechnick: it's an MMO [00:13] pyrotechnick: so alot of the code needs to run on both [00:13] perezd: ah [00:13] sh1mmer has joined the channel [00:13] pyrotechnick: or might one day [00:13] pyrotechnick: there are only a handful of things that dont run on both [00:13] pyrotechnick: like the socket server [00:13] pyrotechnick: and the webgl code [00:13] pyrotechnick: the rest is pretty much running on both at some point in time [00:13] pyrotechnick: anyway [00:14] perezd: yeah, we are mostly doing socket programming, and then an MVC javascript app [00:14] pyrotechnick: https://github.com/ry/node/wiki/ECMA-5-Mozilla-Features-Implemented-in-V8 is the page u want [00:14] pyrotechnick: are u using any frameworks? [00:14] perezd: thats an awesome link, thank you [00:14] perezd: pyrotechnick: for what, MVC> [00:14] perezd: ? [00:14] perezd: or sockets [00:14] pyrotechnick: both [00:14] perezd: planning to use socket.io for sockets, and Backbone.JS + jQuery for MVC [00:14] pyrotechnick: i assume ur using socket.io [00:14] pyrotechnick: right [00:14] pyrotechnick: i was going to suggest both of those [00:14] perezd: yeah [00:14] perezd: ;) [00:14] pyrotechnick: you're on the right track ^w^ [00:15] perezd: I am feeling fairly on the right track, just want to bone up on my JS [00:15] pyrotechnick: may i also suggest zappa [00:15] perezd: and get really savvy [00:15] pyrotechnick: if ur using coffee [00:15] perezd: I am using coffee [00:15] pyrotechnick: then id all but insist you use zappa unless you're doing some really crazy express stuff [00:15] perezd: definitey not [00:15] perezd: doing crazy [00:15] perezd: actually our express needs are very simplistic [00:16] perezd: what does zappa bring to the table? [00:16] perezd: (besides more code ;)) [00:16] pyrotechnick: its a DSL [00:16] pyrotechnick: https://github.com/mauricemach/zappa [00:16] pyrotechnick: and it does some other cool things but mainly it simplifies express's API [00:16] pyrotechnick: im not sure how nicely it plays with backbone.js but i assume pretty well (we honestly havent started using backbone.js yet) [00:17] perezd: pyrotechnick: Backbone doesn't really enforce any sort of major constraints [00:17] pyrotechnick: the idea is that you have everything in a single or you at least include it into that [00:17] pyrotechnick: yeah its nice like that, very agnostic [00:17] pyrotechnick: i think u cud even back backbone with couchdb directly [00:17] perezd: I think I might go for just straight express [00:17] pyrotechnick: ok [00:17] perezd: because I really want to get to know all the levels personally [00:17] pyrotechnick: but definitely take a look into zappa [00:17] pyrotechnick: yeah [00:17] perezd: yeah I pulled it up now [00:17] perezd: I am reading [00:17] perezd: and it looks cool, but I don't yet know the problem it solves personally [00:18] perezd: so it feels overkill at this exact moment [00:18] perezd: but I've bookmarked :) [00:18] perezd: have you heard of Zombie.JS? [00:18] aurynn: I'm really liking express, though writing webapps in asynch headspace is weird [00:18] aurynn: and handwaving data models together is odd as hell [00:19] perezd: my use case of actual HTTP is low, like...a URL to serve the page :P [00:19] ezmobius has joined the channel [00:19] perezd: from there, its all sockets [00:19] pyrotechnick: yeah [00:19] pyrotechnick: thats the idea [00:19] perezd: has anyone here done much socket.io with iPhone ? [00:19] pyrotechnick: backbone is miles ahead of sproutcore, but that's the alternative [00:19] paulrobinson has joined the channel [00:19] perezd: and I mean like, natively, not through mobSafari [00:19] pyrotechnick: i have done some yes perezd [00:19] pyrotechnick: natively? [00:20] perezd: yes [00:20] perezd: ie: objc level [00:20] pyrotechnick: u cant do native js on iphone i dont think [00:20] pyrotechnick: right [00:20] dthompson has joined the channel [00:20] perezd: so is there any way to communicate with TCP socket? [00:20] pyrotechnick: well theyre not really websockets then [00:20] pyrotechnick: yes [00:20] pyrotechnick: u can use sockets in cocoatouch [00:20] pyrotechnick: games and shit use them [00:20] pyrotechnick: i think there's UDP aswell [00:21] perezd: pyrotechnick: how far out on a limb to I go when using socket.io with a native app? [00:21] perezd: can I do like a long poll thing? [00:21] pyrotechnick: u can do websockets [00:22] pyrotechnick: theres probably an implementation [00:22] perezd: pyrotechnick: from a native objc app? [00:22] alek_br has joined the channel [00:22] perezd: okay, thats what I really need to get figured out [00:22] pyrotechnick: if theres an implementation [00:22] perezd: http://stackoverflow.com/questions/2664002/how-to-incorporate-websockets-into-a-cocoa-application [00:22] perezd: interesting [00:24] pgte has joined the channel [00:24] pyrotechnick: right so ud need to update it [00:25] pyrotechnick: wait [00:25] pyrotechnick: yeah [00:25] pyrotechnick: i mean it probably wont be long until apple expose it [00:25] pyrotechnick: it will be there as a private API [00:26] pyrotechnick: but if u want to get in the appstore and dont have insider trading with apple like the big players [00:26] pyrotechnick: then youll have to fix that library [00:26] perezd: pyrotechnick: there must be a socket model in objc [00:26] perezd: i find that really hard to believe [00:26] pyrotechnick: there is thats what that would be written on [00:26] pyrotechnick: but its not websockets... [00:26] pyrotechnick: websocket is slightly different to raw tcp [00:26] pyrotechnick: it starts off as a http [00:26] pyrotechnick: then it 'upgrades' [00:27] perezd: http://lukeredpath.co.uk/blog/pushing-events-to-your-iphone-using-websockets-and-pusher.html [00:27] pyrotechnick: right so pusher have it [00:28] perezd: HAH [00:28] pyrotechnick: hopefully its open source cuz pusher sockets are one-way [00:28] perezd: it uses ZTWebSocket [00:28] pyrotechnick: wats that [00:28] perezd: that zimt thing [00:28] isaacs has joined the channel [00:28] pyrotechnick: right [00:29] pyrotechnick: hmm [00:29] pyrotechnick: websockets wernt in iphone in march [00:29] pyrotechnick: wait wait [00:29] pyrotechnick: im dumb [00:29] pyrotechnick: continue [00:29] perezd: ?? [00:29] pyrotechnick: i keep thinking websocket means the browser implementation [00:30] pyrotechnick: i dunno using websockets outside of a browser seems like a strange thing to do [00:30] perezd: well, what do you do with Socket.io in that case? [00:30] pyrotechnick: but if u have to support browsers anyway [00:30] pyrotechnick: yeah wel thats the thing [00:30] pyrotechnick: if ur already supporting websocket [00:30] pyrotechnick: u may as well just use that [00:30] pyrotechnick: websocket is the LCD [00:30] perezd: using websokcets as a protocol doesn't seem weird [00:31] perezd: its not inherently a browser thing [00:31] pyrotechnick: well [00:31] pyrotechnick: it kinda is [00:31] perezd: how so?> [00:31] perezd: its just HTTP [00:31] perezd: you can make HTTP requests from objc [00:31] pyrotechnick: no the handshake is http [00:31] pyrotechnick: then it's kind of a real socket [00:31] pyrotechnick: but theres lots of things that make it not a real socket for browser security reasons [00:32] pyrotechnick: which is why i consider it inherently a browser technology [00:32] pyrotechnick: but like i said [00:32] pyrotechnick: if ur already supporting websocket or need to support websocket [00:32] pyrotechnick: then u may as well just pick it [00:32] pyrotechnick: unless u need native tcp features [00:32] pyrotechnick: its good enough [00:33] perezd: pyrotechnick: I guess maybe I can use xhr longpolling too [00:34] pyrotechnick: if u were crazy [00:34] perezd: lol [00:34] davidc_ has joined the channel [00:34] davidc_ has joined the channel [00:34] pyrotechnick: there are alot of crazy people on here as i find out from time to time [00:34] pyrotechnick: some people like to use node streams to copy files [00:34] pyrotechnick: instead of the 30 year old `cp` program [00:35] perezd: pyrotechnick: http://code.google.com/p/cocoaasyncsocket/ [00:35] perezd: thats what that thing is based on [00:35] pyrotechnick: i guess all the power of node.js has gone to their heads [00:36] pyrotechnick: maybe theyve never written production-ready software or maybe they have access to free and unlimited computing resources [00:36] pyrotechnick: but a part of me thinks not and that they're just insane [00:36] perezd: lol [00:36] perezd: reading the code to ZTWebSocket, feels like...its just a wrapper for the HTTP aspect [00:37] perezd: the handshake [00:37] pyrotechnick: its like driving to the airport and catching a plane to another airport and back then driving home then walking next door when you just wanted to walk next door [00:37] sveimac has joined the channel [00:37] pyrotechnick: yeah [00:37] pyrotechnick: read like [00:37] perezd: https://github.com/erichocean/cocoa-websocket [00:37] pyrotechnick: node-websocket or whatever theyre called, the really simple ones [00:37] perezd: another! [00:37] pyrotechnick: its like [00:37] pyrotechnick: 50 lines [00:38] pyrotechnick: or less [00:38] pyrotechnick: it just does the handshake then thats it [00:38] isaacs: we need a js guide like _why's poignant guide or lyah [00:38] perezd: ah ha! https://github.com/fpotter/socketio-cocoa [00:38] isaacs: with cartoons and jokes and shit [00:38] perezd: EPICWIN [00:38] perezd: this is all I need I think [00:39] perezd: its built on all the things we found [00:39] perezd: like some sort of journey we just went on [00:39] pyrotechnick: an epic journey of self discovery [00:41] perezd: I feel like we just grew a little bit closer [00:41] perezd: every so slightly [00:41] cognominal has joined the channel [00:43] sh1m has joined the channel [00:44] wycats has joined the channel [00:44] mraleph has joined the channel [00:44] dthompson has joined the channel [00:45] pyrotechnick: some people do not deserve to be programmers [00:45] perezd: yeah, like marketers [00:46] pyrotechnick: someone has patched bullet [00:46] pyrotechnick: plSetLinVelocity(plRigidBodyHandle object, plReal vel); [00:46] pyrotechnick: plGetLinearVelocity(plRigidBodyHandle object, plVector3 vel); [00:46] pyrotechnick: WHY [00:46] pyrotechnick: WHY ABBREVIATE IT [00:46] perezd: HUNGARIAN NOTATION FTW [00:46] pyrotechnick: they must hate their job [00:46] pyrotechnick: its not hungarian [00:46] perezd: lol [00:46] perezd: I know [00:46] perezd: I just enjoy saying that [00:47] pyrotechnick: its c [00:47] pyrotechnick: u have to namespace ur junk like that [00:47] perezd: the one contribution hungary has made for computer science [00:47] pyrotechnick: pl means physics library [00:47] pyrotechnick: yeah [00:47] pyrotechnick: the only [00:47] perezd: lol [00:47] pyrotechnick: anyway he's only done it in that one method [00:47] perezd: strFirstName = "name" [00:47] pyrotechnick: completely broken the consistency of the API [00:48] pyrotechnick: i fucking hate systems hungarian [00:48] perezd: lol [00:48] pyrotechnick: theres a good post by linus [00:48] pyrotechnick: as to why hungarian is a retarded idea [00:48] perezd: its sort of like longcat is long [00:48] pyrotechnick: yeah [00:48] pyrotechnick: ill try to find it [00:49] pyrotechnick: hungarian in javascript is an even worse idea than in c/c++, at least theyre typesafe [00:49] pifantastic has joined the channel [00:49] perezd: yeah this is true [00:49] pyrotechnick: we [00:49] pyrotechnick: would get along just dandy perezd [00:49] perezd: seems that way [00:49] arpegius has joined the channel [00:49] perezd: where you located? [00:49] pyrotechnick: tell me [00:49] pyrotechnick: how would you copy a file in node [00:50] perezd: uhh, I don't know how to pipe out a shell in node yet, but I'd probably do that [00:50] pyrotechnick: linked streams or exec 'cp SOURCE TARGET' [00:50] perezd: yeah that one [00:50] perezd: exec [00:50] kschzt has joined the channel [00:50] pyrotechnick: perezd.golden_stars++ [00:50] perezd: in ruby `cp #{source} #{target}` [00:50] perezd: they use backticks for exec [00:50] perezd: or Object#system [00:50] perezd: or %x [00:51] perezd: pyrotechnick: u live in bay area by chance? [00:51] pyrotechnick: im an aussie mate [00:51] pyrotechnick: i fucking wish though [00:52] perezd: aww too bad [00:52] perezd: I live in silicon valley area [00:52] vineyard has joined the channel [00:52] perezd: we can just be internet friends [00:52] aconbere has joined the channel [00:54] sveimac has joined the channel [00:54] arpegius_ has joined the channel [00:55] pyrotechnick: i want to goto texas [00:56] pyrotechnick: all the games are there [00:57] pyrotechnick: is Houston nice? [00:57] perezd: never been [00:57] pyrotechnick: i think id like it [00:57] perezd: barely left california, haven't traveled much, unfortunately... [00:57] perezd: hoping to some day [00:58] pyrotechnick: yay [00:58] pyrotechnick: we shud go on a node.js activist tour [00:58] perezd: totally [00:58] pyrotechnick: teach people why its rad, how to copy files properly etc [00:58] perezd: hahahah [00:58] perezd: yeah [00:59] isaacs has joined the channel [00:59] pyrotechnick: i wonder if joynet will sponsor us [00:59] perezd: we have to have a cool name [00:59] c4milo1 has joined the channel [00:59] perezd: NodeStock [00:59] perezd: or something [01:00] c4milo1 has left the channel [01:00] kschzt: nodeoku [01:00] perezd: yes! [01:00] perezd: nodepacalypse [01:00] perezd: nodepacalypse 2011 [01:00] perezd: I could see that on a shirt [01:01] mfernest: nodeacious? [01:01] Hello71 has joined the channel [01:01] Hello71 has joined the channel [01:01] mfernest: you could all be the nodeacious ta-ta's [01:01] kschzt: nodegg [01:01] perezd: nodecular [01:01] ben_alman has joined the channel [01:01] mfernest: nodewarriors [01:01] perezd: mfernest: yeah, I like that. implicit reference to travel [01:02] TheEmpath has joined the channel [01:03] mscdex has joined the channel [01:03] mfernest: you could have a coding pit called a Nodecahedron [01:03] TheEmpath: hail nodites [01:06] sveimac has joined the channel [01:10] bingomanatee_: Hail Empath [01:11] bingomanatee_: TheEmpath: do you have your VIMM shirt yet? [01:13] sechrist has joined the channel [01:13] pyrotechnick: node trip [01:13] sechrist: Anybody know how to make a deb file of node? [01:13] pyrotechnick: NodeTrip 2011 [01:13] sechrist: the guides I'm seeing of building deb packages depends on Make apparently [01:14] arpegius has joined the channel [01:14] pyrotechnick: node.js needs make... [01:14] sechrist: it uses waf [01:14] pyrotechnick: really does make just call waf? [01:14] AAA_awright has joined the channel [01:15] sechrist: yeah [01:18] perezd: gotta go home [01:18] perezd: laters all [01:19] mfernest: digging around in node for a couple days now...where does 'binding' come from, as in process.binding('net') ? [01:22] sh1mmer has joined the channel [01:22] softdrink has joined the channel [01:23] tlrobinson has joined the channel [01:25] gf3 has joined the channel [01:27] mscdex: sechrist: i use checkinstall [01:29] mikew3c_ has joined the channel [01:29] isaacs has joined the channel [01:30] sechrist: mscdex: does it have any real dependencies? [01:30] sechrist: after being build [01:31] shimondoodkin has joined the channel [01:33] lintaba has joined the channel [01:33] lintaba: hy [01:33] dioxide has left the channel [01:33] sechrist: oh wow checkinstall made that so simple [01:34] shimondoodkin: what is checkinstall? [01:35] paradoxx has joined the channel [01:35] lintaba: i have a string with special characters ( str="á"; ), how can i determinate the binary length of this? (str.length==1, but str.binaryLength==2???) [01:36] lintaba: any idea? :D [01:36] sechrist: lintaba: unicode [01:37] lintaba: i using unicode in everywhere [01:37] shimondoodkin: buffer has some function [01:37] lintaba: isn't that relative slow? [01:38] lintaba: i want to set the content-length for every each http response [01:38] lintaba: so it wont be just chunked, and the browser knows how big is it [01:38] shimondoodkin: http://nodejs.org/docs/v0.3.2/api/buffers.html#buffer.byteLength [01:38] shimondoodkin: it is not slow [01:39] shimondoodkin: there is not convertion to buffer [01:39] lintaba: :) ty [01:39] shimondoodkin: :) [01:41] Aria has joined the channel [01:47] Yuffster has joined the channel [01:48] sechrist: shimondoodkin: you run it with your make install, and it keeps track of the files it adds in and makes it easy to create a deb [01:49] shimondoodkin: :) [01:49] mscdex: or rpm or .tar.gz for slackware [01:49] mscdex: :> [01:50] shimondoodkin: yes dead simple idea [01:50] mscdex: my custom build bot used checkinstall to create debs [01:50] mscdex: and rpms [01:50] lintaba_ has joined the channel [01:50] shimondoodkin: why do you build debs nd rpms? [01:51] shimondoodkin: *and [01:51] sechrist: because tarballs get messy [01:51] shimondoodkin: ah [01:51] shimondoodkin: use to install and uninstall manually [01:52] sechrist: I need to put node on a bunch of machines and I didn't want to build node on each one [01:52] sechrist: and node updates so frequently that I want to be able to easily update it [01:53] sh1m has joined the channel [01:53] lintaba has joined the channel [01:53] shimondoodkin: sechrist: are you rolling out a cloud? [01:53] sechrist: exactly [01:54] sechrist: farm more technically [01:54] sechrist: cloud is a bs term [01:54] shimondoodkin: ya [01:54] mscdex: farm? that gives a new meaning to patch [01:55] shimondoodkin: does it scales automaticly? [01:55] pyrotechnick: kay tag is live for all your OSXers out there [01:55] pyrotechnick: https://github.com/feisty/tag [01:55] sechrist: nothing scales automatically [01:55] shimondoodkin: how do you interconnect the machines? [01:55] pyrotechnick: network cables [01:56] shimondoodkin: no [01:56] sechrist: however I can slide in another server, image it, and chef it, and it joins a cluster [01:56] shimondoodkin: locadbalancer? [01:56] shimondoodkin: load balancer? [01:56] pyrotechnick: they use a thousand tiny interconnected tubes and have mice carry flash drievs [01:56] sechrist: well in my case no, it's not just a website [01:56] shimondoodkin: :) [01:56] pyrotechnick: its called squeeker net [01:57] sechrist: I wonder how many mice it takes to torrent on squeeker net [01:57] pyrotechnick: not many [01:58] broofa has joined the channel [01:58] pyrotechnick: mice cooperate very well in distributed environments [01:58] pyrotechnick: it's the cheese-and-whiskers effect [01:58] sechrist: cheese and whiskers [01:58] shimondoodkin: i have never used chef , is it better then puppet? [01:58] pyrotechnick: like from bananas in pyjamas [01:59] pyrotechnick: yeah [01:59] sechrist: I would say so [01:59] pyrotechnick: puppets for fags [01:59] sechrist: with either one though you still have to write your scripts [01:59] pyrotechnick: http://serverfault.com/questions/96265/puppet-vs-chef-pro-and-contra-from-users-and-use-cases [01:59] sechrist: I hate ruby [02:00] sechrist: if somebody made chef for nodejs I would be ecstatic [02:00] pyrotechnick: therll be a node.js chef/puppet soon enough [02:00] pyrotechnick: seed it dude [02:00] pyrotechnick: most projects in node just need seeding [02:00] pyrotechnick: even if u give maintainer ship over to someone else [02:00] pyrotechnick: it just takes a seed [02:01] pyrotechnick: it doesnt even need to be well-written [02:01] sechrist: until node stabilizes I don't see the value though [02:01] pyrotechnick: it just has to be a POC [02:01] pyrotechnick: i wonder what heroku and joynet use [02:02] shimondoodkin: sechrist: id like that too [02:02] shimondoodkin: sechrist: thou theres now some rackspace and cloud server modules [02:03] sechrist: if somebody took chef's architecture it would be pretty simple to make it in node [02:03] sechrist: honestly [02:03] pyrotechnick: yeah [02:03] pyrotechnick: we're going to need something like that before beta [02:03] pyrotechnick: so [02:03] pyrotechnick: if its not started by then publically we'll seed it [02:08] bingomanatee_: chef == cms? [02:08] pyrotechnick: nah [02:08] pyrotechnick: server admin [02:08] pyrotechnick: for farms [02:08] bingomanatee_: ah. [02:08] pyrotechnick: or "clouds" [02:08] pyrotechnick: not really cloud [02:08] pyrotechnick: not like ec2 [02:08] shimondoodkin: server install automation [02:08] pyrotechnick: but it can sit on top of ec2 [02:08] bingomanatee_: Well that might be a fun "48 hour crunch" kind of project. [02:08] pyrotechnick: yeah it would be cool [02:08] pyrotechnick: we shud do that [02:08] bingomanatee_: I'm up for it. [02:08] shimondoodkin: ruby is very dynamic(object is function is sting is class ) and very shortcutly typed [02:08] pyrotechnick: everyone could do their little niche [02:08] dguttman_ has joined the channel [02:09] shimondoodkin: /sting/string [02:09] bingomanatee_: Think we could get an IRL meetup to sketch out the broad brush picture? [02:09] bingomanatee_: In SF? [02:10] estrathmeyer has joined the channel [02:10] sechrist: IRL meetup [02:10] JusticeFries: TO THE CLOUD! [02:11] bingomanatee has joined the channel [02:12] bingomanatee_: I've been working on a meta-mvc tool that spawns out controllers and stub providers around the mvc example in express. [02:12] shimondoodkin: bingomanatee_: what exectly? [02:13] bingomanatee_: shimondoodkin: can you be more specific? [02:13] shimondoodkin: meta-mvc [02:14] bingomanatee_: sorry -- a tool to write out skeletal controllers and provider javascript. A code generation tool. [02:14] shimondoodkin: aha [02:15] shimondoodkin: it sounded similar to my idea [02:15] shimondoodkin: but it not that [02:15] shimondoodkin: its [02:15] TheEmpath: bingomanatee_: hail manatee. my VIMM shirt? [02:16] TheEmpath: also, doth anyone know of a way to gather the size of data being sent and received from socket.io? [02:16] jacobolus has joined the channel [02:16] TheEmpath: i'd like to measure kbps consumption [02:17] shimondoodkin: i can craft a solution for you, but there might be something easier [02:17] shimondoodkin: see there is http://nodejs.org/docs/v0.3.2/api/buffers.html#buffer.byteLength [02:18] TheEmpath: ooo purdy [02:18] TheEmpath: thats a good start [02:19] shimondoodkin: also there is stream.on('data', function()...) event handler in socet io you can count there read [02:19] isaacs has joined the channel [02:19] TheEmpath: nifty combo [02:20] shimondoodkin: also there is stream.write you can overload this function [02:20] bingomanatee_: shimondoodkin: https://gist.github.com/758067 is an example of the output [02:21] shimondoodkin: like: var write = stream.write; stream.write=function(data,option){save_length_data_here; write(data,option)} [02:21] whyme has joined the channel [02:22] RichardJ: ACTION loves node. [02:22] RichardJ: plain and simple [02:22] themiddleman has joined the channel [02:23] sh1m has joined the channel [02:26] shimondoodkin: bingomanatee_: i hope express will work for you, i just found it hard to maintan large code [02:26] bingomanatee_: its a stepping stone, for sure -- did you find another system that you like better or just revert to core node? [02:27] lintaba has left the channel [02:27] shimondoodkin: theres no at the moment [02:27] shimondoodkin: i plan to write [02:27] shimondoodkin: onew [02:27] shimondoodkin: one [02:27] pyrotechnick: please list your favourite coffeescript projects [02:27] pyrotechnick: so i can add them to the wiki [02:27] shimondoodkin: i did some research in the last two months and i want to test it [02:28] bingomanatee_: shimondoodkin: well if you ever want to collaborate on architecture - I tried for years to get a group of PHP people to out-Drupal Drupa but nobody really bit off on that. [02:28] dthompson has joined the channel [02:29] bingomanatee_: what are you researching specifically? [02:29] shimondoodkin: what makes a good frame work [02:29] shimondoodkin: ive lernt from rails [02:29] shimondoodkin: from observation [02:29] shimondoodkin: from books [02:29] wilmoore has joined the channel [02:30] shimondoodkin: from videos online [02:30] pyrotechnick: forget everything you've learned about rails [02:30] bingomanatee_: Well I can tell you from experience what the Drupal takeaways are - the community lives off the views engine, the CCK (admin-creatable datastructures) and the ability to add hooks from one module to another. [02:30] bingomanatee_: There's nothing admirable about the code that executes it, but the usage patterns have been quite successful. [02:31] paradoxx has joined the channel [02:31] pyrotechnick: from merb/rails3 you can take a performance, modularity and a stable public API [02:31] bingomanatee_: I think one of the greatest takeaways in my experience is really thoroughly UI test the admin tool . [02:32] bingomanatee_: Frameworks that just stuck with an insular admin that only the programmers understood really suffered. [02:32] amerine has joined the channel [02:32] shimondoodkin: aha [02:33] bingomanatee_: I think that ideally, the framework should be largely self generating. [02:33] shimondoodkin: are the CCKs are created with a gui? [02:33] bingomanatee_: Yes. [02:33] bingomanatee_: 100%. [02:33] shimondoodkin: what is good about the templates engine? [02:33] bingomanatee_: Oddly enough, nobody has created a module making module. [02:33] shimondoodkin: :) [02:34] bingomanatee_: I think Drupals templates are quite confusing and something of an antipattern. [02:34] bingomanatee_: There is a lot of mixture of code-based markup and template-based markup. [02:34] bingomanatee_: The biggest takeaway there is to keep your template and template fragments 100% file based so your HTML designers can use them. [02:35] bingomanatee_: Also I think the biggest hazard of Drupal is that it is so invested in SQL and basically MySQL that it hasn't been able to take advantage of the newer noSQL databases. [02:36] bingomanatee_: A truly multipurpose engine should gateway data I/O so that developers can tool the repository system to whatever environment they want. [02:36] shimondoodkin: what do you mean by 'gateway'? [02:37] bingomanatee_: Well, consider this: the usable data model for a node system is a JSON block. [02:37] shimondoodkin: to have multidatabase active record? [02:37] codelotus has joined the channel [02:37] shimondoodkin: ok [02:37] bingomanatee_: You should be able to request a resource by ID and the developer should be free to pull it from Mongo, Couch, assemble it from SQL, read it from a file cache, whatever. [02:38] RichardJ: JSON is not an object. it's a transfer format [02:38] bingomanatee_: A Javascript object then. [02:38] TheEmpath: Drupal doesn't scale well. [02:38] RichardJ: excuse me for barging into the discussion :) [02:39] bingomanatee_: not at all. [02:39] bingomanatee_: Thus, the discussion. [02:39] TheEmpath: i would rather make out with a landmine than go back to Drupal [02:39] bingomanatee_: I'm saying that the development patterns behind drupal have made it attractive. [02:39] bingomanatee_: The shitty codebase that enables those development patterns have made it a limited win. [02:39] TheEmpath: i saw a company managing 140 sites with drupal.. care to guess how difficult it was to update a new module to these sites? [02:39] bingomanatee_: TheEmpath: Why choose? [02:40] bingomanatee_: My point is not that Drupal is the platonic CMS and everything should be like it. [02:40] TheEmpath: CMSes are designed from the GUI down, which is why Drupal is universally known as a database murderer [02:40] RichardJ: I don't like frameworks that take a lot of work out of your hands [02:40] TheEmpath: ACTION still has nightmares. [02:40] bingomanatee_: But the fact is there are superficial features behind the usage experience of Drupal that have made it attractive to a broad audience. [02:40] shimondoodkin: the point of this conversation is expirience sharing about good frameworks [02:40] bingomanatee_: For instance I truly believe that a general purpose framework has to be SOA friendly. [02:41] RichardJ: the framework i'm using when developing regular websites (in php, that is for now) i'm using sphoof [02:41] RichardJ: but nobody's heard of it, i think :) [02:41] bingomanatee_: correct on my part. [02:41] sveimac has joined the channel [02:41] RichardJ: simple strategy: improve what can be improved [02:42] bingomanatee_: I would like to see a contract based framework designed around gateway providers that don't care whether a resource is in a local mongodb or a remote REST service. [02:42] TheEmpath: ^ [02:42] TheEmpath: DataStore->query() done [02:43] TheEmpath: sadly, a unifying wrapper that represents all stores is painful to impliment, especially with NoSQL [02:43] RichardJ: you wouldn't want that [02:43] TheEmpath: that, too [02:43] RichardJ: that way you'll probably lose some advantages your db-system has [02:43] RichardJ: reminds me of PDO for PHP, for example [02:43] shimondoodkin: the glue could be done manualy its not that complicated [02:44] TheEmpath: in my entire history of coding professionally, i've only seen 3 DBAs between 8 companies [02:44] TheEmpath: few general purpose web coders really understand how to truly unlock the benefits of the database [02:44] TheEmpath: rarely* [02:44] RichardJ: of course, but for a "wrapper" you'd want a consistent API [02:45] codelotus has left the channel [02:45] TheEmpath: aye [02:45] RichardJ: for example what Hibernate does with hql or what it's called [02:45] bingomanatee_: I'm comfortable chucking SQL entirely in favor of MongoDB/couchDB et/all. [02:45] RichardJ: but they had to remove a lot of functionality for say, postgresql, because not all DBMS's support everything [02:45] shimondoodkin: Hibernate is an orm [02:46] RichardJ: not exclusivel [02:46] RichardJ: of course, it's basis is ORM [02:46] RichardJ: but you can fire queries straight to the DB [02:47] RichardJ: personally, I don't like ORM for the simple reason that you can kiss performance goodbye in 99% of all case [02:47] shimondoodkin: my progammers do not like to program with mongo db because they do not know it, they prefer a dirty simple mysql solution [02:47] TheEmpath: i think the true power of ORMs when they are paired with code generators [02:47] RichardJ: haha, yeah, that sounds familiar [02:47] TheEmpath: once you get that, then you can scaffold up some really basic functionality and just get straight into the complicated stuff [02:47] sveimac has joined the channel [02:48] TheEmpath: i've written a few in my time. they got shit done [02:48] bingomanatee_: My point is this: whether the downstream format is a mongo cluster or a SQL request, most resources reduce into a nested heirarchy of data. [02:48] RichardJ: on ORM: it's useless for simple queries because they're easy to write, and useless for complex queries because it takes a lot longer to write. [02:48] bingomanatee_: An article has a body node, an array of comment data, etc. [02:48] RichardJ: relations are (with RDBMS's) definable in you DB so there's no need to create a file describing it [02:49] TheEmpath: RichardJ: thats true, but its very easy to generate patterns through ORMs than it is through database langauge.. and with ORM wrappers, you can shuffle your code generator between it [02:49] bingomanatee_: You can specifiy which parts of the resource you care about and pass that on to the query generator, but whether its pulled from a SQL graph or a noSQL document store, the useful format is pretty much the same once you start working with it in JavaScript. [02:49] RichardJ: TheEmpath: yes, but generating is the first part [02:49] RichardJ: but then you need a custom query, how does ORM handle that for you? [02:50] TheEmpath: thats the point im getting at [02:50] TheEmpath: take Doctrine, for example [02:50] TheEmpath: the damn thing can reverse engineer your SQL DB and create ORMs around it automatically [02:50] aurynn: ORMs are useful if you don't want to learn to write SQL, or need to support multiple DBs [02:50] shimondoodkin: some time i plan to integrate casandra for large storage with mongodb [02:50] TheEmpath: then you can leverage that with Symfony and autocreate views based on the ORMs [02:51] aurynn: however, they're always going to be a bit limited [02:51] TheEmpath: all of a sudden, you have a pretty comprehensive admin panel, CMS, and basic functionality [02:51] RichardJ: aurynn: you'd be better of writing custom queries for each DBMS [02:51] TheEmpath: and you'll still have spare functionality, as custom filter functions based on properties will be generated along side with it [02:51] aurynn: RichardJ, it really depends on what you're doing. [02:51] RichardJ: seriously, i've never seen a fast application using ORM [02:51] aurynn: generating queries on the fly seems a bit silly, to me, though. [02:52] TheEmpath: for one project, i would say my ORM generator created 70% of the calls I had used on the project. the rest were simple variations of it and only 3 queries out of 300 were actually custom [02:52] bingomanatee_: Symfony is getting pretty strong - its next version is going to have some pretty interesting architecture. [02:52] TheEmpath: the biggest downfall is that it puts the sort emphasis on the application process, not the database process [02:52] RichardJ: i know a symphony evangelist, he's a pain in my ass [02:52] TheEmpath: lol [02:52] aurynn: RichardJ, I used to support that point of view completely - custom queries for everything. [02:52] aurynn: I got a bit tired of writing boilerplate, though [02:52] TheEmpath: i like it, bit sometimes, symfony can be very verbose [02:53] RichardJ: I hate it when people try to shove things down my throat, like he does to me :) [02:53] bingomanatee_: VIMM [02:53] TheEmpath: push it! [02:53] bingomanatee_: I think most programmers are fist-throatys when they find a useful tool they don't see getting the adoption they think it deserves. [02:53] RichardJ: I'm using postgresql exclusively, most of my data comes from VIEW's and stored functions returning tables [02:54] aurynn: RichardJ, I do that too. I wrote an object mapper around that. [02:54] TheEmpath: i just like mongo/node/jquery because its a unified language stack that isn't ASP [02:54] bingomanatee_: NoSQL will destroy you all! [02:54] aurynn: RichardJ, and pl/v8! [02:54] aurynn: pl/v8 to give javascript in the RDBMS. [02:54] RichardJ: aurynn: pure SQL queries, almost always :) [02:55] RichardJ: but yeah, you're quite right, I was looking at pl/v8 the other day [02:55] TheEmpath: i like the part where Drupal needs 14,000 queries to generate its front page [02:55] RichardJ: what? [02:55] TheEmpath: f*** yeah! [02:55] RichardJ: say, what? [02:55] TheEmpath: i'll show you [02:55] bingomanatee_: Yep. [02:55] TheEmpath: ACTION digs. [02:55] shimondoodkin: oh [02:55] shimondoodkin: LOL [02:55] RichardJ: a friend of mine is using hibernate with a model of about 100 tables and 900 views [02:55] aurynn: that's kind of nuts [02:56] RichardJ: the views are just to steal some performance back from the ORM layer [02:56] shimondoodkin: my nodejs app generates a page in 50 ms and takes only 5 mongodb queries, 14t its insane [02:56] bingomanatee_: They mitigate those kind of inefficiencies with page / block caching... but still, Drupal is quite crippled by some thoughtless conventions. [02:57] TheEmpath: http://groups.drupal.org/node/18411 [02:57] RichardJ: shimondoodkin: most of my pages are generated in the database [02:57] RichardJ: the DB gives back XML which is translated with XSLT [02:57] RichardJ: as long as a language has a binding to postgresql, my website runs on it :) [02:57] bingomanatee_: Boy am I sorry I started this. [02:57] RichardJ: hahaha [02:58] TheEmpath: Page execution time was 16451.83 ms. Executed 2513 queries in 2452 milliseconds. [02:58] TheEmpath: o_O [02:58] RichardJ: well, I'm going to bed, it's 4AM and I'm getting out at 9 [02:58] RichardJ: see ya :-) [02:58] shimondoodkin: RichardJ:whare you from [02:58] shimondoodkin: where [02:58] RichardJ: shimondoodkin: the netherlands [02:59] shimondoodkin: its 4 oclock also here [02:59] TheEmpath: ditto [02:59] TheEmpath: time to flee [02:59] TheEmpath: good day, gentleman [02:59] shimondoodkin: bingomanatee_: thank you for shareing [03:03] arpegius has joined the channel [03:10] iFire has joined the channel [03:17] elijah-mbp has joined the channel [03:19] iFire has joined the channel [03:21] sechrist has joined the channel [03:23] iFire` has joined the channel [03:23] IRONkyle has joined the channel [03:26] sechrist: what happened to delphi [03:26] sechrist: I remember making some guis in delphi, and that was some of the easiest gui work I had ever done [03:32] JojoBoss has joined the channel [03:34] shimondoodkin: the idea in delphi is very good [03:34] shimondoodkin: there are observers everywhere with componet's architecture [03:36] beta__ has joined the channel [03:36] iFire has joined the channel [03:37] jakehow has joined the channel [03:40] sveimac has joined the channel [03:50] bingomanatee_: Is there a cache of require()d modules in node? i.e., when I require a module from module a, is the result the same resource as the one I would get if I require a module from within the context of module b? [03:51] softdrink has joined the channel [03:56] whyme: bingomanatee_: ye require() is cached within a single node process [03:59] bingomanatee_: whyme: cool - so I can use objects returned by require() to keep state in a server if I want to? [03:59] mjr_: ye require cacheth thine modules [03:59] Aria: Unless someone does hackery to avoid it, yes [04:00] bingomanatee_: Thanks Aria [04:00] bingomanatee_: (and mjr and whyme) [04:00] mjr_: hang on a minute [04:00] mjr_: I may think of more usless jokes [04:00] mjr_: nope, nevermind. [04:01] bingomanatee_: how about "the entire staff of Sun" [04:01] bingomanatee_: "Republicans" [04:02] mjr_: zing [04:02] IRONkyle has joined the channel [04:03] andrewfff has joined the channel [04:06] fictorial has joined the channel [04:13] Vekz has joined the channel [04:14] Vekz: Anyone have a library to share or recommend for parsing url query strings? Specifically url query strings with other urls in them? [04:14] arrty has joined the channel [04:16] mjr_: Vekz: the querystring parser in node doesn't work for you? [04:16] Vekz: mjr_ this is client side. Guess I could rip out the native node one. [04:18] amerine has joined the channel [04:21] estrathmeyer has joined the channel [04:21] jakehow has joined the channel [04:21] vborja has joined the channel [04:24] zorzar has joined the channel [04:25] modular has joined the channel [04:27] codehero has left the channel [04:28] _mql has joined the channel [04:29] whyme has left the channel [04:32] mscdex has joined the channel [04:37] wycats has joined the channel [04:37] meso__ has joined the channel [04:38] meso__ has left the channel [04:39] meso__ has joined the channel [04:40] paradoxx has joined the channel [04:41] skm has joined the channel [04:44] blaines has joined the channel [04:50] ajpiano has joined the channel [04:52] HAITI has joined the channel [04:55] ceej has joined the channel [04:55] broofa has joined the channel [04:56] softdrink has joined the channel [04:59] OhaiBBQ has joined the channel [05:00] HAITI has left the channel [05:00] HAITI has joined the channel [05:20] skm has joined the channel [05:24] vborja has joined the channel [05:26] benburkert has joined the channel [05:26] sveimac_ has joined the channel [05:33] aurynn: buhh [05:33] aurynn: So I wrote a stupid little middleware for express to set a cookie in the response, and it's giving me grief. [05:34] benburkert has joined the channel [05:35] estrathmeyer: aurynn: what's going wrong? [05:35] estrathmeyer: (not sure I'll be much help, but I'll try...) [05:38] aurynn: Let me pastebin some code that describes it.. [05:38] aurynn: :) [05:39] aurynn: Mostly, just getting an exception wherein it whines that this.headers is undefined [05:40] estrathmeyer: have you tried using connect.lint and seeing if it throws anything? http://senchalabs.github.com/connect/lint.html [05:40] estrathmeyer: ah. [05:40] estrathmeyer: make sure you pass in req, res, next [05:41] estrathmeyer: and then use req.headers? [05:41] aurynn: hm. [05:41] estrathmeyer: or res.headers (if you're setting response headers) [05:41] OhaiBBQ: that's most likely your issue, the this keyword isn't that magical, aurynn ;) [05:41] skm has joined the channel [05:41] aurynn: I was using res.cookie(), or res.header() [05:41] aurynn: and it was pitching an error [05:42] cafesofie has joined the channel [05:44] estrathmeyer: hmmm. [05:45] estrathmeyer: sorry I can't help more. gotta run. good luck! [05:45] aurynn: http://privatepaste.com/497ed9ace6 [05:46] aurynn: That's what I'm seeing [05:46] aurynn: so I don't know what I'm doing wrong :) [05:46] estrathmeyer: http://senchalabs.github.com/connect/cookieDecoder.html The cookieDecoder middleware parses the Cookie header when present, and populates req.cookies [05:46] estrathmeyer: add an 's' ;) [05:46] estrathmeyer: maybe? [05:47] estrathmeyer: nope. [05:47] aurynn: But, http://expressjs.com/guide.html#res-cookie-name-val-options- says req.cookie() is the right function [05:47] estrathmeyer: yeah. just saw that. doh! [05:48] aurynn: I think that res isn't fully set up at this point, and once it gets to the app routing, it is, and res.cookie is manipulable [05:50] estrathmeyer: good guess. [05:53] aurynn: Eh, I can work around it. [05:53] estrathmeyer: You're probably right: res.cookie is supposed to be used within an express HTTP method. [05:53] aurynn: yeah. [05:54] estrathmeyer: I'm guessing it applies some sort of "Express Middleware" after all the other middleware you set up. [05:54] aurynn: That makes sense to me. [05:54] aurynn: :) [05:54] aurynn: But in the interim, I must away to bed. [05:54] amerine has joined the channel [05:56] estrathmeyer: might want to sent TJ an email... it's a good question. [05:56] estrathmeyer: good night! [05:56] xSmurf: man this ldap library wtf, it segfaults on me when I do more than on search :( [06:01] estrathmeyer has left the channel [06:04] perezd has joined the channel [06:04] omni5cience has joined the channel [06:05] ezmobius has joined the channel [06:07] Aria: Welcome to my hell with LDAP [06:08] herbySk has joined the channel [06:13] benburkert has joined the channel [06:13] blaines has joined the channel [06:21] faust45 has joined the channel [06:25] Aikar has joined the channel [06:26] fictorial has left the channel [06:30] isaacs has joined the channel [06:40] sveimac has joined the channel [06:40] whyme has joined the channel [06:43] dmshann0n has joined the channel [06:47] herbySk has joined the channel [06:50] fmeyer has joined the channel [06:55] grim_fandango: Is it possible to use jade to produce plain text output with placeholder substitution or is this going to be difficult? I want to use jade with email templates to produce a finalized email body (once combined with appropriate placeholders). [06:55] Rixius has joined the channel [06:58] sveimac_ has joined the channel [06:59] Rixius has left the channel [07:01] pluma has joined the channel [07:02] muhqu has joined the channel [07:03] pluma: Why exactly does npm want users not to sudo it when it's normal for package managers in other languages? It shouldn't touch anything outside /usr/local, but changing its ownership seems excessive. [07:03] SubStack: because all other package managers do it wrong [07:04] isaacs: pluma: because npm does not (yet) properly downgrade to a permissionless user when it runs scripts. [07:04] SubStack: actually it's pretty common for language package managers to run as non-root [07:04] pluma: SubStack: So if I trust pip and gem already, I'm screwed anyway? [07:04] isaacs: SubStack: i believe gem actually does downgrade perms if you're running as root. [07:04] isaacs: pluma: when I finally get around to making that work properly, it's going to warn when youer' *not* root. [07:05] isaacs: but i believe that warnings are safer than ignorance. [07:05] isaacs: even if somewhat annoying [07:05] SubStack: warning when not root... that's silly [07:05] pluma: isaacs: So the warnings are just there to scare users into thinking about what they're doing? [07:05] isaacs: pluma: no, they're there because it is actually significantly less safe to run as root [07:05] isaacs: and i don't like brushing security concerns under the rut [07:05] isaacs: *rug [07:06] isaacs: SubStack: yeah, you have to be root to change your uid [07:06] isaacs: SubStack: (unless you're on solaris) [07:06] SubStack: :/ [07:06] SubStack: suid it! [07:06] isaacs: SubStack: so, if i want to run something as "nobody", i have to be root to do that [07:07] pluma: isaacs: A'ight. I'll keep running it as root, though, because I cba to sort it out myself. It's not like I'm using it excessively anyway and my servers don't have very sensitive data on them and are easy to re-install. [07:08] isaacs: pluma: destruction is not the most effective way to be maliciously evil. but i think at this stage of the game, the concern is more over being accidentally evil. [07:08] pluma: isaacs: I think the only package I use is coffee-script. [07:09] Ond has joined the channel [07:10] pluma: isaacs: True. I'm more likely to do something stupid like rm -rf / than to be accidentally stabbed by npm, though. I think the risk is quite low. It'd be different if I was actively developing for node.js and juggling packages a lot, though. [07:10] void_ has joined the channel [07:10] isaacs: pluma: sure [07:10] isaacs: pluma: still, in general, it's a problem that should be solved carefully and properly [07:11] pluma: isaacs: Yes, and I'm glad it's being worked on. Ultimately npm should handle its permissions itself. [07:11] perezd has joined the channel [07:11] perezd: I assume that working with node 0.2.5 is completely fine [07:12] isaacs: SubStack: that's actually not a bad idea. i could suid the npm program, and then in theory it should be able to do a setuid/setgid even though it isn't run by root [07:12] isaacs: as long as npm is chown'd to root [07:13] isaacs: ahh, right, nvm, i researched this already... [07:13] isaacs: "Due to the increased likelihood of security flaws[1], many operating systems ignore the setuid attribute when applied to executable shell scripts." [07:13] pluma: isaacs: To prove the point: I accidentally an entire directory once with a "fopen('w')" in a loop. I wanted to _create_ metadata files for each file and forgot to change the name in the output =( [07:14] rchavik has joined the channel [07:14] grim_fandango has left the channel [07:15] estrathmeyer has joined the channel [07:16] skm has joined the channel [07:17] isaacs: SubStack: interesting, it seems to work with shell scripts on darwin [07:19] pyrotechnick has joined the channel [07:20] isaacs: hmm.... nevermind. [07:21] isaacs: doesn't work with node programs for some reason. [07:21] dguttman has joined the channel [07:22] somnium has joined the channel [07:22] masahiroh has joined the channel [07:23] isaacs: SubStack: it looks like the suid bit gives you permission to access system resources, but setuid and setgid still fail, even though your effective uid is root [07:24] estrathmeyer has joined the channel [07:25] isaacs: ahh... effective uid vs real uid [07:25] isaacs: i guess setuid is not fooled by your effective uid [07:30] SubStack: yeah pesky stuff [07:32] isaacs: the problem with doing permissions "right" is that it's very easy to end up with a confused deputy [07:32] isaacs: and a deputy that is confused is less dangerous if it has your permissions, than if it has root's [07:32] somnium: if I load a file `exports.Object = Object' at the repl, require('./file').Object === Object => false. is this intended? [07:34] isaacs: somnium: the repl runs in a different "context" than the rest of node [07:34] isaacs: somnium: that's so that it can be torn down easily [07:36] fangel has joined the channel [07:36] derren13 has joined the channel [07:36] somnium: isaacs: ok, just checking. (It was causing some head-scratching behavior). I guess its not good to rely on the repl for testing anyway. [07:37] isaacs: somnium: you can make node behave that way if you set NODE_MODULE_CONTEXTS=1 in the env [07:37] isaacs: somnium: then every module will have its own Error, RegExp, String, Array, Object, etc [07:37] isaacs: somnium: instanceof breaks [07:46] nilcolor has joined the channel [07:46] ezmobius has joined the channel [07:46] nilcolor has joined the channel [07:46] pyrotechnick has left the channel [07:48] SamuraiJack has joined the channel [07:59] kaichen has joined the channel [08:01] andrewfff has joined the channel [08:08] hunterloftis has joined the channel [08:09] mikew3c has joined the channel [08:10] hunterloftis: getting this, can't figure it out: Object function(a, b, c) { ...function body... } has no method 'call' [08:13] admc has joined the channel [08:15] derren13 has joined the channel [08:15] fly-away has joined the channel [08:18] virtuo_ has joined the channel [08:19] marlun has joined the channel [08:22] ivanfi has joined the channel [08:23] neshaug has joined the channel [08:26] saschagehlich has joined the channel [08:27] mikeal has joined the channel [08:28] matjas has joined the channel [08:29] cagdas has joined the channel [08:45] mfb_ has joined the channel [08:45] nilcolor has joined the channel [08:47] tswicegood|afk has joined the channel [08:48] unomi has joined the channel [08:48] bluegene has joined the channel [08:49] persson has joined the channel [08:54] herbySk has joined the channel [08:56] jetienne has joined the channel [08:58] adambeynon has joined the channel [08:59] nefD has joined the channel [09:00] liar has joined the channel [09:00] paradoxx has joined the channel [09:02] Gruni has joined the channel [09:03] naneau has joined the channel [09:05] aklt has joined the channel [09:08] Yuffster has joined the channel [09:13] Yuffster_ has joined the channel [09:13] ivanfi has joined the channel [09:16] cwo has joined the channel [09:21] pgte has joined the channel [09:22] mischief has joined the channel [09:22] dspree has joined the channel [09:23] mischief has joined the channel [09:26] pietern has joined the channel [09:28] codykrieger has joined the channel [09:43] forzan has joined the channel [09:46] hendrikcdn has joined the channel [09:48] hendrikcdn has left the channel [09:49] bingomanatee has joined the channel [09:52] steffkes has joined the channel [09:55] hassox has joined the channel [09:56] pyrotechnick has joined the channel [09:57] pyrotechnick: hey can anyone who has done node extensions point me in the right direction before i get too far down the rabbit hole [09:57] benburkert has joined the channel [09:59] jetienne has joined the channel [10:00] romeo_ordos has joined the channel [10:00] romeo_ordos has left the channel [10:03] vineyard has joined the channel [10:06] Ond: What do you need, pyrotechnick/ [10:07] Ond: https://github.com/ry/node/wiki/modules [10:07] pyrotechnick: i'm trying to write bindings for bullet, the physics engine, i tried to use node-ffi with bullet's C API but it's just way too incomplete so I've got to do it properly [10:07] pyrotechnick: the examples i can find are way too simple [10:07] pyrotechnick: non of them show to how "wrap" an entire Object-Oriented library [10:08] pyrotechnick: for instance in bullet one of the first things done is [10:08] pyrotechnick: btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration(); [10:08] SubStack: cringe [10:08] pyrotechnick: for that do i make `class DefaultCollisionConfiguration: ObjectWrap` [10:08] femtoo has joined the channel [10:08] pyrotechnick: and then instantiate a new btDefaultCollisionConfiguration within it [10:09] pyrotechnick: or is there an easier way to wrap c++ libraries [10:09] pyrotechnick: it seems a bit stupid to have to manually go through and mirror everything the c++ can do anyway [10:10] pyrotechnick: i've asked in here everyday for the last week but nobody has any idea [10:10] pyrotechnick: hahaha [10:10] pyrotechnick: yehuda is in here [10:10] pyrotechnick: wycats: i hope you didn't read the conversation last night lol [10:13] SubStack: I want a magic node.js function that I can throw a .so file at and call functions out of [10:14] SubStack: not that I have any immediate use for this [10:14] SubStack: but it would be neat [10:16] pyrotechnick: you know that exists right? [10:17] SubStack: for node? [10:17] pyrotechnick: yes [10:17] pyrotechnick: node-ffi [10:18] SubStack: looking through this [10:18] SubStack: seems highly excellent [10:18] SubStack: I don't see any introspection though [10:20] pyrotechnick: introspection? [10:20] SubStack: querying a list of functions that a .so exports [10:20] pyrotechnick: you have to at least define the function signatures [10:21] SubStack: doesn't c++ have special annotations for signatures? [10:21] iszak has joined the channel [10:21] pyrotechnick: it cant do c++ [10:22] pyrotechnick: but yeah [10:22] pyrotechnick: i dont think ffi for c++ exists anywhere [10:22] devdrinker has joined the channel [10:23] pyrotechnick: meaning it will probably never come to node [10:24] pyrotechnick: the cloest thing i know of is SWIG [10:34] EyePulp has joined the channel [10:36] Kof has joined the channel [10:37] kaichen has joined the channel [10:37] sh1mmer has joined the channel [10:38] benburkert has joined the channel [10:41] tpryme has joined the channel [10:42] wink_ has joined the channel [10:43] void_ has joined the channel [10:45] SvenDowideit has joined the channel [10:47] mbrochh has joined the channel [10:47] mbrochh has joined the channel [10:51] cloudhead has joined the channel [10:51] cloudhead: is there a proper way to check if stdout is drained or not? other than doing a process.stdout.write('')? [10:51] cloudhead: or to flush the buffer.. [10:54] iszak: cloudhead, what do you mean "drained" ? [10:55] cloudhead: iszak: as in, the buffer is empty [10:55] iszak: drain event [10:55] cloudhead: iszak: yes, but sometimes that won't get called, if the buffer never fills up [10:56] cloudhead: right now I'm having to check the return value of write(), and either exit, or wait for a drain event [10:56] cloudhead: which seems overly complicated [10:56] cloudhead: when all I want is to not exit until everything is flushed [10:57] iszak: if you called .end() would it not send everything to the buffer then end? [10:58] cloudhead: mmm let me try that [10:59] cloudhead: hmm no.. doesn't make a difference [10:59] iszak: no idea, then sorry. [11:00] _mql has joined the channel [11:00] pyrotechnick: so who wants to help https://github.com/feisty/node-bullet [11:00] iszak: you sure? I mean after all request.end() flushes unsent data [11:01] iszak: sounds boring pyrotechnick =x [11:01] pyrotechnick: says you working on ... [11:02] iszak: just saying. [11:02] pyrotechnick: right but what are you working on that's so much more interesting [11:03] iszak: sfa [11:03] cloudhead: iszak: it must be doing it async... [11:04] pyrotechnick: right. so perhaps you should stop sharing your lack of motivation with everyone by saying what they're doing is boring [11:04] pyrotechnick: just saying. [11:04] iszak: pyrotechnick, or perhaps you should stop taking things so personally, no everyone is going to be interested in the same things you are, just saying. [11:04] iszak: s/no\b/not/ [11:06] markwubben has joined the channel [11:06] pyrotechnick: iszak: "web applications developer" whose own site is down and trolls the innovative node.js irc with discouragement. you sure are winning at life [11:07] iszak: I am glad you can google. [11:07] pyrotechnick: perhaps if you changed your attitude you'd be more successful [11:08] pyrotechnick: but until then keep it to yourself [11:08] iszak: I have a job, I'm more than happy :) [11:08] pyrotechnick: probably .net [11:08] SubStack: NO FIGHTING IN THE WAR ROOM [11:08] pyrotechnick: wait [11:08] iszak: pyrotechnick, what site is down anyway? they both seem to be up here. [11:08] pyrotechnick: http://www.google.com.au/url?sa=t&source=web&cd=2&ved=0CCUQFjAB&url=http%3A%2F%2Fwww.iszak.net%2F&rct=j&q=iszak&ei=txYbTYTtAoL4sAOix8HVCg&usg=AFQjCNE2xfNbaFXUtLTPz2xnuqNm_wKI9w&sig2=-xYt4dnVdkxA7k8CWiIrEghttp://www.google.com.au/url?sa=t&source=web&cd=2&ved=0CCUQFjAB&url=http%3A%2F%2Fwww.iszak.net%2F&rct=j&q=iszak&ei=txYbTYTtAoL4sAOix8HVCg&usg=AFQjCNE2xfNbaFXUtLTPz2xnuqNm_wKI9w&sig2=-xYt4dnVdkxA7k8CWiIrEg [11:08] mediacoder: pyrotechnick: have you seen http://www.syntensity.com/static/bullet.html (recompiled with emscripten) [11:08] pyrotechnick: The personal website of Iszak Bryan. ... My name is Iszak Bryan. I don't develop just websites, I develop web applications. ... [11:08] pyrotechnick: www.iszak.net/ - http://www.google.com.au/search?hl=en&site=webhp&q=related:www.iszak.net/+iszak&tbo=1&sa=X&ei=txYbTYTtAoL4sAOix8HVCg&ved=0CCoQHzAB [11:09] iszak: spam :D [11:09] pyrotechnick: mediacoder: yeah emscripten is cool but it screws with the API way too much [11:09] pyrotechnick: plus it's 8MB once it's translated [11:09] iszak: pyrotechnick, works fine for me :S? [11:09] iszak: Will look into it for you though. [11:09] iszak: oh yes I see what you mean [11:09] pyrotechnick: iszak: you are more fail than you realise http://www.downforeveryoneorjustme.com/iszacks.net [11:10] iszak: ha.. [11:10] iszak: if only you knew how funny it really was. [11:11] pyrotechnick: iszak: do not try and recover from this. you could have just let it go but no you'd rather keep digging [11:11] pyrotechnick: i'm going to go ahead and assume .NET developer [11:11] pyrotechnick: correct? [11:11] iszak: that's not my site btw [11:11] iszak: iszacks.net != my site :P [11:11] pyrotechnick: well that's your name [11:12] pyrotechnick: iszak bryan [11:12] iszak: yeah, but I don't know where you got that domain when you posted iszak.net up there ^ [11:12] iszak: which if you check http://www.downforeveryoneorjustme.com/iszak.net very much up. [11:12] saschagehlich has joined the channel [11:12] pyrotechnick: i got it from google. [11:13] iszak: fair enough. [11:13] pyrotechnick: "iszack bryan" - im feeling lucky [11:13] iszak: and no I'm not a .NET developer by nature. [11:13] pyrotechnick: oh god you're in my country [11:13] pyrotechnick: zend developer [11:13] iszak: Yeah :D probably why we don't get along. [11:13] iszak: Zend Framework thank you! [11:13] pyrotechnick: it all makes perfect sense now [11:13] iszak: So why not share us with your name? [11:13] pyrotechnick: TBH i was a ZFr for years [11:13] pyrotechnick: how do you like it? [11:14] iszak: I am interesting in knowing one, pyrotechnick. [11:14] pyrotechnick: thats cool [11:14] pyrotechnick: i dont know if theyre social hazards [11:14] pyrotechnick: more like [11:14] pyrotechnick: socially exposing hazards [11:14] pyrotechnick: but thats cool [11:15] pyrotechnick: comprende? [11:15] iszak: Not quite. [11:15] iszak: Perhaps we can take this to PM's and you can elaborate? [11:16] pyrotechnick: meh [11:16] femtoo has joined the channel [11:16] pyrotechnick: how do you like ZF? i was a zf dev for years [11:16] iszak: It's okay, want to get out of PHP tho. [11:16] pyrotechnick: from like beta->1.6 [11:16] iszak: Although I wish there was a use-at-will framework in node.js [11:17] pyrotechnick: there is [11:17] pyrotechnick: it's called NPM [11:17] iszak: not a framework [11:17] pyrotechnick: ;) [11:17] lintaba has joined the channel [11:17] pyrotechnick: you're asking for a glue framework [11:17] iszak: glue, use-at-will, sure. [11:17] pyrotechnick: which is a set of self-contained yet interoperable modules [11:18] pyrotechnick: which if you want to describe NPM modules as anything [11:18] pyrotechnick: is as close as one can get [11:18] pyrotechnick: yes theyre not all in the same language, not written by the same devs and mightent follow all the same standards [11:18] pyrotechnick: but the fork button is just one click away [11:18] iszak: yeah, I'm away. [11:19] iszak: away and aware. [11:19] pyrotechnick: if you're looking for a drupal [11:19] pyrotechnick: or a joomla [11:19] pyrotechnick: then there's no point struggling to tame node to do it [11:19] mr_daniel has joined the channel [11:19] pyrotechnick: in the end you'll end up with just as bigger tangle of spaghetti code [11:20] pyrotechnick: but i agree [11:20] pyrotechnick: it would be nice [11:20] pyrotechnick: to have something with as much functionality as ZF [11:20] pyrotechnick: written against the same standards [11:20] pyrotechnick: using the same structure and philosophies [11:20] iszak: Nothing stopping people. [11:20] iszak: Just fork existing code bases. [11:20] pyrotechnick: i think it would take some sponsoring [11:21] pyrotechnick: it would be a full-time job for the maintainers [11:21] pyrotechnick: you cant pull off such a harmonious framework without one very or a few muchly dedicated gatekeeper [11:21] iszak: "Joynt Framework" [11:21] pyrotechnick: yeah that would be very cool [11:22] pyrotechnick: i wonder if they'd be interested [11:22] iszak: "Joyent Framework" sorry. [11:22] pyrotechnick: it would really help node make some ground [11:22] iszak: well if it became the defacto node.js framework they could just had all the modules available to any user(s) hosted on their infrastructure. [11:22] iszak: s/had\b/have/ [11:22] iszak: bleh [11:22] pyrotechnick: we're not that picky here iszaks [11:23] pyrotechnick: iszaks.net [11:23] iszak: I am picky though, plus I get to bust out my regexfoo [11:23] pyrotechnick: fu* [11:23] iszak: fu, yes. [11:23] iszak: s/foo/fu/ [11:23] pyrotechnick: well how long have you used ZF? [11:23] iszak: 1-2 years [11:23] pyrotechnick: how much experience do you have? what about products in production? [11:24] pyrotechnick: im sure joynet would consider a proposal [11:24] iszak: I don't think you can just C+P Zend Framework design and apply it to node.js, they're too different. [11:24] pyrotechnick: no [11:24] SubStack: frameworks suck [11:24] pyrotechnick: what i talked about above [11:24] pyrotechnick: SubStack: i would usually agree [11:24] pyrotechnick: but zend is kind of an exception to the rule [11:25] pyrotechnick: and frameworks of that nature [11:25] iszak: yeah, it's not like MY WAY IS LAW [11:25] pyrotechnick: exactly [11:25] pyrotechnick: it's more like a library [11:25] iszak: but has the functionality if you want to use everything together. [11:26] iszak: aka Zend_Application [11:26] juye has joined the channel [11:26] pyrotechnick: i wonder [11:26] pyrotechnick: how much theyre giving ry [11:27] iszak: also another cool thing that could come out of this is that the database adapters will be more standardized. [11:27] iszak: and you can just change the adapter at will basically. [11:27] iszak: I can't imagine migrating your application from one database to another in node.js [11:30] RichardJ: migrating databases is usually a bad idea [11:30] RichardJ: but hey, i know the reasons :) [11:30] iszak: yeah, sometimes you need to. [11:31] RichardJ: i've been there, done it, it's not a pretty thing to do [11:31] iszak: unless you've got a abstract layer. [11:31] RichardJ: yep, we did [11:31] pyrotechnick: iszack [11:31] iszak: then it's quite easy, not fool proof tho. [11:31] pyrotechnick: help me with this [11:31] RichardJ: but then you get those DBMS specific queries [11:31] iszak: pyrotechnick, just post in the channel. [11:31] pyrotechnick: https://gist.github.com/a97e621bbdbc16e9e860 [11:31] MikhX has joined the channel [11:32] pyrotechnick: anything else to add? [11:32] iszak: My time to google you. [11:32] stride: Zend Framework for node? wtf.. [11:33] RichardJ: i personally dislike ZF just because it's huge [11:33] RichardJ: not a bad thing per se, but that's not how I roll [11:33] pyrotechnick: RichardJ: that's cool [11:33] pyrotechnick: i think everyone can understand that [11:33] frodenius: huge? [11:33] pyrotechnick: but there's people on both sides of the fence [11:33] RichardJ: I like the minimalist approach [11:33] frodenius: you can just take what you want [11:33] pyrotechnick: yes it's FUCKING huge [11:33] RichardJ: yeah, of course [11:33] frodenius: wat? [11:33] pyrotechnick: yeah but there's no builder [11:34] iszak: RichardJ, yeah a lot of people cite that ZF is bloated, but you can trim out all the fat, and it's really meant to just be installed once and called via the include paths. [11:34] RichardJ: of course, I'm not saying you *have* to have it all [11:34] frodenius: you call yourself a developer and can't handle files? [11:34] stride: I like the "get the db module devs to agree on an interface" approach.. [11:34] pyrotechnick: it does have an auto-loading mechanism [11:34] iszak: but on the other hand I really like having the more common toolset that are maintained and all there for me. [11:34] pyrotechnick: written in the same spirit [11:34] iszak: indeed. [11:34] pyrotechnick: which can make some general assumptions [11:35] RichardJ: I like the idea of npm, or say, package managers [11:35] pyrotechnick: to make things cleaner and more practical than using 40 different npms [11:35] RichardJ: just add the functionality you need without a lot of work [11:35] pyrotechnick: RichardJ: so do i [11:35] iszak: heh, imagine consistency issues with 40 npms. [11:35] pyrotechnick: but i recognise the need for a more harmonious framework [11:35] RichardJ: yes, that's certainly true [11:35] pyrotechnick: it really comes down to what you're trying to do [11:36] RichardJ: things working together in a clean way, dependencies getting resolved &c. [11:36] pyrotechnick: if you're innovating on the knives edge like we are with WebGL and node.js MMO tech [11:36] pyrotechnick: then it's not going to work for you [11:36] pyrotechnick: but if you're a consultant [11:36] pyrotechnick: and need to knock over a project every two weeks or your kids starve [11:36] pyrotechnick: then you need a ZF to live [11:36] stride: express? [11:36] pyrotechnick: that's kind of where we'd start off [11:36] pyrotechnick: kind of [11:37] RichardJ: express is pretty cool [11:37] pyrotechnick: itd be less like Sinatra and more like rails or something [11:37] pyrotechnick: in philosophy [11:37] pyrotechnick: NOT in implementation [11:37] RichardJ: just stay away from abstractions :) [11:37] pyrotechnick: definately [11:37] pyrotechnick: im not sure what the ZF is in other languages [11:38] RichardJ: ZF is kind of "everything" [11:38] pyrotechnick: kind of [11:38] stride: let's port spring.. [11:38] RichardJ: :p [11:38] pyrotechnick: theres nothing there i dont think belongs [11:38] iszak: I mean and there's no reason why components of this framework couldn't be reused in say express. [11:38] iszak: much like ZF components are used in Symfony IIRC. [11:38] pyrotechnick: exactly [11:38] pyrotechnick: it just [11:38] pyrotechnick: it just has the goal of making things more harmonious without coupling them together [11:39] iszak: yeah, sounds good. [11:39] iszak: Atleast another ZF'er thinks the same way, I guess when people think framework they think being forced into one approach. [11:40] pyrotechnick: hey [11:40] pyrotechnick: i wouldnt go that far [11:40] pyrotechnick: i _used_ to use it ;0 [11:40] RichardJ: i'm working with ZF as well [11:40] RichardJ: website for the largest php community in the netherlands :p [11:40] pyrotechnick: link [11:40] RichardJ: www.pfz.nl [11:40] RichardJ: it's dutch, so you know it ;) [11:40] benburkert has joined the channel [11:41] pyrotechnick: bit slow here but it does look good [11:41] pyrotechnick: nice work [11:41] pyrotechnick: how do you like ZF? [11:41] RichardJ: I don't, really [11:41] pyrotechnick: are you using it full-stack? [11:41] pyrotechnick: it's a beast [11:41] pyrotechnick: it's a big huge beast [11:41] pyrotechnick: but once you tame it [11:41] pyrotechnick: it's very powerful [11:41] iszak: RichardJ, just started using it or? [11:41] RichardJ: yeah, very right [11:41] pyrotechnick: granted a little verbose, yet powerful [11:42] RichardJ: iszak: no, i've worked with it for a while [11:42] pyrotechnick: i think javascript has the power to make it much more succinct than php does [11:42] RichardJ: but i've been mainly doing background work, database and text filtering [11:42] iszak: RichardJ, and you still haven't fallen in love with it? let me guess you don't like PHP in general? :P [11:42] pyrotechnick: it's also a philosophical problem with the ZF just being a bit too verbose but i think it comes down to php more often than not [11:42] RichardJ: php has been my main language for 10 years or so [11:42] iszak: ouch [11:42] iszak: hmm, i guess personal preference. [11:42] RichardJ: yeah, correct :) [11:43] pyrotechnick: i think ZF with 5.3 [11:43] pyrotechnick: would be one of the best platforms ATM [11:43] ewdafa has joined the channel [11:43] iszak: I like the sound of "Joyent Framework" [11:43] pyrotechnick: i hope they do [11:43] pyrotechnick: i sent it off [11:43] RichardJ: i have a pretty strong opinion about a lot of things [11:43] pyrotechnick: if they say anything ill let you know [11:43] iszak: pyrotechnick, ZF 2.0 will be a lot faster too :) [11:43] pyrotechnick: what do you think of coffeescript RichardJ [11:43] RichardJ: pyrotechnick: haven't really looked at it yet [11:44] pyrotechnick: i'm extremely much in favour of it [11:44] RichardJ: my time is pretty limited so I have to digest a lot of information in a short time :) [11:44] pyrotechnick: but i can appreciate the criticism it has received [11:44] stride: gnah. how do people get anything done on windows.. thanks for whoever does those precompiled node thingys [11:44] pyrotechnick: at the end of the day it's only one more layer and it does solve so many problems with JavaScript [11:44] pyrotechnick: it's more than worth it [11:44] RichardJ: good, than it's going up on my list :) [11:44] iszak: stride, i managed to compile node.js on cygwin, not hard; P [11:44] pyrotechnick: give me something you dont like about JS [11:45] RichardJ: with() [11:45] pyrotechnick: a couple of things if you can think of them [11:45] pyrotechnick: okay but you can just choose not to use with [11:45] pyrotechnick: so give me something you're forced to do [11:45] RichardJ: global variables [11:45] pyrotechnick: okay [11:45] pyrotechnick: coffee does alot to keep the scope of variables down to a minimum [11:45] RichardJ: and with that I mean in the browser, there's no confinement [11:45] Sembiance: morning everyone [11:45] pyrotechnick: and by default all coffee is wrapped in a closure so it cannot pollute the global scope [11:46] RichardJ: most of my code is (function () { ... do stuff here ... }()); [11:46] pyrotechnick: yes [11:46] unomi has joined the channel [11:46] RichardJ: only global variable is APP, really [11:46] pyrotechnick: it also just received the `do` unary [11:46] pyrotechnick: so you can call a closure like this [11:46] RichardJ: but I also don't like blockless statement, but that's style [11:46] pyrotechnick: do -> [11:47] pyrotechnick: coffee lets you do one-liners but its easier to recognise than javascripts [11:47] RichardJ: I certainly hope se. [11:47] pyrotechnick: you have to use a "then" for blockless [11:47] RichardJ: nice! [11:47] pyrotechnick: what else [11:47] RichardJ: typeof /[a-z]/ === (function, object) [11:47] RichardJ: not regexp [11:48] RichardJ: the weird binding of "this". [11:48] RichardJ: typeof null === 'object'; [11:48] RichardJ: var undefined = 'true'; [11:48] pyrotechnick: let me try those [11:48] RichardJ: NaN !== NaN, typeof NaN === 'number' [11:49] RichardJ: all those little quirks [11:49] pyrotechnick: thats not fixed ;) that one is hilarious though lol [11:49] RichardJ: (' \t\n\r ' == 0) === true [11:49] pyrotechnick: regex are still functions in coffee [11:49] pyrotechnick: sorry [11:49] pyrotechnick: it tries not to screw with that stuff too much [11:49] pyrotechnick: like yeah itd be nice to fix that stuff [11:49] pyrotechnick: but thats something that's the VMs fault not really a syntax thing [11:50] pyrotechnick: so if you do fix it all in coffee like they started to [11:50] pyrotechnick: you end up breaking too many things and it becomes less and less worth it [11:50] RichardJ: of course, that last is easy to fix, just don't use == but === instead [11:50] pyrotechnick: it does do things like that [11:50] RichardJ: I *never* use == anyway [11:51] pyrotechnick: if a is b [11:51] pyrotechnick: alert "hi" [11:51] pyrotechnick: if (a === b) { [11:51] pyrotechnick: alert("hi"); [11:51] pyrotechnick: } [11:51] pyrotechnick: if a == b [11:51] pyrotechnick: alert "hi" [11:51] pyrotechnick: if (a === b) { [11:51] pyrotechnick: alert("hi"); [11:51] pyrotechnick: } [11:51] RichardJ: :) [11:51] RichardJ: much more legible as well [11:51] pyrotechnick: what else [11:51] pyrotechnick: we have found [11:51] pyrotechnick: that even though sometimes your code doesnt get that much shorter in coffee in terms of LOC (though it usually does) [11:51] pyrotechnick: it's much much less "dence" [11:51] pyrotechnick: "dense" [11:52] RichardJ: well, 0.1 + 0.2 !== 0.3, but that's a consequence of using IEEE floats [11:52] pyrotechnick: which does a lot for increasing readability [11:52] pyrotechnick: yeah that cant be fixed easily [11:52] pyrotechnick: you have to use EPSILON [11:52] RichardJ: I avoid those floaty problems by scaling [11:52] pyrotechnick: i use EPSILOB [11:52] pyrotechnick: so like [11:53] pyrotechnick: FLT_EPSILON = 1.19209290e-07 [11:53] pyrotechnick: then [11:53] pyrotechnick: Math.abs(a - b) < epsilon [11:53] pyrotechnick: thats the c/c++ way [11:54] pyrotechnick: what else [11:54] pyrotechnick: that might be a nice proposal actually [11:54] pyrotechnick: like a "near" operator [11:54] RichardJ: Array.prototype.blah = 1; var k = [1]; for (var i in k) { alert(i); } // alerts 0 and "blah" [11:54] pyrotechnick: if 0.1 + 0.2 >=< 0.3 then alert 'yay' [11:55] pyrotechnick: yeah that is fixed [11:55] pyrotechnick: loops do hasOwnProperty checks [11:55] RichardJ: parseInt('08') === 0 [11:55] pyrotechnick: thats not u have to use radix [11:55] proppy has joined the channel [11:55] RichardJ: fixed in ES5 strict mode, by the way [11:55] pyrotechnick: oh rly [11:55] pyrotechnick: nice [11:55] pyrotechnick: then it is [11:55] pyrotechnick: well [11:55] pyrotechnick: i mean [11:55] pyrotechnick: it can be [11:56] RichardJ: i usually overwrite parseInt to default the radix to 10 [11:56] pyrotechnick: u can also do some cool 'preprocessor' stuff too [11:56] pyrotechnick: like include use "strict" before every file [11:56] RichardJ: parseInt = (function () { var old = parseInt; return function (i, radix) { return old(i, radix || 10); }; }()); [11:56] pyrotechnick: nice [11:56] pyrotechnick: you monkey [11:56] RichardJ: haha [11:56] pyrotechnick: what else [11:57] RichardJ: + adds and concatenates [11:57] pyrotechnick: same [11:57] pyrotechnick: too much trouble to change [11:57] sveimac has joined the channel [11:57] RichardJ: of course [11:57] pyrotechnick: anything else [11:57] RichardJ: let me think... [11:57] pyrotechnick: Class.prototype.my_extension is just Class::my_extension [11:58] pyrotechnick: so you might like that one [11:58] devdrinker has joined the channel [11:58] RichardJ: reserved word policty [11:58] RichardJ: policy* [11:58] pyrotechnick: yeah it kinda fixes some issues with reserved words, although a lot more are reserved but u can use anything as keys for objects [11:58] RichardJ: {do: 5} equals syntax error [11:58] pyrotechnick: since it quotes them [11:58] pyrotechnick: yeah thats fixed [11:59] RichardJ: nice :) [11:59] iszak: I hope they like the idea of ZF-esque node.js framework [11:59] proppy: Hi, is there some throlling module node.js ? (for (web)socket) [11:59] RichardJ: uses UTF-16 if I recall correctly [11:59] proppy: +for [11:59] pyrotechnick: richard = [11:59] pyrotechnick: do: 'hi' [11:59] pyrotechnick: var richard; [11:59] pyrotechnick: richard = { [11:59] pyrotechnick: "do": 'hi' [11:59] pyrotechnick: }; [11:59] RichardJ: okay, cool :) [11:59] pyrotechnick: proppy: throlling? [12:00] proppy: throttling :) [12:00] pyrotechnick: throttling [12:00] pyrotechnick: hmm [12:00] RichardJ: the bitwise operators are kind of painful, they're not close to the hardware and thus very slow [12:00] RichardJ: but that's not really fixable :) [12:00] pyrotechnick: there were some people in here talking about rates in socket.io this morning [12:00] pyrotechnick: i think theyre were just reading them though not limiting them [12:00] pyrotechnick: best to ask learnboost [12:00] pyrotechnick: tj is sometimes around [12:00] pyrotechnick: but not atm [12:00] proppy: maybe I should rephrase the question: Has anyone tried to to throttle web socket connection ? [12:00] pyrotechnick: not i [12:01] RichardJ: and of course, the classic, forgetting "new" with a constructor function is disastrous [12:01] proppy: pyrotechnick: thanks [12:01] pyrotechnick: RichardJ: they were going to fix the whole new thing but decided to leave it out [12:01] pyrotechnick: instead u can do the check in the constructor [12:01] RichardJ: just use Object.create, much easier [12:01] pyrotechnick: its slow as aids [12:01] pyrotechnick: Object.create is incredibly slow [12:02] proppy: there is video by ryan about data throttling in node.js http://ontwik.com/javascript/ryan-dahl-data-throttling-in-node-js/ :) [12:02] RichardJ: oh, never really noticed it [12:02] pyrotechnick: ill find the benchmarks [12:02] pyrotechnick: yeah it probably doesnt bother 95% of people [12:02] augustl has joined the channel [12:02] pyrotechnick: but theres no reason to make coffee not be able to be used for realtime [12:02] pyrotechnick: http://jsperf.com/object-create-vs-crockford-vs-jorge-vs-constructor/9 [12:03] pyrotechnick: Chrome 10.0.612 [12:03] pyrotechnick: 446,756 [12:03] pyrotechnick: 14,231 [12:03] pyrotechnick: 19,172 [12:03] pyrotechnick: 20,928 [12:03] pyrotechnick: see [12:03] pyrotechnick: it's 8 times slower [12:03] pyrotechnick: wait [12:03] pyrotechnick: no its like [12:03] pyrotechnick: 20 times slower [12:03] pyrotechnick: 22 times slower [12:03] pyrotechnick: like i said though itd be nice to use Object.create its just too slow [12:03] RichardJ: ah [12:04] pyrotechnick: hacking coffee is easy tough u can also tweak it to your particular preferences [12:04] RichardJ: but that doesn't seem like the built in thing [12:04] pyrotechnick: the last one is [12:04] pyrotechnick: while (i--) Object.create(sharedPrototype); [12:04] pyrotechnick: thats the 20,000 one [12:04] pyrotechnick: its not as slow as crockfords or jorges [12:04] pyrotechnick: but its down there [12:04] pyrotechnick: constructors are at least 22 times faster than any of them [12:05] arpegius has joined the channel [12:06] RichardJ: oh damn, I'm late [12:06] RichardJ: gotta go! [12:06] pyrotechnick: aight [12:06] pyrotechnick: cya around [12:07] pyrotechnick: sorry to distract you lol [12:07] pyrotechnick: anyone else got anything they dislike? [12:07] matjas has joined the channel [12:07] linac has joined the channel [12:10] arpegius has joined the channel [12:11] saschagehlich: v8: parseInt("01") [12:11] v8bot: saschagehlich: 1 [12:11] saschagehlich: v8: parseInt("08") [12:11] v8bot: saschagehlich: 0 [12:11] saschagehlich: why?! [12:12] arpegius_ has joined the channel [12:12] pyrotechnick: ^^ [12:13] pyrotechnick: we discussed it [12:13] frodenius: because leading 0 is typically indicator of OCTAL [12:13] stride: 8 is not a number with radix 8 [12:13] bingomanatee: next time you see someone staring at a Mac's "whirling beachball" spinning cursor, whisper "you're a chicken" in their ear and see if it takes. [12:13] pyrotechnick: what [12:14] jonaslund_ has joined the channel [12:14] Twelve-60 has joined the channel [12:14] pyrotechnick: v8bot: window [12:14] v8bot: pyrotechnick: Use v8: to evaluate code or "`v commands" for a list of v8bot commands. [12:14] saschagehlich: v8: parseInt("08".replace(/^(0+)/g, "")) [12:14] v8bot: saschagehlich: 8 [12:14] pyrotechnick: v commands [12:14] saschagehlich: hrmpf. hussle. [12:14] pyrotechnick: v8bot: v commands [12:14] v8bot: pyrotechnick: Use v8: to evaluate code or "`v commands" for a list of v8bot commands. [12:14] arpegius__ has joined the channel [12:14] frodenius: saschagehlich㇀ use parseInt("08", 10) [12:14] stride: pyrotechnick: the bot works in a query as well [12:14] saschagehlich: huh? [12:14] saschagehlich: v8: parseInt("08", 10) [12:14] v8bot: saschagehlich: 8 [12:15] pyrotechnick: v8bot: alert('hi') [12:15] v8bot: pyrotechnick: Use v8: to evaluate code or "`v commands" for a list of v8bot commands. [12:15] pyrotechnick: it doesnt love me [12:15] stride: it's not a browser.. [12:15] saschagehlich: ah, the radix... perfect, thank you :) [12:15] pyrotechnick: v8: window [12:15] v8bot: pyrotechnick: ReferenceError: window is not defined [12:15] stride: v8: console.log('foo'); global; [12:15] v8bot: stride: CONSOLE: ["foo"], OUTPUT: ReferenceError: global is not defined [12:15] frodenius: pyrotechnick: this is node, not a fucking browser [12:16] bingomanatee: v8bot: "this".replace('is', 'at'); [12:16] v8bot: bingomanatee: Use v8: to evaluate code or "`v commands" for a list of v8bot commands. [12:16] pyrotechnick: v8: process [12:16] v8bot: pyrotechnick: ReferenceError: process is not defined [12:16] pyrotechnick: v8: GLOBAL [12:16] v8bot: pyrotechnick: ReferenceError: GLOBAL is not defined [12:16] pyrotechnick: v8: require [12:16] v8bot: pyrotechnick: ReferenceError: require is not defined [12:16] frodenius: please query the bot [12:16] void_: v8: system("rm -rf /") [12:16] v8bot: void_: ReferenceError: system is not defined [12:16] bingomanatee: v8: process "this".replace('is', 'at'); [12:16] v8bot: bingomanatee: SyntaxError: Unexpected string [12:16] pyrotechnick: query it? [12:16] frodenius: v8 executes code in a CLEAN context [12:16] stagas: v8: !!!!!!!!!!!!!!!!!!!!!!!true [12:16] v8bot: stagas: false [12:17] bingomanatee: v commands [12:17] pyrotechnick: frodenius: but how to we crash him [12:17] tpryme has left the channel [12:17] bingomanatee: `v commands [12:17] v8bot: bingomanatee: Commands: Type `v . Optionally, type `v @ to send to a specific user. `v Commands are: about, beers, commands, git, google, help, macro. Other commands: v8, `re, `pcre, `ref. Type `v help for more information. Join #v8bot for more support. [12:17] frodenius: pyrotechnick: idk, try fuzziyng him in query [12:17] pyrotechnick: v8: while(true){} [12:17] pyrotechnick: IVE DONE IT [12:17] v8bot: pyrotechnick: Error: Timeout [12:17] pyrotechnick: IVE FUCKING DONE IT [12:17] pyrotechnick: damnit [12:17] void_: how do you do Array#delete_if { ... } in Javascript? [12:17] pyrotechnick: he's too strong [12:17] pyrotechnick: void_ underscore has one [12:17] bingomanatee: `v v8 "this".replace('is', 'at'); [12:17] v8bot: bingomanatee: No such command. [12:18] pyrotechnick: .map [12:18] void_: pyrotechnick: doesn't node have some sort of utils? [12:18] pyrotechnick: not really [12:18] void_: ACTION checking api [12:18] pyrotechnick: not for collections [12:18] pyrotechnick: v8: Array.map [12:18] v8bot: pyrotechnick: undefined [12:18] stride: void_: foo = foo.filter(function() {});? [12:18] void_: :'( [12:18] pyrotechnick: v8: Array.prototype.map [12:18] v8bot: pyrotechnick: function map() { [native code] } [12:18] pyrotechnick: see that [12:18] pyrotechnick: u can use that [12:18] void_: ok I can do map [12:18] pyrotechnick: in v8 yes [12:18] pyrotechnick: its ecma 5 [12:18] frodenius: void_㇀ use .filter [12:19] pyrotechnick: he doesnt want it to return [12:19] pyrotechnick: he wants to delete shit [12:19] void_: v8: [1,3,5].map(function(i){return i*10}) [12:19] v8bot: void_: [10, 30, 50] [12:19] void_: yea I wanna delete shit [12:19] void_: v8: [1,3,5].map(function(i,j){return j*10}) [12:19] v8bot: void_: [0, 10, 20] [12:19] void_: oh second argument is index [12:19] void_: so I can delete shit [12:19] marienz has joined the channel [12:19] stride: or you could just use .filter [12:19] pyrotechnick: v8: var a = [1, 2, 3].map(fucntion(x, y){delete a[y];}) [12:19] v8bot: pyrotechnick: SyntaxError: Unexpected token { [12:20] pyrotechnick: v8: var a = [1, 2, 3]; a.map(fucntion(x, y){delete a[y];}) [12:20] v8bot: pyrotechnick: SyntaxError: Unexpected token { [12:20] pyrotechnick: fuck [12:20] pyrotechnick: v8: var a = [1, 2, 3]; a.map(function(x, y){delete a[y];}) [12:20] v8bot: pyrotechnick: [undefined, undefined, undefined] [12:20] pyrotechnick: see [12:20] void_: I don't want it to be undefined [12:20] pyrotechnick: u want to change the indexes? [12:20] frodenius: -____- [12:20] pyrotechnick: u need to slice then [12:20] frodenius: v8: var a = [1, 2, 3]; a.map(function(x, y){delete a[y];}; a [12:20] v8bot: frodenius: SyntaxError: Unexpected token ; [12:21] pyrotechnick: v8: var a = [1, 2, 3]; a.map(function(x, y){delete a[y];}) [12:21] v8bot: pyrotechnick: [undefined, undefined, undefined] [12:21] void_: oh man I just want ruby [12:21] pyrotechnick: lol [12:21] pyrotechnick: use underscore [12:21] void_: let's take a look at this underscore thing [12:21] pyrotechnick: or [12:21] pyrotechnick: yeah [12:21] pyrotechnick: or [12:21] frodenius: v8: var a = [1, 2, 3]; a.map(function(x, y){delete a[y];}); a [12:21] v8bot: frodenius: [undefined, undefined, undefined] [12:21] frodenius: aw [12:21] pyrotechnick: theres one that turns js into ruby [12:21] pyrotechnick: ruby.js or something [12:22] stride: v8: var a = [1,2,3].filter(function(c) { return c <= 2; }); a; [12:22] v8bot: stride: [1, 2] [12:22] pyrotechnick: well doesnt that return a copy [12:22] pyrotechnick: i guess not [12:23] pyrotechnick: yeah [12:23] pyrotechnick: filter(callback) – Creates a new array with all of the elements of this array for which the provided filtering function returns true. [12:23] pgte: there is visionmedias https://github.com/visionmedia/ext.js [12:23] pyrotechnick: theres a sweet arsed ruby one [12:23] pgte: but I think the latest is broken [12:23] pyrotechnick: i cant remember what its called [12:23] pyrotechnick: but its sweet [12:24] pgte: array.select ? [12:24] pyrotechnick: thats the oppposite [12:24] pyrotechnick: yeahhhh [12:24] pgte: array.reject [12:24] pyrotechnick: void_ i found it [12:24] pyrotechnick: http://jsclass.jcoglan.com/ [12:25] pyrotechnick: v8: Array.prototype.reject [12:25] v8bot: pyrotechnick: undefined [12:25] pyrotechnick: doesnt exist [12:25] void_: pyrotechnick: what's that [12:25] void_: oh [12:25] pyrotechnick: its like [12:25] pyrotechnick: ruby in js [12:25] void_: underscore has nicer website [12:25] pyrotechnick: kinda [12:25] pyrotechnick: lol [12:25] pyrotechnick: underscore is awesome [12:25] void_: so I'm goin with underscore [12:25] pyrotechnick: u using coffee? [12:25] pgte: you can easily create it based on array.select :P [12:25] jetienne: poll: when doing "private" method in a .prototype object, how do you handle this ? by using _myPrivateMethod() like python ? [12:25] pyrotechnick: v8: Array.prototype.select [12:25] v8bot: pyrotechnick: undefined [12:25] pyrotechnick: that doesnt exist either [12:26] pgte: I was talking about ext.js [12:26] pyrotechnick: right [12:26] pyrotechnick: void [12:26] pgte: and ruby [12:26] pyrotechnick: void_: would you rather use native extensions or _.() [12:26] void_: no coffee [12:26] void_: native [12:26] pyrotechnick: then [12:26] pyrotechnick: u want ext.js [12:26] pyrotechnick: or something similar [12:26] pyrotechnick: underscore doesnt extend native types [12:27] void_: yeah [12:27] void_: hm [12:27] void_: what is ext js [12:27] pyrotechnick: i mean u can probably easily eport them [12:27] void_: the heavyweight framework? [12:27] void_: is that what u mean? [12:27] pyrotechnick: not really [12:27] pyrotechnick: just take what u mean [12:27] void_: http://www.sencha.com/ [12:27] pyrotechnick: it just extends natives [12:27] pyrotechnick: so u can do [12:27] void_: hm [12:27] pyrotechnick: [].reject [12:27] void_: by the way [12:27] void_: are you guys using semicolons? [12:27] pyrotechnick: nah [12:27] pyrotechnick: not that lol [12:27] pyrotechnick: i use coffee ;) [12:27] void_: oh [12:28] pyrotechnick: but when i write js yeah i do full JSLint-able code [12:28] pgte: I am, but it doesn't matter much IMO [12:28] pyrotechnick: read about semicolon insertion [12:28] pyrotechnick: it can fuck you up sometimes [12:28] pgte: yeah, there are some edge cases [12:28] pyrotechnick: not that void [12:28] void_: no it doesn't I just want my code to be cool [12:28] pyrotechnick: https://github.com/visionmedia/ext.js [12:28] jetienne: void_: coffe is cooler [12:28] jetienne: might change next week tho :) [12:28] pyrotechnick: coffees the bomb [12:29] pyrotechnick: you should see twitter ATM [12:29] void_: pyrotechnick: that's exactly what I wanted [12:29] pyrotechnick: there was like a flame war between jash and TJ this morning [12:29] pyrotechnick: it was sweet [12:29] stagas: jetienne: try debugging it :) [12:29] pyrotechnick: pgte linked it [12:29] pyrotechnick: thank him [12:29] jetienne: stagas: tsss :) [12:29] jetienne: stagas: still it is web scale [12:29] pyrotechnick: but yeah jash and TJ were all like "bitch bitch bitch" "hurp derp" [12:29] jetienne: stagas: btw i will steal your radio css :) [12:29] _mql1 has joined the channel [12:30] stagas: jetienne: the new one? I'm not sure how old the repo is grab it from the site [12:30] void_: what the heck [12:30] void_: TypeError: Object # has no method 'extend' [12:30] void_: at Object. (/usr/local/lib/node/.npm/ext/0.6.1/package/lib/ext/core_ext/function.js:4:16) [12:30] jetienne: stagas: dunno. the one i knew :) [12:31] stagas: jetienne: I've redesigned! http://radioplz.com [12:31] void_: what do I need to have Object.extend? [12:31] void_: v8: Object.prototype.extend [12:31] v8bot: void_: undefined [12:31] jetienne: stagas: nice! [12:31] jetienne: stagas: does this work on a mobile ? [12:31] void_: v8: u here asshole? [12:31] v8bot: void_: SyntaxError: Unexpected identifier [12:32] stagas: jetienne: it should, if it has webkit and flash :) [12:32] jetienne: stagas: duh! [12:32] void_: stagas: what does it do? [12:34] stagas: void_: nothing much really now, it just plays back radios from a list w/ flash [12:34] void_: oh I have noflash [12:34] void_: that's why it doesn't to anything [12:34] pyrotechnick: GOOD [12:34] void_: I saw something similiar, maybe you can inspire http://soundz.fm/ [12:35] d0k has joined the channel [12:35] jetienne: radioplz got no registration tho [12:35] pyrotechnick: leaked iphone devices? [12:35] stagas: void_: its like having a radio space, you can clone it, edit this https://github.com/stagas/radioplz/blob/master/public/js/radios.js and run your own fav radios :P [12:35] void_: nice [12:36] stagas: I should make an interface in site for that list [12:37] derren13 has joined the channel [12:38] void_: any ideas please? I can't get extjs to work because of: TypeError: Object # has no method 'extend' [12:38] void_: what is extend? [12:39] stagas: void_: get this one https://github.com/endtwist/ext.js [12:39] void_: stagas: k thanks [12:40] void_: woho worked [12:40] derren13 has joined the channel [12:40] pyrotechnick: v8: 0.1 + 0.2 == 0.3 [12:40] v8bot: pyrotechnick: false [12:40] pyrotechnick: v8: 0.1 + 0.2 === 0.3 [12:40] v8bot: pyrotechnick: false [12:40] pyrotechnick: v8: 0.11 + 0.2 === 0.31 [12:40] v8bot: pyrotechnick: true [12:40] pyrotechnick: right [12:41] void_: this v8 thing is so cool [12:43] lintaba: i think the v8 need a better number format :D [12:43] lintaba: if you want to calculate with bigger numbers [12:43] void_: v8: printf("aaa") [12:43] v8bot: void_: ReferenceError: printf is not defined [12:43] lintaba: or more precision [12:43] void_: v8: sprintf("aaa") [12:43] v8bot: void_: ReferenceError: sprintf is not defined [12:43] void_: can you run an infinite loop? [12:44] lintaba: v8: while(1); [12:44] stride: no, it has a timeout mechanism [12:44] void_: will it die if I run thi? a(){b()}; b(){a()}; [12:44] v8bot: lintaba: Error: Timeout [12:44] void_: v8: a(){b()}; b(){a()}; [12:44] v8bot: void_: SyntaxError: Unexpected token { [12:44] stride: plus some sort of maximum stack depth protection [12:44] void_: v8: function a(){b()}; function b(){a()}; [12:44] v8bot: void_: undefined [12:44] void_: v8: function a(){b()}; function b(){a()}; a(); [12:44] v8bot: void_: RangeError: Maximum call stack size exceeded [12:44] void_: smart boy [12:44] void_: v8: good job kid [12:44] v8bot: void_: SyntaxError: Unexpected identifier [12:44] lintaba: v8: "good job kid" [12:44] v8bot: lintaba: "good job kid" [12:45] void_: v8: "meh".reverse [12:45] v8bot: void_: undefined [12:45] void_: v8: "meh".reverse() [12:45] v8bot: void_: TypeError: Object meh has no method 'reverse' [12:45] pyrotechnick: fail [12:45] void_: :'( [12:45] stride: and it works in a query as well, in case you didn't know.. ;) [12:45] void_: in a query? [12:47] lintaba: v8: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1 [12:47] v8bot: lintaba: false [12:47] stagas: v8: !!!!!!!!!!!!!!!false [12:47] v8bot: stagas: true [12:48] lintaba: v8: {a:{a: [1,2,3]}} [12:48] v8bot: lintaba: SyntaxError: Label 'a' has already been declared [12:48] lintaba: 01v8: {'a':{'a': [1,2,3]}}01 [12:50] frodenius: lintaba㇀ surround with () to prevent the compiler from thinking it's a block [12:50] lintaba: 10 01v8: ({'a':{'a': [1,2,3]}}) [12:51] lintaba: v8: JSON.stringify([1,2,3]) [12:51] v8bot: lintaba: "[1,2,3]" [12:52] lintaba: so it cant reply back an object :P [12:52] iFire` has joined the channel [12:53] pyrotechnick: what do you'se think [12:53] pyrotechnick: https://github.com/jashkenas/coffee-script/issues/issue/991 [12:54] frodenius: lintaba㇀ ofc you can [12:56] lintaba: v8: ({anser:42}) [12:56] v8bot: lintaba: {"anser": 42} [12:56] lintaba: :) [13:00] rchavik has joined the channel [13:07] mape_ has joined the channel [13:08] thinkingpotato has joined the channel [13:08] Yuffster has joined the channel [13:11] lintaba: v8: for(var a="";a.length<1000;a+=".");a [13:11] v8bot: lintaba: "............................................................................................................................................................................................................................................................................................................................................................................................................... [Output truncated...] [13:12] skm has joined the channel [13:13] lintaba: whose bot is v8? :D [13:15] karboh has joined the channel [13:17] oal has joined the channel [13:19] nuba has joined the channel [13:27] shinmei has joined the channel [13:28] pgte: v8: require('express'); [13:28] v8bot: pgte: ReferenceError: require is not defined [13:32] lintaba: v8: console [13:32] v8bot: lintaba: {"output": [], "log": function (){ Array.prototype.push.apply(sandbox.console.output, Array.prototype.slice.call(arguments, 0)) }} [13:33] lintaba: v8: console.log(42) [13:33] v8bot: lintaba: CONSOLE: [42], OUTPUT: undefined [13:36] webr3 has joined the channel [13:36] SamuraiJack_ has joined the channel [13:37] mikew3c has joined the channel [13:40] ianward has joined the channel [13:42] lintaba: v8: process [13:42] v8bot: lintaba: ReferenceError: process is not defined [13:46] matjas has joined the channel [13:51] heavysixer has joined the channel [13:55] ysynopsis has joined the channel [13:55] pyrotechnick: client is huge [13:57] pyrotechnick: v8: for (var i = 10; i >= 0; i++) { console.log(x + ' green bottles, hanging on the wall'); } [13:58] v8bot: pyrotechnick: ReferenceError: x is not defined [13:58] pyrotechnick: v8: for (var i = 10; i >= 0; i++) { console.log(i + ' green bottles, hanging on the wall'); } [13:58] v8bot: pyrotechnick: Error: Timeout [13:58] pyrotechnick: v8: for (var i = 10; i >= 0; i--) { console.log(i + ' green bottles, hanging on the wall'); } [13:58] v8bot: pyrotechnick: CONSOLE: ["10 green bottles, hanging on the wall", "9 green bottles, hanging on the wall", "8 green bottles, hanging on the wall", "7 green bottles, hanging on the wall", "6 green bottles, hanging on the wall", "5 green bottles, hanging on the wall", "4 green bottles, hanging on the wall", "3 green bottles, hanging on the wall", "2 green bottles, hanging on the wall", "1 green bottles, hanging o [Output truncated...] [13:59] pyrotechnick: lulz [14:00] lintaba: 01v8: for (var a="",i = 10; i >= 0; i--) { a+=(i + ' green bottles, hanging on the wall'); }01;a [14:01] pyrotechnick: lol [14:01] pyrotechnick: fail [14:01] arpegius has joined the channel [14:03] MattJ has joined the channel [14:03] lintaba: v8: for(var a="",i=10;i>=10;i--){a+=i+' bottles, hanging the wall';} a [14:03] v8bot: lintaba: "10 bottles, hanging the wall" [14:04] lintaba: v8: for(var a="",i=10;i>=10;i--){a=a+i+' bottles, hanging the wall';} a [14:04] v8bot: lintaba: "10 bottles, hanging the wall" [14:04] ivanfi has left the channel [14:04] lintaba: v8: for(var a="",i=10;i>=0;i--){a=a+i+' bottles, hanging the wall';} a [14:04] v8bot: lintaba: "10 bottles, hanging the wall9 bottles, hanging the wall8 bottles, hanging the wall7 bottles, hanging the wall6 bottles, hanging the wall5 bottles, hanging the wall4 bottles, hanging the wall3 bottles, hanging the wall2 bottles, hanging the wall1 bottles, hanging the wall0 bottles, hanging the wall" [14:05] maushu has joined the channel [14:05] ewdafa has joined the channel [14:06] maushu: Sooooo... I ported a little node.js to c#. [14:08] maushu: This is what get from the site example: http://pastebin.com/aWvwsVeR [14:09] maushu: Shame I need to use HttpHeaders (a Dictionary subclass), but thats the only way to get strings on the left side. [14:11] nilcolor: v8: 2^40 [14:11] v8bot: nilcolor: 42 [14:13] boaz has joined the channel [14:14] jetienne: :) [14:14] lintaba: v8: 42?42:42 [14:14] v8bot: lintaba: 42 [14:16] lintaba: v8: 42?42?42?42?42?42?42?42?42:42:42:42:42:42:42:42:42 [14:16] v8bot: lintaba: 42 [14:17] aheckmann has joined the channel [14:17] maushu: v8: 42?42?42?42?42?42?42?42?41:42:42:42:42:42:42:42:42 [14:17] v8bot: maushu: 41 [14:18] nilcolor: :) [14:21] paulrobinson has joined the channel [14:23] riven has joined the channel [14:25] lintaba: v8:(((((0==0)==0)==0)==0)==0) [14:25] v8bot: lintaba: true [14:27] RichardJ: would it be really bad if i said "v8: while(1);"? [14:27] lintaba: v8:while(1); [14:27] v8bot: lintaba: Error: Timeout [14:27] RichardJ: haha [14:28] lintaba: v8:setTimeout [14:28] v8bot: lintaba: ReferenceError: setTimeout is not defined [14:28] lintaba: v8:setInterval [14:28] v8bot: lintaba: ReferenceError: setInterval is not defined [14:28] RichardJ: v8:delete setInterval; [14:28] v8bot: RichardJ: true [14:29] RichardJ: v8:delete ReferenceError; a; [14:29] v8bot: RichardJ: ReferenceError: a is not defined [14:29] RichardJ: :) [14:29] kolor has joined the channel [14:29] RichardJ: v8:void 0; [14:29] v8bot: RichardJ: undefined [14:29] RichardJ: v8: global; [14:29] v8bot: RichardJ: ReferenceError: global is not defined [14:29] RichardJ: bah [14:30] RichardJ: v8: console [14:30] v8bot: RichardJ: {"output": [], "log": function (){ Array.prototype.push.apply(sandbox.console.output, Array.prototype.slice.call(arguments, 0)) }} [14:30] nilcolor: v8: console.log = function(){} [14:30] v8bot: nilcolor: function (){} [14:30] RichardJ: v8: console.dir(console); [14:30] v8bot: RichardJ: TypeError: Object [object Object] has no method 'dir' [14:30] RichardJ: v8: console.log(console); [14:30] v8bot: RichardJ: [14:30] beta__ has joined the channel [14:30] nilcolor: =) [14:30] lintaba: v8: console [14:30] v8bot: lintaba: {"output": [], "log": function (){ Array.prototype.push.apply(sandbox.console.output, Array.prototype.slice.call(arguments, 0)) }} [14:31] webr3: v8: sandbox [14:31] v8bot: webr3: ReferenceError: sandbox is not defined [14:31] RichardJ: v8: process [14:31] v8bot: RichardJ: ReferenceError: process is not defined [14:31] webr3: v8: sandbox.console [14:31] v8bot: webr3: ReferenceError: sandbox is not defined [14:32] lintaba: v8:this [14:32] v8bot: lintaba: {} [14:38] lintaba: v8:about [14:38] v8bot: lintaba: ReferenceError: about is not defined [14:39] void_: how do you - cool kids - do inheritance in javascript? I never needed it, so I don't know [14:39] void_: please post a link, I know there are many ways but I want the cool one [14:39] lintaba: http://www.crockford.com/javascript/inheritance.html [14:40] beta__ has joined the channel [14:40] lintaba: google(javascript+inherit)[0] ;) [14:41] paulrobinson_ has joined the channel [14:42] paulrobinson_ has joined the channel [14:44] rope has joined the channel [14:44] paulrobinson_ has joined the channel [14:45] void_: ya I know google but that's the shitload of options I'm talking about [14:45] void_: I'm wondering what's used in node and node's projects [14:45] void_: ok I found this http://howtonode.org/prototypical-inheritance [14:45] void_: lookin good [14:48] paulrobinson has joined the channel [14:51] kriszyp has joined the channel [14:51] pyrotechnick: does anyone know the node module that does suggestions [14:51] pyrotechnick: for like command line apps [14:51] devdrinker has joined the channel [14:51] pyrotechnick: like it makes "did you mean"s [14:53] pHcF has joined the channel [14:53] stride: which one? [14:55] omni5cience has joined the channel [14:58] lintaba: God wanted his prototype to be Douglas Crockford, but Douglas Crockford refused [14:58] paulrobinson has joined the channel [14:59] jherdman has joined the channel [15:00] vborja has joined the channel [15:01] shinmei has joined the channel [15:02] c4milo has joined the channel [15:02] void_: I like this chatroom [15:03] akahn has joined the channel [15:04] ollie has joined the channel [15:12] devdrink_ has joined the channel [15:13] skm has joined the channel [15:15] sveimac has joined the channel [15:16] jakehow has joined the channel [15:17] antares_ has joined the channel [15:29] IRONkyle has joined the channel [15:32] muhqu has joined the channel [15:39] trotter has joined the channel [15:40] herbySk has joined the channel [15:40] aconbere has joined the channel [15:41] EyePulp has joined the channel [15:41] ceej has joined the channel [15:44] ajpiano has joined the channel [15:47] losing has joined the channel [15:47] lintaba: v8: (function (){return "("+arguments.callee.toString()+")()";})() [15:47] v8bot: lintaba: "(function (){return "("+arguments.callee.toString()+")()";})()" [15:48] jasperla_ has joined the channel [15:50] RichardJ: v8: function Y(l){return(function(f){return f(f);}(function(f){return l(function(x){return f(f)(x);});}));}var f=Y(function(c){return function(n){return n<=2?n:n*f(n-1);};});f(5); [15:50] v8bot: RichardJ: 120 [15:50] RichardJ: :) [15:51] matjas has joined the channel [15:54] hunterloftis has joined the channel [15:55] dtrasbo has joined the channel [15:56] void_ has joined the channel [15:58] ceej has joined the channel [16:05] JusticeFries has joined the channel [16:06] sveisvei has joined the channel [16:08] Druid_ has joined the channel [16:09] cwo has joined the channel [16:10] SubStack: v8: (function f () { return '('+f.toString()+')()' })() [16:10] v8bot: SubStack: "(function f() { return '('+f.toString()+')()' })()" [16:10] SubStack: arguments.callee sucks [16:10] SubStack: all that typing [16:10] SubStack: also deprecated I guess [16:11] yonkeltron: yeah [16:11] yonkeltron: i use [16:11] yonkeltron: function funky() { return funk.caller } [16:15] ben_alman has joined the channel [16:22] herbySk has joined the channel [16:24] anoob has joined the channel [16:26] anoob: hi, i've playing with node.js and i have a question... to write dinamic web pages should I always create a server and handle http headers? [16:26] aconran has joined the channel [16:27] softdrink has joined the channel [16:27] kodisha has joined the channel [16:27] broofa has joined the channel [16:27] aurynn: anoob, there's frameworks that handle most of that for you [16:28] anoob: aurynn, can you name it? [16:28] stride: anoob: the basic concept is that you create a server even for static webpages, otherwise nothing is there to serve them to the client (browser) [16:28] aurynn: Express or Connect are the ones I know of [16:28] anoob: aurynn, stride, do you use Express or Connect? [16:28] davidwalsh has joined the channel [16:29] aurynn: I've been using express [16:29] aurynn: though I hit a snag [16:29] stride: connect occasionally, I use node primarily for other networking stuff [16:30] stride: what problems did you have aurynn? express seems to be the most popular framework around here [16:30] strmpnk has joined the channel [16:31] codykrieger has joined the channel [16:31] aurynn: stride, I hit an issue with setting cookies in my custom middleware throwing an error [16:31] stride: oh, okay [16:32] aurynn: I was hoping to talk to tj about it today [16:32] jakehow has joined the channel [16:34] briznad has joined the channel [16:35] Twyndyllyngs has joined the channel [16:35] Twyndyllyngs has joined the channel [16:36] kodisha_ has joined the channel [16:40] andrewfff has joined the channel [16:42] vborja_ has joined the channel [16:45] psi0nik has joined the channel [16:45] psi0nik has left the channel [16:48] nonnikcam has joined the channel [16:49] tjholowaychuk has joined the channel [16:55] dguttman has joined the channel [16:57] kodisha has joined the channel [16:57] sveimac has joined the channel [16:59] dnolen has joined the channel [17:01] robotarmy has joined the channel [17:05] dguttman has joined the channel [17:07] yozlet has joined the channel [17:07] beta___ has joined the channel [17:10] hobodave has joined the channel [17:13] eddyb has joined the channel [17:14] eddyb: v print('hey') [17:14] amerine has joined the channel [17:14] eddyb: v, print('hey') [17:14] eddyb: v8bot: print('hey') [17:14] v8bot: eddyb: Use v8: to evaluate code or "`v commands" for a list of v8bot commands. [17:14] eddyb: dammit [17:14] Sembiance: v8bot: "hey" [17:14] v8bot: Sembiance: Use v8: to evaluate code or "`v commands" for a list of v8bot commands. [17:14] Sembiance: v8: "hey" [17:14] v8bot: Sembiance: "hey" [17:15] eddyb: v8: var a = [];while(1)a.push(a.length); [17:15] v8bot: eddyb: [17:15] eddyb: is that a timer-based protection? [17:16] maushu: Die, You Gravy Sucking Pig Dog! [17:16] pgte: can anyone help me interpret process.memoryUsage() ? [17:17] pgte: { rss: 8388608, vsize: 3108245504, heapTotal: 4601984, heapUsed: 2633144 } [17:17] pgte: i see vsize is terribly high, just by starting console [17:17] maushu: Ignore it. [17:18] jetienne: :) [17:18] pgte: what should I use to profile node mem usage? [17:18] technoweenie has joined the channel [17:18] pgte: rss? [17:18] stephank has joined the channel [17:18] jetienne: pgte: running on mac, no ? [17:18] pgte: yes [17:19] pgte: (I would like to do it inside node) [17:19] jetienne: pgte: dunno how to do that. to get used memory in a OS seems to be hard [17:19] jetienne: pgte: i would rely on rss [17:19] pgte: I'm just looking for pointers on memory consumption for benchmarking an app [17:19] pgte: ok, thanks [17:20] wink_: its not just hard, its pretty much impossible to do deterministically [17:20] jetienne: well i know the linux case [17:20] jetienne: this is just a matter of lazyness in the kernle [17:20] jetienne: the vsize on macos seems ridiculously high tho :) [17:21] wink_: that is a tad high ;> [17:21] pgte: 3 GB :/ [17:22] eddyb: v8: for(var i = 0; i < [17:45] herbySk: v8: console [17:45] v8bot: herbySk: {"output": [], "log": function (){ Array.prototype.push.apply(sandbox.console.output, Array.prototype.slice.call(arguments, 0)) }} [17:45] eddyb: it is... but not without a function to print stuff :| [17:45] bingomanatee has joined the channel [17:45] eddyb: v8: sandbox [17:45] v8bot: eddyb: ReferenceError: sandbox is not defined [17:45] eddyb: crap [17:46] eddyb: v8: this [17:46] v8bot: eddyb: {} [17:46] eddyb: v8: print [17:46] v8bot: eddyb: function (){ Array.prototype.push.apply(sandbox.console.output, Array.prototype.slice.call(arguments, 0)) } [17:46] ceej has joined the channel [17:46] pyrotechnick: man i wish i was a chick [17:46] pyrotechnick: i could just use my boobies to make dudes code my node [17:46] herbySk: that slice in unnecessary, afaict [17:47] eddyb: why not just output.push(arguments[0]) ? [17:47] pyrotechnick: v8: arguments [17:47] v8bot: pyrotechnick: ReferenceError: arguments is not defined [17:47] pyrotechnick: v8: this.parent [17:47] v8bot: pyrotechnick: undefined [17:47] herbySk: eddyb: 'cause there may be more arguments than 1? [17:47] pyrotechnick: v8: this.constructor [17:47] v8bot: pyrotechnick: function Object() { [native code] } [17:48] herbySk: v8: process [17:48] v8bot: herbySk: ReferenceError: process is not defined [17:48] pyrotechnick: v8: this.constructor.constructor [17:48] v8bot: pyrotechnick: function Function() { [native code] } [17:48] pyrotechnick: v8: this.constructor.constructor.constructor [17:48] v8bot: pyrotechnick: function Function() { [native code] } [17:48] pyrotechnick: v8: this.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor [17:48] v8bot: pyrotechnick: function Function() { [native code] } [17:48] eddyb: then what does that slice do ? [17:48] eddyb: oh, I see [17:48] pyrotechnick: v8: this.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructo [17:48] v8bot: pyrotechnick: undefined [17:48] eddyb: makes sense now [17:48] pyrotechnick: hahaha [17:48] pyrotechnick: it bombs out [17:49] pyrotechnick: v8: this.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructo [17:49] v8bot: pyrotechnick: undefined [17:49] eddyb: v8: "v8: print('lol')" [17:49] v8bot: eddyb: "v8: print('lol')" [17:49] pyrotechnick: v8: print('lol') [17:49] v8bot: pyrotechnick: CONSOLE: ["lol"], OUTPUT: undefined [17:49] herbySk: pyrotechnick: no, you missed the r character [17:49] eddyb: you miss a r at the end [17:49] pyrotechnick: not here [17:49] eddyb: v8: this.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor.constructor [17:49] pyrotechnick: it must be adium trimming my messages [17:49] v8bot: eddyb: function Function() { [native code] } [17:50] eddyb: v8: "moo\nmoo" [17:50] v8bot: eddyb: "moo\nmoo" [17:50] eddyb: :| [17:50] pyrotechnick: our aim [17:50] pyrotechnick: for the next month [17:50] pyrotechnick: should be to jailbreak v8 [17:50] mraleph: lol [17:51] eddyb: v8bot: native moo [17:51] v8bot: eddyb: Use v8: to evaluate code or "`v commands" for a list of v8bot commands. [17:51] eddyb: v8: native moo [17:51] v8bot: eddyb: SyntaxError: Unexpected token native [17:51] herbySk: pyrotechnick: tell the poor non-native speaker what 'jailbreak' means? [17:51] eddyb: v8: $MathCos [17:51] v8bot: eddyb: ReferenceError: $MathCos is not defined [17:51] eddyb: crap [17:51] pyrotechnick: v8: global [17:51] v8bot: pyrotechnick: ReferenceError: global is not defined [17:51] eddyb: v8: this.sandbox [17:51] v8bot: eddyb: undefined [17:51] pyrotechnick: v8: __filename [17:51] v8bot: pyrotechnick: ReferenceError: __filename is not defined [17:51] frodenius: gosh [17:52] herbySk: v8: ({}).valueOf.call() [17:52] v8bot: herbySk: {} [17:52] chapel: v8: var x = "moo\nboo";x; [17:52] v8bot: chapel: "moo\nboo" [17:52] mraleph: bot works in private messages as well ya know? [17:52] pyrotechnick: v8: for (var i in this) {console.log(this[i]);} [17:52] chapel: :) [17:52] v8bot: pyrotechnick: [17:52] herbySk: ACTION stops playing with bot for the moment [17:52] pyrotechnick: v8: for (var i in this) {console.log(i, this[i]);} [17:52] v8bot: pyrotechnick: [17:53] mraleph: you can also try iterating through mjsunit/regress directory of v8 testsuite if you think it is fun. [17:53] pyrotechnick: its impossible [17:53] eddyb: for(var i = 0; i = 1; i++) { console.log(i + ' bottles of beer on the wall. ' + i ' bottles of beer. Take one down and pass it around; there'll be ' + i-1 + ' bottles of beer on the wall' + String.fromCharCode(12)); } [18:31] frodenius: lol [18:31] fmeyer has joined the channel [18:31] eddyb: v8: String.fromCharCode(0xd) + String.fromCharCode(0xa) + "NICK v8bot_sucks" + String.fromCharCode(0xd) + String.fromCharCode(0xa) [18:31] v8bot: eddyb: null [18:31] eddyb: XD [18:32] eddyb: WHYYY? [18:32] pyrotechnick: lol [18:32] void_: v8: for(i=0; i<100; i++) { console.log(i) } [18:32] v8bot: void_: CONSOLE: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99 [Output truncated...] [18:32] eddyb: v8: String.fromCharCode(0xd + "NICK v8bot_sucks" + String.fromCharCode(0xd) [18:32] v8bot: eddyb: SyntaxError: Unexpected end of input [18:33] eddyb: v8: String.fromCharCode(0xd) + "NICK v8bot_sucks" + String.fromCharCode(0xd) [18:33] eddyb: okey... [18:33] void_: v8: for(i=0; i<100000 i++) { console.log(i) } [18:33] v8bot: void_: SyntaxError: Unexpected identifier [18:33] softdrink: wtf. xcode *requires* snow leopard? i just freaking need the gnu toolchain damnit [18:33] Me1000 has joined the channel [18:33] void_: v8: for(i=0; i<1000 i++) { console.log(i) } [18:33] v8bot: void_: SyntaxError: Unexpected identifier [18:33] eddyb: so it cancels anything with \n in it... [18:33] void_: v8: for(i=0; i<1000; i++) { console.log("...") } [18:33] v8bot: void_: CONSOLE: ["...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", "...", ".. [Output truncated...] [18:33] void_: v8: for(i=0; i<1000; i++) { console.log("...\n") } [18:33] v8bot: void_: CONSOLE: ["...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", "...\n", " [Output truncated...] [18:33] eddyb: if we can put a \n in the resulting string, we'll be able to make it send IRC commands [18:34] pyrotechnick: v8: for (var i = 99; i >= 1; i—) { console.log(i + ' bottles of beer on the wall. ' + i + ' bottles of beer. Take one down and pass it around; there\'ll be ' + i-1 + ' bottles of beer on the wall' + String.fromCharCode(12)); } [18:34] v8bot: pyrotechnick: SyntaxError: Unexpected token ILLEGAL [18:34] pyrotechnick: v8: for (var i = 99; i >= 1; i--) { console.log(i + ' bottles of beer on the wall. ' + i + ' bottles of beer. Take one down and pass it around; there\'ll be ' + i-1 + ' bottles of beer on the wall' + String.fromCharCode(12)); } [18:34] v8bot: pyrotechnick: CONSOLE: ["NaN bottles of beer on the wall ", "NaN bottles of beer on the wall ", "NaN bottles of beer on the wall ", "NaN bottles of beer on the wall ", "NaN bottles of beer on the wall ", "NaN bottles of beer on the wall ", "NaN bottles of beer on the wall ", "NaN bottles of beer on the wall ", "NaN bottles of beer on the wall ", "NaN bottles of beer on the wall ", "NaN bottles of beer on the [Output truncated...] [18:34] eddyb: v8: String.fromCharCode(0xd) + String.fromCharCode(0xd)+ "NICK v8bot_sucks" + String.fromCharCode(0xd) + String.fromCharCode(0xd) [18:34] v8bot: eddyb: null [18:34] eddyb: weird [18:35] eddyb: pyrotechnick: (i-1) [18:35] eddyb: v8: for (var i = 99; i >= 1; i--) { console.log(i + ' bottles of beer on the wall. ' + i + ' bottles of beer. Take one down and pass it around; there\'ll be ' + (i-1) + ' bottles of beer on the wall' + String.fromCharCode(12)); } [18:35] v8bot: eddyb: CONSOLE: ["99 bottles of beer on the wall. 99 bottles of beer. Take one down and pass it around; there'll be 98 bottles of beer on the wall ", "98 bottles of beer on the wall. 98 bottles of beer. Take one down and pass it around; there'll be 97 bottles of beer on the wall ", "97 bottles of beer on the wall. 97 bottles of beer. Take one down and pass it around; there'll be 96 bottles of beer on t [Output truncated...] [18:35] pyrotechnick: wat was wrong [18:35] eddyb: missing () around i-1 [18:35] pyrotechnick: right [18:35] pyrotechnick: subtracting strings [18:35] eddyb: v8: for (var i = 99; i >= 1; i--) { console.log(i + ' bottles of beer on the wall. ' + i + ' bottles of beer. Take one down and pass it around; there\'ll be ' + (i-1) + ' bottles of beer on the wall' + String.fromCharCode(0xd)); } [18:36] Nomon: v8bot: (10).toString(); [18:36] v8bot: Nomon: Use v8: to evaluate code or "`v commands" for a list of v8bot commands. [18:36] pyrotechnick: nomon: v8: [18:36] eddyb: v8: for (var i = 99; i >= 1; i--) { console.log(i + ' bottles of beer on the wall. ' + i + ' bottles of beer. Take one down and pass it around; there\'ll be ' + (i-1) + ' bottles of beer on the wall' + String.fromCharCode(0xd) + String.fromCharCode(0xa)); } [18:36] v8bot: eddyb: null [18:36] eddyb: crap [18:36] Nomon: v8: (10).toString(); [18:36] v8bot: Nomon: "10" [18:37] estrathmeyer has joined the channel [18:37] eddyb: so it has protection against \n [18:37] pyrotechnick: in messages yeah [18:37] pyrotechnick: like u cant make it send multiple messages [18:37] CrypticSwarm has joined the channel [18:38] eddyb: and without \r\n I can't make it send various irc messages [18:38] estrathmeyer has left the channel [18:39] pyrotechnick: v8: Script [18:39] v8bot: pyrotechnick: ReferenceError: Script is not defined [18:40] pyrotechnick: i guess it runs in a separate process [18:40] jpld has joined the channel [18:43] kolor has joined the channel [18:47] pyrotechnick: i guess v8 uses jefe [18:47] pyrotechnick: https://github.com/fictorial/jefe [18:52] liar has joined the channel [18:56] aurynn: tjholowaychuk, ping [18:56] shakefon has joined the channel [18:56] tjholowaychuk: ey [18:57] aurynn: tjholowaychuk, I was told to bother you with Express questions :) [18:57] tjholowaychuk: aurynn: haha k shoot [18:57] opengeard has joined the channel [18:57] aurynn: tjholowaychuk, I wrote a custom middleware, and I'm getting a stacktrace when I try to use res.cookie() in it. [18:57] aurynn: however, if I wait until after normal routing has occurred, it works fine [18:58] tjholowaychuk: aurynn: ah yeah because res.headers is defined by express [18:58] tjholowaychuk: so [18:58] tjholowaychuk: if you look at server.js [18:59] tjholowaychuk: those are initialized in a middleware [18:59] tjholowaychuk: if you use.. use() haha it should be fine though but yea I see that I do connect.Server.call(this, middleware || []); [18:59] tjholowaychuk: above so the express specific one would become after those [18:59] tjholowaychuk: bit of a bug [18:59] aurynn: yeah, I noticed that :) [19:00] aurynn: .use stuff executes after the main route [19:00] tjholowaychuk: what is your middleware setup like? [19:00] tjholowaychuk: aare you passing some to express.createServer()? [19:02] HAITI has joined the channel [19:03] aurynn: yes, I'm using .createServer() [19:03] aurynn: to set up the middleware [19:03] aurynn: I had a paste last night.. [19:03] aurynn: which I of course closed. [19:04] tjholowaychuk: haha [19:04] tjholowaychuk: yeah that would be the problem then [19:04] isaacs: tjholowaychuk: express is pretty cute. [19:04] isaacs: tjholowaychuk: i never really used it much until recently [19:04] tjholowaychuk: isaacs: haha thanks [19:04] MikhX has joined the channel [19:04] cagdas has joined the channel [19:05] pyrotechnick: tjholowaychuk: we use zappa [19:05] isaacs: it'd be nice if the docs were more comprehensive, but it's definitely a trade-off against being overwhelming. [19:05] pyrotechnick: used express before that too [19:05] tjholowaychuk: pyrotechnick: that is the coffeescript one right? [19:05] pyrotechnick: yep [19:05] tjholowaychuk: isaacs: yeah its tough, im not very good at writing docs [19:06] isaacs: tjholowaychuk: yeah, and people tend to complain that the npm docs are so big it's hard to know where to start or where to find stuff [19:06] aurynn: http://privatepaste.com/c50267adbe [19:06] aurynn: Is what I'm seeing [19:06] tjholowaychuk: isaacs: yeah exactly, I think its hard for the author to write the docs since we obviously know the tool [19:06] aurynn: In terms of using createServer to set up middleware [19:07] tjholowaychuk: aurynn: 1.0 or 2.0-pre? [19:07] tjholowaychuk: I can backport the patch [19:07] aurynn: 1.0 [19:07] isaacs: tjholowaychuk: totally. i try to focus on making sure that everything is accurately documented, but then it becomes kind of intimidating [19:07] masahiroh has joined the channel [19:07] aurynn: when's 2.0 going to drop [19:07] aurynn: ? [19:07] aurynn: I could just update to that [19:07] tjholowaychuk: isaacs: my source is well documented as well, for anyone who actually dives in there [19:07] tjholowaychuk: doesnt seem to happen much haha [19:07] isaacs: and people are like, "how does this work?" and i think, "it's right there! in the several thousand pages of documentation! didn't you read it!!?" [19:08] tjholowaychuk: aurynn: long time haha, I will backport it [19:08] tjholowaychuk: isaacs: haha ya tons of people dont even read the guide on expressjs.com at all [19:08] isaacs: i think that's where guessable apis come in. that's where express has been pretty impressive. [19:08] sebastiandeutsch has joined the channel [19:08] aurynn: I read the guide :) [19:08] isaacs: i've been like, "hm. well, i'd probably name this thing xyz, so i'll try that..." and it usually works [19:09] tjholowaychuk: isaacs: ya it has some secret sauce that some people never even know about but its pretty straightforward [19:09] pyrotechnick: yeah ive read that, the design is beautiful [19:09] wink_ has joined the channel [19:09] tjholowaychuk: 2.0 will be quite a bit nicer but still a ways to go [19:10] sebastiandeutsch: Hello, I'm trying to optimize my deploy workflow with ndistro, sadly it does not download the node binary - it gives me the github 404 page. Anyone has same experience? [19:10] Twelve-60 has joined the channel [19:13] WarriorSl: anyone can help me? I can't find anywhere how to use sessions with geddy framework [19:13] fumanchu182 has joined the channel [19:13] fumanchu182: Can I as questions in here in regards to https://github.com/felixge/node-mysql, I couldn't find a specific place to chat on freenode about it. [19:14] sebastiandeutsch: It's a clean ndistro install from the line github gave me, and now I replaced the ndistro file with the sample on github. All modules are downloaded correctly, only node does not want to install. [19:14] tjholowaychuk: sebastiandeutsch: I dont have enough binaries in visionmedia/nodes [19:14] tjholowaychuk: hard to keep up with :( [19:15] tjholowaychuk: sebastiandeutsch: jim gave me access to some of the joyent stuff, so if/when I have time I am going to see if I can set up some automated node binaries [19:16] sebastiandeutsch: tjholowaychuk: do you have a binary version that currently works? [19:16] tjholowaychuk: sebastiandeutsch: v [19:16] tjholowaychuk: https://github.com/visionmedia/nodes [19:16] WarriorSl: anyone can help me with geddy framework? [19:19] OhaiBBQ has joined the channel [19:19] evanmeagher has joined the channel [19:19] sebastiandeutsch: tjholowaychuk: thx, or "latest" did the trick aswell [19:19] tjholowaychuk: sebastiandeutsch: ah :) [19:21] tjholowaychuk: aurynn: will release 1.0.1 right away [19:26] dguttman has joined the channel [19:26] paradoxx has joined the channel [19:27] admc has joined the channel [19:29] mikew3c_ has joined the channel [19:29] sebastiandeutsch: how do I tweak my node app that it will take the modules from ndistro (./modules) instead of regular search path? [19:30] ryah: sebastiandeutsch: several ways: you can do require.paths.unshift(dir) [19:31] ryah: setenv NODE_PATH= dir [19:31] ryah: require.paths.unshift(__dirname) [19:31] ryah: probably works [19:31] ryah: require.paths.unshift(__dirname + '/modules') [19:31] tjholowaychuk: sebastiandeutsch: ndistro has ./lib/node so if you execute ./bin/node it will have your mods [19:31] tjholowaychuk: ready for you [19:31] wycats: someone pinged me? [19:32] tjholowaychuk: sebastiandeutsch: you should .gitignore ./{modules,lib/node,bin/node} [19:32] tjholowaychuk: but you shouldnt need any require.path stuff, unless you want to splice it and ONLY have ./lib/node which is what I prefer to do [19:33] sebastiandeutsch: tjholowaychuk: I just gone the system node path because binaries want to have libssl.so.1.0.0 - which is on my system [19:33] sebastiandeutsch: tjholowaychuk: but somehow in a different location [19:33] rburhum has joined the channel [19:33] tjholowaychuk: ah i see [19:33] Huvet has left the channel [19:33] tjholowaychuk: well then yeah just unshift to require.paths [19:38] vborja has joined the channel [19:38] ryah: who wrote the bots for chat.nodejs.org ? [19:38] sh1m has joined the channel [19:38] Huvet has joined the channel [19:39] aurynn: tjholowaychuk, awesome, thanks a lot :) [19:39] Huvet: what's the best way to upgrade node to 0.3.2 from 0.2.5? Just download the tar and conf and make? will my npm packages work? [19:39] tjholowaychuk: aurynn: np, 1.0.1 is out [19:40] matjas has joined the channel [19:40] mraleph: ryah: ping? [19:40] ryah: mraleph: pong [19:40] mraleph: ryah: have something nice for you [19:41] mraleph: ryah: http://groups.google.com/group/v8-dev/msg/643d2325ee68a1de [19:41] ryah: omg [19:42] mraleph: It is just a start. I will continue to improve it when I'll have time. [19:43] aurynn: And updated :) [19:43] JimBastard has joined the channel [19:43] ryah: mraleph: i will try it [19:44] c4milo: mraleph: wow, cool [19:44] AAA_awright_ has joined the channel [19:45] JimBastard: what did i miss [19:45] 13WAAXZ3D has joined the channel [19:45] 45PABMK8Q has joined the channel [19:45] superjudge has joined the channel [19:46] aurynn: Lunch. [19:46] mraleph: ryah: it is ia32 only. but trying it on node will be fun --- kinda crashtest. [19:46] bingomanatee_: and a bunch of unfortunate v8 activity. [19:46] bingomanatee_: You could have had a v8! [19:48] aurynn: tjholowaychuk, Woo! It works :) [19:48] mraleph: ryah: and it is complitely disabled by default. have to pass gdbjit=on to scons and --gdbjit to v8 to enable. keep me posted on your tests. I will fix what I can while I still have time [19:49] tjholowaychuk: aurynn: yay :) [19:56] ryah: bbl [19:56] sebastiandeutsch: when I install Joose with npm everthing works, but with ndistro it cant find joose. any ideas? [19:57] prettyrobots has joined the channel [19:57] tjholowaychuk: sebastiandeutsch: depends how the package is set up [19:57] pquerna: mraleph++ [19:57] v8bot: pquerna has given a beer to mraleph. mraleph now has 1 beers. [19:58] tjholowaychuk: sebastiandeutsch: require('Joose') [19:58] tjholowaychuk: should work [19:58] tjholowaychuk: its capitalized [19:58] c4milo: mraleph++ [19:58] v8bot: mraleph is getting too many beers. Don't let mraleph get drunk! [19:58] mraleph: actually I prefer cider :-) [19:59] mraleph: I don't like beer :-) [19:59] tjholowaychuk: mraleph: me either :) you're not alone! [19:59] pquerna: beer has a 1:1 exchange rate with cider [19:59] pquerna: i also like cider, its just not available in most parts of the US easily. [20:00] davidc_ has joined the channel [20:00] davidc_ has joined the channel [20:02] femtooo has joined the channel [20:03] ianward has joined the channel [20:04] jdonley83 has joined the channel [20:08] stepheneb has joined the channel [20:08] olauzon has joined the channel [20:08] AAA_awright_ has joined the channel [20:08] vineyard has joined the channel [20:08] AAA_awright_ has joined the channel [20:09] emilepetrone_ has joined the channel [20:10] AAA_awright has joined the channel [20:13] JimBastard: pquerna: Dicken's Hard Cider? [20:14] xSmurf: Aria: just saw your message, so I'm not alone?? [20:14] xSmurf: are you using node-ldap or node-ldapauth?? [20:14] peritus_ has joined the channel [20:14] xSmurf: if my c++ was better I'd rewrite the thing [20:14] Aria: Just ldap in general. openldap had segfaults in several apps that linked it via nss for me. [20:14] Aria: It was a disaster. [20:14] xSmurf: already had to modify it so that it supports ldaps [20:14] mraleph: http://dibase.ru/article/27092010_drozdovau [20:14] mraleph: ouch [20:15] mraleph: sorry. [20:15] xSmurf: Aria I haven't had so many issues [20:15] xSmurf: only with node-ldap [20:15] Aria: Yeah, it's better now. Still a terrifyingly complicated library. [20:15] xSmurf: indeed [20:16] xSmurf: I do two queries in my app [20:16] xSmurf: first one works fine [20:16] xSmurf: second one segfaults half the time, times out another quarter of the time and works the last part [20:17] robotarmy has joined the channel [20:17] xSmurf: oh and if you think ldap is hell, you haven't tried getting Asterisk to work with it ;P [20:17] sebastiandeutsch: can anyone post me an example of an real world .ndistro file? I just want to see what modules people are using. [20:17] isaacs: JimBastard: !! [20:17] isaacs: hey [20:17] JimBastard: hey isaacs [20:17] JimBastard: whaddup [20:17] isaacs: you're using the "config" hash in a package.json, right? [20:17] sudoer has joined the channel [20:18] c4milo: hey who is using osx here ? [20:18] JimBastard: isaacs: i havent implemented that yet, but i will yeah [20:18] isaacs: JimBastard: so, i got a kewl idea. [20:18] JimBastard: isaacs: sup? [20:18] isaacs: JimBastard: i think i kinda mentioned it [20:18] isaacs: but: npm config set packagename:foo bar [20:18] JimBastard: yeah, we started to discuss this [20:18] isaacs: then, in the package.json, you've got { config : { foo : "baz" }} [20:18] JimBastard: the problem is they get out of sync [20:18] JimBastard: so you have to update the package.json, which could get tricky no? [20:19] isaacs: BUT! when you run your scripts, it'll pick up the config you set and put THAT in npm_package_config_foo [20:19] isaacs: all i have to do is set the env [20:19] isaacs: the package.json doesn't actually have to change. [20:19] sebastiandeutsch: or other way around, is there something that remotes npm to install deps? ndistro is not working for me in details (since it behaves slightly different to npm) [20:19] JimBastard: so where is the config data stored? [20:19] isaacs: JimBastard: in the npm config file [20:19] isaacs: .npmrc [20:19] xSmurf: I'm at a lost here, I *need* ldap to work :( [20:20] xSmurf: I think I might run ldapsearch as a child process [20:20] isaacs: xSmurf: that is an option. [20:20] AAA_awright_ has joined the channel [20:20] JimBastard: isaacs: the thing that confuses me though, is that wont the actual config data and whats in package.json get out of sync? [20:20] xSmurf: isaacs: a really sucky one though ;/ [20:20] JimBastard: sebastiandeutsch: yeah you can do that, npm download i think? npm bundle? [20:20] wink_: ACTION shudders at ldap [20:20] isaacs: JimBastard: yeah. but the idea is that you'd do something like: npm config set my-website:port 80 [20:21] wink_: xSmurf: what are you trying to do, just authenticate? [20:21] JimBastard: xSmurf: unless you really need a lot of performance, that might not be a terrible idea [20:21] xSmurf: once slapd is configured, ldap isn't half bad [20:21] xSmurf: wink_: no, do two queries [20:21] isaacs: JimBastard: then server.listen(process.env["package_config_port"]) [20:21] xSmurf: one that loads a list of users from a group [20:21] AAA_awright has joined the channel [20:21] isaacs: JimBastard: so the default goes in package.json, but can be overridden at the target. [20:21] xSmurf: and another that loads details from the said user [20:21] xSmurf: the end result is authenticating admins on a jabber bot [20:21] technoweenie has joined the channel [20:21] JimBastard: isaacs: and you wanna bind these config variables into the env? [20:22] isaacs: JimBastard: so, i just wrote that [20:22] JimBastard: what about nested config variables? [20:22] JimBastard: got ya [20:22] isaacs: JimBastard: and it's way simpler than i thought. [20:22] isaacs: JimBastard: so, if you have {config:{foo:{bar:1}} right? [20:22] JimBastard: yeah, that seems about right [20:22] sveimac has joined the channel [20:22] isaacs: JimBastard: you'd have to do npm config set packagename:foo_bar 2 [20:22] xSmurf: brb [20:22] wink_: xSmurf: hm, looking a php's ldap interface, it looks like c the libs are probably not too horrible to deal with [20:23] wink_: unless they're hiding lots of horrors [20:23] xSmurf: yeah php's fine [20:23] isaacs: JimBastard: and then read env.package_config_foo_bar [20:23] xSmurf: wink_: no they aren't that bad [20:23] xSmurf: I was able to modify node-ldap for ssl support, but my c++ isn't good enough for me to debug the segfault [20:23] wink_: ah there's already a binding? [20:24] JimBastard: isaacs: i have a feeling that i will find a bunch of holes in the implementation once i start using it [20:24] wink_: does node-ldap work as it sits without ssl? [20:24] JimBastard: i'd say move forward with what you think is best and then i'll just break it as hard as i can [20:25] JimBastard: im talking to indexzero about it too, he has another npm suggestion unrelated to this. he's creating an issue now [20:25] isaacs: JimBastard: that's kinda been the pattern so far that's worked :) [20:25] JimBastard: :-D [20:28] xSmurf: back [20:28] xSmurf: wink_: afaict no it doesn't really work [20:28] xSmurf: considering it segfaults half the time, doesn't return another quarter and works a quarter of the time [20:29] isaacs: JimBastard: the only thing is that this won't work if there's a ":" in the name or version, but so far, i dont' think anyone has done that, and i'll add a guard against it. [20:29] xSmurf: well, it seems pretty reliable if you do a signel query [20:29] SubStack: configs eh? [20:29] xSmurf: but it looks like something is not freeing up properly [20:29] noahcampbell has joined the channel [20:29] wink_: ah yeah, its not using eio's threadpool and instead is using libev...that makes things waaay more complex [20:29] _mql has joined the channel [20:29] wink_: especially for something that is just trying to trampoline into a library [20:30] xSmurf: I really wished my C++ was better :/ [20:30] xSmurf: but if I were to write something from scratch it would probably only panic more ;P [20:30] cronopio has joined the channel [20:30] wink_: well, fwiw, you wouldnt need to start from scratch [20:31] wink_: you'd just need to get rid of the ev watcher stuff and use eio's threadpool [20:32] xSmurf: hmmm [20:32] wink_: JimBastard: you node ninja guys need to write some binding tutorials <3 [20:32] wink_: cloudkick has a decent one [20:32] wink_: but their example is too primitive [20:32] bingomanateeIpho has joined the channel [20:32] wink_: https://www.cloudkick.com/blog/2010/aug/23/writing-nodejs-native-extensions/ [20:32] xSmurf: in the source "TODO: See if re-adding the fd on each search has any ill effects." [20:32] wink_: xSmurf: check that out [20:33] JimBastard: wink_: we actually havent done any custom c bindings yet [20:33] JimBastard: havent had the need, unless node-ganglia does that [20:33] JimBastard: let me check [20:33] bingomanateeIpho: I am working on a txt based MUD at nylinkedface.com [20:33] bingomanateeIpho: Anyone want 2 help? [20:35] wink_: xSmurf: how good (or bad) is your c++, can you read it but not write it? [20:35] xSmurf: wink_: this is talking about ev_io also [20:35] xSmurf: (just skimming over) [20:35] xSmurf: pretty much [20:35] xSmurf: I have quite a bit of AVR C/half C++ under my belt but I haven't touched it in a couple years [20:35] wink_: xSmurf: the part of that you want to pay attention to is the hello world with async io [20:36] xSmurf: yeah I figured [20:36] xSmurf: although really I wouldn't even mind if the lib was synchronous [20:36] xSmurf: it's not like one query takes very long [20:36] wink_: basically for every openldap function you want to bind up, you need 3 functions in your binding [20:36] wink_: 1) v8 binding [20:37] wink_: 2) one to run in eio's threadpool [20:37] eee_c has joined the channel [20:37] wink_: 3) a callback [20:37] wink_: each step of that process you can just pass a pointer to the next chain to share data [20:38] wink_: xSmurf: https://github.com/w1nk/node-odbc/blob/master/src/Database.cpp [20:38] wink_: thats a pretty simple unix-odbc binding using that technique [20:38] xSmurf: oh cloudkick is rackspace, cook [20:39] wink_: you can just replicate that technique for most of the ldap calls you need to bind up [20:39] wink_: yeah they are as of a few weeks ago [20:39] xSmurf: ah I see [20:41] isaacs: wink_: pkrumins has some good examples in his github acct. [20:41] isaacs: wink_: (re: node addons) [20:41] codykrieger has joined the channel [20:42] wink_: isaacs: ah [20:42] wink_: xSmurf: more reading: https://github.com/pkrumins/node-async/blob/master/async.cpp [20:42] isaacs: wink_: also, https://github.com/isaacs/node-async-simple [20:42] wink_: thats a really simple example of the trampoline into eio's threadpool and back out [20:42] isaacs: wink_: and https://github.com/isaacs/node-glob [20:42] isaacs: node-glob is nice because it's an actual example. [20:42] isaacs: like, it does a real thing with blocking fs io and stuff [20:43] xSmurf: yeah I was looking at his stuff :) [20:43] isaacs: but i wrote node-async-simple first, to figure out how to do it [20:43] isaacs: which is basically pk's but even simpler, because i didn't need to create a class or object for anything. [20:43] zedas has joined the channel [20:43] OhaiBBQ has joined the channel [20:44] wink_: xSmurf: so long story short, if you can even hack at c++, you could probably get ldap bound up, most of the boiler plate is out there [20:44] wink_: if not, i may be able to help sometime next week [20:44] node-faq has joined the channel [20:45] xSmurf: I'll have a crack at it I suppose [20:45] xSmurf: also need to fix some stuff in node-asterisk still [20:45] wink_: if you get stuck, hit me up [20:45] xSmurf: or at least I think [20:45] xSmurf: cause I must have b0rked something lol [20:45] xSmurf: or it's just that asterisk sucks (more likely) [20:46] yozlet has joined the channel [20:46] wink_: aw mark's a good guy [20:47] xSmurf: mscdex? [20:47] wink_: the author of asterisk [20:47] mjr_: someone needs to do something like asterisk in node. [20:47] isaacs: what's asterisk? [20:48] xSmurf: wink_: ah I'm sure he is [20:48] wink_: isaacs: an open source voip pbx [20:48] xSmurf: but it doesn't mean it was implemented properly ;P [20:48] isaacs: nice [20:48] wink_: fair enough, im not that familiar with the guts of it [20:48] xSmurf: try and follow an event stream just to see, it's a mess [20:48] mjr_: isaacs: it converts between nearly all voip and telephony protocols, hence the name "asterisk" [20:49] devinus: i was thinking of experimenting with doing some node freeswitch bindings [20:50] wink_: does freeswitch have support for all of digiums hardware? [20:50] xSmurf: hardware? pffft that's over rated ;P [20:51] wink_: if only that were true in telephony :< [20:51] xSmurf: does freeswitch have decent ldap bindings? [20:51] xSmurf: that don't require 4 extra entries per user and polluted user cn's with an extra 15 entries? [20:51] devinus: wink_: i'm not sure, im not the telephony guy. i was going to do it for my telephony guy, but he says it has everything he needs that we use asterisk for right now and more [20:52] xSmurf: wink_: well it's becoming, I ditched my ATAs now that I have sip client on my smart phone [20:52] devinus: plus i looked at the asterisk's code and it's sh*t [20:52] xSmurf: orly? [20:52] xSmurf: ;p [20:52] wink_: haha [20:52] devinus: freeswitch code is very clean [20:53] xSmurf: the only reason I haven't switched yet is cause I've invested so much time getting everything to work in asterisk [20:53] devinus: resembles postgres or freebsd [20:53] wink_: i've not looked at the asterisk source in....7 years or so [20:53] wink_: im sure its changed a fair bit since [20:53] xSmurf: I have a half dozen agi scripts, ldap migration script, even user management interfaces [20:53] wink_: now i can absolutely join the agi hate fest [20:54] xSmurf: haha [20:54] bingomanateeIpho has joined the channel [20:54] mjr_: asterisk's code has sort of corroded over time, for sure. If freeswitch doesn't yet support the hardware you need, I bet it will soon. [20:54] mjr_: If I were starting something new, I'd certain use freeswitch if I could. [20:54] mjr_: Even though I spent years working on the guts of asterisk. [20:55] xSmurf: how's freeswitch's scripting? [20:55] mjr_: lua, which seems like a win [20:55] langworthy has joined the channel [20:55] wink_: looks like freeswitch supports most of digiums interface hardware [20:55] xSmurf: I guess on the upside you don't learn X program's configs, you learn a language [20:55] wink_: so they're probably good to go [20:56] wink_: lua would absolutely be a win [20:56] mjr_: But seriously, someone needs to write a PBX in node. [20:56] pHcF has joined the channel [20:56] jdonley83 has joined the channel [20:56] xSmurf: you? :p [20:57] wink_: mjr_: the codec integration alone would be...ugh. [20:57] xSmurf: indeed [20:57] markstory has joined the channel [20:57] mjr_: I don't think the codec stuff is that hard. Interoperable SIP implementation is what I'd be worried about. [20:57] mjr_: SIP is nuts. [20:58] wink_: i wasnt even going to mention that horror [20:58] markstory: If I'm just starting with node, and have done testing in the past would it be better to start with nodeunit or vows for writing tests? [20:58] wink_: sip is enough to completely kill my interest in anything voip (that's mean to be interoperable) [20:58] mjr_: Besides, I'm working on my own telephony system in pure node already that happens to be proprietary. Once it's done though, I expect we'll open big chunks of it up. [20:59] wink_: does it include a sip implementation? [20:59] mjr_: ha, no. We are using asterisk for that ATM. [20:59] augustl has joined the channel [21:00] wink_: its a real shame the telephony devs just ate that bag of dicks instead of bowing up and demanding something reasonable [21:01] mjr_: I wrestled with voip protocols for a long time, and eventually gave up. Now I'm doing voice over HTTP, and it's just a joy to use. [21:04] sveimac_ has joined the channel [21:07] jchris1 has joined the channel [21:07] matjas has joined the channel [21:09] fmeyer has joined the channel [21:12] liar has joined the channel [21:12] Ond has joined the channel [21:13] isaacs: oh, man, i <3 this package config feature [21:13] isaacs: even if you remove the package and then re-install it, it'll remember [21:14] sh1m: isaacs: do you have a reset [21:14] isaacs: sh1m: reset? [21:14] isaacs: for what? [21:14] sh1m: because that would suck to track down if someone broke [21:14] sh1m: the config [21:14] isaacs: oh, well, it's just the npm config command [21:14] isaacs: npm config edit, npm config ls, etc. [21:14] sh1mmer: right [21:15] sh1mmer: but if I uninstalled something because it wasn't working [21:15] sh1mmer: and then reinstalled it [21:15] sh1mmer: I would be pretty confused [21:15] isaacs: sure [21:15] isaacs: sh1mmer: it's just like yinst set [21:15] isaacs: npm set package-name:key val [21:16] sh1mmer: right [21:16] sh1mmer: but doesn't yinst save state across installs? [21:16] isaacs: so, sure, i mean, you can get into trouble there [21:16] sh1mmer: I think that is my point [21:16] isaacs: yeah, t does [21:16] sh1mmer: it's probably just a documentation thing [21:16] isaacs: so when you upgrade, you keep running on the same port or whatever. [21:16] isaacs: and you can use it to store the db hostname, and stuff. [21:16] sh1mmer: but that's kind of head scratching problem that be hard to find [21:17] isaacs: yeah [21:17] isaacs: it's explicitly an opt-in kind of thing [21:17] isaacs: up to authors and users to sort of figure out how to use, or ignore [21:17] sh1mmer: well kinda [21:17] sh1mmer: I mean it's opt-in [21:17] sh1mmer: but then if you uninstall and reinstall [21:17] sh1mmer: the reinstall auto-opts you in [21:17] sh1mmer: so if you reinstall a much later version [21:17] sh1mmer: and it saves the config state [21:17] sh1mmer: but you didn't know it would do that [21:18] sechrist has joined the channel [21:21] isaacs: sh1mmer: sure, but the problem is not made any *worse* by putting that level of configuration in one place. [21:21] TheEmpath has joined the channel [21:21] isaacs: the alternative is that every package has its own way of doing it [21:21] sh1mmer: isaacs: I think the assumption that most people have is that uninstall removes all config [21:22] sh1mmer: and that reinstall installs back to default config [21:22] TheEmpath: wait a minute [21:22] isaacs: right, but that's not how it works. [21:22] sh1mmer: saving state is nice, but having it on by default seems like an accident waiting to happen [21:22] isaacs: so they're wrong. [21:22] TheEmpath: how can plurk boost 100k users per server on node.js when there are 65k ports? [21:22] sh1mmer: TheEmpath: multiple IPs? [21:22] c4milo: TheEmpath: multiplexing ? heheh [21:22] c4milo: sounds crazy [21:23] isaacs: TheEmpath: zones/jails/vm's [21:23] isaacs: TheEmpath: there are many many ways [21:23] TheEmpath: isaacs: what are those? [21:23] sh1mmer: if you did one node instance per core on a 4 core box with 4 NICs you could do 260k [21:23] isaacs: TheEmpath: in solaris, you can create a zone, which is like a little vm running on that machine. [21:23] TheEmpath: :O [21:24] sh1mmer: says my napkin math [21:24] isaacs: TheEmpath: or the way that sh1mmer points out [21:24] sh1mmer: although who knows if other stuff would break by then [21:24] isaacs: multiple nics [21:24] isaacs: TheEmpath: if you have 100 zones on the box, then that's 100*65k ports per box [21:24] softdrink: does anyone know of some sort of service i could use to load test my web apps during development and effectively ddos myself? [21:24] TheEmpath: :O :O [21:24] sh1mmer: isaacs: but solaris is fucking crazy [21:24] sh1mmer: which is why we use [21:24] sh1mmer: crazy good [21:24] isaacs: thebigbad: shortage of ports is a solved problem [21:25] xSmurf: softdrink: there's always AB from apache-utils [21:25] isaacs: the much harder problem is shortage of ram/cpu and saturating your network [21:25] softdrink: xSmurf: sorta… i want to be able to request files and/or make rest api calls to my webapp in a distributed way somehow [21:27] markstory: Anyone run into issue with nodeunit and nodejs installed from homebrew? [21:27] aurynn: Anyone written an LDAP server yet? :) [21:27] markstory: I keep getting module not found when trying to require('nodeunit') [21:28] mjr_: markstory: homebrew confuses node and npm, unfortunately. [21:28] markstory: arg [21:28] mjr_: I recommend not using homebrew for node stuff, sadly. [21:28] markstory: and just install from source? [21:28] isaacs: mjr_: we're close to resolution on that, i hope [21:28] mjr_: It's pretty great for a number of things, but yeah, just install from source for now. [21:28] mjr_: isaacs: great! [21:28] isaacs: markstory: currently, if you install node with homebrew, and then install npm from source, it should work. [21:28] xSmurf: aurynn: there's barely a client ;p [21:28] aurynn: hehe [21:28] devdrinker has joined the channel [21:28] markstory: isaacs: nice work on npm btw. Its quite lovely [21:28] xSmurf: ^ +1 [21:28] isaacs: markstory: you do need to add /usr/local/lib/node to your NODE_PATH env manually, though [21:29] isaacs: thanks :) [21:29] markstory: I used the oneline install script to install npm, I'm guessing that is a 'from source' way. [21:30] isaacs: markstory: yeah [21:31] markstory: Its odd though, require.paths has the following on it /usr/local/lib/node/.npm/nodeunit/0.5.0/package/node_modules,/Users/markstory/.node_libraries,/usr/local/Cellar/node/0.2.5/lib/node, [21:32] markstory: its almost like installing nodeunit screwed things up. Because I did have packages installed with npm working before I installed nodeunit [21:33] markstory: oh maybe not. [21:33] c4milo has left the channel [21:34] TheEmpath: anyway to make node run through init.d? [21:34] isaacs: markstory: yeah, you need to add /usr/local/lib/node to your NODE_PATH environment var [21:35] markstory: isaacs: creating a NODE_PATH seems to have worked. [21:35] isaacs: markstory: you may notice that when you install things with npm, it warns about this [21:35] markstory: thanks :) [21:35] isaacs: about installing to something outside the require.paths [21:35] pgte has joined the channel [21:35] markstory: yeah I probably read it and got distracted by pretty text. [21:36] isaacs: hahah [21:36] c4milo has joined the channel [21:38] stride: TheEmpath: put a bash script supporting start / stop / maybe status in there [21:38] tyfighter has joined the channel [21:39] c4milo has left the channel [21:39] c4milo has joined the channel [21:41] softdrink: LAWDY that's pricy http://browsermob.com/website-load-testing-pricing [21:42] SubStack: holy craps [21:42] softdrink: WEEKLY prices [21:42] softdrink: (top row anyway) [21:42] SubStack: ACTION spies an inefficient market [21:43] c4milo has left the channel [21:43] oPless has joined the channel [21:43] softdrink: you know what we need to build now, right? hehe [21:43] jpick has joined the channel [21:43] SubStack: softdrink: well I pretty much have all the infrastructure [21:43] SubStack: just bolt a profiler onto browserling [21:43] softdrink: their stuff drives real browsers with selenium. i could not care less if my tests were using a real browser [21:44] oPless: is unstable the best version to try at the mo? [21:44] TheEmpath: they have server farms with selenium? [21:45] TheEmpath: o_O [21:45] konobi: mikeal: ping [21:45] Lorentz: TheEmpath: Why not [21:45] softdrink: SubStack: adorable site. hehe [21:45] konobi: selenium-grid [21:45] TheEmpath: wgets bad? [21:45] dthompson has joined the channel [21:45] stride: heck, for 499 a week you could get some student workers to manually click from their dorm laptops at the same time [21:46] softdrink: no kidding hehe [21:46] SubStack: softdrink: ^_^ [21:46] softdrink: i'd settle for wget/curl/whatever, i just don't have a lab environment available to pound my server [21:46] softdrink: nor can i afford one lol [21:47] devdrink_ has joined the channel [21:47] sveimac has joined the channel [21:48] softdrink: websocket support would be ideal [21:48] rburhum has joined the channel [21:49] jpick1 has joined the channel [21:49] jpick1 has left the channel [21:49] softdrink: maybe i'll just throw some cat5 between the two macbook pros i have available and have one be the server and the other be the tester [21:49] softdrink: hooray for gigabit [21:50] Lorentz: Sure is nice having a few spare computers lying around for these sorts of things. [21:50] softdrink: i wish i had spares hehe [21:51] softdrink: i have my computer, my wife's computer, and a netbook available.. that's it. [21:52] Lorentz: I have a main laptop, spare laptop, small server, file server, desktop, family computer [21:53] jesusabdullah: I wonder if you could make load testing a business [21:53] jesusabdullah: personalarmy.com [21:53] Lorentz: Just in my house that's on. [21:53] softdrink: loadstorm.com looks interesting [21:54] Aria: .oO(mechanical turk) [21:54] chapel: (o___o) .oO(I like this) [21:55] Aria: .oO("Insert a coin in slot A. Then press the "DDOS" button.) [21:56] softdrink: i'd love a randomizable, scriptable "ddos myself" button. [21:56] isaacs: JimBastard: https://github.com/isaacs/npm/tree/master/test/packages/package-config [21:56] Aria: I'd love bounded resource use guarantees so I can plan scaling. [21:56] strmpnk has joined the channel [21:59] circut has joined the channel [21:59] jpick has left the channel [22:00] jesusabdullah: Mechanical Turk is a good idea [22:00] jesusabdullah: It's as real as it gets [22:00] aurynn: it'd be a better idea with less spam and more quality control [22:00] jesusabdullah: Well yeah, as a service [22:00] jesusabdullah: I looked into it [22:00] jpick has joined the channel [22:00] jesusabdullah: but, I mean, in terms of, "visit this site!" [22:01] softdrink: hrm i wonder if i could use ec2 [22:02] aconbere has joined the channel [22:03] konobi: isaacs: what's the deal with getting non-npm-ized packages up on the npm registry? [22:03] konobi: (in this scenario, it's querystring.node) [22:04] isaacs: konobi: what's "non-npm-ized" mean? [22:04] konobi: no package.json, etc. [22:04] isaacs: i usually fork and send a pull req [22:04] isaacs: but what's the package you want? node already has a querystring module [22:04] konobi: fuck it... enotime [22:04] isaacs: hooray! eno time! [22:05] bingomanatee_: what is eno time? [22:06] bingomanatee_: Is that a Roxy Music reference? [22:07] spetrea_ has joined the channel [22:08] Huvet: I'm trying to compile node 0.3.2 and get this error on cygwin: /cygdrive/c/Emils/Kod/node-v0.3.2/deps/v8/src/platform-cygwin.cc:809: error: class `v8::internal::Sampler' does not have any field named `synchronous_' [22:08] Huvet: what do I do now? [22:08] ossareh has joined the channel [22:08] Huvet: I've done ./configure, this is while doing make [22:09] MikhX has joined the channel [22:09] briznad has joined the channel [22:10] markstory: I'm still having some oddness with nodeunit. http://pastebin.com/x8x9SkGV [22:10] markstory: For some reason I can't load nodeunit in my testcase, but using nodeunit from cli works fine. [22:11] markstory: and the stacktrace even shows entry into nodeunit itself. [22:11] AAA_awright_ has joined the channel [22:12] MikhX has joined the channel [22:13] cgutierrez has joined the channel [22:13] cafesofie has joined the channel [22:13] tpryme has joined the channel [22:16] softdrink: http://dpritchett.posterous.com/get-up-and-running-with-nodejs-on-your-own-am <—looks fun [22:18] Huvet: ok, replacing the platform-cygwin.cc file makes it possible to build 0.3.2 on cygwin [22:18] Huvet: with this file: https://gist.github.com/734048 [22:18] Huvet: foudn through here... http://groups.google.com/group/nodejs-dev/browse_thread/thread/9f9147b80da1f539 [22:18] Huvet: for the next person asking [22:19] skm has joined the channel [22:19] Nohryb has joined the channel [22:20] cronopio: Huvet: great! [22:22] cronopio: MrWarGames: Look awesome!!! [22:25] rpflo has joined the channel [22:25] maushu has joined the channel [22:28] Huvet: well, one minor problem... it doesn't work after all :( [22:29] Huvet: the node command just exists directly when called [22:29] Huvet: I guess I'll just have to use an old version of node for cygwin :( [22:33] markstory: Where do the nodejs internal javascript files end up once you've installed? [22:33] markstory: I think I'll need to go spelunking to figure out why nodeunit can't be found. [22:33] aconbere has joined the channel [22:33] mjr_: markstory: they are part of the node executable. [22:34] markstory: boourns [22:34] mjr_: Kind of clever, but a bit confusing if you go looking for those files. [22:34] markstory: yeah, I was doing find across my whole system for the files in the repo. [22:34] mjr_: The lib directory gets sort of baked in to the final executable. [22:35] mjr_: Anyway, they are in there, I assure you. [22:36] devdrinker has joined the channel [22:38] markstory: mjr_: is it safe to poke around in the node file? [22:38] markstory: I've found what I think I'm interested [22:38] markstory: in [22:38] mjr_: uhh, define "safe"? [22:38] sveimac has joined the channel [22:38] mjr_: If you just want to see the source code for the included modules, download the source, and you'll find them all in the lib directory. [22:38] MaSch: is there a trick how to force a node process to restart ? [22:38] markstory: well I'm trying to find out why I can't require('nodeunit'); [22:39] markstory: I get an error that the module is not found. [22:39] pgte: MaSch: restart when a source file changes? [22:39] mjr_: markstory: did you install it from npm? [22:39] markstory: However, the nodeunit cli tool works just dandy [22:39] markstory: mjr_: I did. [22:39] isaacs: markstory: what's `npm config get root`? [22:39] isaacs: that's where it was installed. [22:39] mjr_: markstory: the typical reason for this is that homebrew installs a version of node where the libs live somewhere that npm can't properly decipher. [22:39] MaSch: pgte: i'd like to call a function that makes that kills the process and creates a new one. [22:39] isaacs: that's what should be in your require.paths. if it isn't, then add it to the NODE_PATH environ/ [22:40] isaacs: ACTION having deja vu [22:40] markstory: I get /usr/local/lib/node [22:40] MaSch: don't know if thats even possible [22:40] isaacs: markstory: ok [22:40] isaacs: markstory: go into the node repl, and type "require.paths" [22:40] markstory: isaacs: Yeah, I was asking about this earlier [22:40] pgte: MaSch: look into spark2 [22:40] isaacs: (without quotes) [22:40] markstory: and I got it running without the require() [22:40] pgte: https://github.com/davglass/spark2 [22:40] MaSch: pgte: thanks [22:40] isaacs: without the require...? [22:40] pgte: or fugue: https://github.com/pgte/fugue [22:41] markstory: If I run the tests with nodeunit testfile.js it works [22:41] akahn has left the channel [22:41] isaacs: markstory: echo 'export NODE_PATH=/usr/local/lib/node' >> ~/.bashrc ; . ~/.bashrc [22:41] markstory: but if I require('nodeunit') so I can use the testCase features I get a module not found error. [22:41] pgte: MaSch: or, if you want it restarted when a source file changes: use nodemon: https://github.com/remy/nodemon [22:41] isaacs: markstory: right, because /usr/local/lib/node is not in your NODE_PATH environ [22:41] isaacs: markstory: and node lives in hte cellar [22:41] isaacs: markstory: so it's not getting it by default like it oughtta [22:42] markstory: if I echo $NODE_PATH I get the correct path. [22:42] MaSch: pgte: no i'd like to control the time of the restart by user input [22:42] isaacs: markstory: what is "require.paths"? [22:42] isaacs: markstory: in node [22:42] markstory: isaacs: http://pastebin.com/3hfkhjDM [22:42] isaacs: oh, well, derp... nodeunit doesn't have a main module. [22:43] pgte: MaSch: if it's foe development mode, spark2 should do it betterf for you [22:43] mikeal: dammit [22:43] isaacs: markstory: require("nodeunit/nodeunit") [22:43] mikeal: where is polotek [22:43] isaacs: markstory: i'm gonna fix that default.. it should detect that. [22:43] markstory: isaacs: sweet, thank you [22:43] markstory: I should have thought of that. [22:44] markstory: I figured it was something with nodeunit, as other packages work just fine [22:44] MaSch: spark2 needs net.server (or http.server). :-/ doesn't fit my need. But i think i got the idea and can implement it. Thanks [22:45] bengl has joined the channel [22:46] markstory: isaacs: by main module do you mean an index.js file? [22:47] JCS0 has joined the channel [22:47] isaacs: markstory: { "main" : "./lib/nodeunit.js" } [22:47] isaacs: markstory: or, yes, an index.js file in the lib [22:47] void_ has joined the channel [22:47] isaacs: would also do it [22:47] eee_c has joined the channel [22:48] markstory: ah ok. I can open on a nodeunit to add that to the package.json [22:48] siong1987_ has joined the channel [22:48] huh has joined the channel [22:48] pgte: MaSch: oops, I assumed you had a server. MaSch: for a simple example of app restart look into nodemon [22:48] MaSch: thanks pgte [22:48] isaacs: markstory: don't sweat it. next npm update will fix it. coming shortly [22:48] MaSch: pgte: it's for a simple irc-bot experiment [22:49] pgte has left the channel [22:49] markstory: isaacs: thanks :) [22:49] isaacs: markstory: fixed on 610442515da47d8fddd4d663df2382ee4dc1eb0f [22:49] isaacs: thanks [22:49] isaacs: twas a regression from when i moved to putting the ".js" extension on the module names. [22:49] zhesto has joined the channel [22:49] isaacs: i was sniffing for pkg.name, not pkg.name+".js" [22:49] isaacs: as a default main [22:50] isaacs: > require("nodeunit") === require("nodeunit/nodeunit") [22:50] isaacs: true [22:50] isaacs: great [22:50] sh1mmer has joined the channel [22:51] mgc has joined the channel [22:51] Kai` has joined the channel [22:52] devdrink_ has joined the channel [22:53] joeshaw___ has joined the channel [22:54] cronopio has joined the channel [22:54] RevoOf has joined the channel [22:55] rauchg_: isaacs: [22:55] rauchg_: is the npm server particuarly slow [22:55] rauchg_: i notice publishing takes unreasonable amounts of time [22:56] johnnywengluu has joined the channel [22:56] isaacs: rauchg_: could be. it's couchone's. [22:56] isaacs: seems pretty snappy at the moment, thouigh [22:56] rauchg_: everything but publishing seems fast to me [22:56] rauchg_: weird [22:57] tanepiper has joined the channel [22:57] devdrinker has joined the channel [22:57] Kai` has joined the channel [22:57] xSmurf: nice, I cloned a fresh copy of node-ldapauth and it segfaults [22:57] isaacs: i *just* published and it seemed fine [22:57] isaacs: also... [22:58] isaacs: Good news everyone!! A new version of npm just landed! (markstory, this fixes that thing you were bugging with) [22:58] markstory: sweet [22:58] xSmurf: isaacs: \o/ [22:58] markstory: glad I could help by being annoying [22:58] isaacs: `npm install npm` to get it [22:58] isaacs: or npm i npm [22:59] isaacs: it's almost a palindrome [22:59] rauchg_: hahahaha [22:59] xSmurf: make a mpn package similar to sl? ;) [22:59] isaacs: i was just thinking that... [22:59] xSmurf: choooo chooooo [23:00] [[zz]] has joined the channel [23:00] isaacs: {"name":"mpn","version":"1.0.0","scripts":{"install":"npm install npm" }} [23:00] xSmurf: haha [23:00] devdrink_ has joined the channel [23:01] gf3 has joined the channel [23:02] devdrin__ has joined the channel [23:04] devdrinker has joined the channel [23:04] mgc has joined the channel [23:05] devdri___ has joined the channel [23:05] kodisha has joined the channel [23:07] tg has joined the channel [23:08] paulrobinson has joined the channel [23:08] mfernest has joined the channel [23:09] sveimac has joined the channel [23:09] wycats has joined the channel [23:10] HAITI has joined the channel [23:11] zorzar_ has joined the channel [23:12] benburkert has joined the channel [23:12] aconbere has joined the channel [23:15] [[zz]] has joined the channel [23:17] mfernest has joined the channel [23:19] bingomanatee_: Can you send a message to a unix socket with a bash command or do you need to use a node script for that? [23:20] sveimac has joined the channel [23:21] xSmurf: wink_: still around? [23:29] MikeW has joined the channel [23:29] sugyan has joined the channel [23:30] Kami_: bingomanatee_: socat [23:30] AAA_awright_ has joined the channel [23:30] lstoll has joined the channel [23:30] chapel has joined the channel [23:30] bingomanatee_: socat == node library? [23:31] Kami_: bingomanatee_: oh you mean it with node. I've thought you mean how you do that using unix tool [23:31] bingomanatee_: no I would prefer to do it with bash. [23:31] davidc_: tswicegood|afk: ping [23:31] bingomanatee_: so socat is a linux installable - just got it. [23:32] aconran has joined the channel [23:34] aconran_ has joined the channel [23:42] mfernest: can't you treat a socket as a file descriptor on Linux? [23:45] Wizek has joined the channel [23:48] softdrink: ok i'm going to have to spend some serious quality time with ec2 [23:51] aconran__ has joined the channel [23:54] arpegius has joined the channel [23:56] jpld has joined the channel