--- Log opened Fri Apr 05 00:00:17 2013 --- Day changed Fri Apr 05 2013 00:00 < gozala> dominictarr: well yeah you do that implicitly 00:00 < gozala> which is can be either good or bad 00:00 < gozala> but that's not really relevant 00:00 < dominictarr> yes, I havn't tried hard to make it pure or anything 00:01 < gozala> point is that stream representation is just pair of head => first item 00:01 < gozala> and tail => rest items 00:01 < gozala> so when you pull you get item in the head 00:01 < gozala> and you read from tail when you need to 00:02 < gozala> this can be pretty hidden away 00:02 < gozala> as in @Raynos example 00:02 < gozala> but the core idea remains I think 00:02 < gozala> so what I wanna do with hybrid approach is 00:03 < gozala> have a stream that pushes values 00:03 < gozala> and reader can decide that it wan't to get rest as a different stream of rest items 00:03 < gozala> which it can read as it wants 00:04 < gozala> in worst case scenario that will end up head, tail pairs 00:04 < gozala> in best it will be just push 00:04 < gozala> and there can be everything in between 00:04 < gozala> dominictarr: ^ 00:04 < Raynos> gozala: oh hi 00:05 < gozala> Also ideally all the transformation functions don't need to care about any of this 00:05 < gozala> which is possible with a help of decorators 00:06 < gozala> dominictarr: this basically gives reader control weather it intends to pull 00:06 < dominictarr> gozala: yeah -- also, on of my favorite ideas from reducables is how the transforms just pass the pull back to the source 00:06 < gozala> or weather it lets input to push on it 00:06 < dominictarr> so they don't have to understand what is happening at all 00:07 < Raynos> gozala: I'm on the fence about complexity 00:07 < Raynos> I think pull-stream has lower complexity for writing transformations 00:07 < Raynos> the only reason to favor your thing 00:07 < Raynos> is performance 00:07 < gozala> Raynos: is that complex to you 00:07 < Raynos> so id need to see some benchmarks 00:07 < gozala> var map = pausable(function(f, signal) { 00:07 < gozala> return function mapped(next, end) { 00:07 < gozala> signal(function(value) { 00:07 < gozala> return next(f(value)) 00:07 < gozala> }, end) 00:07 < gozala> } 00:07 < gozala> }) 00:07 < Raynos> having to call pausable 00:07 < Raynos> for every single thing 00:07 < Raynos> is complex 00:08 < Raynos> it stopped being simple functions 00:08 < gozala> Raynos: sure if that's too complex 00:08 < gozala> than don't do it 00:08 < dominictarr> the objective of pull-stream is to make it easy to avoid IO 00:08 < gozala> everything comes with a price 00:08 < Raynos> anyway the real problem is 00:08 < Raynos> how do you pass messages between source & sink 00:08 < Raynos> in transformations without fucking it up 00:08 < gozala> gist documents that now 00:09 < gozala> and that protocol is also extandable 00:09 < gozala> in a way that it can degrade to plain pull 00:09 < gozala> but input and reader can extend to optimise specific cases 00:09 < dominictarr> the preserving backpressure/lazyness across trickier stuff, like concatenating streams that is the hard part. 00:11 < gozala> Raynos: also if you don't like pausable you don't have to use them 00:11 < gozala> just wriet 00:11 < Raynos> gozala: so my genuine opinion on this is thinking hard about the IO use cases and ensuring that backpressure & closing works correctly and cleanly 00:11 < gozala> function map(f, signal) { 00:11 < gozala> return function mapped(next, end) { 00:11 < gozala> function rest(continuation) { 00:11 < gozala> return function(signal) { 00:11 < gozala> continuation(map(f, signal)) 00:11 < gozala> } 00:11 < gozala> } 00:11 < gozala> signal(function(value) { 00:11 < gozala> var continuation = next(value) 00:11 < gozala> return typeof(continuation) ? rest(continuation) : 00:11 < gozala> continuation 00:11 < gozala> }, end) 00:11 < gozala> } 00:11 < Raynos> writing map is easy 00:11 < Raynos> writing merge is harder 00:11 < Raynos> writing hwm is harder 00:11 < Raynos> writing parallel transform is harder 00:11 < gozala> Raynos: I've written all of that for reducers 00:11 < gozala> take a look at fs-reduce 00:12 < Raynos> so my original motivation for pull-stream & recurse-stream 00:12 < gozala> Raynos: can you easily cover this case with pull streams 00:12 < gozala> https://gist.github.com/Gozala/5314269#stoping-signals 00:12 < Raynos> is "fuck streams2.Readable is 700 lines" 00:12 < Raynos> from experience I know handling edgecases in streams is fucking hard 00:12 < dominictarr> Raynos: +1 00:12 < Raynos> so I need to do it and it needs to be correct 00:13 < Raynos> it needs to be SO correct that I can rip out all streams from node core and replace them with functions 00:13 < Raynos> furthermore it needs to be more performant then node core 00:13 < gozala> Raynos: dominictarr I'm not sure how that relates to what I'm trying to do 00:13 < gozala> I've being the first one to say node streams suck 00:13 < Raynos> gozala: because I can use infinite push signals ( https://github.com/Raynos/signaal ) for non IO stuff and its nice and pure. 00:14 < Raynos> gozala: as much as node streams suck they are still incredibly hard 00:14 < gozala> Raynos: I'd be very surprised if you can achieve better performance with pull streams 00:14 < gozala> than push streams 00:14 < Raynos> I've written a ton of stream like things and I dont have the confidence to say that any of them handle backpressure correctly in at least 95% of the cases 00:14 < Raynos> gozala: I dont care about pull vs push. I care about pull-stream vs node core. I care about handling backpressure correctly in 100% of the cases 00:15 < gozala> Raynos: ok I'm not sure what we're arguing about here 00:15 < gozala> so I'll just let you play with pull streams 00:15 < dominictarr> gozala: still, very interested to see what you come up with! 00:15 < Raynos> im saying that the implementation of a functional push-pull stream that i like depends on can it implement all the real stream things in a simple API 00:15 < gozala> and we can back to whiteboard when you realise you need both 00:15 < gozala> and so that they can interoperate 00:16 < gozala> Raynos: you mix simple and easy a lot 00:16 < gozala> idea can be very simple 00:16 < Raynos> i dont care that much about the interface / contract as long as it can handle real IO. 00:16 < Raynos> gozala: I know I mix simple & easy too much 00:17 < gozala> Raynos: have you tried fs-reduce ? 00:17 < gozala> did not it handled back pressure properly ? 00:17 < Raynos> not yet 00:17 < Raynos> Some of the things in there are cool 00:17 < gozala> Raynos: also I have to admit that I had to workaround lack of pull 00:17 < Raynos> https://github.com/dominictarr?tab=repositories 00:17 < Raynos> dominictarr has written like 14 different types of pull based transformation streams 00:18 < gozala> by presenting file content stream as concatenation of lazy chunk reads 00:18 < Raynos> based on real ways that you want to interact and combine IO operations 00:18 < Raynos> I need to catch up on all that work myself 00:19 < gozala> dominictarr: Raynos Anyway what I was intended to do is share some of my thought how one can arrange interoperation of push and pull streams 00:19 < gozala> not to say you should or should not use them 00:19 < Raynos> gozala: I think its an interesting idea. I just need to spend more time to convince myself i need push 00:19 < gozala> if you have any feedback I'm curious to hear 00:19 < substack> jesusabdullah: say WHA 00:27 < jesusabdullah> mmnh, guurl 00:30 < AvianFlu> jesusabdullah: you tell 'em sister 01:21 < Raynos> dominictarr: https://github.com/dominictarr/hyperscript/pull/5 01:21 < Raynos> gozala: I dont think I need push for IO other then you claim its more performant. That's all 01:22 < dominictarr> Raynos: does nodeType and nodeName work in IE? 01:22 < Raynos> dominictarr: yes 01:22 < Raynos> they are DOM1 so pretty old 01:22 < gozala> Raynos: with IO usually you don't need push and pull is just fine 01:23 < gozala> it's just non trivial to compose apps that need both push streams and pull streams 01:26 < dominictarr> Raynos: should your PR be a minor or a patch? 01:27 < Raynos> dominictarr: data-set is a new feature so minor. 01:27 < Raynos> gozala: that's a seperate problem 01:27 < dominictarr> was thinking that too 01:29 < gozala> Raynos: Indeed it's separate but a problem 01:29 < gozala> you can always shoehorn things 01:29 < Raynos> gozala: I was thinking about how to implement leveldb with signals 01:29 < Raynos> didnt get very far 01:29 < gozala> but IMO it's better to design things up front 01:30 < Raynos> i think its not unreasonable to reduce scope and create a pull based stream thing purely for node server apps 01:30 < Raynos> and deal with stateful push based browser inputs as seperate domain 01:30 < gozala> Raynos: I don't think push is browser specific 01:30 < gozala> it's problem specific, but not browser specific 01:30 < Raynos> give me a good node context where I want push for IO 01:31 < gozala> well IRC implementation 01:31 < gozala> you need to handle incoming message weather you like it or not 01:31 < gozala> it's not up to you weather you wanna handle them or not 01:32 < gozala> or any other case where you're up is driven by / reacts to input 01:32 < gozala> same with http requests 01:32 < gozala> the come in weather you wanna pull or not 01:33 < gozala> of course you can keep users waiting until you pull next incoming request 01:33 < gozala> but that models problem incorrectly 01:34 < gozala> Raynos: ^ 01:34 < gozala> anyway heading home now 01:34 < Raynos> gozala: 01:34 < Raynos> but node core currently models sockets as pull 01:35 < Raynos> i dont see a problem with it 02:02 < mbalho> is there a level- lib for chained mapreduce? 02:16 < Raynos> mbalho: what do you mean "chained" ? 02:17 < mbalho> Raynos: http://examples.cloudant.com/sales/_design/sales/index.html 02:20 < Raynos> mbalho: all I see is buzzwords 02:21 < defunctzombie> st_luke: ping 02:21 < st_luke> yo 02:21 < defunctzombie> st_luke: how much you know about internap hardware stuffs? 02:22 < defunctzombie> if i get a raid 1 box, is all that setup for me? 02:22 < Raynos> mbalho: It shouldnt be hard to do chained reduce with map-reduce though 02:22 < defunctzombie> and how would I know if drives fail or such? 02:22 < defunctzombie> st_luke: also, know any alternatives to internap that are good to check out? 02:22 < defunctzombie> I am pretty happy with internap personally but always on the lookout for options 02:23 < st_luke> i think they will set up all the raid stuff if you order it 02:23 < st_luke> and im pretty sure you can enable some module in ubersmith to monitor drive status over snmp 02:23 < st_luke> but i dont know if i can recommend them anymore 02:24 < st_luke> my friend that was in charge of operations decided to quit so things are probably gonna go downhill 02:24 < defunctzombie> :( 02:24 < defunctzombie> sadness 02:24 < defunctzombie> what are good alternatives? 02:26 < st_luke> man i dont even know anymore 02:27 < st_luke> at least with internap you have a fairly known quantity 02:27 < defunctzombie> yea 02:27 < defunctzombie> and their datacenters are solid 02:27 < st_luke> to be honest most hosting companies are really bad with customer private data and security overall 02:28 < st_luke> the former voxel stuff that internap is running now is all pretty good, and ubersmith is very secure because the guy in charge of it knows what he's doing 02:28 < st_luke> at least the guy in charge of its development 02:29 < defunctzombie> that is good 02:29 < st_luke> every hosting company ive worked at other than voxel/internap has stored passwords and private customer info in plain text, etc 02:29 < defunctzombie> I know that the datacenter is pretty important 02:29 < defunctzombie> wow 02:29 < defunctzombie> cause there are some major companies operating out of it 02:30 < st_luke> a big part of why internap bought voxel was for the datacenters 02:30 < st_luke> so they're pretty important to them 02:32 < defunctzombie> I would rather pay a premium to have solid shit than go with an unknown name 02:34 < st_luke> yeah it cant be that much more anyway 02:34 < st_luke> plus you are like a bitcoin millionaire anyway 02:34 < defunctzombie> I wish 03:09 < defunctzombie> so here is an interesting thought 03:09 < defunctzombie> if you make global javascript vars 03:09 < defunctzombie> doesn't that mean extensions and other things cna see them? 03:10 < defunctzombie> so putting potentially sensitive information into them would be bad... 03:26 < gozala> Raynos: at this point I think it's would be easier if I let you explore pull based streams so you can discover limitations yourself 03:28 < Raynos> :/ 04:05 < isaacs> substack: LOL! 04:05 < isaacs> substack: almost the exact same API and implementation 04:06 < mbalho> I JUST MADE THIS THING http://maxogden.github.com/gifblocks/ 04:06 < mbalho> someone beta test it 04:07 < isaacs> substack: even a similar description. clearly, this is the correct implementation. 04:13 * jesusabdullah opens 04:13 * jesusabdullah cries about it 04:16 < jesusabdullah> mbalho: gif is entirely blue -_-; 04:16 < jesusabdullah> mbalho: also I couldn't climb out of the pit, I tried! 04:16 < jesusabdullah> mbalho: sick framerates though, nice ux, smoove dudes 04:18 < mbalho> jesusabdullah: i realized the japanese font im using is 6mb 04:18 < jesusabdullah> damn gurl 04:18 < mbalho> jesusabdullah: what browser/version/os are you using? 04:18 < jesusabdullah> chrome beta 04:18 < mbalho> hmm i wonder why the gif doesnt work 04:19 < jesusabdullah> mbalho: cause I was really really high up 04:19 < jesusabdullah> mbalho: it works at the ground level 04:19 < niftylettuce> FUCKING HACKITY HACK LOUDBOT 04:19 < LOUDBOT> GOOGLE VOICE SPEAKS OUT YOUR SMS MESSAGES WITH FESTIVAL, AND THEN RETRANSCRIBES THEM IN ORDER TO CIRCUMVENT COPYRIGHT LAW 04:19 < mbalho> jesusabdullah: oh i see 04:19 < jesusabdullah> interesting no? 04:21 < jesusabdullah> Oh I see what you did there 04:21 < jesusabdullah> the camera is stationary 04:22 < jesusabdullah> I was outside its render distance 04:24 < mbalho> yea 04:26 < jesusabdullah> what's the sauce for that look like? 04:31 < mbalho> its on github 04:32 < chrisdickinson> oof, gave a talk on my git stuff at the pdx node user group 04:35 < isaacs> chrisdickinson: ^5 04:36 < chrisdickinson> now to try and rewrite it as a proposal for nodepdx 04:37 < chrisdickinson> are there any bits that would be particularly interesting? i'm thinking of going at it from the angle of putting browserify through its paces 04:40 < substack> isaacs: agreed! 04:41 < substack> of course, we have similar aesthetic sense when it comes to apis 05:27 < jjjjohnnny> mbalho: it always takes the same photo 05:28 < jjjjohnnny> and then chuffs my cpu 05:29 < jesusabdullah> jjjjohnnny: you have to move yourself in front of the camera silly 05:34 < jjjjohnnny> A USER ERROR WAS IT 05:34 < LOUDBOT> THE POINT IS EVERYONE ELSE WHO IS LISTENING KNOWS SOMEONE WITH MY NAME EXISTS 05:34 < jjjjohnnny> http://i.imgur.com/vZjOBGp.gif 05:53 < st_luke> Domenic_: if I were to rewrite a node program using a promises library for my control flow which module is a good choice? 05:58 < jjjjohnnny> el user interface 05:58 < jjjjohnnny> el = {} 05:58 < jjjjohnnny> el.knob = createDial(opts) 05:58 < jjjjohnnny> el.ticktock = createTocker() 05:59 < jjjjohnnny> el.emento = "por favor" 06:43 < mbalho> jjjjohnnny: hahah how did you do that 07:11 < jesusabdullah> substack: http://www.weather.com/sports-rec/march-madness/Toughest-Weather-City-Tournament-20130315 07:20 < substack> jesusabdullah: lubbock, clearly 07:22 < jesusabdullah> Hell no 07:23 < jesusabdullah> Lubbock doesn't have 50 degree deltas within a day 07:23 < substack> it's easy because you can just wear more clothes 07:24 < substack> also fairbanks isn't even windy 07:24 < jesusabdullah> except when it is 07:24 < jesusabdullah> then it *really* sucks 07:25 < jesusabdullah> (and that does happen from time to time, it's just uncommon) 09:17 < dominictarr> mbalho: there isn't a chained map-reduce like that, you can feed one into another 09:18 < dominictarr> do you need a fixed number of stages, or to reduce until a certain state? 09:25 < dominictarr> juliangruber: Raynos does hyperscript 1.1 break in IE, or does dataset just not work? 09:25 < juliangruber> hmm 09:25 < juliangruber> haven't tested 09:26 < juliangruber> we need a test(ling) suite for hyperscript 09:29 < dominictarr> juliangruber: Raynos I've added you two as collaborators for hyperscript as you are both using it in production 09:30 < juliangruber> cool 09:30 < dominictarr> juliangruber: insomnia and I started on this: https://github.com/1N50MN14/html-element which implements enough of HTMLElement to run hyperscript serverside 09:30 < juliangruber> before, setting data-foo should have worked in ie, just not using dataset 09:30 < juliangruber> now it breaks 09:30 < juliangruber> awesome too! 09:31 < dominictarr> so, before it would have just set a property on the object? 11:08 < juliangruber> I think so 12:08 < juliangruber> dominictarr: https://github.com/kentonv/capnproto 12:18 < juliangruber> although, since it copys memory areas, we can't use it in js land 13:14 < dominictarr> shared memory, or copying memory? 13:14 < dominictarr> juliangruber: ^ 13:21 < dominictarr> looks really interesting, anyway 13:31 < marcello3d> anyone know in css, if there is a way to do .foo + .foo, but have it work even if there is a display:none element in between? 13:39 < juliangruber> dominictarr: since it's also a rpc system I guess it really stores ranges of memory 13:44 < dominictarr> defunctzombie_zz: am beginning to maybe agree about the problem of versions. I need to know the exact version of deps so when I break something I can figure out what change introduced the bug. 14:22 < marcello3d> dominictarr: bingo! 14:23 < marcello3d> dominictarr: once you pin all versions, it becomes a new UI/UX problem of how to update everything/review changes easily 14:24 < marcello3d> if you could solve that problem, then people wouldn't mind as much 14:24 < dominictarr> marcello3d: yes… what I really need is snapshots of module versions, so that I can see what has changed since the last time I ran the tests 14:25 < marcello3d> it's a good argument for just checking in node_modules 14:25 < marcello3d> feels dirty, but it covers that and your earlier problem 14:25 < dominictarr> haha, yeah - maybe you could check that into a dev branch, and leave master clean? 14:30 < marcello3d> I'm not sure if npm modules should work that way (that recreates the same problem as pinning), but certainly at the app level 14:32 < marcello3d> the main problem with pinning is dependencies will get outdated, you start forking projects just to update their package.json 14:34 < defunctzombie> dominictarr: yes, it is critical 14:34 < defunctzombie> dominictarr: it is also critical for a group of devs to be on the same page with what is going on in the codebase 14:35 < dominictarr> defunctzombie: the "group of devs" is just myself, in the time dimension 14:36 < defunctzombie> dominictarr: yes 14:36 < dominictarr> marcello3d: I'm not against upgrading versions, but I want to be able to check in a known good tree 14:36 < dominictarr> and install exactly those modules, if I want 14:36 < defunctzombie> dominictarr: ive tried to tell people, but they don't listen :) 14:36 < marcello3d> dominictarr: right, so checking node_modules into git should solve that, right? 14:37 < marcello3d> ignoring the issue of native/compiled dependencies 14:37 < dominictarr> pinning version numbers isn't good enough. I want to be able to install an exact hash 14:37 < dominictarr> marcello3d: yes, that is one option. 14:37 < marcello3d> even exact hash isn't good enough 14:37 < marcello3d> they could rewrite their github tree and the hash could disappear (I think?) 14:37 < dominictarr> marcello3d: not of one module, but an entrie tree 14:38 < dominictarr> marcello3d: I mean the hash of the content 14:38 < marcello3d> you're describing git to me 14:38 < marcello3d> hmmm 14:39 < marcello3d> that would only work if you shrinkwrapped/archived, right? 14:39 < dominictarr> marcello3d: shrink-wrapped with hashes would be good enough 14:42 < defunctzombie> dominictarr: again, correct 14:42 < defunctzombie> dominictarr: hash of contents is also very important 14:42 < defunctzombie> both of those things matter for a correct and secure deployment 14:43 < defunctzombie> and checking into node_modules at the app level doesn't solve the problems of history management 14:44 < defunctzombie> it also adds noise to your app repos which is annoying 14:44 < dominictarr> yeah, because if some idiot was editing the code in node_module/*/*.js and they published their module and it doesn't work because there is no published modules with their changes because they forgot to update the real dep…. 14:44 < dominictarr> I want to detect that 14:44 < dominictarr> fast 14:44 < dominictarr> so I the tests fail, I want to know what hash they worked for 14:45 < defunctzombie> yep 14:46 < defunctzombie> you are starting to see why npm (current form) sucks for dev as well :) 14:46 < defunctzombie> even tho it is touted as being really flexible during dev time 14:46 < defunctzombie> it doesn't help you deal with detecting the hard problems that it should be imho 14:53 < timoxley> substack FYI http://www.downforeveryoneorjustme.com/substack.net 14:53 < timoxley> "It's not just you! http://substack.net looks down from here." 14:55 < dominictarr> defunctzombie: it is really good - there is just always room for improvement 14:55 < dominictarr> we've solved one set of painful problems, and now we've found a new problem 14:56 < dominictarr> it's the "first world problems" pattern 14:57 < dominictarr> defunctzombie: have you used bundler? I found a great article about how it works 14:58 < dominictarr> http://patshaughnessy.net/2011/9/24/how-does-bundler-bundle 14:58 < dominictarr> SO, SO, HORRIBLE 14:58 < LOUDBOT> I AM A GAY ADULT MALE PEOPLE AND I DESERVE BETTER 14:58 < dominictarr> YES LOUDBOT PEOPLE DESERVE BETTER THAN BUNDLER 14:58 < LOUDBOT> I'M GONNA JERK YER GHERKIN WITH A SMIRKIN 15:06 < dominictarr> defunctzombie: what if there was a way to check in node_modules into a dev branch, but not master? 15:30 < isaacs> substack: Mine's more efficient, though. Maybe I'll send you a pull req to make them exactly the same. 15:47 < defunctzombie> dominictarr: meh, so my take on it is that we can build good package managers that don't require that 15:48 < defunctzombie> dominictarr: yes, certainly I can always check things in... but I think tooling can be better 15:48 < defunctzombie> and not require that 15:48 < dominictarr> defunctzombie: yeah, I am leaning that way too 15:48 < dominictarr> npm should really be able to be exact about what is installed 15:48 < defunctzombie> dominictarr: absolutely 15:49 < defunctzombie> dominictarr: otherwise it is useless for dev and prod 15:49 < defunctzombie> dominictarr: and I don't buy the argument that a package manager cannot be used to deploy things or such 15:49 < dominictarr> you need to be able to know exactly what is installed, and what was last tested 15:49 < defunctzombie> yep 15:49 < defunctzombie> dominictarr: you are starting to see the light :) 15:49 < dominictarr> I'm thinking a hash tree section in the package, or a separate file 15:50 < dominictarr> so you can install the old way, and also the last tested version... 15:50 < dominictarr> and see what modules are different if they arn't exact 15:51 < dominictarr> maybe, keep a log of test runs, and trees... 15:58 < jez0990> DID SOMEBODY MENTION TREES? I FUCKING LOVE TREES 15:58 < LOUDBOT> IGNORANCE IS STRENGTH 15:58 < jez0990> dominictarr: may as well throw in some public key love whilst solving that problem 15:59 < mikolalysenko> grr... I want to write more modules but have to write thesis proposal instead... 15:59 < mikolalysenko> must resist urge to procrastinate and code stuff in js... 16:00 < mikolalysenko> I really want to write a module to point location in triangulations 16:31 < mikolalysenko> dominictarr: is there a minimal example of scuttlebutt out there? 16:31 < dominictarr> yeah, sure https://github.com/dominictarr/streams-workshop/blob/master/5-scuttlebutt.js 16:33 < dominictarr> that makes a chat room where the clients can reconnect when the server goes down - and retrive messages written when offline 16:34 < mikolalysenko> interesting 16:34 < mikolalysenko> also, how bad is the latency in scuttlebutt? 16:34 < mikolalysenko> like can you use it in a realtime game, or do you have to add some scheduling/priority stuff on top of it? 16:35 < mikolalysenko> like over a websocket, how many ms does it take for changes to the state to propagate 17:30 < tmcw> substack: are testling-ci tests run on https servers? 17:51 < tmcw> these tests pass in real browsers but fail without much debug help in testling-ci https://ci.testling.com/mapbox/corslite 17:52 < tmcw> they also work in browserling 17:52 < dominictarr> mikolalysenko: that is mostly about where the server is from the client. 17:52 < dominictarr> updates are sent immediately 17:53 < dominictarr> so, that is about round trip time. 17:53 < dominictarr> although, you could look into webrtc 17:53 < dominictarr> I think you can get direct connection with that - even over the local network - which will be super fast 17:54 < mikolalysenko> dominictarr: but there is going to be some latency due to processing time, etc. 17:54 < dominictarr> processing on the server? 17:54 < mikolalysenko> yeah 17:54 < mikolalysenko> or maybe I am misunderstanding how scuttlebutt works? 17:55 < dominictarr> if two clients are connected to the same server, an update will pretty much bounce off the server and go directly to the other clients 17:55 < mikolalysenko> ok 17:55 < mikolalysenko> I guess what I am wondering is if scuttlebutt could be used in say a realtime multiplayer game 17:56 < mikolalysenko> I would suppose though that you would still need to do some prediction on the client side 17:56 < mikolalysenko> but in the game you have values which are usually changing all the time, so many frequent updates get pushed out over the wire 17:56 < dominictarr> yes. 17:57 < dominictarr> with the basic scuttlebutt/model, consecutive updates overwrite the old values 17:57 < dominictarr> so, it doesn't need to send everything 17:58 < mikolalysenko> a question about these models: can you create spline models that do stuff like interpolate/predict values? 17:58 < mikolalysenko> for example, in most games you want cubic hermite splines to fit position/velocity values 17:59 < mikolalysenko> the way it usually works is that clients run some fixed number of ticks behind the server 17:59 < mikolalysenko> and the buffer up future positions for objects 17:59 < mikolalysenko> then you can basically interpolate each frame to get the position of the object 18:21 < niftylettuce> upvotes please and ty "Node Wrapper and CLI for EasyPost (geteasypost.com)" http://news.ycombinator.com -- should be like #5 /cc pkrumins AvianFlu dominictarr mbalho tanepiper 18:21 < niftylettuce> <3 18:22 < dominictarr> niftylettuce: you need a botnet 18:23 < niftylettuce> dominictarr: :) 18:24 < niftylettuce> substack: can i haz ur upvote too :) ? 18:30 < jesusabdullah> what is easypost 18:32 < niftylettuce> jesusabdullah: http://geteasypost.com 18:32 < jesusabdullah> oh word 18:32 < niftylettuce> jesusabdullah: upvotesz plsz? 18:32 < jesusabdullah> yeah sure 18:39 < niftylettuce> yay #4 18:39 < niftylettuce> e-z 18:49 < jez0990> aha, IRL streams http://en.wikipedia.org/wiki/Kanban 18:50 < jez0990> Kanban wisdom seems to suggest a mixture of push and pull 18:55 < niftylettuce> isaacs: is something wrong with NPM? 18:55 < niftylettuce> isaacs: every time I try to publish a new version of a module, it's taking the version number but not taking my changes to code 18:56 < isaacs> niftylettuce: I DEMAND AN EXAMPLE TO REPRODUCE THIS 18:56 < mbalho> LET YOUR COMPLAINTS BE KNOWN TO THE KINGDOM 18:56 < LOUDBOT> HEY. CHILL DEM NIGGAZ *OUT*!!! HE BE REBOOTIN, TO PLAY WITH KERNELS 18:58 < niftylettuce> isaacs: https://github.com/niftylettuce/giggity 18:59 < niftylettuce> i tried publishing a change here https://github.com/niftylettuce/giggity/blob/master/bin/giggity.js#L12 and its not taking it in npm 18:59 < isaacs> niftylettuce: what isn't changing? 18:59 < isaacs> http://registry.npmjs.org/giggity 18:59 < isaacs> i see 4 versions there 18:59 < niftylettuce> yeah its not taking that ".Play()" 18:59 < niftylettuce> on line 12 in that link^ 19:00 < niftylettuce> i changed version for play.js since marak's module poorly maintained 19:00 < niftylettuce> weirdness 19:00 < isaacs> , play = require('play').Play() 19:00 < isaacs> should be that, right? 19:00 < niftylettuce> yeah 19:00 < niftylettuce> but it aint and i sad 19:01 < isaacs> $ head -n12 node_modules/giggity/bin/giggity.js | tail -1 19:01 < isaacs> , play = require('play').Play() 19:01 < isaacs> you sure? 19:01 < isaacs> cuz that's what i'm getting 19:01 < niftylettuce> isaacs: are you doing `$ npm install -g giggity` and then `$ giggity` ? b/c the bin script is weird 19:01 < niftylettuce> it should play audio but it doesnt it gives error 19:02 < isaacs> niftylettuce: i'm doing `npm install giggity` and then looking at the data 19:02 < niftylettuce> yea do the -g flag 19:02 < niftylettuce> and then go do head -n12 on the bin file 19:02 < isaacs> niftylettuce: yeah, works for m 19:02 < isaacs> e 19:02 < isaacs> family guy troll 19:02 < niftylettuce> isaacs: the audio works for u? wtf i cant repo 19:02 < niftylettuce> repro* 19:02 < isaacs> niftylettuce: running a second time says the png's corrupted. 19:03 < isaacs> niftylettuce: i think the bug is in your code, dude 19:03 < niftylettuce> isaacs: no i know of that err, thats not it 19:03 < isaacs> oh, it does different ones. 19:03 < isaacs> niftylettuce: `npm ls -g giggity` 19:03 < niftylettuce> isaacs: now it works, i had a local issue 19:03 < isaacs> niftylettuce: whassat do 19:03 < niftylettuce> isaacs: :) thanks man <3 19:03 < isaacs> there you go :) 19:03 < isaacs> neat module. 19:09 < timoxley> https://twitter.com/puffnfresh/status/320249238795743234 19:11 < timoxley> the smugness/attitude of these functional programming/static typing people really gets on my nerves 19:17 < mbalho> timoxley: that dudes a troll 19:18 < mbalho> i want to respond with 'our only contract is to not be wankers' but i wont 19:18 < timoxley> hahaha 19:33 < Domeni___> this is the same guy that trolled lxjs with "haskell in js" i think. 19:33 < mbalho> yep 19:33 < Raynos> timoxley: ? 19:34 < Raynos> he has a point though 19:34 < Raynos> a type system makes enforcing semver easier 19:35 < Domeni___> maybe one as strong as haskell's 19:36 < Domeni___> (i don't have experience with such type systems) 19:36 < mikolalysenko> stronger typing would be nice, especially if you could do better inlining stuff 19:36 < Raynos> juliangruber: How could `data-foo` have worked? 19:42 < juliangruber> Raynos: it would be set like any other attribute, just not as fast as with dataset 19:43 < Raynos> but hyperscript doesnt set attributes 19:43 < Raynos> it sets properties 19:43 < Raynos> data- properties are not a thing 19:43 < Raynos> as far as a I know 19:43 < Raynos> yeah, it doesnt work 19:58 < juliangruber> oh ok 19:58 < juliangruber> sorrey 19:59 < juliangruber> what's the lightest thing for hacking on the go? a kindleberry py? 19:59 < mbalho> i think so yea 20:00 < mbalho> depends on if 'go' means outside in the sun or not 20:06 < juliangruber> in the train mostly 20:06 < juliangruber> often on my lap 20:13 < timoxley> Raynos dominictarr was tacking this problem at one point from the perspective of tests 20:13 < timoxley> tests > types? 20:15 < jesusabdullah> idk man my dell mini 9 was pretty fucking tiny 20:15 < jesusabdullah> not so great for the sun but tiny 20:15 < jesusabdullah> I'd avoid the acer apires honestly, I haven't been happy with either of the ones I bought 20:18 < juliangruber> I was thinking, maybe an iPad mini sshing onto the raspberry pi 20:18 < juliangruber> I don't really feel like an acer or dell... 20:21 < Domeni___> surface! 20:23 < juliangruber> Domeni___: with linux on it? :D 20:23 < juliangruber> the keyboard is really sexy though 20:23 < Domeni___> the kickstand is pretty nice too actaully 20:24 < juliangruber> the surface sshing into the kindleberry or running a vm could work 20:24 < Domeni___> http://www.geek.com/microsoft/how-to-install-ubuntu-on-the-surface-pro-1539262/ 20:25 < juliangruber> yeah...but 900$ bucks man 20:25 < Domeni___> yeah 20:26 < Raynos> juliangruber: chromebook pixel? 20:26 < juliangruber> Raynos: $$$$ 20:26 < juliangruber> :D 20:29 < juliangruber> mbalho: the screen lag doesn't bother you? 20:29 < juliangruber> of the kindleberry 20:33 < mikolalysenko> has anyone bothered to implement fast selection for js yet? 20:33 < mikolalysenko> http://en.wikipedia.org/wiki/Selection_algorithm 20:33 < mikolalysenko> I can't find an npm module for it, but "select" is an overloaded term... 20:33 < mikolalysenko> also tried looking for median, etc. and no luck 20:33 < mbalho> juliangruber: nope 20:37 < mbalho> juliangruber: did you see the writeup i did? "it doesn't bother me at all when typing" http://maxogden.com/kindleberry-wireless.html 20:38 < juliangruber> mbalho: I just read that and thought...hm maybe that changed after using it more 20:38 < mbalho> lol 20:38 < juliangruber> great writeup 20:38 < juliangruber> btw 20:41 * juliangruber zzz 21:50 < chrisdickinson> Raynos: hitting a weird issue with levelidb related to indexdb-wrapper trying to call `setVersion` on the database (and that method doesn't exist) 21:55 < Raynos> chrisdickinson: that shit is broke as fuck I think 21:55 < Raynos> probably newer versions of chrome 21:56 < Raynos> chrisdickinson: write a new cross browser IDB wrapper :D 21:56 < chrisdickinson> hah 21:56 < chrisdickinson> yeah 21:56 < chrisdickinson> that'll probably have to happen 21:56 < Raynos> Or maybe 21:56 < Raynos> just update levelidb to use the latest version 21:57 < Raynos> right now its my fork ( https://github.com/Raynos/levelidb/blob/master/package.json#L23 ) 22:01 < dominictarr> niftylettuce: hey, just had an idea: you could greatly simplify the task of a hacker news botnet by using tor 22:02 < dominictarr> you just have to make requests that look like a normal user, so that a new user looks like a real one. 22:11 < Raynos> isaacs: is there a way we can get rid of `push("")` semantics by just putting the complexity involved in TLS itself? 22:12 < isaacs> Raynos: not without having TLS dig into the _readableState 22:12 < Raynos> why? 22:13 < Raynos> As I understand 22:13 < Raynos> you can replace all references to push("") 22:13 < Raynos> with a implicit call to `this._read()` 22:17 < defunctzombie> https://github.com/shtylman/node-sauron 22:18 < defunctzombie> simplest launcher I have yet 22:18 < defunctzombie> debating about trying 'mon' via 'mongroup' tho but seems more involved 22:19 < isaacs> Raynos: no, the point is that we need to NOT call this._read() again right now 22:20 < Raynos> then do it in a timeout 22:20 < isaacs> Raynos: and you're not suposed to call _read() yoursefl anyway 22:20 < Raynos> or something 22:20 < isaacs> Raynos: no, that's terrible. 22:20 < isaacs> Raynos: think about it, how long do you make the timer for? 22:20 < Raynos> that what does pipe do 22:20 < Raynos> when you call push("") 22:20 < isaacs> Raynos: pipe() sits there waiting for another 'readable' event 22:20 < isaacs> which will never come, until you tell it to read some more data. 22:20 < Raynos> ok then do that yourself 22:20 < isaacs> when? 22:20 < Raynos> `this.once("readable", function () { that._read() })` 22:21 < isaacs> how do i tell it that i'm not in the 'reading' state? 22:21 < isaacs> without putting data into it? 22:21 < isaacs> and without signalling failure? 22:21 < Raynos> i dont fully understand the state machine 22:21 < Raynos> and so i should just duck out :P 22:21 < isaacs> heh :) 22:22 < isaacs> in this case, the clear side has no data, and won't have any more data until and unless the encrypted side puts some in. 22:22 < isaacs> but you can't know ahead of time when that will be. 22:22 < isaacs> and you need to make sure that the Stream machinery knows you're not actively doing anything, so that it will try again later if you call read(0) on it 22:22 < isaacs> it's a very weird case. 22:37 < dominictarr> isaacs: instead of the empty push can't the stream just go ahead and read again on it's own? 22:39 < dominictarr> or what if, instead of a push('') you just emitted 'readable' again -- hmm, or is that what push('') does anyway? 22:41 < Domeni___> so. this is pretty good. discuss while i commute back home. http://www.dartlang.org/articles/feet-wet-streams/ 22:50 < isaacs> dominictarr: so, it will go ahead and read() again on its own 22:51 < isaacs> dominictarr: but _read() is where the "check if we have more data" logic lives 22:51 < jesusabdullah> yo dawgs, question: I have code that's hanging instead of exiting, and I'm closing up everything as far as I can tell. Any protips for figuring out where the extra listener is? 22:51 < isaacs> dominictarr: so read() will say, "Oh, I see, I'm already reading. never mind then." 22:51 < jesusabdullah> isaacs: you're good at this stuff, any suggestions? 22:51 < isaacs> jesusabdullah: var openStuff = process._getActiveHandles() 22:51 < isaacs> jesusabdullah: then start poking around on that thing 22:52 < dominictarr> right - so calling read twice before the next 'readable' does nothing? 22:52 < jesusabdullah> isaacs: also that reminds me, should t.type(xs, 'array') work? It seems to be like, "lolno that is an object" which is TRUE but not what I'm trying to ask 22:52 < jesusabdullah> isaacs: t.ok(Array.isArray(xs)) works but, like, :( 22:52 < jesusabdullah> isaacs: also thanks 22:54 < jesusabdullah> aww crap, it's supertest 22:54 < jesusabdullah> I wonder why? 22:54 < isaacs> jesusabdullah: t.type(xs, Array) 22:54 < jesusabdullah> oh okay 22:54 < jesusabdullah> works for me 22:55 < isaacs> dominictarr: exactly 22:55 < isaacs> dominictarr: that's why i need a way to say "I'm not reading any more, but i'm also not giving youanything, even EOF" 22:57 < dominictarr> right - I get that, but whats stopping the stream from just getting data - the encrypted stream needs to read more... 22:58 < isaacs> yreah 22:58 < isaacs> once the crypto side puts more data into openssl, some data MAY become available to the clear stream 22:59 < isaacs> so the crypto side says this.opposite.read(0) to say "Hey, buddy, might be some stuff for you" 22:59 < isaacs> but from the CryptoStream's point of view, some OTHER object is telling you when that happens, you don't know yourself 22:59 < dominictarr> Domenic_: what is the dart module system like? seems like it will have a $classpath (and the associated problems) 23:00 < dominictarr> hmm, so can't it just push that into the clear text stream's buffer this.opposite.push(data) ? 23:06 < isaacs> dominictarr: well, it doesn't know what to push into the opposite side 23:06 < isaacs> dominictarr: the opposite side needs to talk to openssl to get that 23:06 < isaacs> dominictarr: it could do this.opposite._read() 23:07 < isaacs> dominictarr: but what if it's already *actually* in the middle of reading? 23:16 < Raynos> Domenic_: `length` and `isEmpty` semantics sound super dodge 23:17 < Raynos> `length` should be a higher order `count :: Stream -> Future` function 23:17 < Raynos> Domenic_: Having `single` and `multiple` as seperate things is going to make for frustrating complexity. reducers has this, it's annoying. 23:18 < Raynos> actually wait, I think I'm thinking of having single & multiple semantics for `pull-stream` as well. Maybe it's not a bad idea 23:19 < Raynos> `.transform()` and `StreamTransformer` are just pipe and Duplex 23:21 < Raynos> Domenic_: The only good thing is an emphasis on functional style stream transformations. The rest is nothing new 23:24 < Raynos> Domenic_: the biggest problem I see so far is the lack of backpressure. Also I don't know whether `take(n)` aborts the stream 23:24 < Domenic_> Raynos: what's wrong with length and isEmpty. 23:25 < Raynos> well does length only fulfill the future when the stream is done? 23:25 < Domenic_> Raynos: hmm, good to get implementation experience saying that's bad. It seemed like an elegant way to do pull streams without missing data. 23:25 < Raynos> what about isEmpty 23:25 < Raynos> when does it fulfill 23:25 < Domenic_> yeah that is my understanding 23:25 < Raynos> length is ambigious compared to `count` 23:25 < Raynos> i dont know what isEmpty will tell me. 23:25 < Domenic_> if length === 0 23:26 < Domenic_> why do you like count as a function instead of length as a method? 23:32 < Raynos> Domenic_: as long as the semantics are the same it's fine. 23:32 < Raynos> I just cant tell what `length` and `isEmpty` do and when they do it 23:32 < Raynos> I feel that `count` is way less ambigious in what it does 23:34 < Raynos> Domenic_: Yeah, the lack of references to back pressure or abortion is really bad. 23:35 < Domenic_> ah yes, the old back pressure thing 23:37 < Domenic_> looks like they have cancel/pause/resume: http://api.dartlang.org/docs/releases/latest/dart_async/StreamSubscription.html 23:39 < Raynos> Domenic_: then it's a question whether StreamTransformer bubbles back pressure 23:40 < Raynos> and whether where , take, skipWhile & pals bubble it as well 23:40 < Domenic_> interesting 23:40 < Raynos> if they dont then there is no back pressure 23:40 < Raynos> so I should be able to get a file read and a file write stream 23:40 < Raynos> and put a bunch of take / where / bla / transform calls in between 23:41 < Raynos> and have the writer write one chunk at a time with manual pause / resume pumping 23:41 < Raynos> and the process memory usage should stay flat 23:41 < Raynos> no matter how big the files are 23:41 < Domenic_> there are no write streams though, not exactly. 23:42 < Raynos> Well there are 23:42 < Raynos> http://api.dartlang.org/docs/releases/latest/dart_io/IOSink.html 23:42 < Domenic_> ah that's what i was looking for 23:42 < Raynos> whether you want to call it writable or reader doesnt matter 23:42 < Raynos> writable / reader / consumer & readable / source / stream 23:42 < Raynos> all the same words 23:43 < Raynos> Domenic_: do you know how to jump to implementation? 23:43 < Domenic_> no idea 23:43 < substack_> blarg services are down 23:48 < Domenic_> anyone going to nodepdx 23:54 < jesusabdullah> Probably not 23:55 < jesusabdullah> I thought about submitting a talk but I don't think I have time --- Log closed Sat Apr 06 00:00:28 2013