00:00:00  * ircretaryquit (Remote host closed the connection)
00:00:11  * ircretaryjoined
00:04:40  * ryan_stevensjoined
00:05:04  * ryan_stevensquit (Client Quit)
00:21:05  * stagasquit (Ping timeout: 244 seconds)
00:26:41  * anvakajoined
00:40:02  * rockbot__joined
00:40:14  * piliquit (Ping timeout: 245 seconds)
00:44:17  * rockbot__quit (Ping timeout: 250 seconds)
01:11:19  <feross>cat streaming! http://instant.io/#61883b8e1fef9272d9e24e0a2a06955dafa5ba0e
01:13:45  * ryan_stevensjoined
01:21:24  * ryan_stevensquit (Quit: ryan_stevens)
01:25:08  * AaronvanWquit (Ping timeout: 265 seconds)
01:27:00  <pfraze>feross, neat, seems to be working
01:28:40  <pfraze>feross, media play doesnt work in FF ubuntu, `MediaSource is not a constructor`
01:29:01  <feross>pfraze: yeah, firefox hasn't enabled it by default yet
01:29:10  <feross>you can enable it in about:config and searching for "mediasource"
01:29:15  <feross>or use the nightly build
01:33:42  * ednapiranhajoined
01:51:54  * ednapiranhaquit
01:54:20  * contrahaxchanged nick to _contrahax
01:58:08  <domanic_>feross, it works for me
01:58:26  <feross>domanic_: woo hoo!
01:58:39  * _contrahaxquit (Quit: Sleeping)
01:59:34  <domanic_>feross, how big is this video?
02:00:19  <feross>domanic_: i actually don't know because i'm not the original seeder, but i'll find out
02:12:05  * domanic_quit (Ping timeout: 265 seconds)
02:13:20  * pilijoined
02:13:24  * cpupjoined
02:28:48  * rockbot__joined
02:33:17  * rockbot__quit (Ping timeout: 265 seconds)
02:33:48  * piliquit (Read error: Connection reset by peer)
02:39:02  * ryan_stevensjoined
02:47:28  * fotoveritequit (Quit: fotoverite)
02:57:37  * ryan_stevensquit (Quit: ryan_stevens)
03:21:40  * contrahaxjoined
03:23:01  * Mso150joined
03:26:44  * warbrettjoined
03:29:42  * rockbot__joined
03:34:19  * rockbot__quit (Ping timeout: 255 seconds)
03:39:05  * tanepiper__quit (Ping timeout: 260 seconds)
03:41:43  * tanepiper__joined
03:49:45  * Mso150quit (Ping timeout: 250 seconds)
04:14:33  * h0kejoined
04:17:29  * pelletierquit (Quit: ZNC - http://znc.in)
04:17:29  * prettyrobotsquit (Quit: ZNC - http://znc.in)
04:20:18  * brianloveswordsjoined
04:30:50  * brianloveswordsquit (Quit: Computer has gone to sleep.)
04:35:28  * brianloveswordsjoined
04:47:51  * thealphanerdquit (Quit: thealphanerd)
04:50:22  * warbrettquit (Remote host closed the connection)
05:18:17  * rockbot__joined
05:23:13  * rockbot__quit (Ping timeout: 272 seconds)
05:25:51  * brianloveswordsquit (Quit: Computer has gone to sleep.)
05:42:08  * contrahaxquit (Quit: Sleeping)
05:43:54  * contrahaxjoined
05:51:38  * h0kequit
06:23:44  * contrahaxchanged nick to _contrahax
06:33:58  * _contrahaxchanged nick to contrahax
06:43:19  * contrahaxchanged nick to _contrahax
06:45:36  * ryan_stevensjoined
07:06:59  * rockbot__joined
07:11:25  * rockbot__quit (Ping timeout: 260 seconds)
07:27:34  * peutetrejoined
07:43:09  <substack>web crypto APIs are all promise-based >_<
08:01:07  * stagasjoined
08:01:41  * fotoveritejoined
08:13:17  * cpupquit (Read error: Connection reset by peer)
08:14:32  * cpupjoined
08:23:05  * djcoinjoined
08:27:31  <substack>perfect module: https://www.npmjs.org/package/unpromise
08:28:54  <joepie91_>substack: curious, what's the rationale for not using promises?
08:29:31  <substack>I don't like them.
08:30:11  <substack>I don't like how I've got to .then() and .catch() all over the place
08:30:26  <substack>function (err, ...) {} is much more compact
08:30:55  <joepie91_>okay...? you're still going to have the same error handling code, and instead of .then you have nested callbacks as arguuments - I don't see the practical difference other than a slightly diffferent code layout?
08:31:19  <substack>you still have nested callbacks with promises I don't get your argument
08:31:27  <joepie91_>I can't really think of a situation where your code becomes *less* compact by using promises when you're doing the same thing
08:31:28  <substack>.then(function (result) {})
08:31:32  <substack>that's still a callback
08:31:34  <substack>so what's the point
08:31:37  <joepie91_>nested as in visually nested
08:31:53  <substack>just use named functions appropriately
08:31:57  <substack>or streams or events or whatever
08:32:36  <substack>var op = someFunc(); op.then(function (result) {}); op.catch(function (err) {})
08:32:37  <substack>versus
08:32:45  <substack>someFunc(function (err, result) {})
08:32:47  <joepie91_>there's a good amount of situations (in particular in webdev, I've found) where none of those make sense and/or make for easily understandable code
08:32:49  <substack>callbacks win
08:32:57  <joepie91_>uh..
08:33:03  <joepie91_>that's not really an accurate comparison
08:33:42  * gorhgorhquit (Read error: Connection reset by peer)
08:33:52  <joepie91_>someFunc().catch(function(err) {}).then(function(err) {}), with the observation that for many calls you won't even have a per-call catch statement
08:33:57  <substack>eww that's worse
08:33:59  <joepie91_>and on the callback side
08:34:06  * gorhgorhjoined
08:34:33  <joepie91_>someFunc(function (err, result) { if (err) { /* error handling */ } /* regular code */ })
08:34:36  <joepie91_>so I don't really see how that's any better
08:35:41  <substack>if (err) return cb(err)
08:35:41  * Mso150joined
08:35:50  <substack>so it early returns and I can keep writing code
08:35:52  <joepie91_>I mean, if you're going to leave out the error handling code in the callback version, I'm sure the callback version is going to look cleaner than the promise version, but that's hardly a fair comparison
08:35:56  <joepie91_>eh?
08:37:56  <substack>I really don't see the point of them. Just more annoying bullshit I've got to transform into something nice.
08:39:51  <joepie91_>I still don't understand what exactly you're suggesting for the error handling
08:40:07  <joepie91_>and/or how it's better than .catch statements (or absence thereof and letting them fall through)
08:40:26  <substack>if (err) return cb(err)
08:40:43  <joepie91_>okay? that seems meaningless to me without context...
08:40:51  <joepie91_>where is cb defined?
08:43:05  <substack>in the module interface where I'm calling async operations
08:43:32  <substack>module.exports = function (opts, cb) { someFunc(opts.whatever, function (err, value) { if (err) cb(err); /* ... */ }) }
08:43:38  * gorhgorhquit (Ping timeout: 250 seconds)
08:44:38  <substack>and pretty much nothing else that I want to use uses promises, so I get 0 benefit from returning a promise
08:45:08  <substack>all of the code that I would want to use already uses callbacks
08:45:24  * Mso150quit (Remote host closed the connection)
08:47:19  * ryan_stevensquit (Quit: ryan_stevens)
08:47:49  * gorhgorhjoined
08:50:03  <joepie91_>substack: that's a very narrow usecase - if you have a number of chained async calls (that would be represented as a chain of .then's with promises, and as a number of nested callbacks otherwise), that need specific error-handling for one of the calls but should let all of the other errors fall through, it's still completely unclear to me how you would do this cleanly with callbacks, without endlessly duplicating error handling code and/or
08:50:04  <joepie91_>causing spaghetti
08:50:29  * Mso150joined
08:50:53  <joepie91_>and when you start messing around with concurrent async calls (eg. a number of DB queries running simultaneously and doing something else when all of them have completed), I have no clue how you would even do that with callbacks without constantly duplicating code for counting how many of the calls have finished and so on
08:51:05  <joepie91_>you'd just be replicating the functionality of a promises library, inline, at that point
08:55:43  * rockbot__joined
08:59:53  * rockbot__quit (Ping timeout: 240 seconds)
09:02:41  <substack>I have not had that problem at all.
09:02:58  <substack>using ordinary callbacks exclusively all over the place
09:09:56  <joepie91_>substack: okay, how would you rewrite this hypothetical example code using just callbacks? http://sprunge.us/XKRf?js
09:10:53  <substack>I don't use apis that look like that
09:11:09  <substack>fetchRelation should return a stream
09:11:32  <joepie91_>substack: this is a hypothetical example.
09:11:54  <substack>answer: use streams
09:11:57  <joepie91_>each .fetchRelation and .fetchAll is a promise (or, in your case, method that takes a callback) that returns an array of models
09:12:26  <substack>that would potentially buffer up a lot of memory
09:12:28  <joepie91_>feel free to give me an example code snippet, since I have no clue how you envision streams working in this example, especially if the goal is to eg. render them on a page
09:12:50  * fotoveritequit (Quit: fotoverite)
09:13:06  <joepie91_>I'm open to learning about better ways to write code, but so far I've not really seen any clear explanation as to how to avoid spaghetti without promises
09:13:19  <substack>it would depend on how specifically you want to render them onto the page
09:13:34  <joepie91_>assume a jade template, for example
09:13:49  <substack>anyways with hyperstream you could just do
09:15:46  <substack>hyperstream({ '.posts': user.fetchRelation('posts').pipe(render.posts()), '.threads': user.fetchRelation('threads').pipe(render.threads()), '.friends': user.fetchRelation('friends').pipe(render.friends()) }).pipe(res)
09:16:32  <substack>and you just have a `render` object that contains functions that return object streams and write html output
09:16:44  <joepie91_>this... does not some simpler to me
09:16:59  <joepie91_>seem *
09:17:26  <substack>it works with backpressure and doesn't require buffering all the results into memory
09:17:58  <substack>that is the *entire* example nearly except for defining the rendering functions themselves
09:18:36  <joepie91_>okay? I'm not really looking for either of those two features, I'm looking to concurrently retrieve a number of things, handle errors for some things individually, let errors for other things fall through to a catch-all, and conveniently use them in any widely available library for templating (eg. jade) and so on
09:18:54  <substack>plus you can start shipping html to the endpoint as soon as you have data, you don't need to wait for all the async ops to finish before starting to send data
09:18:55  <joepie91_>and that just looks overly complex to me, plus it's completely unclear to me where the error handling comes in
09:18:58  <joepie91_>nor do I see a query for the user itself
09:19:31  <substack>what do you mean "for the user"
09:19:42  <joepie91_>so you say that is the "entire example" but it's missing the rendering functions as you mentioned (why are these functions?), and it is not functionally equivalent to what I gave as source
09:19:49  <joepie91_>if you look at the sprunge I linked
09:19:59  <joepie91_>the first thing it does is fetch a user
09:20:05  <substack>I think we are coming at these problems from completely different directions
09:20:08  <joepie91_>(rereading that, it should've been fetchOne, not fetchAll)
09:20:18  <substack>and where I'm coming from promises are not useful at all
09:20:21  <substack>and mostly just get in the way
09:20:35  <joepie91_>then if it can't find the user it handles the error, and if it *can* find the user it continues on to retrieve relations and wait until completion then passes them somewhere else, eg. jade
09:20:38  <substack>*what* does it fetch from a user
09:20:44  <joepie91_>the model in the DB?
09:20:53  <joepie91_>this is standard hypothetical-ORM code
09:20:58  <substack>databases don't store models, they store data
09:21:03  <joepie91_>ok...?
09:21:07  <substack>so what data?
09:21:15  <substack>that's the important part: streams of data
09:21:20  <joepie91_>... do you understand what an ORM does?
09:21:23  <joepie91_>:|
09:23:15  <substack>I don't like ORMs
09:23:39  <substack>I would rather deal with data directly
09:25:18  <joepie91_>substack: okay, but that's not the point of my question
09:25:34  <joepie91_>assuming that you are using an ORM with the API as described in my sprunge (but assume that it'll take a callback as last arg, instead of returning a promise)
09:25:44  <joepie91_>how would you rewrite that without using promises
09:25:58  <joepie91_>you say streams, but you haven't given me a full example of how to do that, your example only looked at one very specific part
09:26:15  <joepie91_>you;ve said callbacks before, but I don't see how that would work with *concurrent* queries
09:26:18  <substack>I wouldn't have that problem in the first place.
09:26:23  <joepie91_>without becoming a massive unmaintainable mess
09:26:45  <substack>or occasionally, I just use a pending counter
09:26:57  <substack>it's pretty easy for that to not turn in to a mess
09:26:58  <joepie91_>right, that would be the "implementing promises logic inline" thing I was referiing to
09:27:07  <joepie91_>because that's basically what Promise.all does
09:27:16  <substack>promises do a lot of other things
09:27:22  <joepie91_>and reimplementing the same boilerplate over and over again is exactly what I'm trying to avoid
09:27:23  <substack>why not just use a module that does only that part?
09:27:25  <joepie91_>eh, not really
09:27:33  <substack>sure they do
09:27:34  <joepie91_>they do a few things, but definitely not "a lot"
09:28:02  <joepie91_>and seeing as they function like a core language construct, doing a few things instead of one is perfectly okay
09:28:03  <ahdinosaur>enough to cause undesired bugs that are really painful to debug
09:28:04  <substack>if you're super worried about duplicating code, why not use a library like waterfall or whatever?
09:28:40  <substack>but I don't even bother with that, the code is easy enough to write correctly
09:28:51  <joepie91_>substack: how do you put an errorr handler inbetween a series of calls rather than at the end?
09:28:55  <joepie91_>in waterfall
09:29:45  <substack>not sure what you're asking
09:29:52  <substack>I just bail when there's an error
09:30:09  * fotoveritejoined
09:30:15  <substack>cb(err)
09:30:15  <joepie91_>sometimes that is not the appropriate solution, eg. when the error is a source of some sort not being available and retrieving it from a backup source instead
09:30:25  <joepie91_>then continuing with the rest
09:30:32  <substack>then you just don't bail and continue along
09:30:42  <joepie91_>yet you still need to handle the error
09:30:42  <substack>you can do whatever you want, it's just code
09:30:56  <substack>if (err) { whatever you want } else { something else }
09:30:57  * ralphtheninjaquit (Ping timeout: 265 seconds)
09:32:04  <joepie91_>substack: this conversation would be a lot easier if you gave me an example pastebin of the thing you're describing, rather than single context-less lines...
09:32:16  <joepie91_>for example, I have no idea where the above line would go
09:32:18  <joepie91_>when using waterfall
09:32:54  * AaronvanWjoined
09:37:45  <substack>var queue = [ ... ]; (function next () { if (queue.length === 0) return cb(null, results); someFn(queue.shift(), function (err, res) { ... }) })()
09:37:59  <substack>and call next() inside the handler when the next item is required
09:38:27  * nickleeflyjoined
09:57:39  <joepie91_>substack: (modifying that to run arbitrary functions), that looks a lot messier than just using Promise.all...
10:06:38  * fotoveritequit (Quit: fotoverite)
10:17:32  * olizillajoined
10:21:41  <ahdinosaur>joepie91_: whether code is messy is subjective
10:25:08  * fotoveritejoined
10:28:39  <joepie91_>ahdinosaur: if it is not visible at a glance from code what it is supposed to be doing, to somebody who didn't write the code himself, then I consider it 'messy'
10:28:44  <joepie91_>sometimes that's inevitable
10:28:58  <joepie91_>but often it's fairly easy to work around (and that's pretty much exactly what promises are meant to do)
10:30:00  <joepie91_>I have no particular bias towards promises, but unless something less messy and similarly usable comes along, I'm going to stick with it... this conversation has not exactly convinced me otherwise
10:30:47  <joepie91_>my code isn't poetry, but it's written to make it obvious what's going on
10:30:58  <joepie91_>if it's not, then I refactor the code until it is
10:32:19  <ahdinosaur>and many people here write clear code that doesn't use promises
10:34:18  <joepie91_>yet I would wager that the example code that substack just provided would make somebody who isn't used to that 'pattern' go "???"
10:34:32  <ahdinosaur>so?
10:35:01  <ahdinosaur>substack writing code that way taught me the beauty of streams
10:35:30  <joepie91_>so? I've asked for an example of how you'd do something without promises, and the answer provided is significantly less clear than the promises-using code
10:35:35  <joepie91_>thus, see above
10:35:50  <joepie91_>and not everything can be logically abstracted as a 'stream' and still have it make sense, and that's where the problem lies
10:36:01  <ahdinosaur>you're arguing opinions, there's no right or wrong answer here
10:36:17  <joepie91_>I think streams are great and that the more-or-less-standardization of them in Node.js is one of the most important arguments for using it, but that doesn't mean that everything is now a nail
10:36:27  <joepie91_>(most important arguments for using Node, I mean)
10:37:07  <joepie91_>ahdinosaur: that's the thing - if you can write clear-at-a-glance code without using Promises, then by all means go ahead, all the better
10:37:20  <joepie91_>but the answers I've gotten so far have not inspired much faith in me that that's the case
10:37:34  <joepie91_>so I see no reason not to use promises myself
10:44:31  * rockbot__joined
10:44:50  * fotoveritequit (Quit: fotoverite)
10:45:54  <ahdinosaur>i reckon if you want to learn how to write clear-at-a-glance code without using promises, follow people here on GitHub and read their code, at least that's what i did
10:47:29  <ahdinosaur>there's no magical argument that could convince anyone of anything, we need to understand within ourselves
10:48:57  * rockbot__quit (Ping timeout: 258 seconds)
10:49:46  <joepie91_>ahdinosaur: yes, and that is why I presented a snippet of hypothetical code and asked for a promises-less implementation - to understand exactly how these kind of concepts that are available in promises, translate to promise-less constructs
10:50:22  <ahdinosaur>it's deeper than just promises though
10:57:20  <ahdinosaur>also, you could ask 10 developers and get 10 different answers, all equally right
10:57:27  <joepie91_>ahdinosaur: I took that possibility into account by asking "how would you write this snippet without promises" (with 'snippet' being representative of a real-world route in a web app), rather than just asking "what's the equivalent of Promise.all"
10:58:40  <ahdinosaur>right, so what's wrong with the response you got?
11:00:50  <joepie91_>well, the question wasn't really answered - I got a partial answer about doing a bunch of queries as a stream, a partial answer about error handling in a different construct (waterfall), and a partial answer about a generic Promise.all equivalent
11:01:03  <joepie91_>but I didn't get any answer that I could slap onto pastebin and go "here, that's the equivalent"
11:01:07  <joepie91_>so it's still not all that much clearer to me
11:01:27  <joepie91_>to me, this reads like "well you can solve problem A with construct A and problem B with construct B" but it's not clear how the two constructs relate or whether they're compatible at all
11:03:07  <ahdinosaur>it's async control flow, and both callbacks, promises, waterfalls, etc are each possible ways of doing it, mostly compatible with each other
11:03:48  <joepie91_>that may very well be, but it hasn't become clear to me *how* to use this together in practice
11:04:00  <joepie91_>as I said, I don't have a blob of code that I could throw on Pastebin and say "see, here's an equivalent way of doing it"
11:04:17  <joepie91_>so it doesn't really give me much perspective on how things translate to different... 'paradigms', for lack of a better word
11:04:22  <substack>you just use programming
11:05:26  <substack>the approach to use for any given problems is that it depends a lot on the details
11:05:49  <substack>and very often the best solution is to reframe and recontextualize the problem instead of solving it as presented
11:10:50  <ahdinosaur>joepie91_: doing a 1-to-1 translation of a code snippet, let alone expecting someone else to do that translation for you, might not be the best approach to learning the various paradigms
11:15:34  <substack>I was just complaining that I don't like these web crypto promise apis
11:15:57  <substack>because I don't deal with promise apis often and they feel clunky and weird
11:16:16  <substack>but I've nearly got it all working
11:16:45  <ahdinosaur>substack: awesome!
11:16:58  <ahdinosaur>well not the web crypto promise apis... :p
11:17:46  <substack>it's an offline web service (using hyperboot) for single sign-on
11:17:59  <substack>and it doesn't require any servers unless you want to back up your key
11:19:36  <ahdinosaur>cool, i can see that being really useful
11:21:36  <ahdinosaur>especially if it makes its way into ssb/phoenix, hehe
11:25:47  * anvakaquit (Remote host closed the connection)
11:33:36  * Mso150quit (Ping timeout: 256 seconds)
11:43:40  <joepie91_>ahdinosaur: it is to me...
11:50:23  * nickleeflyquit (Quit: Connection closed for inactivity)
11:50:54  * gorhgorh_joined
11:52:55  * gorhgorhquit (Ping timeout: 255 seconds)
11:52:55  * gorhgorh_changed nick to gorhgorh
11:54:45  * insertcoffeejoined
12:09:11  * stagasquit (Ping timeout: 272 seconds)
12:21:13  * oncenulljoined
12:21:39  * oncenullquit (Read error: Connection reset by peer)
12:21:39  * onc3nulljoined
12:44:31  <joepie91_>substack: seeing as you maintain hyperquest... the node http documentation suggests emitting an agentRemove event for long-running/streaming requests - would this be a sufficiently good solution if you know which requests are going to be long-running and which are not (while still taking advantage of keep-alive pooling for quick requests), or is there some other snag that makes this an unsuitable solution?
12:44:56  <joepie91_>"know which are going to be long-running" as in, under normal circumstances, not accounting for backend failures and such
13:06:59  * domanicjoined
13:20:15  * gorhgorhquit (Quit: gorhgorh)
13:49:13  * ralphtheninjajoined
13:51:57  * ryan_stevensjoined
13:53:42  * CoderPuppyjoined
13:53:53  * ryan_stevensquit (Client Quit)
13:55:20  * cpupquit (Ping timeout: 265 seconds)
13:58:43  * maxgfellerquit (Quit: maxgfeller)
13:58:53  * maxgfellerjoined
14:02:20  * thlorenzjoined
14:14:24  * knownasilyajoined
14:15:11  * brianloveswordsjoined
14:22:02  * rockbot__joined
14:25:29  * olizillaquit (Quit: Connection closed for inactivity)
14:27:00  * rockbot__quit (Ping timeout: 256 seconds)
14:28:47  * brianloveswordsquit (Quit: Computer has gone to sleep.)
14:34:29  * reqsharkquit (Quit: Be back later ...)
14:36:45  * brianloveswordsjoined
14:39:32  * ryan_stevensjoined
14:48:04  * thlorenzquit (Remote host closed the connection)
14:48:18  * thlorenzjoined
14:58:14  * stagasjoined
14:59:56  * insertcoffeequit (Ping timeout: 244 seconds)
15:05:26  * gorhgorhjoined
15:15:03  * insertcoffeejoined
15:19:09  * reqsharkjoined
15:22:58  * rockbot__joined
15:24:15  <domanic>mafintosh sorribas hey what are you guys up to this evening?
15:24:23  * ryan_stevensquit (Quit: ryan_stevens)
15:25:02  <mafintosh>domanic: we are heading to paludans (https://www.google.dk/maps/place/Paludan+Bog+%26+Caf%C3%A9/@55.680331,12.573319,17z/data=!3m1!4b1!4m2!3m1!1s0x465253103fe19c97:0xdcf4e0b8fae25688?hl=en) in about an hour for some hacking
15:25:11  <mafintosh>they have decent food there also
15:25:20  <domanic>mafintosh, cool I know that place
15:25:46  <mafintosh>domanic: did you try their rye bread sandwiches?
15:26:15  <domanic>mafintosh, no but sorribas has been telling me I must try the danish rye bread
15:27:39  * rockbot__quit (Ping timeout: 255 seconds)
15:29:20  <domanic>substack, you should hangout in #scuttlebutt
15:50:43  * ryan_stevensjoined
16:01:30  * brianloveswordsquit (Quit: Computer has gone to sleep.)
16:02:09  * ednapiranhajoined
16:02:42  * tixzjoined
16:04:14  * ryan_stevensquit (Quit: ryan_stevens)
16:04:34  * brianloveswordsjoined
16:05:00  * tixzquit (Remote host closed the connection)
16:05:56  * tixzjoined
16:10:40  * tixzquit (Ping timeout: 265 seconds)
16:18:17  * tixzjoined
16:28:17  * domanicquit (Ping timeout: 244 seconds)
16:28:42  * warbrettjoined
16:40:43  * fotoveritejoined
16:40:49  * AaronvanWquit (Remote host closed the connection)
16:58:00  * dguttmanjoined
17:11:28  * warbrett_joined
17:11:32  * rockbot__joined
17:12:39  * domanicjoined
17:15:17  * warbrettquit (Ping timeout: 260 seconds)
17:16:21  * rockbot__quit (Ping timeout: 272 seconds)
17:17:35  * gorhgorhquit (Ping timeout: 244 seconds)
17:19:18  * warbrett_quit (Ping timeout: 265 seconds)
17:21:07  * warbrettjoined
17:22:30  * phated_joined
17:25:52  * _contrahaxchanged nick to contrahax
17:28:20  * warbrettquit (Remote host closed the connection)
17:40:51  * kriskowaljoined
17:41:02  * domanicquit (Ping timeout: 258 seconds)
17:42:07  * phated_changed nick to phated
17:48:40  * contrahaxquit (Quit: Sleeping)
17:48:58  * djcoinquit (Quit: WeeChat 1.0)
17:53:20  * rockbot__joined
17:54:31  * rockbot__quit (Remote host closed the connection)
17:54:45  * rockbot__joined
17:55:26  * warbrettjoined
18:01:39  * brianloveswordsquit (Quit: Computer has gone to sleep.)
18:02:06  * brianloveswordsjoined
18:03:38  * brianloveswordsquit (Client Quit)
18:05:34  * domanicjoined
18:07:51  * thlorenzquit (Remote host closed the connection)
18:08:33  * oldskirtjoined
18:08:35  * thlorenzjoined
18:16:04  * rockbot__quit (Remote host closed the connection)
18:30:49  * peutetrequit (Quit: peutetre)
18:36:01  * rockbot__joined
18:42:29  * onc3nullquit (Remote host closed the connection)
18:43:54  * oncenulljoined
18:44:23  * Guest_joined
18:45:16  * tixzquit (Remote host closed the connection)
18:55:42  * oldskirt_joined
18:57:29  * oldskirtquit (Ping timeout: 260 seconds)
19:02:59  * rockbot__quit (Remote host closed the connection)
19:03:01  * peutetrejoined
19:03:29  * tixzjoined
19:04:45  * tixzquit (Remote host closed the connection)
19:09:04  * tixzjoined
19:11:01  * rockbot__joined
19:11:07  * domanic_joined
19:11:29  * domanicquit (Ping timeout: 245 seconds)
19:15:16  * Mso150joined
19:15:55  * rockbot__quit (Remote host closed the connection)
19:16:14  * rockbot__joined
19:18:42  * thlorenzquit (Remote host closed the connection)
19:24:42  * toddself_zzchanged nick to toddself
19:36:12  * Guest_quit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
19:43:17  * thlorenzjoined
19:50:50  * contrahaxjoined
19:51:48  * insertcoffeequit (Ping timeout: 255 seconds)
20:01:14  * brianloveswordsjoined
20:03:37  * contrahaxquit (Ping timeout: 245 seconds)
20:04:44  * thlorenzquit (Ping timeout: 256 seconds)
20:04:48  * thlorenz_joined
20:05:21  * tilgovijoined
20:05:44  * toddselfchanged nick to toddself_zz
20:08:49  * gorhgorhjoined
20:12:58  * tixzquit (Remote host closed the connection)
20:27:55  * tixzjoined
20:29:20  * tixzquit (Remote host closed the connection)
20:32:34  * domanic__joined
20:33:24  * sorensen_joined
20:33:25  * sorensen_quit (Remote host closed the connection)
20:35:24  * tixzjoined
20:36:26  * domanic_quit (Ping timeout: 265 seconds)
20:36:36  * domanic__changed nick to domanic
20:37:47  * brianlov_joined
20:39:46  * toddself_zzchanged nick to toddself
20:41:07  * brianloveswordsquit (Ping timeout: 245 seconds)
20:58:04  * tixzquit (Remote host closed the connection)
21:01:11  <ogd>trevnorris: lol check this thread out https://github.com/attractivechaos/k8/issues/1
21:04:10  * Mso150quit (Ping timeout: 245 seconds)
21:04:33  * tixzjoined
21:06:13  * Mso150joined
21:07:23  * domanicquit (Read error: Connection reset by peer)
21:24:46  <substack>joepie91_: that would work. hyperquest is more like "don't worry about configuring anything, it's not going to blow up in your face like the stock http client"
21:24:58  * jxsonjoined
21:27:21  * ednapiranhaquit (Read error: Connection reset by peer)
21:27:51  * ednapiranhajoined
21:33:52  * mothballjoined
21:35:19  * brianlov_changed nick to brianloveswords
21:37:49  * tixzquit (Remote host closed the connection)
21:47:58  * oncenullquit (Remote host closed the connection)
21:48:17  * Mso150quit (Ping timeout: 258 seconds)
21:48:26  * oncenulljoined
21:48:51  * Mso150joined
21:49:23  * peutetrequit (Quit: peutetre)
21:53:17  * oncenullquit (Ping timeout: 265 seconds)
22:00:34  * domanicjoined
22:01:57  <ralphtheninja>domanic: https://github.com/MrChrisJ/World-Citizenship
22:03:28  <domanic>ralphtheninja, sounds like key signing party rebranded
22:03:45  <ralphtheninja>domanic: yep
22:05:07  <substack>just got generating / exporting / importing keys working in-browser!
22:05:21  <domanic>ralphtheninja, I disagree with this xkcd comic
22:05:25  * andrewdeandradejoined
22:05:50  <substack>now to whip up the configuration system and postMessage bus
22:05:54  <domanic>oh no, cancel that
22:06:06  <domanic>it's correct
22:08:20  * andrewdeandradepart
22:08:27  * andrewdeandradejoined
22:08:34  <domanic>substack, what about using hyperboot as a plugin to another app?
22:09:01  <domanic>it would basically just mean prepending some javascript to it
22:09:29  <substack>domanic: hyperboot isn't just javascript, there's some server-side stuff too
22:09:47  * peutetrejoined
22:10:36  <substack>and it's got to control the page loading itself to load old versions and prevent code from auto-updating
22:11:29  <domanic>right so that is a container?
22:11:40  <substack>yes
22:13:31  * thlorenz_changed nick to thlorenz
22:14:10  <domanic>substack, is there special stuff with the back end? could the back end be statically hosted?
22:15:27  <substack>domanic: the backend would need to be configured to send max-age headers 100 years in the future
22:16:02  <substack>otherwise the cache manifest gets re-read
22:16:12  <substack>and the server could decide to change it at any time
22:16:16  <domanic>substack, what if you put the manifest inside the manifest?
22:16:29  * oldskirtjoined
22:16:34  <substack>doesn't work, browsers still try to fetch it
22:17:46  * oldskirt_quit (Ping timeout: 244 seconds)
22:20:38  <domanic>substack, confirmed
22:21:04  <domanic>I'm sure we can persuade kyledrake to add that to neocities for us
22:21:16  <substack>yes that would rock!
22:24:16  * jxsonquit (Ping timeout: 255 seconds)
22:24:17  * jxson__joined
22:25:15  * Mso150quit (Ping timeout: 265 seconds)
22:30:36  * jxson__quit (Remote host closed the connection)
22:30:47  * kriskowalquit (Quit: kriskowal)
22:32:39  * kriskowaljoined
22:34:02  * jxsonjoined
22:34:16  * jxsonquit (Remote host closed the connection)
22:34:31  * jxsonjoined
22:38:21  * tixzjoined
22:41:53  * peutetrequit (Quit: peutetre)
22:45:27  * tixzquit (Ping timeout: 244 seconds)
22:45:54  * oncenulljoined
22:57:19  <mikolalysenko_>ogd: I took another shot at that silly thing https://github.com/attractivechaos/k8/issues/1
22:57:32  * brianloveswordsquit (Quit: Computer has gone to sleep.)
22:59:42  <mikolalysenko_>on my machine it is about 2x faster than mafintosh's solution
22:59:51  <mikolalysenko_>I suspect you could get that a bit faster by adding more buffers
23:00:11  <mikolalysenko_>since basically this whole thing is just limited by how fast you can slurp a bunch of bytes from disk...
23:01:25  * jxsonquit (Remote host closed the connection)
23:01:29  <mikolalysenko_>it also runs about as fast as the c-1 solution, but I don't have the data that they are running it on
23:03:00  <mafintosh>mikolalysenko_: oh thats clever
23:04:13  * jxsonjoined
23:04:33  <mikolalysenko_>mafintosh: I also tried some tricks with word level parallelism, but it didn't end up making it faster
23:04:49  <mikolalysenko_>the problem is the whole v8 smi thing overflows at 30 bits, which makes it hard to do some tricky things
23:05:02  <mikolalysenko_>or at least do them efficiently
23:05:22  <mikolalysenko_>in c you could get better perf using stuff like this: http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-851-advanced-data-structures-spring-2012/calendar-and-notes/MIT6_851S12_L12.pdf
23:08:07  * kriskowalquit (Quit: kriskowal)
23:14:03  * kriskowaljoined
23:20:58  * stagasquit (Ping timeout: 255 seconds)
23:21:44  <domanic>substack, is there a way you can check what the headers are from the browser?
23:22:40  <substack>domanic: only some of them
23:24:37  <pfraze>domanic, we have a proxy that fetches JS over the web
23:25:09  <domanic>pfraze, what proxy?
23:25:13  <pfraze>we could store and check digests if we wanted
23:25:32  <pfraze>domanic, https://github.com/pfraze/phoenix/pull/157/files#diff-6fb1b044f15a4a2b2554efbb353c6db8R77
23:26:32  <domanic>I'm confused - the user pages don't use that though right?
23:26:39  <pfraze>they do
23:27:21  <pfraze>we open an iframe to that sandbox proxy
23:27:49  <pfraze>and it fetches the user page js (from /user/<file.js>) and renders the page
23:28:05  <domanic>pfraze, the userpages are loaded from local though?
23:28:27  <pfraze>domanic, yeah, hosted from the local http server. This is why we can already load web urls
23:28:36  <domanic>oh right.
23:28:59  <domanic>okay if we are gonna do that we should require that the url is <hash.hex>.js
23:29:02  <pfraze>but if we're concerned about the security of remote js, I think we might just remove the public web support
23:29:08  <pfraze>hmm
23:29:36  <pfraze>well that's not a bad idea
23:30:00  <pfraze>we could also just download the js file into /user
23:30:18  <domanic>we'll fix this with attachments anyway
23:30:22  <pfraze>right
23:30:39  <pfraze>lets just ditch remote for now
23:30:55  <trevnorris>ogd: heh, awesome.
23:34:52  * mothballquit (Ping timeout: 240 seconds)
23:35:24  * mothballjoined
23:36:02  <krl>you talking scuttle here too? or something else?
23:40:12  <domanic>krl scuttlebutt + hyperboot
23:43:48  <substack>domanic: will ssb just need key signing?
23:45:11  <domanic>substack, yes it must have signing, and hashes - encryption is useful but not strictly necessary. we'll add it at some point though
23:45:24  <domanic>substack, what crypto library are you using?
23:45:38  <substack>webcrypto
23:45:53  <substack>window.crypto.subtle
23:46:13  <domanic>oh how is the browser support?
23:46:51  <substack>ie 11, ff 35, chrome 37, safari { desktop: 7.1, ios: 8 }, opera 25
23:49:12  <ogd>jden: you wanna open an issue about the corporate focus/representation stuff? i just opened 2 other issues
23:50:05  <krl>domanic: link? google shows me 'boot time optimization software'
23:50:22  <domanic>https://github.com/substack/hyperboot
23:52:03  * thlorenzquit (Remote host closed the connection)
23:52:05  <krl>domanic: sweet
23:52:34  <krl>i kind of get the feeling there's like a cambrian explosion of cool software happening right now
23:52:38  * thlorenzjoined
23:54:23  <substack>domanic: http://msdn.microsoft.com/en-us/library/ie/dn302321(v=vs.85).aspx
23:54:28  <substack>all the methods that web crypto supports
23:56:32  * pilijoined
23:57:25  * thlorenzquit (Ping timeout: 264 seconds)
23:57:54  <domanic>substack, ah interesting. we should probably add polyfils using this for crypto-browserify
23:58:52  <domanic>such a weird api though
23:59:17  * knownasilyaquit (Quit: Connection closed for inactivity)