00:00:01  * ircretaryquit (Remote host closed the connection)
00:00:09  * ircretaryjoined
00:00:19  <jjjjohnn1y>dominictarr: its cuz the browser is not a js environment, its an html one
00:00:19  <jez0990_>open and lively ecosystems will always produce the most robust emergent entities
00:00:47  <jjjjohnn1y>thats why there was no module system
00:01:23  * thl0joined
00:02:13  <mikolalysenko>I think pretty soon we are going to start seeing a lot more manufacturing on demand start ups, especially as the costs start to come down
00:02:57  <mikolalysenko>or at least that is what I am hoping, since I am sort of working on this stuff for my phd thesis too...
00:03:31  <dominictarr>mikolalysenko: yes, I hope so
00:03:33  * CryptoQuickquit (Quit: CryptoQuick)
00:03:59  <dominictarr>I think we can build much better stuff that way, and also, create it within a much better incentive structure, where things are built to last.
00:04:09  <dominictarr>and focused on quality
00:04:19  <mikolalysenko>yeah
00:04:25  <defunctzombie>"Unfortunately one of these security patches included a change that caused certain SQL queries to behave unexpectedly."
00:04:26  <defunctzombie>OUCH!
00:04:52  <mikolalysenko>also, I think it will ultimately be more than just 3d printing
00:05:13  <mikolalysenko>consider this: you can create anything at ikea with a laser cutter and 3d printer + raw materials
00:05:36  <dominictarr>absolutely
00:05:40  <jez0990_>that will certainly redefine the art of guided selling
00:05:47  <mikolalysenko>yeah
00:05:51  * thl0quit (Ping timeout: 258 seconds)
00:06:09  <mikolalysenko>you could just punch in a design for some furniture online, have it manufactured at a nearby location, and then get it the next day
00:06:09  <dominictarr>you just need multiple construction techniques to be exposed with APIs
00:06:23  <mikolalysenko>or just have services that can process all of that stuff for you
00:06:27  <mikolalysenko>like this company: http://www.protolabs.com/?awk=true
00:06:48  <mikolalysenko>they can make and execute a custom injection mold in under a week
00:07:09  <mikolalysenko>and they give you costing/quotes up front too
00:07:21  <mikolalysenko>all you do is upload a design, click a button then bam! stuff.
00:07:46  * nk109joined
00:08:36  <dominictarr>relocating .. brb
00:08:53  * dominictarrquit (Quit: dominictarr)
00:22:24  * Domenic__joined
00:27:15  * Domenic__quit (Ping timeout: 260 seconds)
00:27:49  * dominictarrjoined
00:36:08  * thl0joined
00:38:11  * stlsaintjoined
00:38:49  * niftylettucequit (Read error: Operation timed out)
00:43:20  * niftylettucejoined
00:44:31  <dominictarr>substack: your blog post could just as easily be about life it self
00:45:17  <dominictarr>with the distinction between module vs framework being instead about thinking for your self, vs. buying into a meta-narrative
00:45:24  <dominictarr>such as religion, etc
00:46:29  <thl0>so the coffee-script 'patch' changed sourcemap api and broke coffeify :(
00:47:02  <thl0>what about semver coffee dudes?
00:49:50  <Raynos>The day substack starts writing streams2, that day you will know that they are good.
00:54:48  * dominictarrquit (Ping timeout: 264 seconds)
00:55:48  <defunctzombie>thl0: I think you need to come to terms with the fact that coffeescript sucks :)
00:57:06  <thl0>defunctzombie: I know, however I'm not giving up on these people yet - at least make 'em use a good package manager and bundler
00:57:15  <defunctzombie>haha
00:57:24  <defunctzombie>thl0: I say fuck it.. if they want to suffer, let em haha
00:58:25  <thl0>defunctzombie: next time this happens I just lock the coffee-script version and they can PR themselves if they want coffeeify to use the new one
01:00:13  <thl0>defunctzombie: and here I go again :P https://github.com/thlorenz/caching-coffeeify
01:00:28  <defunctzombie>haha
01:01:19  <Raynos>thl0, defunctzombie: we can't give up on coffeescript like we can't give up on components ;_;
01:01:30  <Raynos>alternatively we can just fuck their walled gardens
01:01:34  <Raynos>and rewrite everything they create
01:02:27  * dominictarrjoined
01:02:48  <mikolalysenko>what are some good projects written in coffeescript?
01:03:05  <thl0>mikolalysenko: the coffee-script compiler and ....
01:03:16  <thl0>mikolalysenko: oh wait - that's it
01:03:24  <mikolalysenko>is it useful for anything other than coffeescript?
01:03:55  <mikolalysenko>I guess it is easy to pick on them, but it just seems to me like coffeescript is a non-solution to a non-problem
01:04:02  <thl0>mikolalysenko: it is also useful if you want to stop getting pull requests
01:04:54  <thl0>mikolalysenko: I was actually thinking of running all my projects thru jstocoffee to prevent people from contributing to my projects
01:05:23  <mikolalysenko>you could make a compiler called "cojs to ffeee"
01:05:37  <mikolalysenko>in the categorical tradition, or maybe we moved on past that conversation
01:06:47  <defunctzombie>Raynos: I vote for re-write haha
01:07:03  <Raynos>defunctzombie: https://github.com/Raynos/calendar start there :D
01:07:19  <Raynos>miko: sockJS
01:07:31  <defunctzombie>Raynos: but you already did that?
01:07:45  <Raynos>defunctzombie: no, I made it barely worked
01:07:55  <defunctzombie>Raynos: what is wrong with it?
01:07:55  <Raynos>changed to https://github.com/Raynos/date-picker because calendar suck
01:08:03  <Raynos>I mean re-write calendar from scratch to not be a joke
01:08:21  <Raynos>I need the ability to disabled a calendar ( https://github.com/Raynos/date-picker/commit/97ba4be094226c9d79408a9aaf536adee29b7f94 )
01:09:57  <mikolalysenko>will websockets ever land in the core of node.js?
01:10:04  <defunctzombie>mikolalysenko: ?
01:10:14  <defunctzombie>mikolalysenko: I don't know what that means.. but not it won't
01:10:21  <mikolalysenko>like put them into http directly or something
01:10:41  <mikolalysenko>I mean they are part of http technically
01:12:14  <mikolalysenko>though maybe leaving them separate makes more sense
01:12:30  <thl0>yeah and can node run in the browser by the time it reaches version .12 ? ;)
01:12:55  <mikolalysenko>well, on the browser you can just use native websockets
01:13:04  <mikolalysenko>via the dom or maybe some thin wrapper
01:13:13  <defunctzombie>mikolalysenko: there is a websocket module
01:13:18  <defunctzombie>mikolalysenko: what else do you need?
01:13:23  <mikolalysenko>in node.js?
01:13:27  <defunctzombie>mikolalysenko: yea
01:13:32  <mikolalysenko>I must've missed it, where?
01:13:42  <defunctzombie>https://npmjs.org/package/ws
01:13:50  <defunctzombie>the one everyone uses basically
01:13:57  <defunctzombie>engine.io uses this
01:14:00  <defunctzombie>socket.io as well iirc
01:14:04  <mikolalysenko>oh. I was thinking of something built in to node
01:14:48  <mikolalysenko>but I've seen this module before and used it. I think it is good.
01:17:32  <defunctzombie>it is good
01:17:38  <defunctzombie>you don't need something "builtin" :)
01:17:45  <defunctzombie>builtin doesn't mean anything actually
01:17:59  <defunctzombie>everything is on top of libuv now iirc
01:18:06  <substack>dominictarr: it just so happens I started writing that article after I read something on facebook about religion and skepticism
01:18:30  <dominictarr>interesting
01:18:51  <substack>and I made a somewhat pithy comment about how I was a true believer in unix that turned into the first few paragraphs
01:19:09  <dominictarr>one thing i really like about programming is how much practical experience it gives you in thinking
01:19:40  <dominictarr>in a way that is relatively easily quantified, because your programs work well or they don't.
01:19:49  <substack>I'm not sure that it intrinsically gives you experience
01:20:05  <substack>but if you train yourself in metacognitive patterns it will be VERY useful when programming
01:20:21  <dominictarr>yes, you have to watch your self programming
01:20:28  <dominictarr>but it gives you the opportunity
01:20:57  <dominictarr>building (say) a boat does too
01:21:16  <dominictarr>but programming has a lot less physical labour and material costs
01:22:51  <Raynos>I think I need to create a FakeRaynos
01:22:55  <Raynos>that spouts opinionated bullshit
01:22:57  <Raynos>on twitter.
01:22:59  <Raynos>For lulz.
01:23:28  <substack>create a RealRaynos instead
01:23:35  <substack>that says what you REALLY think
01:23:43  <Raynos>but then it wouldnt be funny
01:23:44  <dominictarr>HAHAHA
01:24:14  <dominictarr>make FakeRaynos was what you really thing
01:24:16  <dominictarr>j
01:24:19  <dominictarr>ANUHNAHUO
01:24:22  <dominictarr>think!
01:24:33  <dominictarr>can't type today
01:24:42  * ins0mniaquit (Ping timeout: 264 seconds)
01:24:46  * substack<-- crazy sleepy today
01:24:56  <substack>brings on a naturally contemplative mood
01:25:12  * marcello3dquit (Remote host closed the connection)
01:25:21  <substack>I should give a tech talk as a unix preacher
01:25:25  <dominictarr>Anyway, Raynos, not sure how that will differ from your regular twitter
01:25:32  <dominictarr>substack: wear a robe
01:25:45  <Raynos>> NEVER RE ASSIGN TO LOCAL VARAIBLES OR CLOSURE BOUND VARIABLES
01:25:46  <LOUDBOT>HEISENBERG WOULD AGREE
01:25:56  <substack>and wave around a copy of Art of Unix Programming
01:25:59  <Raynos>> FUCK RE ASSIGMENT. WRITE IMMUTABLE PROGRAMS
01:25:59  <LOUDBOT>THREE WOLF MOON IS A FRACTAL REPRESENTATION OF THE EMOTION OF SAVORY
01:26:06  <substack>even though I've only read that 1 chapter
01:26:17  <Raynos>things like that
01:26:19  <substack>so it's pretty much exactly like the bible
01:26:23  <Raynos>> SINGLE LINE MODULES ARE THE BEST
01:26:23  <LOUDBOT>ALL HELL OUR NEW OFFICERS
01:26:29  <dominictarr>substack: it gets a bit weak towards the end
01:26:35  * tilgovijoined
01:27:07  <dominictarr>the cathedral and the bazaar is also too long
01:27:56  <mikolalysenko>interesting, would you say that it was particularly helpful to read it?
01:28:30  <mikolalysenko>I try to focus on reading stuff that has concrete algorithms or techniques in it, especially stuff I've never seen before
01:28:51  <mikolalysenko>but I must confess that I don't really "get" a lot of software design/architecture stuff
01:28:53  <mbalho>this dood seems rad http://www.gradman.com/
01:29:02  <substack>mikolalysenko: I reference this section all the time http://www.faqs.org/docs/artu/ch01s06.html
01:30:21  <mikolalysenko>I disagree with Rule 3
01:30:32  <mikolalysenko>as a survivor of many programming competitions, it is definitely not true
01:30:41  <mikolalysenko>but 4 is correct
01:30:43  <defunctzombie>dominictarr: way too long
01:30:55  <defunctzombie>dominictarr: I started reading it a long time ago.. and then it got redundant
01:30:57  <dominictarr>mikolalysenko: agree, weeks is too long
01:31:14  <mikolalysenko>no, the second rule 3
01:31:22  <dominictarr>oh, right
01:31:31  <mikolalysenko>although you are right on that point too
01:31:39  <mikolalysenko>definitely shows its age
01:32:02  <mikolalysenko>in fact that whole section by pike is a bit sketchy
01:32:19  <mikolalysenko>for example, you can often figure out a bottleneck before running an algorithm
01:32:37  <dominictarr>mikolalysenko: that section is really just about discouraging you from being "too clever"
01:32:56  <mikolalysenko>yeah, I understand the sentiment, and to a limited extend I agree
01:33:07  <mikolalysenko>but the opposite extreme is being "too stupid" and that doesn't always work
01:33:15  <dominictarr>that is worse
01:33:30  <dominictarr>but people who make that mistake will never even read that page
01:33:41  <mikolalysenko>yeah
01:34:15  <dominictarr>"mythical man month" is good
01:35:17  <mikolalysenko>also for javascript, replace text stream with "JSON"
01:35:31  <mikolalysenko>or for bigger tasks "streams"
01:35:51  * fentquit (Quit: leaving)
01:36:19  <dominictarr>yeah, not having standard text protocols is to the detriment of a lot of unix tools
01:36:22  <defunctzombie>wtf
01:36:22  <defunctzombie>https://npmjs.org/package/ifyouwanttogetthesumoftwonumberswherethosetwonumbersarechosenbyfindingthelargestoftwooutofthreenumbersandsquaringthemwhichismultiplyingthembyitselfthenyoushouldinputthreenumbersintothisfunctionanditwilldothatforyou
01:36:40  <mikolalysenko>I wonder if streams violate the principal of minimal optimization, since you can always queue up a big buffer as a json object and push that
01:36:46  <mikolalysenko>though it will obviously be less efficient
01:39:49  <mbalho>jlord: http://upload.wikimedia.org/wikipedia/commons/c/c1/Australia_1942.jpg
01:41:51  <mikolalysenko>regarding optmization, one thing that a system like npm gets you is that you can reuse test cases across different algorithms
01:42:25  <mikolalysenko>so if you have say two different techniques, you can give them each their own node module and just test them as a black box
01:42:36  <mikolalysenko>and anyone can easily add their own implementation if they like
01:43:49  <mikolalysenko>also, for the principal of extensibility, maybe a better principle is replaceability
01:50:47  * stlsaintquit (Quit: Lost terminal)
01:52:17  <mikolalysenko>ok, I think I need some more time to digest this
01:52:29  <mikolalysenko>and I also need to eat dinner
01:57:06  * mikolalysenkoquit (Ping timeout: 264 seconds)
02:03:33  * tilgoviquit (Remote host closed the connection)
02:04:14  * dominictarrquit (Quit: dominictarr)
02:04:59  <pkrumins>testling will be unavailable for about 30 minutes, i'm moving it to a better instance with a larger disk
02:21:59  * dominictarrjoined
02:22:04  <rvagg>pkrumins: new instance types just announced btw http://aws.typepad.com/aws/2013/03/additional-ebs-optimized-instance-types-for-amazon-ec2.html
02:22:42  <rvagg>(assuming you're on aws)
02:23:17  <pkrumins>rvagg: not on aws, on rackspace cloud
02:23:31  <rvagg>aye, you can ignore than then!
02:23:34  <pkrumins>we've some systems on aws but not this one.
02:23:47  <pkrumins>thanks for the link though
02:27:48  * thl0quit (Remote host closed the connection)
02:31:01  * shamaquit (Remote host closed the connection)
02:34:50  * dominictarrquit (Quit: dominictarr)
02:42:26  <kenperkins>pkrumins: do you create instances on the fly with Rackspace?
02:45:12  <Raynos>isaacs: idea! Get rid of a post/pre/install scripts. all of them
02:59:28  <pkrumins>kenperkins: no it's too slow process, we just run a bunch of them
03:02:39  <kenperkins>pkrumins: slow VM creation was a pain for me at clipboard as well
03:13:50  * jan____quit (Ping timeout: 240 seconds)
03:27:32  * mikolalysenkojoined
03:36:26  * mikolaly1enkojoined
03:39:13  * mikolalysenkoquit (Read error: Connection reset by peer)
03:52:54  <isaacs>substack: http://sarkology.wordpress.com/2013/03/19/von-neumann-the-instrumentalist/
03:52:57  <isaacs>Raynos: planned, yes.
03:53:33  <isaacs>Raynos: relatively soon, any specific pre/post/install script will raise a warning
03:53:39  <isaacs>Raynos: if you can't do it with node-gyp, you shouldn't do it.
03:53:57  <mbalho>Domenic_: if @beef isnt available i will gladly also accept @tacos
04:08:03  <Raynos>Isaacs; where is the flag to globally disable install scripts?
04:08:15  <isaacs>Raynos: there.... isn't one.
04:08:20  <isaacs>Raynos: but i'll add something like that now.
04:08:55  <isaacs>Raynos: the tricky thing is that npm has been actually setting scripts.install if you have a node-gyp/waf file, for some time now.
04:09:03  * mikolalysenkojoined
04:09:20  <isaacs>Raynos: so it'd have to figure out whether this install script is because you'er using a gypfile, or because you're an asshate
04:12:20  * mikolaly1enkoquit (Ping timeout: 252 seconds)
04:14:39  * mmckeggquit (Quit: mmckegg)
04:23:32  <defunctzombie>isaacs: on the first install of a shorthand github url with a # and tag, npm always seems to fail
04:23:43  <defunctzombie>isaacs: complains about ambiguous commit
04:23:59  <defunctzombie>fatal: ambiguous argument 'v1.0.0-dz3': unknown revision or path not in the working tree.
04:24:11  <defunctzombie>isaacs: however, running npm install again right after works fine
04:24:23  <defunctzombie>isaacs: seems like there may be some race condition and/or cache issue?
04:25:31  <isaacs>defunctzombie: yes, it's been fixed in latest HEAD
04:25:36  <isaacs>defunctzombie: maybe in 1.2.14, but not sur
04:25:51  <defunctzombie>ah ok
04:26:00  <defunctzombie>isaacs: will that make it to a 0.8 release?
04:26:03  <defunctzombie>that would be nice
04:26:10  <defunctzombie>since I am not ready to upgrade to 0.10
04:26:11  <isaacs>defunctzombie: someday maybe
04:26:20  <isaacs>defunctzombie: but you can always do `npm i npm -g`
04:26:41  <defunctzombie>isaacs: yea, certainly, just a little more annoying to deploy
04:34:23  <chrisdickinson>is there a good "tee" stream?
04:38:48  <Raynos>isaacs: what do you mean setting it?
04:39:03  <Raynos>is install scripts valid if it uses node-gyp?
04:39:21  <Raynos>I just saw someone running grunt in an install script and then i rage faced\
04:39:56  <Raynos>chrisdickinson: TEE stream
04:40:31  * dguttmanquit (Quit: dguttman)
04:57:12  * mikolalysenkoquit (Ping timeout: 264 seconds)
05:01:50  <mbalho>what do you guys think of my new community node.js logo http://i.imgur.com/ng2jfIP.png
05:02:08  <mbalho>its a partial visual metaphor
05:02:10  <mbalho>the pizzas are nodes
05:02:20  <jlord>it sucks
05:02:27  <mbalho>DANG IT JLORD
05:02:27  <LOUDBOT>YEAH AND PATRONIZING TOO
05:02:33  <mbalho>LOUDBOT: thanks
05:02:34  <LOUDBOT>mbalho: YOU TAKE IT FROM ME, WE ARE LOSING THE WAR BECAUSE WE CAN SALUTE TOO WELL
05:02:58  <isaacs>mbalho: i think jlord is right
05:03:11  <mbalho>YOU GUYS ARENT SUPPORTIVE
05:03:11  <LOUDBOT>"ENOUGH IS ENOUGH! I HAVE HAD IT WITH THESE MOTHERFUCKING CELL PHONE PROTOCOLS ON THIS MOTHERFUCKING PLANET!"
05:03:15  <isaacs>the [ <js>] logo was the best.
05:03:23  <isaacs>but sadly, the law says we can't have nice things.
05:03:32  <mbalho>isaacs: you should tell those lawyers to ignore this issue
05:03:42  <jlord>use the force
05:03:48  <mbalho>the force of bribery with cupcakes
05:04:09  <jlord>i drew node as a lady flamingo dancer
05:04:37  <isaacs>jlord: i don't think joyent has any kind of trademark on lady flamingos
05:05:59  <jlord>i also drew one that was a winking smiley face of nodes but mbalho hated it
05:06:51  <jlord>jifasnif!
05:07:24  <jlord>http://cl.ly/image/0u1t1v0o121y
05:07:43  <jlord>hahaha i love it. it cracks me up.
05:07:56  <jlord>mbalho doesn't even know what funny is
05:21:55  <isaacs>jlord: it's a lady winking!
05:22:15  <isaacs>jlord: you can tell it's a lady because ladies have eyelashes
05:22:22  <isaacs>jlord: manfolks don't have eyelashes in cartoons
05:25:08  <jlord>haha
05:25:24  <jlord>lady node, the muse of node programmers
05:30:14  <isaacs>jlord: it could also be a person with long hair skydiving, with a wishbone in their right hand
05:31:00  <isaacs>jlord: or a bird flying to the right, squawking, with 3 big tail featers
05:31:08  <isaacs>er, flying to the left.
05:31:28  <jlord>node bird is endangered
05:34:39  <isaacs>jlord: or it could be a guy who just fell on his back, and his feet are up in the air, and there are sticks on his feet
05:39:59  * tilgovijoined
05:42:44  * tilgoviquit (Remote host closed the connection)
05:46:55  * CryptoQuickjoined
06:07:25  * defunctzombiechanged nick to defunctzombie_zz
06:08:15  <jesusabdullah>jlord I have not seen you on irc in ages if ever, good to run into you!
06:08:19  <jesusabdullah><3
06:34:12  * CryptoQuickquit (Quit: CryptoQuick)
06:59:13  * mikealjoined
06:59:13  * mikealquit (Client Quit)
07:15:35  * mmckeggjoined
07:18:47  * mikealjoined
07:18:57  * dominictarrjoined
07:20:04  <mmckegg>dominictarr: missed you tonight haha, although it was pretty old school browser js as usual.
07:21:20  <dominictarr>mmckegg: I was just gonna check if you guys are still down at the pub?
07:21:43  <mmckegg>didn't do the pub tonight, vim wasn't in
07:22:43  <mmckegg>dominictarr: I'm still keen though if you are
07:23:25  <dominictarr>what! to be honest, am pretty exausted right now
07:23:54  <dominictarr>If it's just gonna be us, lets get together and hack in some cafe tomorrow...
07:24:20  <mmckegg>ok, sounds better
07:24:41  <mmckegg>busy after 3 but before then
07:25:09  <dominictarr>yeah, it's gotta be in morning
07:25:29  <mmckegg>really need to get a wellington nodejs meet up together, theres definitely more than a few people who would be keen.
07:25:35  <dominictarr>I'm off visiting an old friend in the afternoon, since am about leave the country
07:25:46  <mmckegg>ah right, where you headed?
07:25:59  <dominictarr>yeah, vim is too busy to organize this stuff
07:26:03  <dominictarr>Ireland
07:26:04  <dominictarr>!
07:26:13  <mmckegg>ah sounds fun
07:26:21  <dominictarr>mmckegg: yes, also you and chilts are doing interesting stuff too!
07:27:16  <mmckegg>I should definitely have a good chat with chilts about getting a meet up together. he was keen, and I talked to a couple of others tonight also.
07:27:23  <dominictarr>jez0990_: http://c2.com/cgi/wiki?ZoomableUserInterface
07:36:25  * dominictarrquit (Quit: dominictarr)
07:36:34  * ralphtheninjajoined
07:57:02  * fotoveritequit (Quit: fotoverite)
07:58:26  * wolfeidaujoined
08:15:15  * st_lukequit (Remote host closed the connection)
09:01:25  * nicholaszquit (Read error: Connection reset by peer)
09:01:55  * nicholaszjoined
09:04:58  <juliangruber>is pipe detection evil?
09:30:28  <ralphtheninja>juliangruber: stream.on('pipe') you mean?
09:31:07  <juliangruber>stream.pipe = function () { oldPipe.apply(stream, arguments); /* logic */ }
09:34:12  <ralphtheninja>shrug, depends on what you want to do and if you are exporting this behavior
09:34:44  <ralphtheninja>it still does what it's supposed to do :)
09:35:38  <ralphtheninja>and some extra logic, but it might not be apparent to a reader of your code
09:36:53  <juliangruber>mhm, I guess you have to also check for .on('data') listeners, not only pipe
09:38:20  * dominictarrjoined
09:38:57  <juliangruber>or only check for .on('data') since stream#pipe causes that too
09:42:23  * mmckeggquit (Quit: mmckegg)
09:55:52  <ralphtheninja>juliangruber: what's the use case?
09:58:20  <juliangruber>ralphtheninja: https://github.com/juliangruber/level-stream
10:03:38  <ralphtheninja>cool
10:07:37  <ralphtheninja>juliangruber: would be nice if you could store the file chunk wise
10:07:48  <juliangruber>ralphtheninja: that happens by default
10:08:12  <ralphtheninja>can you read them back chunk wise too?
10:08:21  <ralphtheninja>say I want chunk number 5
10:08:49  <ralphtheninja>with hash 'abcd1234'
10:12:59  <juliangruber>hm no, that requires a seperate index
10:13:17  <juliangruber>but what I'm working on is "give me all chunks since Date x"
10:13:33  <ralphtheninja>nods
10:14:09  <ralphtheninja>STREAM AND LEVELDB IT ALL!
10:14:09  <LOUDBOT>I DO NOT ACCEPT YOUR PICKLE.
10:15:23  <juliangruber>:D
10:15:44  <ralphtheninja>and stream your leveldb :D
10:16:39  <ralphtheninja>I need to dive deeper into leveldb, would like to understand all parts of it
10:19:22  <juliangruber>like the merge tree and stuff?
10:22:12  <dominictarr>juliangruber: maybe you could pass a function that generates a monotonically increasing key, for that stream
10:22:26  <juliangruber>dominictarr: using monotonic-timestamp already
10:22:28  <ralphtheninja>juliangruber: aye
10:22:33  <dominictarr>so, the chunks could be counted 1, 2, 3, 4… or time stamps
10:22:36  <dominictarr>or dates
10:22:38  <juliangruber>and got it working, except for 1 little race condition
10:23:09  <juliangruber>now I write a stream-debug module, so you do debug(stream, 'Stream') and it tells you everything it does :D
10:23:19  <dominictarr>juliangruber: oh, hmm… does monotonic-timestamp return keys that will sort monotonically as strings?
10:23:22  <juliangruber>because debugging this sucks...
10:23:37  <juliangruber>dominictarr: as long as they're always the same length, I thought so
10:24:01  <juliangruber>but you're right, it needn't be timestamps, just some key that the client remembers
10:25:29  <dominictarr>juliangruber: sometimes monotonic-timestamp adds a decimal bit
10:26:37  <dominictarr>but that should be okay
10:26:41  <juliangruber>dominictarr: that might very well be the cause for those race conditions
10:27:00  <juliangruber>dominictarr: do you recommend a module for the keys?
10:27:06  <dominictarr>oh - what is the race condition?
10:28:17  <juliangruber>sometimes when I resume I don't get data out
10:28:27  <juliangruber>might be that I'm resuming from the wrong timestamp
10:29:20  <juliangruber>or a timestamp that doesn't play well with leveldb's sorting
10:29:48  <dominictarr>easy to check
10:30:43  <dominictarr>on('data', function (data) { max && assert.ok(data.key > max); max = data.key })
10:31:44  <dominictarr>juliangruber: duplex persistence stream is sort of weird - what if you just mimicked the fs api?
10:34:39  <juliangruber>dominictarr: yeah, I'm not really sure about the api
10:35:52  <juliangruber>dominictarr: the reason this race condition can happen is: when I say stream(db, 'file', {since:133962}) it emits data starting at 133962, **omitting** the first entry. Since that is, what you already know
10:36:10  <juliangruber>if the sorting is wrong it won't emit anything
10:37:08  <dominictarr>where are you getting the sort key from?
10:37:35  <dominictarr>I mean the {since: ts}
10:37:45  <juliangruber>say you're reading from it, you will get [{ts:133962,data:'chunk'}] then the connection breaks.
10:37:53  <juliangruber>so you use 133962 as {since:133962}
10:38:03  <juliangruber>because 133962 is the last thing you know
10:38:06  <dominictarr>right, from the last key you read
10:38:54  <dominictarr>so, you have to ensure that the keys are always monotonically & lexiographically increasing
10:39:29  <juliangruber>exactly
10:39:46  <juliangruber>there's no module for that already?
10:43:35  <juliangruber>dominictarr: but they still need this Date.now() characteristic so that when the process crashes the new keys still are bigger than the old ones
10:44:35  <dominictarr>on('data', function (data) { max && assert.ok(data.key > max); max = data.key })
10:45:41  <dominictarr>juliangruber: correct. you could also store that metadata in a header, which could have some other uses too
10:46:02  <dominictarr>(and be kinda like fs.stat)
10:46:19  <juliangruber>the sad thing is...with all those console.logs the race condition isn't happening anymore -.-
10:46:23  <juliangruber>mhm
10:47:47  <juliangruber>so I just saw another error that definitely has to do with wrong sorting. Dunno if it fixes the race condition though
10:48:01  <juliangruber>the file came out in wrong order
10:48:12  <juliangruber>s/the file/the chunks/
10:52:09  <juliangruber>dominictarr: if you make monotonic-timestamp output strings and compare those the tests still pass
10:52:17  <juliangruber>is javascript different than C here?
10:54:46  <dominictarr>maybe it turns them back to numbers?
10:54:57  <dominictarr>prefix them with something
10:55:05  <dominictarr>so they arn't valid numbers anymore
10:58:06  <juliangruber>still passes
10:58:07  <juliangruber>meh
11:00:58  <rvagg>leveldown does a toString() on anything that's not a Buffer btw
11:01:31  <rvagg>I guess levelup does too actually, utf8 encoder does a x=String(x) to it
11:02:59  * thl0joined
11:07:37  <rvagg>juliangruber: perhaps you need to do something like `Date.now() + '-' + padded(index)` where `padded` returns a '0'-prefixed version of index, so your keys look like 1363777628309-0001, 1363777628309-0002, 1363777628309-0003, 1363777628311-0001, 1363777628312-0001, 1363777628312-0002
11:08:02  <rvagg>then you just need to `'start'` reading from `String(Date.now())`
11:09:28  <dominictarr>you shouldn't need that for the decimal part
11:09:32  <rvagg>or you could get around the padding by starting your index at 10, 100 or 1000, whatever you think is reasonable, i.e. how many chunks could you push in within a millisecond?
11:10:00  <dominictarr>you need to pad the whole number part though
11:10:14  <dominictarr>but that won't be beaking it here
11:12:50  <dominictarr>juliangruber: can you push the latest code?
11:14:30  <juliangruber>dominictarr: https://github.com/juliangruber/level-stream/tree/resume
11:14:47  <juliangruber>you have to execute the tests a few time for it to hang
11:17:44  * jibayjoined
11:22:43  <juliangruber>maybe my testsuite is wrong? strange things happening...
11:24:51  <dominictarr>okay, so one thing it could be
11:25:05  <dominictarr>is that you are reading the stream on 'end'
11:25:29  <dominictarr>which is actually when the stream _STARTS_ to write
11:26:01  <dominictarr>you want to start reading the file on 'close'
11:26:37  <dominictarr>oh, hang on… reading code…
11:26:51  <dominictarr>no, you propagate close -> end
11:27:54  <dominictarr>juliangruber: I'm not seeing any test failures
11:28:25  <dominictarr>ah here it is
11:46:58  <dominictarr>juliangruber: the resume test isn't finishing properly
11:47:50  <dominictarr>I am not getting any data off the FIRST stream
11:47:59  <dominictarr>the {ts: true} one
11:48:21  * Domenic_quit (Ping timeout: 245 seconds)
11:50:42  * spionjoined
11:51:58  <juliangruber>we can use hij1nx's tools for that
11:52:33  <juliangruber>I'm currently refactoring the api to be createReadStream and createWriteStream
11:52:36  <juliangruber>too much duplex logic magic
11:53:05  * Domenic_joined
12:05:12  * ITproquit (Ping timeout: 276 seconds)
12:05:29  <juliangruber>rvagg: when a levelup writestream emits `close` does that mean it finished writing all data?
12:06:52  <rvagg>juliangruber: possibly not
12:07:04  <rvagg>just looking at the code, it may be possible for a final write to be in transit
12:07:31  <juliangruber>that might be it
12:07:51  <rvagg>if you look in WriteStream.prototype._process
12:08:04  <rvagg>the if (this._buffer.length && this.writable) { } block does the writing
12:08:27  <rvagg>but there's no return from in there, it's allowed to continue through to the next block which emits 'close' if it needs to be closed
12:09:07  <rvagg>might be best to return; from that writing block
12:10:23  <juliangruber>I'll see if that fixes it
12:10:28  <juliangruber>thanks already
12:11:16  <rvagg>doing a return from there doesn't break any tests..
12:11:23  <rvagg>stupid stream state..
12:11:49  <juliangruber>holy moly
12:11:56  <juliangruber>this fixes it! :D
12:12:00  <juliangruber>dominictarr: ^^
12:12:40  <juliangruber>I think we had this issue before, right?
12:12:44  <dominictarr>sweet
12:13:48  <juliangruber>dominictarr: thanks for the help
12:14:06  <jez0990_>dominictarr: a great find - how did you come across it?
12:15:12  <dominictarr>close I was looking up 'in the beginning was the command line for a friend', and stumbled upon this
12:17:26  <rvagg>https://github.com/rvagg/node-levelup/issues/104
12:19:49  * spionquit (Read error: Connection reset by peer)
12:31:01  * ITprojoined
12:32:14  <juliangruber>tough call
12:33:58  * spionjoined
12:37:19  * ins0mniajoined
12:40:26  <rvagg>it could exhibit different behaviour depending on whether destroy() or destroySoon() is called
12:40:34  <rvagg>but again... more horrible stream state to manage
12:40:48  <rvagg>oh, and end()
12:57:06  <dominictarr>hey jez0990_ check this out https://github.com/dominictarr/strm/blob/master/index.js#L129-L199
12:57:12  <dominictarr>streaming traversal functions
12:57:29  <dominictarr>also Raynos check this one out https://github.com/dominictarr/strm/blob/master/index.js#L98-L126
12:57:45  <dominictarr>a stream with a pull stream in the middle
12:59:33  <jez0990_>so a nested stream?
13:00:27  <jez0990_>if so, I think that answers a question I had a couple of months ago
13:01:07  <dominictarr>kinda
13:01:40  <jez0990_>sounds fine for fs but just as a hypothetical - how would that work if a single poset is being served by different nodes across a network?
13:02:16  <jez0990_>I guess you'd need to pull the entire poset locally first
13:02:27  <dominictarr>I don't know, that is so hypothetical
13:02:43  <dominictarr>it's an async traversal
13:02:53  <jez0990_>aha, yes it is
13:03:08  <dominictarr>so, also with a little more work it will be lazy!
13:03:20  <jez0990_>I'm sure Google solved this problem years ago
13:03:32  <dominictarr>so, if you only want the first 10 things, you can stop it
13:03:43  <dominictarr>or it will stop, rather
13:05:55  * spionquit (Read error: Connection reset by peer)
13:06:22  * spionjoined
13:08:09  * thl0quit (Remote host closed the connection)
13:08:32  * ITproquit (Ping timeout: 252 seconds)
13:09:06  <jez0990_>it's really awesome stuff :D
13:10:57  <jez0990_>fwiw I think strm feels like a useful way of implementing FP-like behaviour without introducing confusing and potentially unnecessary concepts
13:17:28  * ITprojoined
13:20:02  * tmcwjoined
13:25:24  * dominictarrquit (Quit: dominictarr)
13:27:04  <niftylettuce>oxley has arrived
13:27:12  <niftylettuce>yay
13:28:15  * mikolalysenkojoined
13:35:56  * spionquit (Read error: Connection reset by peer)
13:38:26  * thl0joined
13:50:19  * spionjoined
13:58:08  * mikolalysenkoquit (Ping timeout: 256 seconds)
14:25:45  * marcello3djoined
14:26:05  * mikolalysenkojoined
14:42:55  * mikealquit (Quit: Leaving.)
14:47:31  * defunctzombie_zzchanged nick to defunctzombie
14:51:08  * marcello3dquit (Remote host closed the connection)
14:56:42  * Domenic__joined
14:56:46  * Domenic__quit (Remote host closed the connection)
14:56:53  * Domenic__joined
15:00:11  * yorickjoined
15:00:11  * yorickquit (Changing host)
15:00:11  * yorickjoined
15:07:39  * CryptoQuickjoined
15:09:43  * marcello3djoined
15:11:41  * dguttmanjoined
15:20:34  * defunctzombiechanged nick to defunctzombie_zz
15:24:06  * mikolalysenkoquit (Ping timeout: 276 seconds)
15:26:02  * jan____joined
15:34:37  * mikealjoined
15:36:49  * defunctzombie_zzchanged nick to defunctzombie
15:40:49  <defunctzombie>isaacs: the need is to not use 'util'
15:41:03  <isaacs>defunctzombie: oh, ok
15:41:03  <defunctzombie>isaacs: util is for core use and brings in a bunch of other crap as well
15:41:10  <defunctzombie>isaacs: we have modules for a reason :)
15:41:13  <isaacs>defunctzombie: i see, so you get util._extend and blah blah other stuff
15:41:17  <defunctzombie>yep
15:41:22  <defunctzombie>and for client side we don't want that
15:41:28  <isaacs>ok, i guess that makes sense.
15:41:33  <defunctzombie>:)
15:41:46  <isaacs>though, you could use closure compiler or something, and remove ALL the functions you're not using.
15:41:52  <isaacs>but sure, another step.
15:42:02  <defunctzombie>yea, and doesn't always work well
15:42:38  <defunctzombie>personally, I would make a good inherits module (like you already have) and update core docs to recommend usage of that (or similar)
15:42:49  <defunctzombie>and keep util inherits obviously for backwards compat
15:43:06  <defunctzombie>external users should favor single modules for that stuff
15:43:17  <defunctzombie>I totally get that core needs it
15:45:48  <wolfeidau>juliangruber: have you done much with map-reduce?
15:47:38  <defunctzombie>isaacs: https://github.com/joyent/node/issues/4813#issuecomment-15118536
15:48:01  <defunctzombie>isaacs: +1 on the idea, -1 on the extra function param, seems like you could just use req.socket ?
15:48:26  <defunctzombie>isaacs: also, to address the last comment, .upgrade() could take an option arg for headers?
15:50:38  <juliangruber>wolfeidau: nope. dominictarr has
15:52:03  <wolfeidau>juliangruber: Yeah i need to hassle him, got it working but need to work out how to clear out old data which was used in the map phases of the map-reduce
15:53:47  <juliangruber>wolfeidau: are you talking about level-map-merge?
15:55:30  <wolfeidau>juliangruber: This is the project I am hacking on https://github.com/wolfeidau/datum this is where i use the map-reduce https://github.com/wolfeidau/datum/blob/master/lib/datum.js#L45-L111
15:56:36  <juliangruber>I see
15:56:43  <juliangruber>and it's a feature of map-reduce to be durable
15:56:55  <juliangruber>and it only doesn't clean up when the job is finished?
15:57:03  <wolfeidau>juliangruber: Yeah exactly!
15:57:32  <wolfeidau>juliangruber: If you run the tests and use lev to show the output of temp/datum_store4 you will see what i mean
15:57:39  * mikealquit (Quit: Leaving.)
15:58:08  <wolfeidau>I ran it with a feed out of collectd for 8 hours and had 200mb+ of data in leveldb :P
15:58:44  <juliangruber>but it's incremental
15:58:50  <juliangruber>the job should never stop
15:59:15  <juliangruber>hmm
15:59:21  <wolfeidau>juliangruber: In my case I am doing time windowing in the map phase
16:00:11  <wolfeidau>juliangruber: So the window being updated moves on after n samples depending on if it is 1min 15min or 1hr say
16:00:38  <wolfeidau>juliangruber: caveat is I could be using this completely wrong but getting the right results :)
16:02:09  <juliangruber>sounds good to me
16:02:36  <juliangruber>yeah I guess that's something dominictarr has to look at
16:02:42  <juliangruber>tell ircretary about it
16:03:12  <wolfeidau>interesting tool that
16:05:55  <wolfeidau>juliangruber: level-map-merge actaully looks much better for my use case
16:06:28  * AvianFlujoined
16:06:32  <wolfeidau>juliangruber: Most of the batches i get out of collectd (system metrics ect) are only 30 - 50 metrics
16:08:40  <wolfeidau>Also gets rid of the stringify and parse which was anoying me
16:08:45  * mikolalysenkojoined
16:10:06  * tmcwquit (Remote host closed the connection)
16:13:48  <wolfeidau>juliangruber: Thanks btw :)
16:18:09  <juliangruber>oh, yeah 50 metrics don't need persistence
16:18:25  <juliangruber>and if they're lost that's not the most terrible thing
16:21:12  <wolfeidau>juliangruber: Yeah exactly they arrive again 10 seconds later :)
16:28:21  <wolfeidau>juliangruber: Once i get this working I need to hassle hij1nx about the graphing stuff he was messing around with
16:28:25  * tmcwjoined
16:32:20  <juliangruber>wolfeidau: combine your storage stuff with hij1nx's frontend stuff
16:32:29  <juliangruber>super synergy
16:33:31  <jlord>jesusabdullah: heyy!!! i've been on fairly reguarly-ish but mostly creeping in #nerdtracker. but now i'm set up with irssi so i'll be in all the rooms all the time!!
16:35:04  <wolfeidau>juliangruber: Yeah exactly need to either way as I would prefer to concentrate on the math and metric gathering, they are hard enough on their own
16:43:44  * fotoveritejoined
16:52:26  * CryptoQuick_joined
16:53:48  * CryptoQuickquit (Ping timeout: 240 seconds)
16:53:49  * CryptoQuick_changed nick to CryptoQuick
17:08:12  * shamajoined
17:09:36  * mikealjoined
17:11:42  <juliangruber>thinking in two different realms is...quite expensive
17:23:29  * CryptoQuickquit (Ping timeout: 252 seconds)
17:23:42  * CryptoQuickjoined
17:43:25  <wolfeidau>juliangruber: agreed, well i got accumulation working with level-map-merge however it is currently not being saved for some reason
17:49:58  <wolfeidau>Need to hassle dominictarr about how this contraption works
17:55:42  * defunctzombiechanged nick to defunctzombie_zz
18:33:07  * marcello3dquit (Remote host closed the connection)
18:33:33  * ITproquit (Ping timeout: 252 seconds)
18:50:44  * nk109quit (Quit: Computer has gone to sleep.)
18:58:34  * marcello3djoined
19:08:14  * ITprojoined
19:35:20  * st_lukejoined
19:54:41  * AvianFluquit (Remote host closed the connection)
19:56:55  <substack>mbalho, Raynos: https://github.com/toots/buffer-browserify/pull/14
19:57:31  <substack>jsonparse should work against this build now
19:57:39  <substack>and by extension, JSONStream
20:03:33  * mmckeggjoined
20:05:12  * st_lukequit (Remote host closed the connection)
20:07:53  * defunctzombie_zzchanged nick to defunctzombie
20:13:04  <defunctzombie>is keep alive on by default?
20:13:20  <defunctzombie>for outgoing http and incoming (client and server?)
20:15:21  * st_lukejoined
20:20:13  * dominictarrjoined
20:20:16  <defunctzombie>substack: buffer-browserify
20:20:26  <defunctzombie>do I need to roll that into browser resolve libs?
20:22:05  <chrisdickinson>substack: haha, now i might have to rewrite a bunch of those git modules :)
20:22:11  <chrisdickinson>(they all use readUInt8)
20:23:41  <chrisdickinson>also the utf8 encoding strategy in buffer-browserify is broken
20:23:51  <chrisdickinson>http://github.com/chrisdickinson/to-utf8
20:27:49  <mbalho>substack: woot
20:27:58  <substack>defunctzombie: only when the version changes
20:28:46  <substack>chrisdickinson: it should be compatible with existing code
20:28:51  <chrisdickinson>cool
20:28:52  <substack>except now you can do buf[index]
20:28:59  <chrisdickinson>substack: it's backed by arrays?
20:28:59  * kenperkinsquit (Quit: Textual IRC Client: http://www.textualapp.com/)
20:29:16  <substack>no it's just SlowBuffer
20:29:31  <substack>SlowBuffer already uses numeric indexes
20:29:45  <chrisdickinson>substack: it would be really nice if SlowBuffer could use typed arrays if available
20:29:48  <substack>it's just that Buffer doesn't and there's a hack in node that makes Buffer addressable
20:29:50  <chrisdickinson>at the cost of complexity
20:29:54  * chrisdickinsonnods
20:30:01  <substack>chrisdickinson: it's not necessary actually
20:30:25  <chrisdickinson>well, it would save having to transcribe buffers to typed arrays and back again when dealing with dom apis
20:30:32  <chrisdickinson>which is the primary issue
20:31:09  <substack>Buffer.prototype[method].call(tarray, args...) might work
20:31:29  <chrisdickinson>but then all of your code has to do that
20:31:43  <substack>make a wrapper module
20:31:51  <chrisdickinson>hrm
20:31:58  <chrisdickinson>well, we'll see if it's actually an issue
20:32:27  <chrisdickinson>all of this git stuff is putting a bunch of browserify's node shims through their paces
20:34:35  * spionquit (Ping timeout: 246 seconds)
20:35:27  <substack>I bet.
20:36:49  <st_luke>defunctzombie: are you talking about the debugger from v8 in core?
20:37:03  <defunctzombie>st_luke: ?
20:37:09  <defunctzombie>http keepalive
20:37:10  <st_luke>defunctzombie: on the twitters
20:37:18  <st_luke>the debug module you mention
20:37:21  <defunctzombie>st_luke: debug npm module
20:37:41  <defunctzombie>the one you turn on/off with DEBUG env var
20:37:50  <chrisdickinson>substack: it's been holding up really well though! i'm just nervous about when it all gets glued together finally :)
20:43:56  <Raynos>Buffers
20:43:58  <Raynos>y u so hard
20:46:06  <mmckegg>dominictarr: still good for some cafe hacking this morning?
20:46:34  <dominictarr>sure! raglan roast?
20:46:47  <mmckegg>yep sounds good
20:46:51  <mbalho>im cafe hacking in california
20:46:56  <mbalho>distributed cafe hack!
20:47:03  <mmckegg>:D
20:48:06  <Raynos>dominictarr: have you written an eventual value abstraction/
20:48:25  <dominictarr>no, it's a way of handling back pressure
20:50:30  * AvianFlujoined
20:50:52  <defunctzombie>st_luke: that module is really helpful when developing and off in production
20:51:00  <defunctzombie>st_luke: I use my logging stuff for production errors
20:52:09  <Raynos>dominictarr: https://gist.github.com/Raynos/5208304
20:53:47  <substack>dominictarr: https://github.com/toots/buffer-browserify/pull/14
20:54:00  <substack>this should fix the JSONStream issues in browserify >=2.6
20:54:16  <ralphtheninja>been staring on the bitcoin curve the whole day, this will not improve my programming skills
20:55:40  <substack>bitcoin is at 63.9 usd O_O
20:56:10  <ralphtheninja>it's madness
20:56:44  <dominictarr>holy shit
20:57:04  <ralphtheninja>over 65 on mtgox now
20:57:13  <dominictarr>mmckegg: I just have to take a skype call, and then I'll meet you at RR
20:57:19  <mmckegg>yep sweet
20:57:25  <mmckegg>I'll head down shortly
20:58:04  <jlord>hey substack what kind of tablet do you have for drawing?
20:58:40  <dominictarr>Raynos: what do you think of this for back-pressure:
20:58:44  <jlord>substack: i'm looking at two wacom ones and trying to figure out if i want wireless-ness and multitouch stuff or not
20:58:52  <dominictarr>strm(data, null, cb)
20:58:54  <Raynos>dominictarr: strm is too confusing
20:59:02  <dominictarr>and cb is called whin the stream is drained
20:59:02  <Raynos>i have to think about it more
20:59:17  <Raynos>really imho backpressure is a raw readable & raw writable contract
20:59:34  <dominictarr>Raynos: no, you need it for lazyness!
20:59:44  <Raynos>no
20:59:51  <Raynos>well maybe
20:59:58  <Raynos>but i think thats too be avoided
21:00:21  <Raynos>backpressure is an IO co-ordination thing
21:00:42  <dominictarr>read(function (data, end, cb) { do something with data, callback cb when you are ready for next chunk })
21:01:19  <dominictarr>Raynos: correct
21:01:34  <dominictarr>so I have this thing that traverses directories
21:01:34  * nicholaszquit (Read error: Connection reset by peer)
21:01:59  * nicholaszjoined
21:02:05  <dominictarr>if I pipe it to take(5), I want that thing to stop traversing.
21:02:12  <dominictarr>otherwise it will be too much io.
21:02:48  <Raynos>your right
21:02:52  <Raynos>intermediate things want it too
21:03:07  <dominictarr>sometimes they just want to propagate it
21:03:23  <dominictarr>I really like the way that reduceibles does that
21:04:42  <dominictarr>look at this one:
21:04:56  <dominictarr>https://github.com/dominictarr/strm/blob/master/index.js#L129-L153
21:05:14  <dominictarr>take a start point, and an function that creates a stream
21:05:18  * st_lukequit (Remote host closed the connection)
21:05:28  <dominictarr>(of same type as `start`)
21:07:02  <dominictarr>… and it can join a do a traverse basically, by lazily evaluating those streams, and merging them into a big stream
21:09:19  <Raynos>dominictarr: https://gist.github.com/Raynos/5145d6f5091335654614
21:09:26  <Raynos>that's as minimal as I can get back pressure
21:10:02  <Raynos>so I basically agree that read(function (pushChunk, cb) { ... }) is correct
21:10:23  <Raynos>and write(function (chunk) { return promise }) although
21:10:27  <Raynos>actually maybe abstract that with a cb
21:10:37  <dominictarr>yeah, thats what I am experimenting with right now
21:10:39  * tilgovijoined
21:10:46  <Raynos>oh no wait I already abstracted it with a cb
21:11:04  <Raynos>readable(function generator(push, cb) { ... }) & writable(function writer(chunk, cb) { ... })
21:11:06  <dominictarr>the cool thing about returning something
21:11:10  <dominictarr>like a promise
21:11:20  <dominictarr>is that it you can pipe to a function
21:11:30  <dominictarr>because the default is no back pressure
21:11:41  <Raynos>dominictarr: I'm a big proponent of not having a primitive duplex stream but just having tuples of [read, write]
21:11:43  <Raynos>will be easier
21:11:47  * nicholaszchanged nick to nicholasf_
21:12:03  <dominictarr>yes! that is way easy with this approach too!
21:12:38  <Raynos>dominictarr: I think that minimal back pressure implementation is way simpler then strm.
21:12:42  <Raynos>Also we need better names
21:13:03  <Raynos>reader, read, start, next, done, s :D
21:13:22  <dominictarr>Raynos: actually, I'm just changing strm to be that right now
21:13:36  <Raynos>well actually my example isn't simpler. i just inlined promise implementation of observable
21:13:46  <defunctzombie>the benefit of having a google alert setup for my name: http://www.raspberrypi.org/phpBB3/viewtopic.php?f=66&t=37619
21:13:47  <dominictarr>this is how simple streamCombiner/duplexer is https://github.com/dominictarr/strm/blob/master/_index.js#L101-L114
21:13:47  <Raynos>so that i can abstract cb / array dance
21:13:53  <defunctzombie>finding random stuff like that hahaha
21:14:27  <defunctzombie>isaacs: http://howtonode.org/introduction-to-npm
21:14:33  <defunctzombie>isaacs: hahaha might want to update that
21:14:55  * mmckeggquit (Quit: mmckegg)
21:16:09  <isaacs>defunctzombie: yeah... that's probably really out of date
21:16:12  <isaacs>defunctzombie: like npm 0.2 days
21:16:15  <defunctzombie>yep
21:16:25  <defunctzombie>apparently some people still find it
21:16:31  <substack>jlord: I have a wacom bamboo
21:16:43  <substack>I bought it online when it first came out for $100
21:17:53  <jlord>substack: but there are like 4 kinds of bamboo! i think i'm going to go with the less frills one. the Bamboo Splash.
21:18:02  <jlord>splashing with bamboos
21:18:44  <defunctzombie>jlord: monoprice
21:19:02  <substack>jlord: mine is a pretty cheap no-frills one
21:19:03  <defunctzombie>jlord: http://www.monoprice.com/products/subdepartment.asp?c_id=108&cp_id=10841
21:19:25  <substack>one side of the pen doesn't even work anymore and touch-sensitivity never worked in linux
21:19:44  <defunctzombie>jlord: I have the 8/6 one and am pretty pleased, it isn't anything fancy, but it works :)
21:19:54  <substack>nice!
21:20:12  * st_lukejoined
21:20:22  <substack>I really need to fix my bicycle
21:20:30  <jlord>defunctzombie: oh cool
21:20:39  <defunctzombie>substack: again?
21:20:41  <jlord>substack: do it!
21:20:44  <isaacs>substack: yes, it makes you way too immobile
21:20:44  <substack>it's still broken
21:20:53  <isaacs>substack: you're not able to stack as sub as before.
21:21:04  <substack>very important sanity-preservation device
21:21:08  <isaacs>yes
21:21:08  <defunctzombie>st_luke: https://github.com/ncb000gt/node.bcrypt.js/issues/153
21:21:33  <st_luke>defunctzombie: as root
21:21:41  <defunctzombie>(facepalm)
21:21:43  <defunctzombie>wtf
21:21:49  <defunctzombie>why is this person even using a computer
21:22:25  <defunctzombie>AARRRGGGGGGGGGGGGGGG
21:22:37  <st_luke>my hands are so sticky from the giant gummy worm
21:22:42  <st_luke>https://vine.co/v/bpQhQgvl6zg
21:22:50  <defunctzombie>st_luke: that's what she said
21:23:00  <Raynos>dominictarr: https://gist.github.com/Raynos/5145d6f5091335654614
21:23:04  <Raynos>^ I was doing it wrong
21:23:07  <Raynos>it can be way simpler
21:23:09  <defunctzombie>bahahaha
21:24:29  <dominictarr>Raynos: yes, you need errors/end
21:24:31  <dominictarr>though
21:24:46  <hij1nx>st_luke's worm is so gross
21:25:03  <Raynos>dominictarr: https://gist.github.com/Raynos/5145d6f5091335654614#file-array-stream-js end
21:25:06  <defunctzombie>looks amazing
21:25:07  <Raynos>null === end. done.
21:25:16  <defunctzombie>hij1nx: the reaction was great
21:25:23  <mbalho>defunctzombie: the attitude of 'this person isn't worthy enough to use my software' makes you a douche BTW
21:25:32  <hij1nx>it smells bad
21:26:13  <st_luke>this person can use my software
21:26:17  <st_luke>its not that great tho
21:26:46  <dominictarr>Raynos: and errors
21:26:59  <Raynos>dominictarr: just next(new Error(...))
21:27:18  <dominictarr>erm, then you have type checking
21:27:27  * tilgovi_joined
21:27:28  <dominictarr>that is a bit fragile
21:27:32  * AvianFluquit (Remote host closed the connection)
21:27:47  <dominictarr>that is why I used a second arg
21:28:11  <st_luke>defunctzombie: we should tell that person how to do it right then that can be referenced when someone has the same issue again
21:28:53  * tilgoviquit (Ping timeout: 256 seconds)
21:34:55  <Raynos>dominictarr: https://gist.github.com/Raynos/5145d6f5091335654614#file-read-file-js
21:34:57  * thatguydanjoined
21:37:43  <Raynos>dominictarr: https://gist.github.com/Raynos/5145d6f5091335654614#file-read-file-js-L17
21:39:14  <Raynos>what we really need is a well documented contract between single functions that take callbacks
21:40:35  <Raynos>I think the symbols `close`, `pause` & `resume` are enough to start with
21:41:17  <jjjjohnn1y>has anybody worked with midi files before?
21:41:46  <dominictarr>Raynos: there is no explicit pause/resume message with this model
21:42:21  <Raynos>dominictarr: my gist uses the callback in writer for pause/resume. i.e. pause always and resume when I call the callback
21:42:30  <Raynos>you can not pause by calling the cb immediately
21:42:32  <dominictarr>yes
21:42:39  <Raynos>but that's just really pull
21:42:45  <Raynos>just pull more when you want
21:42:55  <Raynos>and have a way to send a `close` symbol for file descriptor cleanup
21:43:39  * dguttman_joined
21:43:53  * AvianFlujoined
21:44:13  <jjjjohnn1y>this is confusing
21:44:17  <jjjjohnn1y>A midi event is preceded by a delta-time. A delta time is the number of ticks after which the midi event is to be executed. The number of ticks per quarter note was defined previously in the file header chunk. This delta-time is a variable-length encoded value. This format, while confusing, allows large numbers to use as many bytes as they need, without requiring small numbers to waste bytes by filling with zeros. The number is converted into
21:45:07  * nk109joined
21:45:42  <jjjjohnn1y>when parsing a chunk, you have to find the end of this 7 bit byte variable length variabe endian value
21:45:52  <jjjjohnn1y>HTF
21:46:13  * kenperkinsjoined
21:46:15  * dguttmanquit (Ping timeout: 245 seconds)
21:46:15  * dguttman_changed nick to dguttman
21:46:32  * st_lukequit (Remote host closed the connection)
21:47:23  * mmckeggjoined
21:49:29  <defunctzombie>mbalho: there is nothing I can do for this person
21:49:53  <defunctzombie>mbalho: I do not want to reprint the chown wiki page in the github issue
21:50:02  <defunctzombie>mbalho: and I am not their system administrator
21:50:33  <mbalho>defunctzombie: haha ok
21:50:47  <defunctzombie>mbalho: in either case, if every module has to answer "persmissions" questions this is a giant waste of time
21:51:52  <defunctzombie>mbalho: yes, he has some issue. yes, he may be incapable of fixing it. No, github issues are not a good place for something he probably needs to google or ask in realtime
21:52:01  <defunctzombie>mbalho: these types of issues end up going back and forth forever
21:52:10  <defunctzombie>and end with.. oh.. I see what I was doing wrong
21:52:34  <defunctzombie>mbalho: I think the install software needs to be more clear imho
21:53:07  <defunctzombie>but I refuse to waste time telling someone how to use their computer when they want to use bcrypt, if they can't solve a permission issue, they probably need to not be using this module
21:55:01  * wolfeidauquit (Remote host closed the connection)
21:58:16  <defunctzombie>mbalho: oh .. and yes.. I am a dick on github issues :) I think people don't think before they post them and that annoys me
21:59:05  <Raynos>dominictarr: https://gist.github.com/Raynos/5145d6f5091335654614#file-map-js success!
22:00:40  <dominictarr>what does code using it look like?
22:03:13  <chrisdickinson>mbalho: just watched your oakland video; nice summary
22:03:34  <chrisdickinson>though, i will dispute the pacnw being the most homogenous place on earth :)
22:03:42  <chrisdickinson>should take a trip to kansas sometime, haha.
22:05:08  <Raynos>dominictarr: https://gist.github.com/Raynos/5145d6f5091335654614#file-read-file-js-L4 ?
22:06:37  <dominictarr>Raynos: I want to see a pipe line set up
22:06:47  <dominictarr>a.pipe(b).pipe(c)
22:06:51  <dominictarr>or however you do it
22:07:07  * nk109quit (Quit: Computer has gone to sleep.)
22:07:51  <Raynos>dominictarr: oh, i'll need to think about it
22:08:10  <dominictarr>or is it c(b(a)) ?
22:08:12  <Raynos>map(a, function () { /* b implementation */ })(c)
22:08:43  <Raynos>where a is Readable & c is Writable
22:08:59  <dominictarr>pipe(a)(b)© ?
22:09:32  <dominictarr>that is a bit confusing
22:09:55  <chrisdickinson>implementing git pushing / pulling as a transport agnostic duplex stream :D
22:10:42  <chrisdickinson>var client = pull(repo); client.pipe(git_protocol(connection)).pipe(client);
22:12:22  * wolfeidaujoined
22:17:04  * wolfeidauquit (Ping timeout: 252 seconds)
22:17:17  <chilts>anyone know the command line arg to say to npm publish that this is an alpha/beta release and shouldn't be considered the default?
22:17:24  <chilts>I can't find it, but I'm sure it exists :)
22:17:50  <chilts>I have v1.0.0-alpha in the package.json but it seems to be installing as the default, which I don't want (yet) :)
22:17:52  <defunctzombie>isaacs: ^
22:18:07  <chilts>I asked him on #nodejs but I don't think he's around
22:18:12  <isaacs>chilts: npm install --tag=alpha
22:18:22  <isaacs>chilts: er, npm publish --tag=alpha
22:18:33  <chilts>ah cool! thanks
22:18:35  <isaacs>chilts: install --tag=alpha would install the one with the "alpha" tag
22:18:36  * wolfeidaujoined
22:18:44  <chilts>righto, brilliant
22:18:57  <isaacs>chilts: which you almost never want to do, because you'd do npm install foo@alpha and be more granular about it
22:20:34  <chilts>ah, so in my package.json I can still have v1.0.0 and publish as --tag=alpha, rather than having v1.0.0-alpha in my package.json?
22:22:00  * nk109joined
22:24:47  <Raynos>dominictarr: it doesn't have chained pipes. because there's only one readable & only one writable.
22:25:51  <dominictarr>so need a dumb map that propagates back pressure though
22:27:01  * Domenic__quit (Remote host closed the connection)
22:27:44  <rvagg>isaacs: link to the node issue causing the npm cb() problem?
22:30:00  * dominictarrquit (Quit: dominictarr)
22:30:43  <isaacs>rvagg: i don't have anode issue
22:30:54  <isaacs>rvagg: but i have a patch. just trying to write a test that can reproduce it reliably
22:31:08  <rvagg>isaacs: k, sounds interesting!
22:31:45  * Domenic__joined
22:35:08  <Raynos>dominictarr: yes. most transformations dont care about back pressure and propagate it through
22:35:14  <Raynos>there is no need for `pipe()` interface
22:35:40  <Raynos>there is just `function (readable) { return function (writable) { do stuff with readable before writing } }`
22:36:10  <Raynos>in fact a readable is just function (writable) { write stuff to it }
22:36:57  <Raynos>i will need to actually flesh out the entire idea a ton to see whether its minimally viable
22:38:38  * thl0quit (Read error: Connection reset by peer)
22:39:03  * Domenic__quit (Read error: Connection reset by peer)
22:39:25  * mmckeggquit (Ping timeout: 256 seconds)
22:40:47  * Domenic__joined
22:40:50  * Domenic__quit (Remote host closed the connection)
22:44:17  * tmcwquit (Remote host closed the connection)
22:47:38  <defunctzombie>Raynos: yes, btw.. what you just described is middleware hahhaha
22:49:00  * mikolalysenkoquit (Ping timeout: 260 seconds)
23:03:23  <Raynos> defunctzombie: yes!
23:03:48  * defunctzombiechanged nick to defunctzombie_zz
23:06:29  * mmckeggjoined
23:09:14  * AvianFluquit (Remote host closed the connection)
23:09:34  * dominictarrjoined
23:22:58  * stlsaintjoined
23:22:59  <ins0mnia>IE8 doesn't have a developer console???
23:24:27  <rvagg>ins0mnia: it's called alert()
23:24:48  * thatguydanquit (Quit: thatguydan)
23:24:54  <ins0mnia>wtf :(
23:25:34  <rvagg>WELCOME TO 2009
23:25:35  <LOUDBOT>YOU CAN KEEP YOUR WEED
23:25:45  <ins0mnia>anyone can suggest DOM4 / HTML5 shim libs?
23:25:54  <ins0mnia>don't even know where to start with this crap
23:26:05  <ins0mnia>and the customer wants IE7 support as well! (he can forget about it)
23:26:37  <ins0mnia>libs = modules
23:30:57  * yorickquit (Remote host closed the connection)
23:35:56  <chrisdickinson>ins0mnia: IE8 has a dev console, i do believe
23:37:18  * defunctzombie_zzchanged nick to defunctzombie
23:38:21  * ins0mniaquit (Ping timeout: 245 seconds)
23:38:52  * defunctzombiechanged nick to defunctzombie_zz
23:41:31  * spionjoined
23:50:18  * CryptoQuickquit (Ping timeout: 256 seconds)
23:50:54  * thl0joined
23:50:57  * dominictarrquit (Quit: dominictarr)
23:51:14  * Domenic__joined
23:51:31  * thl0_joined
23:53:40  * substackfinishing the html harness stuff for testling
23:54:45  * tmcwjoined
23:55:05  * mikealquit (Quit: Leaving.)
23:55:42  * Domenic__quit (Ping timeout: 252 seconds)
23:55:54  * thl0quit (Ping timeout: 264 seconds)
23:58:46  * nk109quit (Quit: Computer has gone to sleep.)
23:59:47  * mmckeggquit (Quit: mmckegg)
23:59:56  * tmcwquit (Ping timeout: 256 seconds)