00:00:01  * ircretaryquit (Remote host closed the connection)
00:00:08  * ircretaryjoined
00:00:11  <jesusabdullah>mikolalysenko: lol yeah
00:01:21  <mikolalysenko>jesusabdullah: though the demo on that page is a little crummy since I wrote it before I started really getting into npm/browserify
00:01:25  <jesusabdullah>mikolalysenko: you should write a FEM library for javascript, like a reusable one
00:01:29  <jesusabdullah>mikolalysenko: that would be epic
00:01:38  <mikolalysenko>jesusabdullah: I've thought about it. I think it is doable too
00:01:48  <mikolalysenko>jesusabdullah: though before that I want to make a topology optimization demo in pure js
00:02:24  <mikolalysenko>jesusabdullah: though to do that I'll have to make a simple static linear elasticity solver, which will probably become a module
00:02:44  <mikolalysenko>debating wether to use the gpu or not to do it
00:03:30  <mikolalysenko>on the one hand, using the gpu would be faster; but on the other hand it would be harder to run on a server and the code becomes a lot less flexible
00:03:53  * jcrugzzquit (Ping timeout: 240 seconds)
00:04:01  <jesusabdullah>mikolalysenko: Yeah, a lot of parts for sure
00:04:25  <jesusabdullah>mikolalysenko: clearly we need a webgl implementation for node ;)
00:04:34  <jesusabdullah>wait a tick
00:04:38  <jesusabdullah>it looks like creationix wrote that
00:04:49  <mikolalysenko>jesusabdullah: yeah, but it is a bit screwy
00:04:52  <creationix>:)
00:05:00  <creationix>please finish it
00:05:02  <mikolalysenko>I made a fork that is pure webgl without dom stuff
00:05:06  <mikolalysenko>https://github.com/mikolalysenko/headless-gl
00:05:11  <jesusabdullah>mikolalysenko: THERE you go
00:05:15  <jesusabdullah>creationix: waf? FOR SHAME
00:05:15  <mikolalysenko>it is still a wip, but I have used for some small things
00:05:25  <creationix>jesusabdullah: look at the date
00:05:27  <mikolalysenko>it also has binary dependencies and will probably explode if you use it on windows
00:05:29  <creationix>there was no gyp
00:05:35  <jesusabdullah>creationix: oh I did
00:05:39  <mikolalysenko>creationix: mine uses gyp
00:06:30  <creationix>mikolalysenko: how hard is it to attach a window to yours?
00:06:35  <mikolalysenko>shouldn't be hard
00:06:40  <mikolalysenko>but that isn't the point right
00:06:51  <creationix>well, I like making desktop graphical apps
00:07:15  <creationix>I would *love* a set of node libraries for web-gl powered windows with keyboard, mouse, and touch inputs
00:07:23  <mikolalysenko>creationix: yeah
00:07:24  <creationix>node-webkit is way too heavy
00:07:41  <creationix>I got terribly stuck making windows cross-platform
00:07:51  <creationix>and integrating with event loops to get input data
00:07:52  <jesusabdullah>yeah, node-webkit is kind of insane
00:07:56  <creationix>gl was the easy part
00:07:59  * whit537joined
00:07:59  <jesusabdullah>like, cool idea, but holy shit is it huge
00:08:05  <mikolalysenko>creationix: but it is also important to have something that works for creating webgl stuff *without* the window
00:08:25  <creationix>mikolalysenko: sure, if you like rendering graphics server-side
00:08:34  <creationix>I've never had a need for that, but I can see the reason
00:08:36  <mikolalysenko>creationix: yeah, or for doing big computations in webgl
00:08:51  <creationix>how do you do math in it?
00:08:55  * vitorpachecoquit (Ping timeout: 264 seconds)
00:08:57  <creationix>just read out the pixels when done?
00:09:13  <mikolalysenko>creationix: kind of
00:09:16  <mikolalysenko>here is an example: https://github.com/mikolalysenko/gl-fbo
00:09:26  <mikolalysenko>game of life in webgl: http://mikolalysenko.github.io/gl-fbo/
00:09:32  <mikolalysenko>but you can do much more complex stuff
00:09:43  <mikolalysenko>like fluid simulation, finite element, big linear algebra stuff, etc.
00:10:03  <mikolalysenko>it could be very useful for comptuer vision tasks and machine learning
00:10:03  <creationix>actually, I think a pure-js webgl implementation would be cool too
00:10:05  <creationix>if it's not too slow
00:10:29  <creationix>single-threaded js isn't exactly suited to the kind of work shaders do
00:10:46  <mikolalysenko>creationix: I've thought about that too, but it isn't as high priority as getting webgl working in node without windows
00:11:18  <mikolalysenko>mainly because the performance will probably be so slow that it wouldn't be worth it
00:11:24  <creationix>exactly
00:11:28  <jesusabdullah>"Numerical analysis? in MY javascript? It's more likely than you think."
00:11:28  <creationix>more for educational purposes
00:11:34  <jesusabdullah>mikolalysenko: I'd love to see that talk. ^^
00:11:53  <mikolalysenko>creationiz: combined with the fact that it would only even be necessary on older (ie slower) browsers, I think it would be pretty useless at the end of the daty
00:12:04  <mikolalysenko>creationix: ^^^
00:12:18  <creationix>now if anyone ever makes a cross-platform gui kit for node, I'll be all over that
00:12:25  <creationix>I just want bare webgl + sound + input
00:12:29  <creationix>+ node of course
00:12:48  <jjjohnny>asm.js
00:12:49  <mikolalysenko>creationix: you could try this, but it is for browsers: https://github.com/mikolalysenko/gl-now
00:13:03  <mikolalysenko>a pure node implementation would be cool though
00:13:06  <creationix>jjjohnny: no thank you
00:13:13  <jjjohnny>why not?
00:13:15  <creationix>I don't want to write C++ code
00:13:20  <jjjohnny>you dont have to
00:13:37  <jjjohnny>all you have to do is keep your variables constant and use numbers
00:13:42  <creationix>jjjohnny: oh, you mean for a software gl implementation?
00:13:48  <creationix>asm.js might work for that, not sure
00:13:51  <jjjohnny>basically pure math in javascript
00:13:53  <mikolalysenko>creationix: I think it would be possible to make a version of game-shell/gl-now that works in node AND in the browser
00:13:55  <creationix>still, it would be on the cpu
00:14:08  <creationix>mikolalysenko: that would be great
00:14:19  <mikolalysenko>probably built on top of glfw or something like that
00:14:29  <creationix>chrome apps have raw tcp, udp, serial, udp, etc
00:14:42  <creationix>yeah, when I was looking glfw was the most likely candidate
00:14:49  <creationix>but I'm not a C coder so it was too hard for me
00:15:11  <mikolalysenko>creationix: I don't think it would be hard, but it could be tedious
00:15:18  <mikolalysenko>since there is a lot api surface area to wrap up
00:15:27  <creationix>writing webgl bindings was not hard, but tedious
00:15:28  <jesusabdullah>glfw?
00:17:03  <mikolalysenko>the biggest issue though with headless-gl is that I need to somehow figure out how to get the conformance tests to run on it...
00:17:13  <mikolalysenko>and they all assume some level of DOM support, which is super annoying
00:17:41  <mikolalysenko>so I think the best solution is to mix it in with some kind of DOM emulation library, but figuring out how to do this cleanly is going to be a trip
00:18:10  <jesusabdullah>mikolalysenko: jsdom XD
00:18:16  <jesusabdullah>is jsdom even maintained anymore?
00:21:28  <mikolalysenko>jesusabdullah: I actually tried using it, but it was such a clusterfuck I decied to just shelve the whole thing for a bit and come back to it once that stuff stabilized
00:21:48  <mikolalysenko>jesusabdullah: though the other idea I had which seemed a bit more pragmatic was to try just emulating the dom stuff on an as-needed basis
00:22:03  <mikolalysenko>like get just barely enough stuff shimmed in to run the conformance tests and get on with life
00:23:52  <creationix>Domenic_ now maintains jsdom and it should be a lot cleaner
00:25:34  <jesusabdullah>good to know
00:26:51  <mikolalysenko>one thing I've been trying to figure out is if there is a way to make embedding shaders in javascript simpler
00:27:08  <mikolalysenko>like you can do the silly thing where you load them in a script tag, but that isn't modular and it looks stupid
00:27:13  <jesusabdullah>http://www.conwaylife.com/wiki/Unix
00:27:16  <jesusabdullah>unix.
00:27:16  <mikolalysenko>(plus it blocks page loading for no good reason)
00:28:16  * vitorpachecojoined
00:33:54  * jcrugzzjoined
00:35:25  * no9quit (Quit: Leaving)
00:35:27  <mikolalysenko>I think it is probably possible to compile some limited subset of javascript down to glsl, but I am not sure if this would be a good idea or not
00:35:33  * thl0joined
00:35:44  <creationix>jesusabdullah: think I should support people who store massive files in jsgit?
00:36:30  <jesusabdullah>creationix: come back to it maybe
00:36:40  <jesusabdullah>creationix: git is known to have really shitty perf on large files iirc
00:37:04  <jjjohnny>i thought i tried a headless-gl thing a while back, but it was probably using app.js or some such
00:37:21  <jjjohnny>maybe its on another computer
00:37:24  <creationix>jesusabdullah: well, I have to sha1 the contents at least once while parsing the pack file (when cloning)
00:37:28  <jesusabdullah>creationix: http://caca.zoy.org/wiki/git-bigfiles
00:37:31  <jjjohnny>mikolalysenko: found this tho, maybe useful http://impactjs.com/ejecta
00:37:38  <jesusabdullah>creationix: so yeah you can probably cut this corner
00:38:11  <creationix>and I'm mainly worried about memory usage, not performance
00:38:15  <creationix>to me 100mb isn't huge
00:38:22  <creationix>browsers and node can usually handle that
00:38:41  <jesusabdullah>indeed
00:38:46  <mbalho>if its an arraybuffer it can be as big as you want
00:38:52  <jesusabdullah>To me, PSDs and high-def video are huge
00:39:23  <creationix>mbalho: right, it would be an ArrayBuffer in the browser and a Buffer in node
00:39:48  <jjjohnny>creationix: I am building the github of audio samples
00:40:11  <jesusabdullah>jjjohnny: Neato. I wanna get to the point where I can play with audio
00:40:12  <jjjohnny>j/k only kind of
00:40:19  <jesusabdullah>jjjohnny: but sounds software SCARES me
00:40:27  <jjjohnny>why?
00:40:34  <jesusabdullah>because buttons
00:40:38  <jjjohnny>oh yeah
00:40:40  <jjjohnny>no dount
00:40:42  <jjjohnny>doubt
00:40:44  <jesusabdullah>and like
00:40:50  <jjjohnny>audio UI sux
00:41:03  <jjjohnny>that and the price tags kept me away my whole life
00:41:05  <jesusabdullah>"oh hey I want to make something that sounds cooler than a sine wave, but wtf are all these boxes and what do these settings even DO"
00:41:18  <jjjohnny>i always said i would play music when i could design my interface for playing
00:41:28  <jesusabdullah>I can't even get to the point where I can experimentally move sliders, I always straight break shit before I can get there
00:41:35  <jjjohnny>behold that is what I am doing
00:42:09  <creationix>jesusabdullah: also streaming probably lowers latency
00:42:11  <mikolalysenko>it would be neat to have a simple framed streaming library for processing audio
00:42:14  <jjjohnny>jesusabdullah: there are some pretty great music apps for ipad
00:42:22  <creationix>since I can start saving something before I'm done loading it
00:42:30  <mikolalysenko>like you give two parameters: frame size + frame shift and it gives you a stream of frames as typed arrays
00:42:33  <jjjohnny>mikolalysenko: http://npmjs.org/package/jsynth
00:42:56  <jesusabdullah>I don't have an ipad
00:43:01  <mikolalysenko>yeah, I mean for processing a stream of input
00:43:07  <mikolalysenko>not for synthesizing new audio
00:43:44  <jjjohnny>oh, well the webaudio API has bufferSource nodes which are jusrt arraybuffers
00:44:00  <mikolalysenko>jjjohnny: nice, how does it work?
00:44:16  <mikolalysenko>do you know the number of samples and the delay between windows?
00:44:43  <jjjohnny>mikolalysenko: you know the sampleRate
00:44:46  <jjjohnny>https://github.com/NHQ/jsynth-file-sample/blob/master/index.js
00:45:09  <jjjohnny>that takes an audio file from base64 to webAudio source buffer
00:46:07  <jjjohnny>you can do source = audioCOntext.createBufferSource()
00:46:25  <jjjohnny>source.buffer = context.createBuffer(ArrayBuffer, true)
00:46:34  <mikolalysenko>how does it work? do you hook an event or something that gets called whenever the audio source changes?
00:46:35  * wolfeidaujoined
00:46:58  <mikolalysenko>basically I would like some way to process a pcm audio source as a stream
00:47:00  <jjjohnny>you just grab the whole array buffer
00:47:07  <mikolalysenko>the whole uncompressed audio file?
00:47:15  <mikolalysenko>that sounds kind of crazy...
00:47:39  <jjjohnny>if you connect any audio node to a scriptProcesserNode, you get chunks of PCM
00:48:00  <jjjohnny>which is what that jsynth library abstracts
00:48:06  <mikolalysenko>I see...
00:48:10  <jjjohnny>de-abstracts really
00:48:27  <mikolalysenko>so I've thought about making a phase vocoder in js...
00:48:32  <jjjohnny>as its break it down from buffer to individual samples
00:48:38  <mbalho>is that like t-pain?
00:48:41  <mikolalysenko>yeah!
00:48:45  <mikolalysenko>it would be sweet
00:49:15  <mikolalysenko>it shouldn't be very difficult, but I need to read up on how to hook up audio streams
00:49:36  * mikealquit (Quit: Leaving.)
00:49:37  <mbalho>dude if you write tpain.js we could make tpainroulette which is basically chatroulette with autotune using webrtc and then we'd be rich
00:49:47  <mikolalysenko>just get a stream of overlapping frames, apply fft + phase shift, output stream
00:49:54  <mikolalysenko>mbalho: haha, ok
00:50:24  <jjjohnny>mikolalysenko: you write the math, I'll make the web audio node
00:50:38  <jesusabdullah>ahahaha
00:50:51  <jesusabdullah>mbalho: make it so it autotunes your conversations to the tune of random 80s songs
00:51:08  <jjjohnny>but it aint streams per se, its just buffer processing events
00:51:23  <mikolalysenko>jjjohnny: hmm... I need to read a bit I think before I start coding stuff
00:51:47  <jjjohnny>you can have any Math.pow(2, n) size buffer up to about a seconds worth of audio
00:51:56  <mikolalysenko>I want to understand how exactly the web audio api is set up before I start coding stuff
00:52:13  <mikolalysenko>jjjohnny: ok. though I also want the frames to partially overlap
00:52:29  <mikolalysenko>and do this at regular intervals
00:52:31  <mbalho>c impl of autotune https://github.com/intervigilium/autotalent-harness
00:52:52  <jesusabdullah>I wonder how hard it would be to strap this onto google hangouts
00:53:06  <jesusabdullah>just be like, "fuck you we're singing Total Eclipse of the Heart right now"
00:53:17  <mbalho>also i like https://github.com/dashersw/pedalboard.js
00:53:20  <mikolalysenko>matlab vocoder: http://www.ee.columbia.edu/ln/rosa/matlab/pvoc/
00:54:04  <mikolalysenko>to do it in js I think we would want to make stream that can calculate short time fourier transforms and invert them
00:54:30  <mikolalysenko>so there would be like an stft stream and an istft stream
00:54:54  <mikolalysenko>and you'd just put your pitch shifting in the middle to do your vocoder
00:55:31  <mikolalysenko>but doing this first requires some streaming api for processing audio in frames
00:56:25  * dguttmanquit (Quit: dguttman)
00:56:37  * rannmannquit (Ping timeout: 246 seconds)
00:57:36  * dguttmanjoined
00:58:26  <mikolalysenko>ah damn, someone beat me to it: http://webaudiodemos.appspot.com/Vocoder/index.html
00:58:49  <mikolalysenko>mess with the detune slider to pitch shift I think
00:59:23  <mbalho>oh thats different from autotune
01:00:28  <jesusabdullah>autotune shifts to nearest in-key pitch right?
01:00:46  <jesusabdullah>like, you feed the autotune algo 3-5 frequencies and it makes it happen?
01:00:48  <mikolalysenko>I think it is the same principle but autotune is a bit smarter about how it selects the pitch shift
01:00:59  <mikolalysenko>this just uniformly shifts the pitch
01:01:30  <jesusabdullah>so that's step one
01:01:31  <jesusabdullah>:)
01:02:34  * dguttmanquit (Quit: dguttman)
01:05:50  <jjjohnny>mikolalysenko: jesusabdullah https://gist.github.com/NHQ/5778704
01:06:42  <mikolalysenko>jjjohnny: thanks, I think I can work with that
01:06:47  <jesusabdullah>Okay, so now I have to decide if I'm going to hack on browserify-cdn or nginx log statistics
01:06:49  <jjjohnny>thats for mono
01:07:20  <jesusabdullah>jjjohnny that's cool and all but we're doing javascript not .net ;)
01:07:24  <jesusabdullah>*rimshot*
01:07:34  <jesusabdullah>jjjohnny: seriously though, good stuff :)
01:08:45  <jjjohnny>i dont get that joke!
01:09:05  <jjjohnny>also revised gist for no errors
01:09:15  <jesusabdullah>jjjohnny: http://mono-project.com
01:09:36  <jjjohnny>http://jsfiddle.net/hdRQK/
01:10:09  * fallsemoquit (Quit: Leaving.)
01:10:33  <mikolalysenko>jjjohnny: so I am thinking that maybe a streaming interface would be a bit easier to work with...
01:11:01  <jjjohnny>mikolalysenko: the web audio api also has a analyzer node, for getting time or frequency domain data. havent tested it tho
01:11:12  <mikolalysenko>jjjohnny: really? that is pretty sweet
01:11:19  <jjjohnny>mikolalysenko: i dont think so re stream
01:11:24  <mikolalysenko>jjjohnny: ok, I may try just doing it directly in webaudio then
01:11:30  <jjjohnny>but i dont know
01:11:54  <jjjohnny>thing about streams is they are an abstraction. you have to write the functions anyway
01:12:01  <jjjohnny>you can put the functions anywhere
01:12:19  <mikolalysenko>jjjohnny: true, but I'd rather use them since it would be easier to put into node
01:12:24  <jjjohnny>streams dont sit well with the webaudio api, because it does a strict polling thing
01:12:26  <mikolalysenko>also the stft requires some state
01:12:34  <jjjohnny>you have to fill the buffer before it revokes the buffer
01:12:43  <mikolalysenko>since you have to buffer a few windows to do it properly
01:13:01  <jjjohnny>how large?
01:13:17  <mikolalysenko>2 windows
01:13:37  <jjjohnny>not really a prpblem
01:13:55  <mikolalysenko>also if webaudio has a frequency analyzer I might try that
01:14:07  <jjjohnny>the real challenge would be getting it to work in real time
01:14:44  <jjjohnny>yeah its just another node on the graph, so you can connect a generator to a analyzer to a scriptProcessor
01:15:01  <jjjohnny>http://www.w3.org/TR/webaudio/#AnalyserNode-section
01:15:47  <jjjohnny>this graph structure is actually pretty nice, but not stream oriented
01:16:33  <mikolalysenko>Ok. Then maybe it makes more sense to do the phase vocoder as a node in webaudio
01:16:45  <mikolalysenko>probably won't work in node.js so easily, but meh
01:17:19  * jcrugzzquit (Ping timeout: 256 seconds)
01:18:20  <jjjohnny>mikolalysenko: well if you write it in pure js, rather than using the web audio analyzer node, it can be ported anywhere
01:19:09  <mikolalysenko>jjjohnny: yeah, so what I am thinking of doing first is just writing an stft function where you poass it a chunk of data and an output target and it executes the stft on it
01:19:26  <mikolalysenko>then making an inverse stft to reconstruct the signal from that
01:19:36  <mikolalysenko>and once you have those two things a phase vocoder is pretty simple
01:19:45  <mikolalysenko>same with autotune
01:20:23  <jjjohnny>one could do some cool things with reversal functions, as those are essentially generator functions
01:20:45  <mikolalysenko>yeah, you could also do real time pitch detection via cepstral analysis too
01:20:47  <jjjohnny>like, decode a bird call, return a function that encodes bird calls
01:21:04  <jjjohnny>except with some params for changing the bird call noise
01:21:17  <jjjohnny>the run the bird call generator
01:22:26  <jjjohnny>a generator being an time domain function
01:22:29  <jjjohnny>any*
01:23:20  <jjjohnny>function genr8r(time){return Math.sin(time * Math.PI * 2 * 440)} except for bird calls
01:24:12  <jjjohnny>mikolalysenko: i'll be writing these bird call synths with yr maths in a couple short months
01:24:29  <jjjohnny>once I have the platform code and UI stuff all finished
01:24:31  * Ikeymanjoined
01:24:33  <mikolalysenko>jjjohnny: cool
01:24:40  * whit537quit (Quit: whit537)
01:24:59  <jjjohnny>gonna go back to hacking on my subwoofer powered bass barrel now
01:25:24  <jjjohnny>for the DPS low end theory
01:26:19  <jjjohnny>DSP
01:31:48  * rannmannjoined
01:31:50  * rannmannquit (Changing host)
01:31:50  * rannmannjoined
01:40:16  <jesusabdullah>johnkpaul: damage per second low end theory? ^__^
01:45:59  <jesusabdullah>er
01:46:02  <jesusabdullah>jjjohnny: ^^
01:46:04  <jesusabdullah>johnkpaul: AS YOU WERE
01:50:01  * defunctzombie_zzchanged nick to defunctzombie
01:52:08  <defunctzombie>st_luke: yep, it is
01:52:12  <defunctzombie>st_luke: except I like it more cause they have cheap ass boxes
01:52:38  <defunctzombie>st_luke: most of my web services don't need massive boxes, just more of the tiny ones
01:52:47  <st_luke>yeah
01:52:49  <st_luke>rocks
01:52:51  <defunctzombie>st_luke: I have some things on linode still cause their boxes are better overall
01:53:14  <defunctzombie>substack: testing something like engine.io-stream on testling, tips?
01:53:31  <defunctzombie>substack: how to spin up a "server" for testling, has that changed recently?
01:53:44  <defunctzombie>you had an example repo at some point
01:56:19  * timoxleyjoined
01:58:03  <defunctzombie>anyone here doing testling-ci with some server stuff?
02:00:55  * Ikeymanquit (Quit: Ikeyman)
02:01:01  <jesusabdullah>substack: can you explain browserify --standalone to me real quick?
02:02:18  <defunctzombie>jesusabdullah: it makes a file which people can use in old fashioned <script> settings
02:02:35  <defunctzombie>jesusabdullah: as well as works with AMD loaders iirc
02:02:49  <jesusabdullah>so you can do <script>bundle.js</script> <script>var foo = require('whatever');</script> ?
02:02:49  <defunctzombie>jesusabdullah: and exporting the main module to the "name" you provide to standalone
02:02:59  <jesusabdullah>oh, no, it attaches to window
02:03:05  <defunctzombie>jesusabdullah: nope, yep
02:03:10  <jesusabdullah>what I really want to do is something like what I said
02:03:19  <jesusabdullah>y'know, except correctly
02:03:25  <defunctzombie>jesusabdullah: in that case you want regular browserify iirc
02:03:29  <jesusabdullah>okay cool
02:03:33  * fallsemojoined
02:03:43  <defunctzombie>also, I would say that you don't need to write requires into your script tags on pages
02:03:53  <defunctzombie>in fact, I avoid inline scripts on pages whenever possible
02:04:20  <defunctzombie>jesusabdullah: for your use case, you want to look at the "multi" or "external" stuff for browserify iirc
02:04:22  <jesusabdullah>yeah but I'm implementing browserify-cdn
02:04:26  <jesusabdullah>maybe
02:04:33  <jesusabdullah>I might decide it's not worth the trouble
02:04:45  <jesusabdullah>brb I need to open some fucking windows
02:04:49  <defunctzombie>what is the point of browserify-cdn?
02:04:52  <defunctzombie>hahaha
02:04:58  <jesusabdullah>ignore that for now
02:05:16  <defunctzombie>substack: https://github.com/substack/testling-server-example (does this still work?) maybe add a readme with a badge so we know if this approach is still valid?
02:05:59  <jesusabdullah>okay, so there are a few points. One is just to host standalones
02:06:20  <jesusabdullah>the other is to enable stuff like the voxeljs-in-the-browser thing max has been talking about doing
02:07:24  <defunctzombie>jesusabdullah: you might be interested in some of the work done on tryme
02:07:27  <jesusabdullah>mbalho: https://github.com/grncdr/browserify-as-a-service/issues/3#issuecomment-19229130 You want the return to be a JSON hash of file contents?
02:07:37  <jesusabdullah>defunctzombie: not really <_<;
02:07:50  <defunctzombie>cause there, we use require and let users edit in the browser
02:08:02  <defunctzombie>and all the requires work for the modules which are available
02:08:05  <jesusabdullah>mbalho: ^^
02:08:08  <jesusabdullah>mbalho: you might like that
02:08:28  <jesusabdullah>I'm gonna implement the API thl0 talked about, will come back to max's suggested API later
02:08:59  <mbalho>jesusabdullah: the return should be a json object with keys as module names and values as module browserify -r bundle output
02:09:41  * defunctzombiechanged nick to defunctzombie_zz
02:10:07  <thl0>jesusabdullah: looking forward to see this in action
02:10:41  <jesusabdullah>mbalho: okay, I think adding that path later will work
02:10:57  <jesusabdullah>mbalho: do you have interest in defunctzombie_zz 's "tryme" ?
02:11:08  <mbalho>i tried to understand the code once, couldnt :P
02:11:56  * defunctzombie_zzchanged nick to defunctzombie
02:12:05  <jesusabdullah>defunctzombie: ^^
02:12:32  <defunctzombie>:D
02:12:43  <defunctzombie>dunno what to tell you there
02:18:29  <defunctzombie>how do you guys want voxeljs in the browser to work?
02:19:13  <mbalho>see above thread
02:19:40  <defunctzombie>which thread?
02:19:49  <mbalho>https://github.com/grncdr/browserify-as-a-service/issues/3#issuecomment-19229130
02:20:56  <defunctzombie>mbalho: easy hahaha
02:21:22  <defunctzombie>some things to keep in mind tho is execution context once you do have the bundled js file
02:22:43  <dlmanning>Am I crazy or would it be really awesome to autoturn whalesong to "My Heart Will Go On"?
02:22:53  <dlmanning>oops. sorry. wrong channel
02:23:46  <jesusabdullah>dlmanning: no it's not
02:23:52  <jesusabdullah>dlmanning: and yes that would probably be awesome
02:24:27  <dlmanning>hah
02:24:56  <defunctzombie>mbalho: jesusabdullah: I did quite a bit of the leg work that you can leverage on tryme on downloading and installing npm modules
02:25:29  <defunctzombie>mbalho: from there, it was just a matter of either running browserify on a specific dir
02:25:34  <defunctzombie>which you can do in many ways
02:44:20  * thl0quit (Remote host closed the connection)
02:44:50  <jesusabdullah>https://gist.github.com/jesusabdullah/5779125
02:51:36  * wolfeidauquit (Remote host closed the connection)
02:55:18  * tilgoviquit (Remote host closed the connection)
03:02:24  <defunctzombie>jesus I hate callbacks hahaha
03:02:34  <defunctzombie>makes 5 steps looks like a total cluster
03:04:35  <st_luke>defunctzombie: you might be interested in this thing called promise
03:04:41  <defunctzombie>NO
03:04:45  <st_luke>promise is really starting to get popular
03:04:49  <st_luke>soon everybody will use promise in their code
03:04:50  <defunctzombie>sigh
03:05:01  <defunctzombie>so stupid
03:05:10  <defunctzombie>now will have to bundle all these damn promise libs
03:05:16  <st_luke>everybody hates promise but promise is just trying to live its own life be its own person
03:05:26  <defunctzombie>hahaha
03:05:42  <substack>functions are great
03:05:57  <mbalho>promises promises have no promise
03:06:00  <substack>who cares if the code is ugly, just hide it away behind a module.exports and never look at it again
03:06:19  <mbalho>roman cares
03:06:29  <st_luke>promise has feelings
03:06:44  <defunctzombie>:D
03:06:55  * wolfeidaujoined
03:07:01  <defunctzombie>promise needs to go back to the kingdom of nouns
03:09:42  * ralphtheninjaquit (Read error: Operation timed out)
03:15:46  * wolfeidauquit (Remote host closed the connection)
03:17:20  <st_luke>the kingdom of noops
03:19:01  * misterinterruptjoined
03:19:09  <jesusabdullah>ahhh, that point where you wrote the whole thing without testing the individual parts...
03:19:16  <jesusabdullah>also I used express because screw you guys
03:19:42  <misterinterrupt>looks like i came at the right time
03:20:13  <misterinterrupt>Hey StackVM, i missed your banter
03:20:33  <defunctzombie>jesusabdullah:
03:20:37  <defunctzombie>\o/ for express
03:21:22  * wolfeidaujoined
03:25:53  * Ikeymanjoined
03:27:15  * Ikeymanpart
03:34:40  <mikolalysenko>well messing with this library was a waste of time... https://github.com/richardeoin/nodejs-fft-windowing
03:35:31  <mikolalysenko>stupid thing kept killing all the methods in my typed arrays
03:35:45  <mikolalysenko>then I realized it was using a foreach to loop over the elements instead of a simple for-loop...
03:35:55  <mbalho>function window(
03:35:55  <mbalho>wat
03:36:06  <mikolalysenko>it also clobbers globals in Math
03:36:12  <mikolalysenko>because it was cute or something
03:36:21  <mikolalysenko>total wtf, irritated that I spent so much time on it
03:36:31  <mbalho>these look potentially useful though https://github.com/richardeoin/nodejs-fft-windowing/blob/master/windowing.js#L21-L76
03:36:49  <defunctzombie>st_luke: http://i.imgur.com/ok1lVD6.png
03:37:08  <mikolalysenko>I think what I'll do instead is just have the user pass in their own windowing function
03:37:15  <jesusabdullah>oh siiiiiick, crappy error from third party module!
03:37:18  <jesusabdullah>oh greeaaaat
03:37:22  <jesusabdullah>guess I'm bundling this fucker
03:37:49  <mikolalysenko>ok. I am going home now
03:38:53  <jesusabdullah>peace homes
03:38:59  <jesusabdullah>well at ANY rate I'm making PROGRESS
03:39:15  <jesusabdullah>and the way it's written I should be able to hack in all manners of APIs
03:39:20  <jesusabdullah>once it actually works
03:39:24  <jesusabdullah>lotsa movin' parts though
03:42:16  * mikolalysenkoquit (Ping timeout: 252 seconds)
03:43:21  <defunctzombie>is there a delayed stream?
03:43:31  <defunctzombie>like if I want to simulate network delay or something
03:44:21  <mbalho>require('delay-stream')
03:44:42  <defunctzombie>nice
03:44:56  <mbalho>require('delay-stream')(5000) // through
03:44:56  <defunctzombie>I love you guys
03:45:03  * mbalhomouth kisses roman
03:45:13  * mbalhowhat did i type that out loud
03:45:34  * mbalhowinks
03:45:35  <defunctzombie>:D
03:45:42  * mbalhohas a girlfriend
03:45:48  <defunctzombie>lies
03:49:33  * tmcwjoined
03:55:16  <st_luke>defunctzombie: haha I saw that
03:55:29  <st_luke>when i first saw that mac pro i instantly thought of those trash cans
03:55:39  <st_luke>but i kinda want one of those computers now
03:56:23  * st_lukequit (Remote host closed the connection)
03:57:19  <defunctzombie>so it seems that WritableStream.write(..., cb) does not call the callback if the data is written right away
04:03:43  * vitorpachecoquit (Ping timeout: 252 seconds)
04:18:02  <jjjohnny>I think people dislike callbacks b/c of the way they write their code
04:18:37  <jjjohnny>you only get spaghetti if you actually write your anonymous function callback as a function argument
04:19:13  <jjjohnny>fs.waitForIt('wham.js', function(err, data){ // get lost here
04:21:07  <jjjohnny>test
04:21:13  <jjjohnny>oh
04:21:15  <jjjohnny>yeah
04:21:35  <jjjohnny>and then you have more callbacks nested inside arguments
04:21:39  <jjjohnny>}
04:22:19  <jjjohnny>this has nothing to do with anything but people writing their code they way they see it on some guys jquery blog
04:24:19  <jjjohnny>instead just define functions and pass functions, don't string a bunch of anonymous functions inside an argument block
04:25:20  <mbalho>jjjohnny: callbackhell.com
04:26:13  <jesusabdullah>ahhhh so close
04:26:14  <jjjohnny>mbalho: well i guess im rite amirite
04:26:22  <mbalho>jjjohnny: yep
04:26:27  <jesusabdullah>I got everything but actual browserifying working XD
04:30:26  <jjjohnny>binding is another problem I dont have
04:30:58  * dguttmanjoined
04:31:08  <jesusabdullah>substack: yt? I have BROWSERIFY QUESTIONS
04:31:31  <mbalho> /join browserify
04:31:42  <jesusabdullah>there's a browserify channel?? since when?
04:31:52  <mbalho>month or two ago
04:31:52  <jesusabdullah>uuugh gotta close more windows
04:31:59  <jesusabdullah>personal rule: <20 irc windows at any given time
04:32:25  * st_lukejoined
04:33:16  * jcrugzzjoined
04:38:12  * timoxleyquit (Quit: Computer has gone to sleep.)
04:39:55  <st_luke>reminder: don't say anything that could be perceived as negative about basho on twitter
04:43:31  * fentquit (Remote host closed the connection)
04:48:50  * mikolalysenkojoined
04:58:21  * fallsemoquit (Quit: Leaving.)
04:59:09  * fentjoined
05:00:30  * dguttmanquit (Quit: dguttman)
05:01:42  * AvianFlujoined
05:05:52  <mbalho>st_luke: why, will they send the db marketing mob after you?
05:09:25  <AvianFlu>IT'S THE DB MARKETING MOB, RUN!!!!
05:14:49  * fentquit (Remote host closed the connection)
05:17:28  * timoxleyjoined
05:17:38  * timoxleyquit (Read error: Connection reset by peer)
05:20:00  * fentjoined
05:23:41  <Raynos>Has anyone done browserify / tape tests with code coverage before?
05:26:02  <jesusabdullah>https://github.com/jesusabdullah/browserify-cdn/tree/v3 IT'S ALIVE!!
05:31:09  <st_luke>has anyone used openshift?
05:31:25  <st_luke>whoops, accidentally googled for 'openshit'
05:32:12  <mbalho>st_luke: https://github.com/ryanj/nodejs-custom-version-openshift#nodejs-on-openshift
05:32:15  <st_luke>i dont want to pay money for paas when i can get a vps for 5/month
05:32:16  <mbalho>st_luke: best paas
05:32:18  <st_luke>but ill use a free one
05:33:07  <st_luke>ah still kind of weird though
05:33:45  <mbalho>?
05:33:55  <mbalho>its the only paas you can run leveldb on
05:34:02  <mbalho>free paas*
05:34:26  <st_luke>i read the whole readme now, it's less weird than i thought
05:35:20  <mikolalysenko>I am really leery of paas systems nowadays, since I'have had bad experiences with them in the past...
05:36:03  <st_luke>i just use them for things that don't matter a whole lot like static sites
05:36:11  <st_luke>its nice how you get ssh access on openshift though
05:36:17  <mikolalysenko>for static stuff nowadays I use github
05:36:22  <mikolalysenko>that sounds pretty good
05:37:07  <st_luke>mikolalysenko: github is pretty good for static stuff
05:37:09  <mbalho>st_luke: you can ssh, there are instructions somewhere
05:37:16  <mbalho>githubs static stuff is just fastly
05:37:21  <st_luke>mbalho: yea i saw
05:39:39  <st_luke>ive used RHEL for many many years though so i dont really mind using a service of theirs, they know what they're doing
05:39:59  <st_luke>and their website is pretty rad
05:40:18  <mikolalysenko>yeah, it sounds pretty good and even looks good too
05:40:21  * tmcwquit (Remote host closed the connection)
05:40:40  <mikolalysenko>I guess I am just leery of the whole concept in general
05:40:50  <st_luke>me too
05:40:53  <mikolalysenko>especially for free paas, since it doesn't really seem sustainable to me
05:41:07  <st_luke>i agree but in this case
05:41:09  <st_luke>its red hat
05:41:16  <st_luke>and they have a lot of experience making the freemium model work
05:42:38  * timoxleyjoined
05:44:40  * mikealjoined
05:45:05  * fentquit (Remote host closed the connection)
05:45:07  <st_luke>but whatever paas is stupid, just run your own server, its fun
05:47:10  <mikolalysenko>yeah. it is also easier to set up and maintain for simpler projects, like nodejs apps
05:55:21  * defunctzombiechanged nick to defunctzombie_zz
06:06:04  <jesusabdullah>st_luke: yeah but now I need to learn things
06:06:09  <jesusabdullah>st_luke: XD
06:09:53  * timoxleyquit (Ping timeout: 240 seconds)
06:17:18  * shamaquit (Remote host closed the connection)
06:25:40  * misterinterruptquit (Remote host closed the connection)
06:33:18  * st_lukequit (Remote host closed the connection)
06:35:20  * mcollinajoined
06:45:28  * wolfeidauquit (Remote host closed the connection)
07:00:10  * fentjoined
07:07:15  * djcoinjoined
07:08:57  <mikolalysenko>Step 1 towards autotune.js, but not yet tested very carefully: https://github.com/mikolalysenko/stft
07:13:25  * mcollinaquit (Remote host closed the connection)
07:13:42  * dominictarrjoined
07:13:51  * fentquit (Remote host closed the connection)
07:21:08  <jesusabdullah>https://github.com/jesusabdullah/browserify-cdn/blob/v3/bin/index-page.sh This is what happens when templating is a pain in the ass
07:21:11  <jesusabdullah>lol
07:21:25  <jesusabdullah>Is there a mustache CLI tool?
07:28:40  <jesusabdullah>substack: What do you use for cloning objects?
07:31:54  * jcrugzzquit (Ping timeout: 264 seconds)
07:32:40  <dominictarr>hey people who have been playing with generators: how do generators do errors?
07:32:45  <dominictarr>do they throw?
07:32:57  * tilgovijoined
07:33:34  * jibayjoined
07:35:55  <jesusabdullah>dominictarr: lookit what I did today https://github.com/jesusabdullah/browserify-cdn
07:36:21  <jesusabdullah>caching could prooobably be less naive...but other than that I'm pretty happy with it
07:36:30  <jesusabdullah>also: holy shit is leveldb fast
07:36:42  <dominictarr>piping hot!
07:36:56  <jesusabdullah>mmhmm!
07:37:06  <jesusabdullah>THEM BUNDLES BE FRESH
07:37:13  <jesusabdullah>o__o
07:37:15  <jesusabdullah>LOUDBOT: whosaid
07:37:15  <LOUDBOT>EvilHom3r in ##church-of-loudbot on freenode
07:37:18  <dominictarr>becareful though, it's only designed for mobile so I hope your server is an iphone
07:37:19  <jesusabdullah>I see.
07:37:34  <jesusabdullah>dominictarr: Yeah, a really really big iphone
07:37:44  <dominictarr>great!
07:37:48  <jesusabdullah>dominictarr: it's the size and shape of a laptop
07:37:58  <jesusabdullah>dominictarr: and doesn't make phone calls
07:38:01  <jesusabdullah>dominictarr: I hope that's okay!
07:38:11  <dominictarr>sounds like the perfect phone!
07:38:15  <dominictarr>where can I get one?
07:38:19  <jesusabdullah>either way, I don't care. It's soooo fast
07:38:22  <jesusabdullah>dominictarr: lenovo.com ;)
07:38:40  <jesusabdullah>yeah, like, leveldb is SO fast I was testing stuff out and I thought my browser wasn't refreshing
07:38:45  <jesusabdullah>THAT's how fast it is
07:39:03  <dominictarr>nice
07:40:13  <jesusabdullah>inorite? lol
07:41:20  * fentjoined
07:44:29  * rowbitjoined
07:53:18  <jesusabdullah>good day's work! :)
07:57:17  * jcrugzzjoined
08:05:22  * jcrugzzquit (Ping timeout: 246 seconds)
08:11:43  <rvagg>jesusabdullah: congrats, you finally discovered what the fuss is about eh?
08:12:41  <jesusabdullah>rvagg: haha
08:12:47  <jesusabdullah>rvagg: I thought you'd like that
08:13:13  <rvagg>if you're storing blobs of JS code you ought to get some decent compression on it too
08:13:18  <jesusabdullah>nice
08:13:34  <jesusabdullah>Yeah, keys are md5 hashes of JSON blobs, and values are javascript blobs
08:13:45  <jesusabdullah>there are probably better ways of doing it
08:13:50  <jesusabdullah>someday...
08:14:33  <jesusabdullah>but I think it's really unlikely I'll hit a hash collision and it works so
08:15:37  <jesusabdullah>rvagg: I really was like, "f5, f5, what the fuck, f5...oh. Cool!"
08:16:15  <rvagg>ohh, that's nice, so it's basically a huge cache of every combination of browserify bundle that gets created?
08:16:21  <jesusabdullah>yeah basically
08:16:36  <jesusabdullah>so it only actually gets browserified once
08:16:45  <rvagg>mm, that's great
08:17:05  <jesusabdullah>gotta do a small refactor though https://github.com/jesusabdullah/browserify-cdn/issues/5
08:17:06  <rvagg>do you think a timestamp might also be helpful so you can retire ones that haven't been used in a while?
08:17:17  <jesusabdullah>yeah, probably
08:17:30  <rvagg>key = 'md5-timestamp', look up entries using a ReadStream starting at the md5
08:17:52  <rvagg>there's some overhead with making a readStream so the reads won't be quite as fast, but they'll still be fast
08:18:18  <jesusabdullah>hmmm
08:18:21  <jesusabdullah>that's pretty cool
08:18:23  <jesusabdullah>yeah, I mean
08:18:28  <jesusabdullah>I was using couchdb as the cache before so
08:18:32  <jesusabdullah>not too worried lol
08:32:22  * djcoinquit (Quit: WeeChat 0.4.0)
08:32:57  * dominictarrquit (Quit: dominictarr)
08:43:21  <rowbit>/!\ ATTENTION: (default-local) paid account successfully upgraded /!\
08:43:21  <rowbit>/!\ ATTENTION: (default-local) [email protected] successfully signed up for developer browserling plan ($20). Cash money! /!\
08:55:07  <substack>yay, rowbit is back
08:55:13  <substack>it crashed
08:58:01  <substack>fuuuuuck I really want the online encyclopedia of integer sequences
08:58:09  <substack>to be a .json or .csv somewhere
08:58:16  <substack>it's only 200000 records, can't be very much data
09:00:21  <substack>mbalho: we need to get the OEIS onto your datacouch v2 thing
09:00:32  <substack>it's the best dataset ever
09:03:00  * dominictarrjoined
09:10:25  <dominictarr>jesusabdullah: does it handle when someone does a npm publish -f ?
09:10:29  * nicholasfquit (Ping timeout: 240 seconds)
09:23:22  <jesusabdullah>dominictarr: no
09:23:31  <jesusabdullah>dominictarr: not even sure how I'd handle that
09:23:42  <dominictarr>oh, I know how you could do that,
09:23:45  <dominictarr>using leveldb
09:23:58  <jesusabdullah>yeah?
09:24:04  <jesusabdullah>I *am* using leveldb *after all*
09:24:05  <dominictarr>the problem is cache invalidation
09:24:11  <jesusabdullah>yeah
09:24:19  <dominictarr>when a npm module changes, invalidate the bundle
09:24:22  <jesusabdullah>there are a number of cache issues still needing to be resolved, there's an issue on it
09:24:36  <dominictarr>first step is detect when a module changes
09:24:47  <dominictarr>turns out -- I have a module for that
09:25:01  <dominictarr>github.com/dominictarr/npmd/
09:25:15  <dominictarr>rvagg also has written something that levelbot uses
09:26:26  <dominictarr>hmm, there are other applications for this too
09:26:42  <dominictarr>like, if you depend on X, and someone updates X, then rerun your tests
09:26:51  <dominictarr>with the new X
09:28:33  <jesusabdullah>cool
09:28:57  <jesusabdullah>mind making an issue about this for future reference? It's 1:30am so as soon as I finish writing this templating cli tool that should've existed already I'm crashing out
09:31:48  * mikolalysenkoquit (Ping timeout: 245 seconds)
09:36:22  * gwenbelljoined
09:40:36  <substack>noooo mikola just left
09:40:54  <substack>just as I needed to hunt down a least squares implementation
09:41:35  * gwenbellquit
09:51:00  <jesusabdullah>substack: How does curl do reading -d from file?
09:51:06  <jesusabdullah>substack: I don't rember
09:51:37  <jesusabdullah>ahh, @
09:51:54  <dominictarr>curl -sSnT file
09:52:05  <dominictarr>process | curl -sSnT .
09:53:34  <jesusabdullah>aach
09:54:16  <substack>does a PUT
09:55:23  <substack>if you want to POST stdin you can curl -X POST -T- url
09:55:39  <substack>orite -T file
09:55:40  <substack>yes that too
09:56:19  * nicholas_joined
10:09:58  <jesusabdullah>https://github.com/jesusabdullah/exercise-bike It's stupid but it does what I want.
10:15:40  * nicholas_quit (Read error: Connection reset by peer)
10:15:54  * nicholas_joined
10:47:10  * vitorpachecojoined
11:13:24  * thl0joined
11:17:31  * thl0quit (Ping timeout: 246 seconds)
11:21:43  * thl0joined
11:23:19  * whit537joined
11:27:07  * ins0mniajoined
11:27:28  * ins0mniaquit (Remote host closed the connection)
11:31:35  * timoxleyjoined
11:34:55  * wolfeidaujoined
11:34:56  * wolfeidauquit (Remote host closed the connection)
11:35:37  * wolfeidaujoined
11:48:40  <dominictarr>rvagg: stuck on this conversion from 'const std::string *' (aka 'const basic_string<char> *') to
11:48:41  <dominictarr> 'const std::basic_string<char>' for 1st argument; dereference the argument with *
11:48:42  <dominictarr> compare(const basic_string& __str) const
11:49:56  <dominictarr>hmm
11:50:23  <dominictarr>I got it to work by doing the opposite of what the error message seemed to be suggesting
11:57:01  * tilgoviquit (Remote host closed the connection)
11:59:32  * whit537quit (Quit: whit537)
12:01:15  * ralphtheninjajoined
12:20:50  <rvagg>heh, such is c++
12:31:45  * nicholas_quit (Read error: Connection reset by peer)
12:32:07  * nicholasfjoined
12:32:40  * nicholasfquit (Read error: Connection reset by peer)
12:32:57  * nicholasfjoined
12:34:57  * fentquit (Remote host closed the connection)
12:37:06  <dominictarr>rvagg: kinda baffeled by the way everyone says C++ is worse than C, and yet everyone uses C++ anyway
12:39:40  <substack>c++ is viral
12:39:56  <substack>if you ever want to use a lib that uses c++, your whole app must be c++
12:40:27  <substack>unless you link against the other lib which is messy
12:42:10  <dominictarr>but, c is a subset of c++ right?
12:42:28  <dominictarr>it's like C == theGoodParts(C++)
12:44:15  <guybrush>i think its not a strict subset
12:46:55  * gwenbelljoined
12:48:09  * gwenbellquit (Client Quit)
13:05:53  <dominictarr>guybrush: I thought that C++ was a superset, which implies that C is a subset
13:08:01  * thl0quit (Remote host closed the connection)
13:08:37  * thl0joined
13:08:39  * gwenbelljoined
13:13:18  * thl0quit (Ping timeout: 264 seconds)
13:15:27  * gwenbellquit
13:16:23  * fallsemojoined
13:20:07  * ednapiranhajoined
13:26:23  * dguttmanjoined
13:34:31  * Kesslerjoined
13:39:04  * nicholasfquit (Read error: Connection reset by peer)
13:39:27  * nicholasfjoined
13:40:53  * whit537joined
13:42:00  * brianloveswordsquit (Excess Flood)
13:42:35  * dguttmanquit (Quit: dguttman)
13:43:56  * whit537quit (Client Quit)
13:44:56  * brianloveswordsjoined
13:48:49  * thl0joined
13:49:19  * ins0mniajoined
14:09:20  * kevino80joined
14:10:18  <guybrush>is there something like beefy just for a directory?
14:14:45  <guybrush>or maybe i dont understand how to use beefy hmm :D
14:21:32  * dguttmanjoined
14:22:41  <jez0990>guybrush: nodemon?
14:23:17  <guybrush>hmm im not sure what you mean
14:23:39  <guybrush>i dont want to restart something
14:23:46  <jez0990>me either :D do you need it to auto-browserify?
14:23:50  <guybrush>nah
14:24:17  <guybrush>i need a tool which browserifies all the *.js in a dir upon request
14:24:40  <guybrush>and rebundles them upon change, so beefy is only for 1 file
14:24:45  <guybrush>as far as i understand
14:25:03  <guybrush>i guess i will try to write something simple
14:25:35  * dguttmanquit (Client Quit)
14:27:03  <guybrush>or maybe fork beefy or something
14:27:27  <guybrush>or maybe fork jesusabdullah's cdn thing
14:27:29  <guybrush>OR SOMETHING
14:34:24  * tmcwjoined
14:56:31  * jxsonquit (Remote host closed the connection)
14:56:58  * jxsonjoined
15:01:50  * jxsonquit (Ping timeout: 256 seconds)
15:08:15  * mikolalysenkojoined
15:09:47  * nicholasfquit (Read error: Connection reset by peer)
15:10:06  * nicholasfjoined
15:14:06  * timoxleyquit (Quit: Computer has gone to sleep.)
15:23:16  * timoxleyjoined
15:29:20  * Kesslerquit (Read error: Connection reset by peer)
15:33:53  * mikealquit (Quit: Leaving.)
15:34:48  * jxsonjoined
15:44:59  * nicholasfquit (Read error: Connection reset by peer)
15:45:09  * nicholasfjoined
15:46:40  <hij1nx>substack: when using brfs, __dirname is the location of the file that was added to the bundle, so if i want to include an html file below that, something like path.join(__dirname, '..', 'index.html') wont work, any ideas for how to handle that?
15:47:32  * tim_smartquit (*.net *.split)
15:47:34  * sorensenquit (*.net *.split)
15:47:34  * johnkpaulquit (*.net *.split)
15:47:34  * Domenic_quit (*.net *.split)
15:47:35  * chapelquit (*.net *.split)
15:47:35  <mikolalysenko>man. I feel like I still just don't get the stream api
15:47:51  <hij1nx>mikolalysenko: dont get it, just use userland modules ;)
15:47:53  * Domenic_joined
15:47:56  * johnkpauljoined
15:48:05  <mikolalysenko>yeah, but I want to make a module using streams
15:48:18  <hij1nx>mikolalysenko: new Stream
15:48:32  <mikolalysenko>for example, I was working a bit on this last night: https://github.com/mikolalysenko/stft
15:48:33  * thl0quit (Read error: Connection reset by peer)
15:48:41  <mikolalysenko>I want to make a stream for doing audio processing efficiently
15:48:48  <mikolalysenko>like phase vocoder/autotune stuff
15:48:55  * tim_smartjoined
15:49:00  <mikolalysenko>and I think it makes sense to treat it as a stream
15:49:16  <mikolalysenko>but I don't want it to be pausable like a stream...
15:49:33  <mikolalysenko>since the normal version of stream would require making lots of copies of objects I think
15:49:39  <mikolalysenko>and I want to reuse buffers when possible
15:50:01  <mikolalysenko>like in that project, I'd rather split it into two parts
15:50:23  <mikolalysenko>have a part that takes an audio stream and cuts it into overlapping windows
15:50:32  <mikolalysenko>and have a part that takes the windows and adds them back up
15:50:50  <mikolalysenko>and a part in the middle that applies the fft
15:51:58  * nicholasfquit (Read error: Connection reset by peer)
15:52:42  * thl0joined
15:52:46  * nicholasfjoined
15:52:52  * gildean_joined
15:53:15  * pkruminspart
15:53:23  <dlmanning>mikolalysenko: So the problem with a transform stream is that you don't want to create a new buffer?
15:53:31  <mikolalysenko>yeah
15:53:35  * grncdrjoined
15:53:37  <mikolalysenko>that would be bad I think
15:53:43  * gildeanquit (Write error: Connection reset by peer)
15:53:49  <mikolalysenko>not only would it leak, but it is going to screw up other stuff
15:53:54  <dlmanning>Does the duplex stream create a new buffer too?
15:54:07  <mikolalysenko>I think they all have to
15:54:13  <mikolalysenko>how else would you implement pause?
15:54:17  <dlmanning>yeah
15:54:20  <grncdr>jesusabdullah: I'm goihg to be around pretty intermittently today, ping me whenever
15:54:38  <mikolalysenko>or maybe not...
15:54:47  <mikolalysenko>and it could be that I am just thinking about this the wrong way
15:55:35  * jcrugzzjoined
15:57:47  * sorensenjoined
15:57:52  * chapeljoined
16:01:16  <dominictarr>mikolalysenko: streams2 is very complex
16:01:48  <dominictarr>try this: https://github.com/dominictarr/pull-stream
16:02:21  <dominictarr>way simpler, and you have huge control about what it actually does.
16:02:27  <mikolalysenko>dominictarr: can I use that to stream data without copying stuff?
16:03:04  <dominictarr>it'd be dependent on what the downstream does
16:03:09  <mikolalysenko>hmm
16:03:10  <dominictarr>but probably
16:03:54  <dominictarr>you'd be free to figure out a way to do that
16:04:47  <mikolalysenko>ok, so I want to hook these things into webaudio
16:05:07  <mikolalysenko>as a script node
16:05:28  <mikolalysenko>and I am not quite seeing how I would do this...
16:05:45  <mikolalysenko>also this hop things I have won't work as a pull stream
16:05:54  <mikolalysenko>since it has to buffer some data before it can emit a frame
16:06:10  <mikolalysenko>the idea is that I want to chop an audio stream into a sequence of partially overlapping windows
16:06:19  <mikolalysenko>so I can then do a short-time-fourier transform on it
16:06:43  <mikolalysenko>but the amount of frames I have is variable each time
16:07:00  * shamajoined
16:07:50  * nicholasfquit (Read error: Connection reset by peer)
16:08:07  * nicholasfjoined
16:10:17  <dlmanning>mikolalysenko: This is a little crazy, but you could maybe take the readable-streams module and rewrite the readableAddChunk method to do your transform as the chunks are added
16:10:52  <mikolalysenko>dlmanning: I am thinking that I will maybe just scrap using streams altogether and just write a closure...
16:11:13  <dlmanning>:(
16:11:32  <mikolalysenko>then you can wrap that closure in whatever stream api you want, if that is your thing
16:11:45  <dlmanning>heh
16:12:22  <dlmanning>mikolalysenko: Just for my own edification, what sorts of problems would you run into aside from the creation of new objects?
16:13:27  <mikolalysenko>there are also buffering issues
16:13:59  <mikolalysenko>like the data may underrun if I just do a pull on the stream
16:14:30  <thl0>paul_irish_: seems like sourcemaps in canary are a bit broken
16:14:52  <thl0>I can put a breakpoint in separate file, but when I hit it it jumps to the bundle.js
16:15:12  <dlmanning>I see
16:19:53  * whit537joined
16:20:12  * mikealjoined
16:24:52  * jxsonquit (Remote host closed the connection)
16:26:10  <dominictarr>creationix: hey, look what I just stumbled upon https://code.google.com/p/tiny-js/
16:26:19  * Domenic_quit (Changing host)
16:26:19  * Domenic_joined
16:26:28  <creationix>dominictarr: yeah, I looked at that
16:26:32  <creationix>interesting project
16:26:51  <creationix>looks like a simple interpreter
16:27:25  * gildean_changed nick to gildean
16:27:33  <dominictarr>it's probably gonna by very little memory, if it's only 2k sloc
16:27:44  <creationix>yep, but it doesn't even implement all of js
16:27:53  <dominictarr>what is missing?
16:28:03  <creationix>still, if it's turing complete, it would make for an interesting runtime
16:28:08  <creationix>add libuv bindings and make node-light
16:28:40  <creationix>missing inheritance and possible closures
16:29:30  <dominictarr>hmm, it might be a better idea to just add that...
16:29:44  <creationix>I do like the focus on simplicity
16:29:58  <creationix>add a few key language features and it could be a really fun runtime
16:30:11  <creationix>of course, there is also candor :)
16:30:18  * mikealquit (Quit: Leaving.)
16:30:19  <creationix>which I imagine is a lot faster being a jit
16:30:31  <dominictarr>prototypal inheritence and closure scope could be implemented with the same datastructure
16:30:37  <creationix>yep
16:30:50  * creationixhas written an interpreter or two
16:30:58  <dominictarr>sure, but there is a use for low mem _javascript_
16:31:02  <creationix>dominictarr: did you see my "jack" language
16:31:14  <dominictarr>yes!
16:31:14  <creationix>dominictarr: yes, but how much of javascript do you need
16:31:24  <creationix>I would love the basics + generators
16:31:27  <dominictarr>well, it's not about "you"
16:31:30  <creationix>even if it's interpreter slow
16:31:36  <dominictarr>it's about everyone else who has written a module
16:32:04  <creationix>yes, but js has some obscure features/quirks that not many people depend on
16:32:06  <dominictarr>also, I want other people to use the stuff that I write
16:32:21  <dominictarr>agree
16:32:50  <creationix>I think a js runtime with just the basics would be useful to many people
16:32:55  <creationix>with some direct libuv bindings for I/O
16:33:02  <creationix>skip all the node.js api sugar on top
16:33:04  * AvianFluquit (Read error: Connection reset by peer)
16:33:19  <creationix>someone could implement a node compat layer on top in pure js
16:33:40  * AvianFlujoined
16:35:40  <dominictarr>creationix: the provisional title for that idea is No.js
16:35:53  <dominictarr>because that would be the answer to every feature request
16:36:27  <creationix>yes, I love the idea of No.js
16:41:09  <grncdr>creationix: what was wrong with lua/luvit?
16:41:16  <creationix>grncdr: nothing
16:41:18  <creationix>except it's lua
16:41:24  <creationix>not everyone is willing to learn it
16:41:31  <creationix>luvit.io is an amazing platform technically
16:41:44  <creationix>as fast as node.js but with instant startup time and 20x less memory used
16:42:06  <creationix>I once got 120,000 requests per second on a luvit http server
16:42:12  <creationix>single process, single thread
16:42:13  <grncdr>yeah, I feel like luvit didn't/doesn't get enough attention personally
16:42:30  <creationix>partly because nobody has time to promote it
16:42:41  <grncdr>I'm just curious why discuss/implement yet more langs/interpreters
16:42:59  <grncdr>because it's fun is totally legit ;)
16:43:00  <creationix>for fun :)
16:43:15  <creationix>also the main reason luvit isn't more popular is because it's not javascript
16:43:28  <creationix>if there was a lightweight js engine, I could try again
16:43:41  <creationix>though it won't be anywhere near as fast as v8 or luajit if it's tiny
16:44:08  <creationix>but if it's fast enough, if has a place
16:44:17  <creationix>rackspace uses luvit in production because node is a memory hog
16:44:21  <grncdr>yeah fair enough
16:44:30  <creationix>their software doesn't need 100k request per second
16:44:35  <creationix>it's just a monitoring agent
16:44:46  <kenperkins>we do?
16:45:27  <creationix>kenperkins: https://coderwall.com/p/gkokaw
16:45:44  <grncdr>the memory usage is a good reason, but I thought a lot of the reasons JS was so memory hungry were intrinsic to the language itself
16:45:55  <grncdr>*JS interpreters I mean
16:46:07  <creationix>lua is a very similar language feature wise
16:46:29  <creationix>but I guess lua is enough simpler to not eat tons of ram
16:46:37  <guybrush>the browserify-options for the cli should be available via the api too
16:46:39  <creationix>V8 in particular will trade ram for speed all the time
16:46:47  <grncdr>guybrush: they will be
16:47:00  <grncdr>guybrush: actually they are... but I need to push code
16:47:03  <guybrush>oh sweet someone is working on that?
16:47:05  <guybrush>nice
16:47:06  <guybrush>!
16:47:09  <kenperkins>creationix: I know we use node proper as well
16:47:13  <creationix>yep
16:47:18  <grncdr>guybrush: me and jesusabdullah both
16:47:22  <dominictarr>there are plenty of cases where slow is okay, but low ram would be nice
16:47:31  <dominictarr>like tiny scripts that don't do much
16:47:33  <creationix>yes, robot brains
16:47:41  <guybrush>grncdr: super sweet i can use it, let me push my code and show where i need it
16:47:42  <creationix>I have a $10 router with mips cpu
16:47:48  <dominictarr>yeah!
16:47:52  <creationix>it can't run node or luvit, but it can barely run stock lua
16:48:02  <creationix>so a 2k js interpreter would be easy to run
16:48:06  <creationix>(also easy to compile)
16:48:11  <dominictarr>hmm,
16:48:19  <dominictarr>and libuv?
16:48:32  <creationix>libuv is a little heavy, but it might work
16:48:48  <creationix>if not though, direct bindings to epoll and friends isn't too hard
16:49:02  <grncdr>guybrush: have you seen https://github.com/grncdr/browserify-as-a-service/issues/3
16:49:19  <dominictarr>interesting
16:50:41  <creationix>dominictarr: that's an area where lua shines. It's a high-level scripting language with a tiny runtime
16:50:43  * jxsonjoined
16:50:56  <creationix>saw lots of lua powered robots in china at hacker hangouts
16:51:02  <guybrush>grncdr: interesting
16:51:11  <guybrush>grncdr: thats what i wanted to do https://github.com/guybrush/bfydir
16:51:27  <guybrush>but options dont work yet
16:53:56  <guybrush>so you can just do `bfydir ~` and it browserifies all the things
16:54:15  <guybrush>without having to start a new server for all the things
16:54:33  <guybrush>through watchify
16:55:37  <grncdr>guybrush: ah, that's def. a little different
16:55:48  <grncdr>local vs. remote
16:55:54  <grncdr>how does it pick entry points?
16:55:58  <grncdr>index.js?
16:56:06  <guybrush>you can pass options through query-string
16:56:36  <guybrush>at least thats the idea, didnt implement it yet since i cant access options through the bfy-api i would have to spawn a cp and pass the parsed qs
16:56:54  <guybrush>like chrisdickinson did it with beefy, but it feels ugly
16:57:56  <guybrush>so i want not to make a cdn or something like that, just a local dev-server
16:58:24  * Kesslerjoined
16:58:39  <grncdr>ah, I've always just used grunt for that :\
16:58:47  <guybrush>i dont like grunt
16:59:01  <grncdr>it's very heavy
16:59:08  <grncdr>and I don't like it all that much either
16:59:19  <grncdr>but I do enjoy that most everything has been done for me ;)
16:59:20  <guybrush>i dont see the point of grunt at all
16:59:29  <grncdr>^^
17:00:22  <guybrush>but its just my opinion for sure, and i guess grunt helps a lot of people to get stuff done
17:00:33  <guybrush>just for me its not worth even looking at :p
17:01:08  <grncdr>ok, I'm not trying to push it on you :P
17:01:47  <guybrush>haha :D
17:02:48  <guybrush>grncdr: if you got something that makes cli-options of current bfy available via the api tell me! i will use it even if i have to put a git-dependency into my thing
17:03:04  <guybrush>dont want to bother with that if someone already has done it
17:03:16  <guybrush>or i will just spawn a damn cp
17:03:33  <grncdr>guybrush: what options do you need that aren't exposed?
17:04:34  <grncdr>between (b = browserify(opts)) && b.require(opts) && b.bundle(opts) I think they're all covered...
17:04:36  <dominictarr>creationix: it looks like this tiny-js thing is actually quite wrong
17:04:46  <creationix>missing a lot of js right
17:04:57  <dominictarr>like, it errors on missing semicolons
17:05:08  <dominictarr>and if you call a function with no args.
17:06:02  <creationix>dominictarr: know what would be awesome?!
17:06:07  <guybrush>grncdr: bfy.bundle(opts) these opts i mean
17:06:08  <dominictarr>what?
17:06:10  <creationix>a js interpreter written in rust
17:06:18  <dominictarr>why rust?
17:06:22  <creationix>and then bundle that with zero.rs
17:06:23  <guybrush>grncdr: like debug standalone and stuff
17:06:24  <creationix>boot to js
17:06:46  <dominictarr>_boot_ _to_ _js_?
17:06:46  <creationix>http://thechangelog.com/rustboot-a-tine-32-bit-kernel-written-in-rust/
17:07:14  <creationix>you could dump the kernel and a set of js scripts on a vm image or raw hardware flash drive
17:07:35  <creationix>just need a rust js interpreter and expose some platform apis to js
17:07:37  <creationix>write os in js
17:08:50  <creationix>js is a terrible language to write a kernel in
17:08:53  <dominictarr>oh, that is owesome
17:08:55  <creationix>but it sure would be fun
17:09:23  <dominictarr>you'd just have to write a js in rust that used no garbage collection
17:09:38  <creationix>or implement the GC in the interpreter
17:09:39  <dominictarr>what is rust's memory use?
17:09:55  <creationix>I would assume comparable to C
17:09:58  <creationix>but I don't know for sure
17:10:14  <creationix>I know they are big on "zero cost abstractions"
17:10:31  <creationix>more compile-time offsets and less runtime wrapping
17:10:49  <dominictarr>oh, interesting
17:11:46  <dominictarr>rust looks a lot better than C++
17:11:52  <creationix>indeed
17:11:58  <creationix>I hope it replaces C++ eventually
17:12:12  <creationix>I would love an OS that's free of all C++ code
17:12:25  * mikealjoined
17:14:36  * ELLIOTTCABLEquit (Remote host closed the connection)
17:14:44  * ELLIOTTCABLEjoined
17:17:46  <dominictarr>doesn't look like the package system is as good as npm though
17:18:13  * pkruminsjoined
17:20:34  * tmcwquit (Remote host closed the connection)
17:20:39  * dominictarrquit (Quit: dominictarr)
17:20:58  <mikolalysenko>dang, dominictarr just quit
17:21:25  <mikolalysenko>but maybe some of you stream wizards can take a look at this and tell me how to do it in streams 2: https://github.com/mikolalysenko/frame-hop
17:26:23  * tmcwjoined
17:27:13  * yorickjoined
17:38:56  <Raynos>isaacs: https://github.com/Raynos/dotfiles/blob/master/.functions#L99
17:39:18  <Raynos>I finished that open GH pull request thing.
17:39:35  <Raynos>It doesn't open the github website for the PR in your editor though :( couldn't get it to do that
17:41:30  * dominictarrjoined
17:44:11  * chapelquit (Ping timeout: 260 seconds)
17:45:21  <Kessler>mikolalysenko: you can take a look at this: https://github.com/yanush/stream-slicer though its still a work in progress
17:46:28  <mikolalysenko>Kessler: is it copying though? I don't want to allocate any extra garbage if possible
17:46:56  <mikolalysenko>dominictarr: also, now that you are heere can you take a look at this and tell me how to streamify it? https://github.com/mikolalysenko/frame-hop
17:46:59  * chapeljoined
17:47:30  <thl0>does anyone know how this preinstall works? "preinstall": "npm link modules/* --prefix=node_modules"
17:47:51  <Kessler>it is currently debuffering strings (which I know is bad) but I need to do it since I'm looking for the separator. However you can easily not do it
17:48:02  * nicholasfquit (Read error: Connection reset by peer)
17:48:03  <thl0>looked around, but cannot find any info related to --prefix cc isaacs
17:48:09  <Raynos>dominictarr: https://github.com/richardanaya/mux.js you should show that guy streams :)
17:48:30  <dominictarr>mikolalysenko: so, it you feed it data, and it spits out fixed sized frames?
17:48:31  * nicholasfjoined
17:48:38  <mikolalysenko>dominictarr: yeah, but they overlap
17:48:47  <thl0>essentially it creates links inside node_modules to ../modules , but I wanna know how it works
17:48:48  <mikolalysenko>dominictarr: the distance between data is hop_size
17:49:10  <mikolalysenko>like first frame is [0, n], next is [h, n+h], then [2h, n+2h] and so on
17:49:41  <dominictarr>mikolalysenko: why would you want overlapping data?
17:49:55  <mikolalysenko>dominictarr: you need it to do a short time fourier transform
17:50:03  <mikolalysenko>dominictarr: or lots of other signal processing
17:50:25  <mikolalysenko>dominictarr: that is the active ingredient in making an autotune/phase vocoder implementation
17:51:00  <dominictarr>mikolalysenko: you could use a very similar pattern to this https://github.com/dominictarr/pull-utf8-decoder
17:51:04  <mikolalysenko>or also doing a proper powerspectrum for the signal
17:51:40  <dominictarr>got it
17:52:02  <dominictarr>hmm, except a single push might result in several frames
17:52:08  <mikolalysenko>yeah
17:52:12  <dominictarr>hmm, okay, that is a little different
17:52:14  <mikolalysenko>or maybe none at all
17:52:21  <dominictarr>yes
17:53:10  <mikolalysenko>also you don't want to copy stuff
17:53:33  <mikolalysenko>like if I have to create a typed array per each frame, that would be unacceptable
17:53:55  <mikolalysenko>not only is it super slow to malloc typed arrays, but it generates a ton of garbage which could cause skips in the audio stream and sound crappy
17:54:10  <mikolalysenko>so I want to reuse the buffers
17:54:40  <dominictarr>would it be enough to trust that the consumer has finished with them after a given time?
17:54:50  <dominictarr>like have a fixed buffer?
17:55:02  <mikolalysenko>I am assuming right now that the consumer processes them immediately and is done once they return
17:55:03  <dominictarr>and reuse them?
17:55:16  <mikolalysenko>yeah, I am currently reusing the frames from the buffer
17:55:21  <mikolalysenko>they are all just subarrays over a common buffer
17:56:11  <dominictarr>and also, in this case, you shouldn't mutate the buffers
17:56:19  <mikolalysenko>yeah
17:56:46  <mikolalysenko>in my intended use they would get copied into a local buffer and multiplied with a window typically
17:59:24  <hij1nx>substack: re: browserify, "standalone only works with a single entry point", any way to name/referr to a bundle?
18:02:06  * nicholasfquit (Read error: Connection reset by peer)
18:02:26  * nicholasfjoined
18:02:26  <jesusabdullah>grncdr: g'morn, I just got up and I'm in a brain fog right now but gimme another hour or two and I'll probably have a sports acid or two in me
18:02:53  <dominictarr>mikolalysenko: so, you could make it streamified with through very easily
18:03:11  <mikolalysenko>dominictarr: without making copies?
18:03:17  <dominictarr>yes
18:03:30  <mikolalysenko>dominictarr: ok, how do I do it?
18:03:41  <thl0>jesusabdullah: good thing I got an issue waiting for you once you had your coffee :) https://github.com/jesusabdullah/browserify-cdn/issues/8
18:04:56  <dominictarr>var slicer, ts = through(function (data) {slicer(data)}); slicer = frameHop(256, 64, ts.queue); return ts
18:05:31  <mikolalysenko>how does ts.queue work?
18:05:51  <mikolalysenko>like if the stream gets paused will it fuck up?
18:05:53  <dominictarr>it emit('data', data)
18:06:08  <Kessler>pardon the question, but "through" is a module?
18:06:11  <dominictarr>or if it's paused, an array until down stream calls resume
18:06:24  <mikolalysenko>hmm
18:06:28  <dominictarr>kessler: correct: through = require('through')
18:06:39  <dominictarr>mikolalysenko: you can disable pause if you really must
18:06:46  <dominictarr>ts.pause = function () {}
18:06:48  <mikolalysenko>so what I am wondering is what happens if my through stream gets paused and then I write to it?
18:06:55  <mikolalysenko>and it emits some frames
18:07:00  <mikolalysenko>will those frames just disappear?
18:07:04  <dominictarr>no
18:07:16  <dominictarr>they will sit in the output buffer
18:07:22  <mikolalysenko>but that won't work
18:07:28  <mikolalysenko>because they will get overwritten
18:07:35  <mikolalysenko>so even worse than dropping them it will just spit out garbage
18:07:50  <mikolalysenko>maybe even a lot of garbage if it buffers up
18:07:52  <jesusabdullah>thl0: Yeah I saw
18:08:09  <dominictarr>mikolalysenko: what would be best for your usecase? drop them?
18:08:12  <thl0>jesusabdullah: :) but in general it works great
18:08:21  <jesusabdullah>thl0: nice!!
18:08:29  <mikolalysenko>probably buffer inputs or pause upstream would be better
18:08:47  <dominictarr>right - that is also simple
18:08:48  <jesusabdullah>thl0: it has quite a few moving parts, I was concerned it would all explode in a mess of springs and sprockets
18:08:51  <thl0>jesusabdullah: although I couldn't test with debug since that caching thing kept happening
18:09:07  <dominictarr>backpressusre will tell the source to slowdown
18:09:24  <dominictarr>if the source understands that, then it will stop feeding data in
18:09:33  <mikolalysenko>ok
18:09:49  <thl0>jesusabdullah: and explode it did, after teasing me by showing off how cool it will work once that is all fixed :p
18:10:53  <jesusabdullah>well I think an explosion is more like http://www.homestarrunner.com/sbemail118.html
18:11:03  <jesusabdullah>"ert+, y76b?"
18:13:57  <thl0>jesusabdullah: that is very funny dude and yes the explosion I witnessed wasn't quite like that
18:14:35  <Kessler>question to the respectable forum: when implementing a transform stream, does _flush() always get called at the end ?
18:15:39  <Kessler>(when = I'm)
18:16:19  * brianloveswordsquit (Excess Flood)
18:16:46  * ins0mniaquit (Remote host closed the connection)
18:18:26  * brianloveswordsjoined
18:31:28  * ins0mniajoined
18:31:28  <dominictarr>kessler: yes
18:31:49  <Kessler>any edge cases or something like that where it doesn't happen ?
18:32:38  * jcrugzzquit (Ping timeout: 256 seconds)
18:32:56  <jesusabdullah>thl0: you never watched homestar runner?
18:33:15  <jesusabdullah>thl0: that's what I had instead of saturday morning cartoons
18:33:36  <jesusabdullah>oh sick, sushi today
18:37:08  * defunctzombie_zzchanged nick to defunctzombie
18:39:16  <rannmann>this is my new favorite thing
18:39:17  <rannmann>http://gizoogle.net/
18:39:25  <rannmann>it translates search results too
18:39:27  <rannmann>http://i.imgur.com/uDu4nDQ.png
18:39:29  <rannmann>hahahaha
18:40:15  <thl0>jesusabdullah: nope, today was my first encounter
18:42:36  <grncdr>jesusabdullah: just going out for lunch, willbe back in an hour or so
18:42:41  <grncdr>feel free to /query me
18:42:52  <jesusabdullah>grncdr: sounds good
18:43:07  <jesusabdullah>grncdr: I have a 6 shot mocha, if that doesn't wake me up I should just give up on being productive today ;)
18:50:50  <defunctzombie>substack: ping
18:53:39  <Raynos>I need a thing that loads config files with cascading things
18:53:52  <thl0>Raynos: nconf
18:54:08  <Raynos>like I want config.json by default
18:54:17  <Raynos>and override with config.{{NODE_ENV}}.json if exists
18:54:24  <dominictarr>jesusabdullah: on gizoogle wikipedia is wikipizzle
18:54:25  <thl0>Raynos: https://github.com/flatiron/nconf
18:54:42  <Kessler>config-chain
18:54:57  <Kessler>err: https://github.com/dominictarr/config-chain
18:55:03  <defunctzombie>Raynos: for db config I prefer env vars with option params
18:55:19  <Raynos>i prefer configuration files checked into git
18:55:24  <defunctzombie>all of these things are too complex
18:55:25  <Raynos>env vars are great for open source
18:55:32  <dominictarr>defunctzombie: rc
18:55:49  <thl0>Raynos: Kessler: config-chain looks good as well, seems to work similar to nconf
18:56:03  <dominictarr>^ the non configurable config loader
18:56:07  <Kessler>I will with config-chain a lot, haven't tried the other yet though
18:56:12  <defunctzombie>dominictarr: nice
18:56:24  <defunctzombie>dominictarr: similar to a loading strategy I tried with bookrc
18:56:30  <defunctzombie>for my error logging stuff
18:56:37  <dominictarr>cool
18:56:49  <dominictarr>you want config to be loaded the same way always
18:57:06  <dominictarr>having custom config code in different projects is a waste of time
18:57:17  <thl0>dominictarr: config-chain seems much more light weight than nconf
18:57:19  <dominictarr>just do it one way so it's obvious
18:57:29  <Kessler>anyone might be willing to take a look here and tell me why Transform._flush doesn't fire: https://github.com/yanush/stream-slicer
18:57:32  <dominictarr>thl0: that is exactly why I wrote it
18:57:37  <thl0>:)
18:57:39  <Kessler>I'm clueless
18:58:24  * ins0mniaquit (Ping timeout: 260 seconds)
18:58:38  * jcrugzzjoined
18:59:27  <dominictarr>kessler: is it because you don't call https://github.com/yanush/stream-slicer/blob/master/lib/StreamSlicer.js#L19 callback?
18:59:52  <Raynos>i think ill use config-chain
19:00:03  <Raynos>because politics. dominictarr >>> flatiron
19:00:35  <Kessler>dominictarr: *bonks head* 'ill go hide in the corner for abit bbs :)
19:00:59  <jesusabdullah>https://en.wikipedia.org/wiki/Elvis_taxon
19:01:11  <jesusabdullah>Raynos: y ur hatin' on lil' flatty? ;)
19:01:16  <jesusabdullah>Raynos: seriously though, fuck nconf
19:02:00  <Raynos>kessler: https://github.com/yanush/stream-slicer/blob/master/lib/StreamSlicer.js#L32
19:02:03  <Raynos>don't do that
19:02:10  <Raynos>the Transform flushes you
19:02:14  <Raynos>you dont flush yourself
19:02:52  <Kessler>but its exactly the same semantics , or am I missing something else?
19:03:35  <Kessler>otherwise I'll override _flush = function(...) { this._myownFlushImpl() ... }
19:06:11  <Kessler>Raynos: I mean that in this case the transform flush is exactly my internal flush
19:06:25  * nk109quit (Quit: Computer has gone to sleep.)
19:07:54  * nicholasfquit (Read error: Connection reset by peer)
19:08:11  * nicholasfjoined
19:14:46  <mikolalysenko>ok. I think the moral of this whole exercise is that you should just write simple things using functions, and if you need to turn it into a stream later on you should just call through() and forget about it
19:15:04  <mikolalysenko>but turning things into streams eagerly is a bad idea
19:15:22  <jesusabdullah>whateva, I do wha I wan
19:15:24  <mikolalysenko>(unless it really is a stream or you are using a library that produces/consumes streams insternally)
19:15:51  <jesusabdullah>I'm so outta control I just drank a six shot mocha and am still alive! Whateva!
19:16:26  <mikolalysenko>jesusabdullah: man, that much caffeine would make me pretty sick
19:16:47  <Kessler>yea not to mention that you might get a heart attack or something
19:16:54  <Kessler>at least an irregular heart bit
19:23:10  <jesusabdullah>wussies. ;)
19:23:20  <jesusabdullah>Alaskans looove coffee
19:23:25  <jesusabdullah>lol
19:23:38  <jesusabdullah>you can throw a rock in this town and it'll hit a drive-through coffee stand
19:23:55  <jesusabdullah>in fairbanks it'll bounce off a drive-through coffee stand and land in a thai restaurant's parking lot
19:24:51  <Kessler>enojy: http://www.energyfiend.com/caffeine-overdose-facts-and-fiction
19:24:52  <Kessler>:)
19:25:15  <Kessler>love #10 lol
19:26:36  * snojjoined
19:29:02  * timoxleyquit (Quit: Computer has gone to sleep.)
19:38:55  <jesusabdullah>creationix: yeah but how does yield work?
19:39:22  <creationix>it suspends the generator and resumes when the callback in the continuable is called
19:39:49  <creationix>file = yield fs.readFile("myfile.txt") is the same as fs.readFile("myfile.txt")(function (err, file) {...})
19:40:13  <guybrush>and where is err?
19:40:19  <creationix>yield itself just yields the continuable up to the run() function
19:40:21  <jesusabdullah>guybrush: gets thrown?
19:40:26  <guybrush>ah ok :D
19:40:34  <creationix>but it's the run() function that suspends and then return/throw
19:40:39  <jesusabdullah>that's some dark magicks there creationix
19:40:45  <creationix>jesusabdullah: not really
19:40:56  <creationix>just ES6 generators, plain functions and a 40-line helper
19:41:06  <creationix>no promises required!!!
19:41:16  <creationix>no transpilers to rewrite your code
19:41:24  <creationix>just js functions and generators
19:41:32  <jesusabdullah>creationix: well ES6 is obviously heretical, so
19:41:50  <jesusabdullah><3
19:41:51  <creationix>well, I'm also using my own streams
19:41:58  <creationix>much simpler than node streams
19:42:03  <creationix>:P
19:42:12  <jesusabdullah>Yeah, I used pull-stream for something once
19:42:13  <guybrush>so maybe its a dumb question, but generators, yield and stuff - its _only_ sugar right?
19:42:31  <creationix>guybrush: as in it's optional, yes
19:42:34  <guybrush>why do you want to use yield over functions?
19:42:36  <creationix>the semantics are slightly different
19:42:40  <guybrush>ok
19:42:46  <jesusabdullah>guybrush: SURPRISE it's ASPARTAME
19:42:55  <jesusabdullah>also I can see why you'd use yield
19:43:00  <creationix>guybrush: with yield, you can use things like try..catch, while(){} and all the other sync control-flow primitives
19:43:12  <creationix>with callbacks you need a library like async to re-implement all them for you through apis
19:43:21  <guybrush>ok
19:43:44  <jesusabdullah>guybrush: creationix: to avoid stuff like https://github.com/jesusabdullah/browserify-cdn/blob/master/bundler/index.js ? XD
19:43:54  <jesusabdullah>(though, to me this is pretty awesome)
19:43:59  <guybrush>its not so bad?
19:44:01  <dominictarr>creationix: does yeild throw the error on the callback?
19:44:02  <creationix>but just like callbacks, any time you see "yield" in code, remember that you will proabably get suspended at that point. Other code can run while you are suspended
19:44:09  <guybrush>why do people hate indents
19:44:13  <guybrush>i just dont get it
19:44:17  <guybrush>its super easy to grasp
19:44:28  <creationix>dominictarr: the callback is outside the generator and uncatchable
19:44:46  <creationix>so it doesn't change the story there
19:45:24  <dominictarr>if I have an async function, can I just magically convert that into a generator,
19:45:35  <dominictarr>and use it with yeild or with cb?
19:46:11  <guybrush>also will IE6 support yield?
19:46:33  <guybrush>nvm just kidding :)
19:47:07  <jesusabdullah>lol
19:47:08  <creationix>guybrush: use tracuer and it might
19:47:32  <creationix>dominictarr: generators don't do any magic async stuff
19:47:45  <creationix>but they do suspend when you yield and resume when you tell them to
19:47:58  <creationix>so my run() helper turns them into magic faux-blocking functions
19:48:15  <creationix>https://github.com/creationix/gen-run/blob/master/run.js
19:48:51  <guybrush>oh i have only one question left, are there usecases where its better to avoid/use generators?
19:49:02  <guybrush>like.. because perf sucks or something
19:49:11  <creationix>guybrush: currently they are slightly slower than callbacks
19:49:20  <guybrush>ok thx
19:49:21  <creationix>but that should change over time till they are a lot faster
19:49:30  <creationix>mainly you shouldn't use them if you don't have them
19:49:36  <creationix>or if you want more control
19:49:44  <creationix>like catching the error without using try..catch
19:49:47  <creationix>or do things in parallel
19:49:54  <guybrush>oh ok
19:50:13  <creationix>though a simple helper that accepted several continuables and returned a single one would make parallel easy
19:50:24  <creationix>results = yield parallel(op1(), op2(), op3())
19:50:31  * dguttmanjoined
19:50:46  <dlmanning>creationix: So why the decision to use generators for js-git?
19:50:56  <creationix>dlmanning: js-git doesn't use generators
19:51:04  <creationix>only my sample does
19:51:09  <creationix>js-git uses continuables and min-streams
19:51:15  <dlmanning>Oh, okay
19:51:25  <guybrush>actually i think generators arent so bad (i think it looks good and nice to code) - but the one thing i hate is, now we have yet another api
19:51:27  <creationix>continuables are very yummy to consume when you have generators though
19:51:31  <guybrush>so we have 3 types of streams
19:51:33  <guybrush>and now generators
19:51:45  <creationix>guybrush: forget the past, move on :)
19:51:49  <guybrush>haha :D
19:52:05  <creationix>I've got only min-streams, continuables, and generators and it's really simple and nice
19:52:29  <creationix>(except the library is min-streams and continuables only, no generators in there)
19:53:00  <dominictarr>attempting to persuade for modularity https://github.com/cpettitt/dagre/issues/60
19:53:09  * dominictarrquit (Quit: dominictarr)
19:53:27  <dlmanning>creationix: what's the advantage of using continuables without generators?
19:54:08  <creationix>dlmanning: they have many of the advantages of promises, but without the extra abstraction
19:56:48  <dlmanning>creationix: Maybe I need to play with them a little more, but it feels like I really need to mentally keep try of the underlying implementation to use them effectively
19:57:16  <creationix>dlmanning: using gen-run with continaubles is really simple
19:57:28  <creationix>yield continuable will either return the value or throw the error
19:57:30  <dlmanning>Right, but them I'm using generators
19:57:41  <dlmanning>Which brings me back to the original question :)
19:57:42  <creationix>and stuff can happen while you're yielded
19:57:48  <chrisdickinson>lazy question
19:58:04  <chrisdickinson>is there a module that takes two paths, A and B, and gives back the relative path from A to B?
19:58:36  <creationix>chrisdickinson: I thought maybe node's path module had that
19:58:38  <creationix>not sure though
19:59:02  <chrisdickinson>ah y eah
19:59:05  <chrisdickinson>path.relative.
19:59:08  <chrisdickinson>awesome
19:59:11  <creationix>sweet
19:59:12  <mikolalysenko>quick question: is there a way to dump a typed array quickly to gnuplot?
19:59:22  <creationix>I only know because I had to reimplement that module in lua when I was doing luvit
19:59:24  <mikolalysenko>like a 1d typedarray basically
19:59:30  <jesusabdullah>gnuplot :(
19:59:46  <jesusabdullah>mikolalysenko: I'm still waiting for a graphing library in javascript that's vaguely up-to-snuff
19:59:58  <mikolalysenko>jesusabdullah: yeah, it would be nice
20:00:02  <jesusabdullah>mikolalysenko: I should probably learn to like gnuplot, or like get a grip with tikz or something
20:00:20  * dominictarrjoined
20:01:47  <mikolalysenko>I usually use tikz for my stuff, but I think a native js plotting library would be better
20:02:17  <mikolalysenko>plotting should be simple to modularize, so there is no reason not to start building stuff to do it
20:03:18  <jesusabdullah>I've kinda-sorta tried a few times, I always get mired in trying to figure out the right abstraction
20:03:28  <jesusabdullah>it would probably help if I, say, read the source code to matplotlib or something
20:03:31  <mikolalysenko>I think bottom up is better
20:03:39  <mikolalysenko>like make stuff to plot specific things
20:03:57  <jesusabdullah>I think maybe if I were to try again I'd, umm
20:03:58  <mikolalysenko>for example, a library that just makes scatter plots would be easy
20:04:06  <jesusabdullah>choose a library that does scene graphs or something
20:04:17  <jesusabdullah>I always think I want a coordinate transform library, or a set of them
20:04:24  <jesusabdullah>but maybe I'm wrong
20:04:25  <mikolalysenko>not sure if that is a good solution... I am personally not a huge fan of scenegraphs...
20:04:29  <jesusabdullah>I'm terrible at reasoning about graphics
20:04:47  <mikolalysenko>you just have a list of things you want to draw and a view from which you want to draw them
20:04:57  <jesusabdullah>view?
20:05:02  <mikolalysenko>like a camera
20:05:13  <mikolalysenko>you can make it fixed if you want, doesn't matter much
20:05:39  <mikolalysenko>basically you want some way to move your coordinate system around when you draw stuff, that is what the "camera" or "view" does in a graphics engine
20:05:48  <mikolalysenko>the rest of the stuff is just a big for loop that looks like:
20:05:50  * dominictarrquit (Quit: dominictarr)
20:05:54  <mikolalysenko>for each object: draw object
20:05:57  <jesusabdullah>yeah!
20:06:04  <jesusabdullah>yeah, that's what I want
20:06:17  <mikolalysenko>you can already do that in webgl
20:06:21  <jesusabdullah>that's what I mean by "coordinate transform library"
20:06:31  <mikolalysenko>oh, that is just matrix algebra
20:06:37  <mikolalysenko>you probably don't need a library for that
20:06:41  <jesusabdullah>where I put in, say, plot x/y coordinates and get canvas coordinates
20:06:52  <jesusabdullah>Yeah you don't NEED one but I feel like if I had that I could reason about it better
20:07:01  <creationix>dlmanning: is this better? https://gist.github.com/creationix/5784580#file-sample_plain-js
20:07:20  <mikolalysenko>you could use gl-matrix
20:07:33  <mikolalysenko>it has methods that translate intuitive coordinate operations to matrix stuff
20:07:37  <mikolalysenko>like rotate/translate/etc
20:07:44  <jesusabdullah>nice
20:07:49  <jesusabdullah>that's a library?
20:07:52  <mikolalysenko>yeah
20:08:02  <mikolalysenko>https://npmjs.org/package/gl-matrix
20:08:11  <jesusabdullah>I wonder where _ddgbot is
20:08:28  <mikolalysenko>look at this page: http://glmatrix.net/docs/2.0.0/symbols/mat4.html
20:08:59  <mikolalysenko>basically once you have a matrix that goes from world coordinates -> view frustum coordinates you are finished
20:09:22  * _ddgbotjoined
20:09:25  <jesusabdullah>there you are
20:09:39  <jesusabdullah>what's a frustum?
20:09:57  <jesusabdullah>also I want mat4?
20:10:05  <mikolalysenko>a frustum is a kind of shape
20:10:16  <mikolalysenko>it is is basically a truncated rectangular pyramid
20:10:31  <jesusabdullah>I thought those matrices were block form [[2x2], [0;0]; [0, 0, 1]]
20:10:32  <dlmanning>creationix: Well, that's your standard nested-callbacks-are-bad example, yeah.
20:10:51  <jesusabdullah>oh that shape, I know the kind
20:10:54  <mikolalysenko>the point of the frustum is that it represents the geometry you can view
20:11:11  <jesusabdullah>it's the thing that a projector puts on the wall when it's not pointed straight
20:11:14  * Wraithanjoined
20:11:36  <mikolalysenko>yeah
20:11:52  <mikolalysenko>if you have a perspective view then it is a pyramid
20:11:58  <jesusabdullah>so wait, why mat4?
20:12:03  <mikolalysenko>but if you are using an orthogonal view then it will be a cuboid
20:12:08  <mikolalysenko>because of homogeneous coordinates
20:12:28  <jesusabdullah>what's homogeneous mean in this context?
20:12:29  <mikolalysenko>basically in graphics and most geometry stuff you work with projective geometry
20:12:33  <jesusabdullah>ugh I'm either really rusty or a noob
20:12:38  <mikolalysenko>no, it is ok
20:13:03  <mikolalysenko>this stuff is a bit abstract if you haven't seen it before, but it is a really powerful way to think about geometry
20:13:33  <mikolalysenko>the idea in projective geometry is that you replace points lines and planes in 3d geometry with linear subspaces in 4d geometry
20:13:44  <mikolalysenko>so a point becomes a line through the origin in a one dimensional higher space
20:13:55  <mikolalysenko>this is hard to see in 3d, but the 2d picture is a bit more clear
20:14:09  <dlmanning>creationix: I mean. There are tons of control-flow modules out there for cases like that one. I was just wondering if continuables were intimately connected with generators
20:14:10  <ednapiranha>Wraithan: !
20:14:20  <Wraithan>ednapiranha: I hang out in here from time to time, yea
20:14:22  <mikolalysenko>consider for example how this would work 2d
20:14:22  <jesusabdullah>ednapiranha: ????
20:14:25  <ednapiranha>Wraithan: lol
20:14:32  <ednapiranha>Wraithan: hello friend of #amo
20:14:36  <jesusabdullah>Am I witnessing a REUNION of SORTS?
20:14:42  <ednapiranha>jesusabdullah: we both work at mozilla :)
20:14:44  <Wraithan>jesusabdullah: we both work at mozilla
20:14:47  <jesusabdullah>oh word
20:14:47  <mikolalysenko>jesusabdullah: your coordinates for points are represented by 3d vectors and matrices by 3x3 transformations
20:14:48  <ednapiranha>jinx
20:14:52  <creationix>dlmanning: the only thing they have to do with generators is they are easy to consume since they are a return value you can pass to yield
20:15:01  <creationix>promises have the same property
20:15:02  <Wraithan>ednapiranha: I didn't smile, completely different
20:15:08  <ednapiranha>Wraithan: dammit
20:15:13  <jesusabdullah>mikolalysenko: you should do a blog post about this so I can read it over and over and share it with my friends
20:15:18  <Wraithan>ednapiranha: they do not hash the same,
20:15:20  <Wraithan>haha
20:15:25  <dlmanning>creationix: Right, but they seem like a control-flow method specifically crafted to be used with generators
20:15:44  <creationix>dlmanning: I mean, I could have used async.waterfall or something, but that's a lot more hidden code than my 40-line generator helper
20:15:45  <jesusabdullah>mikolalysenko: your blog post about GoL on curved spaces was a pretty big hit amongst my engineering friends on facebro ^__^
20:15:59  <mikolalysenko>jesusabdullah: yeah, I think that might be a better idea
20:16:06  <creationix>dlmanning: not really, I've been pushing continuables for years
20:16:18  <creationix>since the beginning of node, long before v8 had a hope of getting generators
20:16:20  <jesusabdullah>mikolalysenko: word, your blog posts are fun
20:16:23  <mikolalysenko>jesusabdullah: trying to explain this via irc without figures is probably not a great environment
20:16:26  <mikolalysenko>jesusabdullah: thanks!
20:16:30  <dlmanning>creationix: Okay, good to know. I'll keep playing around with them.
20:16:32  <jesusabdullah>mikolalysenko: what's your blog's url again? I'm gonna add that shit to my blagroll
20:16:39  <mikolalysenko>0fps.net
20:16:42  <jesusabdullah>Wraithan: ednapiranha: very cool
20:16:45  <creationix>dlmanning: my original post on the subject back in 2010 http://howtonode.org/do-it-fast
20:20:44  <jesusabdullah>mikolalysenko: k done http://jesusabdullah.github.io/
20:20:50  <jesusabdullah>I have a very short blogroll
20:21:04  <mikolalysenko>jesusabdullah: cool! I'll add you back
20:21:38  <jesusabdullah>word
20:21:45  <dlmanning>creationix: Do you use Raynos' continuables utilities?
20:21:52  <jesusabdullah>don't feel obligated of course, I just really like your blog XD
20:21:54  <creationix>never tried them
20:22:03  <creationix>I tend to not use control-flow libraries
20:22:11  <jesusabdullah>I should add a favicon to my blog
20:22:27  <creationix>I don't like unnecessary dependencies and fat call-stacks
20:22:31  <Wraithan>just nih it like everyone else?
20:22:50  <creationix>Wraithan: no, I don't use my own control-flow libraries either
20:23:03  <Wraithan>oh, so you nih it every time
20:23:05  <Wraithan>nice
20:23:13  <creationix>I make heavy use of closures and named functions
20:24:07  <creationix>one function level for closure state and then a bunch of named functions that act like co-functions
20:24:08  <creationix>https://github.com/creationix/min-fs/blob/master/fs.js#L68-L160
20:24:15  <creationix>doesn't nest very deep at all
20:24:21  <mikolalysenko>ok, I gotta go for a bit
20:25:15  <creationix>actually, this is a better example https://github.com/creationix/min-stream-node/blob/master/common.js#L57-L101
20:25:52  * nicholasfquit (Read error: Connection reset by peer)
20:26:11  <jesusabdullah>this [js] favicon is seriously the best thing
20:26:15  * nicholasfjoined
20:26:39  <grncdr>back, jesusabdullah I'm going to read your code for a bit
20:27:04  <jesusabdullah>grncdr: word, I'm more or less awake and alert now so, yeah!
20:27:49  <grncdr>you read Max's comment re: the gradient from 100% server-side to 100% client side?
20:27:56  <jesusabdullah>grncdr: any/all feedback appreciated. Feel free to make heavy use of the issues tracker, etc
20:28:03  <jesusabdullah>grncdr: Yeah, though I should read it again
20:28:38  <jesusabdullah>grncdr: I was just gonna implement the api he asked for and let him work it from there XD
20:29:07  <grncdr>yeah I like the idea of letting the browser do the concat/packing of sources
20:29:28  <jesusabdullah>yeah me too, I like the idea of not trying to do anything TOO complex with the cdn
20:29:36  <grncdr>and I'd *really* like to do an API that works like GET /npm/<module>/<semver>
20:29:46  <Raynos>dlmanning: I would recommend generators and continuable-para
20:29:54  <Raynos>failing generators you can use continuable
20:30:03  <grncdr>the stuff I've written that takes advantage of npm's existing cache I'm pretty happy with
20:30:24  <grncdr>this one: https://github.com/grncdr/symlink-dependencies
20:30:58  <dlmanning>Raynos: For experiments, sure. But I can't really use a spec feature that lives behind a runtime flag for production work
20:31:00  <grncdr>it keeps disk usage way down, and basically operates the same way running npm install for a bunch of pure-js libs would work anyways
20:31:20  <jesusabdullah>yeah I was gonna say, if you see any opportunities to simplify the build process or increase efficience I'm all for refactoring it
20:31:38  <jesusabdullah>I knew you had some good ideas there
20:31:53  <Raynos>dlmanning: then help me with https://github.com/Raynos/generators
20:32:25  <dlmanning>Raynos: That looks interesting. I'll take a look at it
20:32:27  <jesusabdullah>Yeah grncdr this looks handy
20:32:30  <grncdr>well, I guess the big question for me is does it work more like a CDN (e.g. cacheable)? or a service that does bundling?
20:32:39  <Raynos>dlmanning: if your comfortable with the functional style of my helpers you can use them.
20:32:55  <grncdr>because I started with the latter, but most people seem to think the former is more desirable
20:33:00  <jesusabdullah>grncdr: somewhere in between? It caches builds based on md5(JSON.stringify(inputParameters))
20:33:11  <jesusabdullah>grncdr: and I'd like to make caching smarter
20:33:43  <grncdr>ok, I'm going to push my current WIP, it's broken but I don't think anybody is running anything off my master branch :P
20:33:50  * mikolalysenkoquit (Ping timeout: 240 seconds)
20:33:58  <jesusabdullah>grncdr: oh also it's using leveldb so it's fast as fuck
20:34:08  <jesusabdullah>grncdr: it's SO FAST that when I was testing I thought my browser was refusing to refresh
20:34:24  <grncdr>hah nice
20:34:48  <grncdr>yeah I'm just writing stuff to known locations on disk, but that seems like all kinds of error-prone
20:35:07  <grncdr>plus I'd really prefer to use a FS abstraction that could work in the browser
20:35:56  <jesusabdullah>brfs?
20:36:05  <grncdr>I don't know it yet
20:36:06  <grncdr>but maybe?
20:36:15  <grncdr>you mean the browserify transform?
20:36:18  <jesusabdullah>yeah
20:36:24  <jesusabdullah>not quite what you're thinking I think
20:36:37  <jesusabdullah>since it just replaces reads with functions that "return" the block of text iirc
20:36:51  <grncdr>yeah, I mean more like an api that acts like {write,read}File
20:36:58  <grncdr>but uses localstorage or something
20:37:00  <jesusabdullah>question for y'all: when I say that something "returns" something but it's an async function with a callback...what SHOULD I say?
20:37:04  <jesusabdullah>grncdr: right
20:37:10  <jesusabdullah>grncdr: that would be pretty sweet
20:37:25  <grncdr>jesusabdullah: I've settled on "sends to" the callback
20:37:34  <jesusabdullah>okay, so I'm stepping out for a minute, then I'm gonna re-read that thread
20:37:37  <grncdr>kk
20:37:42  <jesusabdullah>then figure out the issue thl0 ran into
20:38:06  <jesusabdullah>and I might work on my orchestration project and maybe some other stuff
20:38:11  <grncdr>ok
20:38:12  <jesusabdullah>but yeah!
20:38:22  <jesusabdullah>GO TEAM
20:38:23  <grncdr>the other one too look at is grncdr/browserify-bundle-factory
20:38:37  <grncdr>AAHHH
20:38:43  <grncdr>...
20:38:51  <grncdr>nevermind then
20:39:18  <grncdr>I thought LOUDBOT was going to reply to all-caps, but now I'm just confused
20:39:31  <Wraithan>probably a cooldown
20:39:54  <grncdr>fair enough
20:40:13  <jjjohnny>words.length >= 2
20:40:51  <jjjohnny>YES I SPEAK BOT LANGUAGE
20:41:08  <grncdr>OH OK THATS RATIONAL
20:41:17  <grncdr>:D
20:45:51  <Kessler>could someone please fill me in on all the controversy re: old vs new streams?
20:46:07  <Kessler>or is it explosive and should not be mentioned ?
20:46:16  <Wraithan>Kessler: old vs new vs some other nih streams
20:47:03  <grncdr>I'm also curious about this
20:47:04  <jesusabdullah>Kessler: my understanding is that new streams handle backpressure, are closer to the platonic ideal, etc., but that they're necessarily more complex
20:47:18  <grncdr>in particular, why not pull-streams everywhere?
20:47:32  <grncdr>I've never understood why node streams weren't pull-streams from the start
20:47:51  <Wraithan>http://nodejs.org/api/stream.html#stream_compatibility
20:47:54  <Wraithan>talks about it a bit
20:47:54  * AvianFluquit (Read error: Connection reset by peer)
20:48:12  <creationix>grncdr: because we learned as we went
20:48:19  <creationix>I was in the original stream design meetings
20:48:41  <creationix>if I had known what I know now, we would probably have min-streams in node
20:48:47  * AvianFlujoined
20:49:01  <grncdr>creationix: fair enough, I didn't mean to sound accusational, I'm just used pull-based processing from python generators
20:49:08  <Kessler>creationix: can you elaborate please?
20:49:19  <creationix>Kessler: not sure what to elaborate on
20:49:37  <creationix>node streams are the evolution of years of experimentation with a strong "don't break backwards compat" rule
20:49:49  <creationix>min-streams are my new clean design with zero regard for backwards compat
20:49:54  <Raynos>creationix: do you think min-streams are a success for binary data ?
20:49:57  <thl0>I hope no one will go crazy with generators send method: http://traceur-compiler.googlecode.com/git/demo/repl.html#function*%20%20foo()%20%7B%0A%20%20%20var%20a%20%3D%20yield%202%3B%0A%20%20%20yield%20%2B%2Ba%3B%0A%7D%0A%0Avar%20f%20%3D%20foo()%3B%0Af.next().value%20%2B%20f.send(3).value
20:50:01  <Kessler>aha
20:50:08  <Raynos>I have yet to recommend min-streams to isaacs until I have implemented tcp / tls and crypto streams
20:50:12  <thl0>aside from async flow control
20:50:12  <creationix>there are some cases where min-streams are harder to use
20:50:21  <creationix>but that's because they force you to do things right
20:50:28  <creationix>in the end, it's net less work
20:50:46  <creationix>Raynos: I'm going to wait till I'm done with git
20:50:54  <creationix>all sorts of complicated nested streams in there
20:50:58  <creationix>so far I'm liking it
20:51:22  <thl0>creationix: would you agree that send is bad idea except for special cases like co, gen-run and friends?
20:51:38  <creationix>thl0: send?
20:51:59  <thl0>creationix: see link above (generator.send())
20:52:21  <creationix>oh, bi-directional communication in generators
20:52:24  <creationix>I love that
20:52:29  <creationix>I used it all the time in my lua coroutines
20:52:39  <thl0>creationix: I believe it will be the next eval
20:52:43  <creationix>though I think .send() is gone in latest node
20:52:46  <creationix>it's just .next(value)
20:53:01  <creationix>thl0: not hardly, it's more like "return"
20:53:03  <thl0>cause it is so useful for certain cases, but totally dangerous in others
20:53:18  <thl0>like in the code I posted, who could read that?
20:53:18  <creationix>just like early return ;)
20:53:37  <thl0>I know what it does, but you can write aweful code with it too
20:53:42  <Kessler>creationix: can you expand on what makes min-stream better than new node streams with backward compatibilty ?
20:53:52  <thl0>creationix: link again: I hope no one will go crazy with generators send method: http://traceur-compiler.googlecode.com/git/demo/repl.html#function*%20%20foo()%20%7B%0A%20%20%20var%20a%20%3D%20yield%202%3B%0A%20%20%20yield%20%2B%2Ba%3B%0A%7D%0A%0Avar%20f%20%3D%20foo()%3B%0Af.next().value%20%2B%20f.send(3).value
20:53:54  <creationix>Kessler: much simpler interface
20:53:58  <creationix>less to worry about
20:54:02  <creationix>and it's pull only
20:54:06  <creationix>no writable streams
20:54:10  <creationix>just sources and sinks
20:54:27  <creationix>pipe is a natural side-effect of the system, not a 120-line helper function
20:54:28  <grncdr>I need to look at min-stream again
20:55:02  <grncdr>I've seen that, new-streams and dominictarr's pull-streams in the last week
20:55:16  <creationix>pull-streams are very close to min-streams
20:55:21  <creationix>just minor api differences
20:55:23  <creationix>but same idea overall
20:55:43  <grncdr>yeah, I kind of wish you two had settled on one api :P
20:55:51  * jibayquit (Remote host closed the connection)
20:55:53  <creationix>min-streams are basically pull-streams adjusted slightly to be generator and continuable friendly
20:56:02  <creationix>I hope he comes over to my side :P
20:56:37  <creationix>the only thing in the way afaik is all the existing code he doesn't want to change
20:57:15  <creationix>also I don't like the .pipe sugar that pull-streams bake on top
20:57:23  <creationix>I much prefer bare functions with no dependencies
20:57:33  <grncdr>how does .pipe look with min-stream?
20:57:40  <creationix>there is no pipe
20:57:53  <creationix>an echo server is socket.sink(socket.source)
20:58:02  <creationix>though I do have a chain helper I've been experimenting with
20:58:04  <grncdr>right, from the readme you mention a `chain` module
20:58:06  <grncdr>yeah
20:58:11  <creationix>chain.source(socket.source).sink(socket.sink)
20:58:25  <Kessler>what is wrong with write() ?
20:58:26  <jesusabdullah>grncdr: https://github.com/jesusabdullah/browserify-cdn/issues/9
20:58:43  <creationix>Kessler: back-pressure is much harder to get right with push-streams
20:58:57  <creationix>and I don't like having two interfaces, so I use only pull-streams
20:59:04  <creationix>though adapters can be written
20:59:10  <creationix>like a source that you can write to
20:59:32  <substack>defunctzombie: pong
20:59:48  <creationix>anyway, I need to get repo object encoding done in the next hour
20:59:49  <creationix>ttyl
21:00:13  <grncdr>jesusabdullah: I replied
21:00:20  <grncdr>but the README for the repo I linked to sucks
21:00:34  <jesusabdullah>all good
21:01:20  <Kessler>so basically what you guys are telling me is that I shouldn't rely on node new streams at all if I dont care about backwards compatibiliy ?
21:01:26  <defunctzombie>substack: testling-ci server testing stuff, does it still work?
21:02:13  <grncdr>jesusabdullah: I added an example to the README
21:02:30  <substack>that code hasn't changed
21:02:36  <substack>so it works as well as it ever did
21:02:58  <defunctzombie>k
21:03:10  <grncdr>there's some gross hackery with writing stuff to disk, but the browserify.bundle() API call accepts a 'deps' option I'm hoping to take advantage of
21:03:14  <grncdr>I need to run again
21:03:15  <grncdr>ttyl
21:03:24  <jesusabdullah>grncdr: good deal
21:03:36  <jesusabdullah>okay, reading that thread, might make some issues out of it
21:03:53  <jesusabdullah>grncdr: okay
21:04:02  <jesusabdullah>grncdr: just a reminder: make as many issues on browserify-cdn as you like! XD
21:07:43  <jesusabdullah>okay cool
21:07:52  <jesusabdullah>now for something completely different.
21:12:10  * Wraithanpart ("WeeChat 0.4.2-dev")
21:17:32  * vitorpachecoquit (Remote host closed the connection)
21:19:04  * snojquit (Ping timeout: 276 seconds)
21:20:04  * AvianFluquit (Remote host closed the connection)
21:21:43  * nicholasfquit (Ping timeout: 256 seconds)
21:21:54  <jesusabdullah>thl0: Good stuff
21:22:19  <thl0>jesusabdullah: not sure what you're referring to?
21:22:26  <jesusabdullah>thl0: the browserify-cdn issue
21:22:48  <thl0>yeah, I'll prob have some time tmr to give more detail
21:23:53  <jesusabdullah>cool
21:25:21  <defunctzombie>substack: does anyone use the server testing stuff?
21:29:20  * dguttmanquit (Quit: dguttman)
21:34:47  * ednapiranhaquit (Remote host closed the connection)
21:39:56  * mikolalysenkojoined
21:41:13  <chapel>thl0: do you know jslatts?
21:41:22  <thl0>yep
21:41:25  <chapel>cool
21:41:28  <chapel>hes a friend of mine
21:41:30  <thl0>he works with this soccer thing right?
21:41:32  <chapel>from Spokane
21:41:35  <chapel>mls yeah
21:41:49  <thl0>I just met him on a meetup -- he tried to hire me ;)
21:42:01  <chapel>yeah, he told me about your replpad
21:42:08  <thl0>we had planned to hack together instead, but it never happened
21:42:10  <thl0>ah
21:42:29  <thl0>Nice, hope you like it :)
21:42:32  <chapel>didn't really connect the dots until recently
21:44:43  * mikolalysenkoquit (Ping timeout: 268 seconds)
21:54:35  * dominictarrjoined
22:07:43  * Kesslerquit (Read error: Connection reset by peer)
22:09:08  * Kesslerjoined
22:14:56  * kevino80quit (Remote host closed the connection)
22:19:07  * tilgovijoined
22:28:50  * mcollinajoined
22:32:20  * tilgoviquit (Remote host closed the connection)
22:35:08  * thl0quit (Remote host closed the connection)
22:36:23  * shamaquit (Ping timeout: 245 seconds)
22:36:24  * mcollinaquit (Remote host closed the connection)
22:39:09  * mcollinajoined
22:41:25  * tilgovijoined
22:42:20  * shamajoined
22:43:16  * mcollinaquit (Remote host closed the connection)
22:43:41  * mcollinajoined
22:46:57  * fotoveritequit (Quit: fotoverite)
22:48:23  * mcollinaquit (Ping timeout: 240 seconds)
22:48:55  * mcollinajoined
22:55:04  * mcollinaquit (Remote host closed the connection)
23:00:15  * gwenbelljoined
23:01:36  * mikealquit (Quit: Leaving.)
23:07:43  * kenperkinsquit (Quit: Textual IRC Client: http://www.textualapp.com/)
23:15:37  * mikealjoined
23:16:29  * gwenbellquit
23:25:46  * mcollinajoined
23:30:47  * mcollinaquit (Ping timeout: 268 seconds)
23:39:56  * yorickquit (Read error: Connection reset by peer)
23:40:32  * tmcwquit (Remote host closed the connection)
23:45:35  * thl0joined
23:49:53  * thl0quit (Ping timeout: 240 seconds)
23:50:59  <mbalho>substack: i figured out how to do authenticated websocket streams, had to send a pull req to the ws module though https://github.com/maxogden/doorknob/blob/master/replicate-server.js#L15-L17
23:51:28  * chapelquit (Ping timeout: 260 seconds)
23:51:40  * mikolalysenkojoined
23:51:51  <Raynos>dominictarr: ping
23:51:56  * sorensenquit (Ping timeout: 260 seconds)
23:52:07  * chapeljoined
23:52:32  * dguttmanjoined
23:52:37  * sorensenjoined
23:53:00  <mbalho>dominictarr: anything off the top of your head that will prevent level-replicate or level-sublevel from working in the browser
23:53:05  <mbalho>i'm about to test
23:55:05  * fotoveritejoined
23:58:18  <defunctzombie>dominictarr: I believe that split behaves incorrectly when the stream ends
23:58:29  <defunctzombie>dominictarr: it sends down an empty string