00:00:00  * ircretaryquit (Remote host closed the connection)
00:00:08  * ircretaryjoined
00:04:11  * jcrugzz_joined
00:04:27  * jcrugzzquit (Ping timeout: 252 seconds)
00:07:48  * AvianFlu_joined
00:10:51  * AvianFluquit (Ping timeout: 240 seconds)
00:19:47  <chrisdickinson>ah
00:19:53  <chrisdickinson>named function expressions were, iirc, introduced to eliminate the need for arguments.callee
00:21:34  * st_lukequit (Remote host closed the connection)
00:24:04  <rowbit>Hourly usage stats: [free: 34]
00:27:13  <johnkpaul>chrisdickinson: oh really? I thought they were around in ES3
00:30:11  <johnkpaul>ogd: done https://github.com/substack/node-browserify/pull/554
00:36:27  <chrisdickinson>johnkpaul: function expressions weren't part of JS until es3 if i'm reading the spec correctly
00:36:45  <chrisdickinson>but arguments.callee predated expressions and allowed "anonymous" functions to recurse
00:37:37  <chrisdickinson>it used to be that anonymous functions could only be instantiated via the `Function(arg0, arg1, ..argN, body)` constructor
00:43:10  * st_lukejoined
00:45:58  <johnkpaul>chrisdickinson: ah I see. I don't know anything about JS pre-es3
00:47:15  <johnkpaul>Anyone know how and if I can specify a browserify transform to apply to zuul generated test files? defunctzombie_zz
00:48:39  * mikolalysenkojoined
01:00:22  * st_lukequit (Remote host closed the connection)
01:04:47  <ogd>substack: hey did you see https://github.com/ttezel/anchor?
01:04:53  <ogd>not on npm tho
01:11:06  <ogd>substack: also https://github.com/daneroo/im-rsync-algo
01:11:46  <chrisdickinson>interesting
01:14:04  <ogd>chrisdickinson: yea i really really want a nice implementation for building a syncing blob store on top of dat
01:14:35  <chrisdickinson>i was just thinking about revisiting the git-create-delta stuff
01:15:48  * yorickquit (Read error: Connection reset by peer)
01:16:10  * st_lukejoined
01:16:40  <ogd>chrisdickinson: https://npmjs.org/package/rolling-checksum
01:17:01  <ogd>chrisdickinson: thats the main part of rsync
01:17:30  <chrisdickinson>oh? I thought it was based on rabin polynomials
01:18:09  <ogd>chrisdickinson: http://rsync.samba.org/tech_report/node2.html
01:18:33  <ogd>chrisdickinson: that page might be out of date, not sure
01:19:07  <chrisdickinson>ah, interesting!
01:19:27  <chrisdickinson>git uses rabin polynomials instead -- wonder what the tradeoffs are.
01:19:45  <ogd>i think rabin polynomials are a particular implementation of a rolling hash, as are adler32s
01:20:13  * chrisdickinsonnods
01:20:31  <ogd>e.g. http://www.gelato.unsw.edu.au/archives/git/0604/19682.html
01:20:58  <chrisdickinson>thought it might be a speed thing, yeah
01:21:20  <chrisdickinson>since you could potentially get away with... what, an add, a substract, and maybe 1-2 multiplies per byte for rabin?
01:22:15  <ogd>chrisdickinson: that api i'm imagining is: require('sync')(basedir, listOfRelativeFilePaths).pipe(stream) and on the other end you pipe that to a thing that writes the deltas to the fs e.g. deltas.pipe(syncWriter(basedir))
01:22:47  * pfrazequit (Ping timeout: 260 seconds)
01:22:49  <ogd>oh but i guess it needs to be duplex
01:22:59  <ogd>so you'd do deltas.pipe(syncWriter(basedir)).pipe(deltas)
01:23:25  <ogd>and i guess you can just make require('sync') polymorphic
01:23:30  <ogd>anyway you get the idea
01:24:04  <rowbit>Hourly usage stats: [free: 43]
01:26:03  <chrisdickinson>ah yeah -- `var dir = sync(basedir, files); dir.pipe(conn).pipe(dir)`
01:28:43  * fronxquit (Remote host closed the connection)
01:29:09  * fronxjoined
01:30:34  * fronxquit (Remote host closed the connection)
01:30:48  * mikolalysenkoquit (Ping timeout: 252 seconds)
01:39:01  <ogd>substack: at 7:30 tonight i'm goin to a hacker pad in e oakland to hang out and play Rock Band, you should come!
01:43:17  <substack>sounds rad
01:51:02  * jcrugzz_quit (Read error: Connection reset by peer)
01:59:33  * fotoveritequit (Quit: fotoverite)
02:00:57  * fronxjoined
02:05:38  * jcrugzzjoined
02:05:57  * fronxquit (Ping timeout: 248 seconds)
02:09:11  * Maciek416joined
02:09:47  * Maciek416quit (Remote host closed the connection)
02:20:18  * mikolalysenkojoined
02:24:04  <rowbit>Hourly usage stats: [free: 20]
02:30:29  * fronxjoined
02:35:07  * fronxquit (Ping timeout: 260 seconds)
02:38:13  * st_lukequit (Remote host closed the connection)
02:46:50  * timoxleyjoined
02:53:18  * mikolalysenkoquit (Ping timeout: 252 seconds)
03:02:56  * thlorenzjoined
03:04:59  * timoxleyquit (Remote host closed the connection)
03:06:24  * timoxleyjoined
03:06:54  * defunctzombie_zzchanged nick to defunctzombie
03:07:37  * st_lukejoined
03:08:49  * timoxleyquit (Read error: Connection reset by peer)
03:08:56  * timoxleyjoined
03:12:28  * mikolalysenkojoined
03:18:52  <jjjohnny_>mikolalysenko: o/
03:19:10  * kriskowal_quit (Quit: kriskowal_)
03:19:25  <jjjohnny_>mikolalysenko: how did the thesis proposal go?
03:24:02  * fotoveritejoined
03:24:04  <rowbit>Hourly usage stats: [free: 23]
03:25:25  * jcrugzzquit (Ping timeout: 248 seconds)
03:29:19  <mikolalysenko>jjjohnny_: passed it!
03:29:44  <mikolalysenko>actually went really well, my committee really liked it
03:30:40  <jjjohnny_>mikolalysenko: whats the subject?
03:31:02  <mikolalysenko>geometry/constraint solving
03:31:28  <mikolalysenko>related to planning and design problems
03:31:52  <mikolalysenko>so includes stuff like collision detection/finding workspace of a mechanism/etc
03:32:43  <jjjohnny_>like putting stuff in compartments?
03:33:06  <mikolalysenko>yeah, it is part of it
03:33:30  <jjjohnny_>is this masters thesis?
03:33:34  <mikolalysenko>phd
03:33:51  <jjjohnny_>kewl whats the timeline for completion?
03:34:00  <mikolalysenko>depends on what next
03:34:10  <mikolalysenko>if I decide to do academia, 2 years. if not 1 year
03:34:20  <mikolalysenko>basically extra year is for job hunting
03:34:28  <mikolalysenko>main thesis should be done in 1 year or so
03:35:39  <jjjohnny_>mikolalysenko: do you dev work on the side or teach or what?
03:35:56  <mikolalysenko>js stuff is a hobby
03:36:03  <mikolalysenko>I work on the side at 3d systems sometimes
03:36:34  <jjjohnny_>speaking of geometry, I have a quadratic equation conundrum
03:36:40  <mikolalysenko>ok
03:36:52  <jjjohnny_>I'm making an audio eneveloping module
03:37:07  <jjjohnny_>that you can "draw" with control points, a la bezier curves
03:37:30  <mikolalysenko>got it
03:37:44  <jjjohnny_>is there a way to derive, from all the control points, the quadratic equation for that line?
03:37:53  <mikolalysenko>yeah, there are a couple of ways
03:38:11  <mikolalysenko>do you want a fully quadratic envelope or just piecewise quadratic, or closest quadratic?
03:38:16  <mikolalysenko>since 3 points determine a quadratic
03:38:26  <jjjohnny_>its n points, technically
03:38:42  <mikolalysenko>so if you have n+1 points it uniquely determines a degree n polynomial
03:38:49  <mikolalysenko>http://en.wikipedia.org/wiki/Lagrange_polynomial
03:39:14  <mikolalysenko>now if you want a piecewise quadratic spline (ie locally it is quadratic), then what you really want is hermite interpolation
03:39:24  <mikolalysenko>http://en.wikipedia.org/wiki/Hermite_interpolation
03:39:38  <mikolalysenko>that basically is the spline-ified version of lagrange interpolation
03:39:53  <mikolalysenko>basically it glues together lagrange interpolated curves up to some order of smoothness
03:40:11  <mikolalysenko>finally, if you just want one big global quadratic curve you should use a linear least squares fit
03:40:28  <mikolalysenko>http://en.wikipedia.org/wiki/Polynomial_regression
03:40:55  <mikolalysenko>so which one do you wnat?
03:40:59  <jjjohnny_>these will give me a quadtratic formula for a given set of control points?
03:41:12  <mikolalysenko>the last one will give you one quadratic polynomial
03:41:13  <jjjohnny_>where the middle control points are not actually on the line
03:41:37  <mikolalysenko>sounds like polynomial regression
03:41:46  <mikolalysenko>http://en.wikipedia.org/wiki/Polynomial_regression#Matrix_form_and_calculation_of_estimates
03:42:08  <jjjohnny_>ive been using deCasteljau's equation
03:42:13  <mikolalysenko>ah
03:42:14  <jjjohnny_>https://gist.github.com/atomizer/1049745
03:42:16  <mikolalysenko>that is for a spline
03:42:25  <mikolalysenko>then maybe you want a hermite spline
03:42:26  <mikolalysenko>http://en.wikipedia.org/wiki/Hermite_interpolation
03:42:49  <mikolalysenko>you can do the same dynamic programming trick to evaluate the basis functions
03:44:00  <jjjohnny_>these look more complicated than decateljau's
03:44:39  <mikolalysenko>they are not so bad actually
03:44:50  <mikolalysenko>basically it depends what you want at the end of the day
03:45:25  <mikolalysenko>do you want one quadratic curve, or do you want a spline glued together from quadratics?
03:45:37  <mikolalysenko>decasteljau gives you a spline
03:45:48  <mikolalysenko>or some piecewise degree n polynomial
03:45:49  <jjjohnny_>probably one quadratic
03:45:59  <mikolalysenko>ok, then you want polynomial regression
03:46:15  <mikolalysenko>you just solve that linear system, and you are good
03:46:26  <mikolalysenko>you will basically have to take the inverse of a 3x3 matrix at the end of the day
03:47:22  <mikolalysenko>solve the equation at the bottom of this section: http://en.wikipedia.org/wiki/Polynomial_regression#Matrix_form_and_calculation_of_estimates
03:47:37  <mikolalysenko>a0, a1, a2 are the coefficients of the quadratic polynomial
03:47:50  <mikolalysenko>and xm,ym are the observed points
03:48:05  * kenperkinsquit (Quit: Computer has gone to sleep.)
03:48:29  <mikolalysenko>so what you do is calculate X^T X (which is a 3x3 matrix) and X^T y (which is a 3d vector)
03:48:46  <mikolalysenko>and then compute (X^T X)^{-1} (X^T Y)
03:49:08  <mikolalysenko>time complexity is basically linear in the number of sample points
03:49:10  <jjjohnny_>coefficients === control points?
03:49:23  * kenperkinsjoined
03:49:38  <mikolalysenko>no
03:49:49  <mikolalysenko>they are the coefficients for the quadratic, eg y = a0 + a1 x + a2 x^2
03:50:03  <mikolalysenko>you could do it with control points too, you'd get a different matrix though
03:50:05  <mikolalysenko>but same idea
03:50:59  <mikolalysenko>this wiki page explains the idea pretty well I think: http://en.wikipedia.org/wiki/Polynomial_regression , though the solution does use matrix/linear algebra notation
03:51:31  <jjjohnny_>i find wikipediao explanation notations abstruse
03:52:09  <jjjohnny_>also, I only need y values (amplitude)
03:52:55  <mikolalysenko>here is a demo: http://www.arachnoid.com/polysolve/
03:54:10  * calvinfoquit (Quit: Leaving.)
03:54:35  * jcrugzzjoined
03:54:44  <jjjohnny_>thanks i'll see if I can wrap me head around this
03:55:08  * brianloveswordsquit (Excess Flood)
03:55:17  <jjjohnny_>won't be the first time I copied the text from an irc convo with you explaining some conecpts fro later study and grok
03:55:56  <mikolalysenko>:)
03:56:03  * brianloveswordsjoined
03:57:32  * jxsonjoined
03:59:48  * thlorenzquit (Remote host closed the connection)
04:07:41  * defunctzombiechanged nick to defunctzombie_zz
04:08:37  * mikolalysenkoquit (Ping timeout: 248 seconds)
04:18:50  * jxsonquit (Remote host closed the connection)
04:24:04  <rowbit>Hourly usage stats: [free: 11]
04:30:15  * fronxjoined
04:34:39  * fronxquit (Ping timeout: 240 seconds)
04:49:14  * anvaka_quit (Remote host closed the connection)
04:50:24  <techwraith>Thoughts? http://techwraith.com/your-css-needs-a-dependency-graph-too.html
04:53:54  * st_lukequit (Remote host closed the connection)
04:53:59  * jcrugzzquit (Read error: Connection reset by peer)
04:55:12  * ferossjoined
05:00:51  * st_lukejoined
05:07:40  * st_lukequit (Remote host closed the connection)
05:09:14  * AvianFlu_changed nick to AvianFlu
05:12:07  * kenperkinsquit (Quit: Computer has gone to sleep.)
05:15:27  * tilgovijoined
05:24:04  <rowbit>Hourly usage stats: [free: 16]
05:37:47  * jcrugzzjoined
05:37:57  * Maciek416joined
06:09:36  * fotoveritequit (Quit: fotoverite)
06:17:27  * Maciek416quit (Ping timeout: 240 seconds)
06:21:24  * Maciek416joined
06:22:00  * anvakajoined
06:24:04  <rowbit>Hourly usage stats: [free: 23]
06:39:13  * Maciek416quit (Remote host closed the connection)
06:41:03  * dominictarrjoined
06:42:01  <dominictarr>substack, what we need is a way to pipe from the command line to a browser instance
06:42:14  <dominictarr>tabs need stdio!
06:47:36  <dominictarr>Domenic_, hey, regards your npm stuff
07:08:31  * AvianFluquit (Remote host closed the connection)
07:09:57  * calvinfojoined
07:11:46  * jcrugzzquit (Read error: Connection reset by peer)
07:24:04  <rowbit>Hourly usage stats: [free: 91]
07:33:50  * grewebjoined
07:59:01  * dominictarrquit (Ping timeout: 248 seconds)
07:59:26  * dominictarrjoined
08:00:12  * grewebquit (Remote host closed the connection)
08:00:23  * grewebjoined
08:00:28  * grewebquit (Remote host closed the connection)
08:01:58  * shamaquit (Remote host closed the connection)
08:10:56  * jcrugzzjoined
08:17:46  * tearmannquit (Ping timeout: 245 seconds)
08:18:03  <substack>jjjohnny_: if you need to solve a linear system there's https://npmjs.org/package/rref
08:18:22  <substack>dominictarr: yep!
08:18:39  * jcrugzzquit (Ping timeout: 240 seconds)
08:19:00  <substack>dominictarr: so actually browsers already have a communication channel with iframes and postMessage
08:19:15  <substack>so you could just have a command that writes to a server that outputs postMessage
08:19:39  * jcrugzzjoined
08:24:04  <rowbit>Hourly usage stats: [free: 25]
08:24:48  <dominictarr>substack, yes, something like that
08:26:38  * tilgoviquit (Remote host closed the connection)
08:29:36  * calvinfoquit (Quit: Leaving.)
08:30:16  * fronxjoined
08:30:21  * peutetrejoined
08:32:26  * hughskjoined
08:32:36  * hughsk_joined
08:33:16  * hughskpart
08:33:42  * ralphtheninjajoined
08:35:24  * fronxquit (Ping timeout: 260 seconds)
08:37:29  * calvinfojoined
08:42:50  * jcrugzzquit (Ping timeout: 264 seconds)
08:44:35  * calvinfoquit (Quit: Leaving.)
08:45:18  * Effilryjoined
08:45:27  * Effilrychanged nick to FireFly
08:46:56  * dominictarrquit (Ping timeout: 245 seconds)
08:53:43  * fronxjoined
08:54:47  * jcrugzzjoined
08:56:36  * fronxquit (Remote host closed the connection)
08:57:01  <wolfeidau>anyone recall who did the code executation visualisation work recently?
08:59:55  * jcrugzzquit (Read error: Connection reset by peer)
09:03:27  * shamajoined
09:04:04  * FireFlypart ("WeeChat 0.4.0")
09:08:02  * shamaquit (Ping timeout: 264 seconds)
09:17:12  * contrahaxjoined
09:22:49  * funkytekjoined
09:24:04  <rowbit>Hourly usage stats: [free: 25]
09:27:26  * peutetre_joined
09:28:45  * peutetrequit (Ping timeout: 265 seconds)
09:28:45  * peutetre_changed nick to peutetre
09:30:16  * fronxjoined
09:35:31  * fronxquit (Ping timeout: 265 seconds)
09:44:20  * dominictarrjoined
09:44:47  <mmalecki>dominictarr: if I was to rage move out to somewhere, where'd I go?
09:49:55  * flobyjoined
09:50:17  * contrahaxquit (Quit: Sleeping)
09:51:54  <rowbit>/!\ ATTENTION: (default-local) devboell@... successfully signed up for developer browserling plan ($20). Cash money! /!\
09:51:54  <rowbit>/!\ ATTENTION: (default-local) paid account successfully upgraded /!\
09:52:35  * hughsk_quit (*.net *.split)
09:52:37  * johnkpaulquit (*.net *.split)
09:54:37  * hughsk_joined
09:54:37  * johnkpauljoined
09:55:43  * shamajoined
10:00:19  * shamaquit (Ping timeout: 260 seconds)
10:00:53  * ferossquit (Quit: feross)
10:06:27  * dominictarrquit (Ping timeout: 265 seconds)
10:14:18  * jcrugzzjoined
10:15:06  * jcrugzzquit (Read error: Connection reset by peer)
10:24:04  <rowbit>Hourly usage stats: [free: 31]
10:24:56  * dominictarrjoined
10:25:19  <dominictarr>Domenic_, ping
10:32:29  * fronxjoined
10:35:19  * dominictarrquit (Ping timeout: 260 seconds)
10:42:25  * funkytekquit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
10:43:23  * ferossjoined
10:45:21  * ferossquit (Client Quit)
10:56:27  * shamajoined
11:00:50  * shamaquit (Ping timeout: 240 seconds)
11:09:04  * fronxquit (Remote host closed the connection)
11:12:31  * fronxjoined
11:24:04  <rowbit>Hourly usage stats: [developer: 6, free: 55]
11:26:42  * jcrugzzjoined
11:34:09  * fronxquit (Remote host closed the connection)
11:38:06  * indexzerojoined
12:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 44]
12:41:49  * indexzeroquit (Quit: indexzero)
12:54:48  * thlorenzjoined
12:58:01  * shamajoined
13:02:42  * shamaquit (Ping timeout: 252 seconds)
13:04:52  * thlorenzquit (Remote host closed the connection)
13:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 30]
13:34:46  * thlorenzjoined
13:35:20  * hughsk_changed nick to hughsk
13:37:22  * ins0mniajoined
13:42:56  * thlorenzquit (Ping timeout: 240 seconds)
13:46:23  * thlorenzjoined
13:57:38  * jcrugzzquit (Read error: Connection reset by peer)
13:58:44  * shamajoined
14:00:00  * shamaquit (Read error: Connection reset by peer)
14:00:23  * shamajoined
14:05:19  * shamaquit (Ping timeout: 260 seconds)
14:12:46  * thlorenzquit (Remote host closed the connection)
14:13:19  * thlorenzjoined
14:17:16  * jez0990joined
14:17:47  * clone1018_joined
14:18:14  * thlorenzquit (Ping timeout: 264 seconds)
14:18:57  * paul_irish_joined
14:19:00  * perlbot_joined
14:19:16  * AvianFlujoined
14:19:33  * substack_joined
14:19:34  * ralphthe1injajoined
14:22:27  * mironnjoined
14:23:53  * ralphtheninjaquit (*.net *.split)
14:23:53  * anvakaquit (*.net *.split)
14:23:54  * perlbotquit (*.net *.split)
14:23:55  * clone1018quit (*.net *.split)
14:23:55  * substackquit (*.net *.split)
14:23:55  * jez0990_quit (*.net *.split)
14:23:56  * paul_irishquit (*.net *.split)
14:23:57  * perlbot_changed nick to perlbot
14:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 49]
14:25:25  * Maciek416joined
14:30:22  * mironnquit (Remote host closed the connection)
14:44:35  * mikolalysenkojoined
14:49:26  * tmcwjoined
14:50:48  * yorickjoined
14:52:47  * kenperkinsjoined
14:55:10  * thlorenzjoined
14:56:02  * fronxjoined
14:56:13  * Maciek416quit (Read error: Connection reset by peer)
15:01:03  * shamajoined
15:05:25  * shamaquit (Ping timeout: 245 seconds)
15:09:41  <Domenic_>ircretary: tell dominictarr pong---our timezones seem pretty off
15:09:41  <ircretary>Domenic_: I'll be sure to tell dominictarr
15:14:00  * clone1018joined
15:14:09  * floby1joined
15:14:21  * fent_joined
15:14:42  * tim_smartquit (Ping timeout: 264 seconds)
15:14:43  * flobyquit (Ping timeout: 264 seconds)
15:14:43  * Guest74908quit (Ping timeout: 264 seconds)
15:14:43  * daleharveyquit (Ping timeout: 264 seconds)
15:14:43  * fentquit (Ping timeout: 264 seconds)
15:14:44  * clone1018_quit (Read error: Connection reset by peer)
15:14:45  * justinabrahmsquit (Ping timeout: 264 seconds)
15:15:03  * fent_changed nick to fent
15:15:03  * isaacsjoined
15:15:21  * tim_smartjoined
15:15:32  * justinabrahmsjoined
15:15:48  * isaacschanged nick to Guest34889
15:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 49]
15:27:20  * techwraithquit (Ping timeout: 264 seconds)
15:27:20  * techwraithjoined
15:39:05  * hughskquit (*.net *.split)
15:39:06  * johnkpaulquit (*.net *.split)
15:43:52  * mmalecki_joined
15:44:34  * daleharveyjoined
15:44:34  * hughskjoined
15:44:34  * johnkpauljoined
15:44:46  * ins0mniaquit (Excess Flood)
15:46:11  * AvianFlu_joined
15:46:13  * fronx_joined
15:46:39  * calvinfojoined
15:46:59  * ins0mniajoined
15:48:14  * taterbase_joined
15:48:54  * philipn_joined
15:49:33  * AvianFlu_quit (Remote host closed the connection)
15:49:35  * mmalecki_quit (Quit: Reconnecting)
15:50:05  * fronx_quit (Remote host closed the connection)
15:50:33  * mmalecki1joined
15:52:06  * davidjoined
15:52:26  * chrisdickinson_joined
15:52:39  * davidchanged nick to Guest30016
15:52:45  * ccowan_joined
15:54:39  * mmalecki1quit (Ping timeout: 240 seconds)
15:54:55  * chrisdickinsonquit (Ping timeout: 248 seconds)
15:54:56  * LOUDBOTquit (Ping timeout: 248 seconds)
15:54:57  * philipnquit (Ping timeout: 248 seconds)
15:54:57  * fronxquit (Ping timeout: 248 seconds)
15:54:58  * ccowanquit (Ping timeout: 248 seconds)
15:54:58  * taterbasequit (Ping timeout: 248 seconds)
15:55:27  * itprojoined
15:55:27  * itprochanged nick to ITpro
15:55:37  * mmalecki_joined
15:55:55  * taterbase_changed nick to taterbase
15:56:22  * LOUDBOTjoined
15:56:40  * AvianFluquit (Ping timeout: 248 seconds)
15:56:47  * rvagg_joined
15:57:34  * dlmanningquit (Ping timeout: 248 seconds)
15:57:34  * mmaleckiquit (Ping timeout: 248 seconds)
15:57:35  * rvaggquit (Ping timeout: 248 seconds)
15:57:39  * rvagg_changed nick to rvagg
15:59:16  * fronxjoined
16:00:04  * jcrugzzjoined
16:00:54  * mmalecki_quit (Quit: Reconnecting)
16:01:04  * mmaleckijoined
16:01:10  * jez0990_joined
16:01:53  * shamajoined
16:02:22  * jez0990quit (Ping timeout: 260 seconds)
16:03:09  * ITproquit
16:03:51  * kenperkinsquit (Ping timeout: 260 seconds)
16:04:35  * fronxquit (Ping timeout: 245 seconds)
16:07:34  * rannmannquit (Disconnected by services)
16:07:34  * dsfadfjoined
16:08:35  * calvinfo1joined
16:09:45  * guybrushjoined
16:10:36  * kenperkins_joined
16:11:03  * runningsmjoined
16:11:13  * mikolalysenkoquit (Ping timeout: 246 seconds)
16:13:23  * ins0mnia_joined
16:18:20  * jez0990_quit (*.net *.split)
16:18:20  * mmaleckiquit (*.net *.split)
16:18:21  * philipn_quit (*.net *.split)
16:18:21  * ins0mniaquit (*.net *.split)
16:18:21  * calvinfoquit (*.net *.split)
16:18:22  * guybrush_quit (*.net *.split)
16:18:23  * jdenquit (*.net *.split)
16:18:24  * rowbitquit (*.net *.split)
16:18:24  * thisandagainquit (*.net *.split)
16:18:24  * zz_runningskullquit (*.net *.split)
16:18:25  * juliangruberquit (*.net *.split)
16:18:26  * py1honquit (*.net *.split)
16:18:26  * rook2pawnquit (*.net *.split)
16:18:27  * shamaquit (*.net *.split)
16:18:28  * daleharveyquit (*.net *.split)
16:18:28  * hughskquit (*.net *.split)
16:18:29  * johnkpaulquit (*.net *.split)
16:18:32  * rwaldronquit (*.net *.split)
16:18:34  * emilistoquit (*.net *.split)
16:18:34  * cubertquit (*.net *.split)
16:18:34  * jjjohnny_quit (*.net *.split)
16:18:35  * rvaggquit (*.net *.split)
16:18:35  * LOUDBOTquit (*.net *.split)
16:18:35  * chrisdickinson_quit (*.net *.split)
16:18:38  * yorickquit (*.net *.split)
16:18:38  * simcop2387quit (*.net *.split)
16:18:38  * prettyrobotsquit (*.net *.split)
16:18:38  * trevnorrisquit (*.net *.split)
16:18:38  * kanzurequit (*.net *.split)
16:18:38  * owenb___quit (*.net *.split)
16:18:39  * prettyrobots_quit (*.net *.split)
16:18:40  * josephgquit (*.net *.split)
16:20:22  * yorickjoined
16:21:13  * pfrazejoined
16:21:24  * mmalecki_joined
16:21:24  * philipnjoined
16:21:24  * thisandagainjoined
16:21:24  * jdenjoined
16:21:24  * fotoveritejoined
16:21:24  * jez0990joined
16:21:24  * shamajoined
16:21:24  * rvaggjoined
16:21:24  * LOUDBOTjoined
16:21:24  * chrisdickinson_joined
16:21:24  * johnkpauljoined
16:21:24  * hughskjoined
16:21:24  * daleharveyjoined
16:21:24  * simcop2387joined
16:21:24  * prettyrobotsjoined
16:21:24  * trevnorrisjoined
16:21:24  * kanzurejoined
16:21:24  * owenb___joined
16:21:24  * prettyrobots_joined
16:21:24  * rwaldronjoined
16:21:24  * josephgjoined
16:21:24  * juliangruberjoined
16:21:24  * py1honjoined
16:21:24  * emilistojoined
16:21:24  * cubertjoined
16:21:24  * rook2pawnjoined
16:21:24  * jjjohnny_joined
16:22:51  * fronxjoined
16:23:09  * pfrazechanged nick to 21WABYJ6L
16:23:09  * mmalecki_quit (Quit: Reconnecting)
16:23:10  * pfrazejoined
16:23:35  * kanzurequit (Max SendQ exceeded)
16:24:12  * calvinfo1quit (Quit: Leaving.)
16:24:13  * jdenchanged nick to Guest25384
16:25:09  * mikolalysenkojoined
16:25:22  * mmaleckijoined
16:27:08  * fronxquit (Ping timeout: 246 seconds)
16:27:24  * ralphthe1injaquit (Ping timeout: 264 seconds)
16:27:24  * 21WABYJ6Lquit (Ping timeout: 264 seconds)
16:27:24  * yorickquit (Ping timeout: 264 seconds)
16:27:25  * taterbasequit (Ping timeout: 264 seconds)
16:27:26  * ralphtheninjajoined
16:28:41  * yorickjoined
16:28:45  * techwraithquit (Ping timeout: 264 seconds)
16:31:03  * techwraithjoined
16:31:47  * mmalecki_joined
16:31:53  * taterbase_joined
16:32:11  * kanzurejoined
16:32:39  * ralphtheninjaquit (Ping timeout: 240 seconds)
16:33:39  * ralphtheninjajoined
16:38:38  * mmaleckiquit (Ping timeout: 250 seconds)
16:40:15  * AvianFlujoined
16:40:56  * rowbitjoined
16:44:13  * jcrugzzquit (Ping timeout: 265 seconds)
16:46:17  * rpflochanged nick to ryanflorence
16:49:12  * Guest30016changed nick to dlmanning
16:59:44  * dominictarrjoined
17:02:23  * mmalecki_changed nick to mmalecki
17:04:56  * dominictarrquit (Ping timeout: 246 seconds)
17:10:20  * jcrugzzjoined
17:13:35  * fronxjoined
17:15:58  * dominictarrjoined
17:16:30  * taterbase_changed nick to taterbase
17:18:34  * kenperkins_changed nick to kenperkins
17:18:43  * jcrugzzquit (Ping timeout: 250 seconds)
17:22:56  * toingajoined
17:24:04  <rowbit>Hourly usage stats: [developer: 2, free: 47]
17:25:09  <dominictarr>hij1nx, wow, so npm is still a bit broken
17:26:12  * toingaquit (Remote host closed the connection)
17:27:22  * st_lukejoined
17:29:03  * ralphtheninjaquit (Ping timeout: 272 seconds)
17:29:58  * defunctzombie_zzchanged nick to defunctzombie
17:30:56  * ferossjoined
17:33:59  <defunctzombie>techwraith: npm-css prefixes because people cannot be trusted
17:34:22  <defunctzombie>techwraith: also because for regular css there is no indentation stuff to easily put everything under a namespace
17:34:36  <defunctzombie>so to avoid leaking into global scope it does that.. maybe it shouldn't but it does for now :)
17:34:51  <techwraith>defunctzombie: I understand, I just prefer to have more control over my css. I manually namespace my stuff
17:35:04  <defunctzombie>techwraith: yea, if you do that then good
17:35:11  <defunctzombie>but if you use a module
17:35:24  <defunctzombie>that someone else wrote that may not be the case
17:35:29  <defunctzombie>maybe they made a mistake or something
17:35:43  <defunctzombie>maybe that is being too defensive heh
17:35:58  <techwraith>If I use a module that doesn't namespace itself, or a module that conflicts in namespace with one of mine, I fork it and fix it
17:36:22  <defunctzombie>makes sense
17:36:31  <techwraith>Yeah, if some module in node rewrites some prototypes, we're fucked. Same with CSS.
17:36:46  <defunctzombie>yep
17:36:54  <defunctzombie>I guess that is valid enough
17:37:07  <defunctzombie>I like the rework-npm module you found
17:37:58  * dsfadfchanged nick to rannmann
17:37:58  * rannmannquit (Changing host)
17:37:58  * rannmannjoined
17:38:15  * ferossquit (Ping timeout: 240 seconds)
17:38:29  <techwraith>It's pretty sweet. I think you did most of the leg work with npm-css, but I liked their implementation better :-/
17:38:47  * floby1part
17:38:51  * ferossjoined
17:42:21  * mikolalysenkoquit (Ping timeout: 272 seconds)
17:43:27  <st_luke>npm is broken forever
17:43:48  * mikolalysenkojoined
17:45:59  * defunctzombiechanged nick to defunctzombie_zz
17:52:02  * ferossquit (Quit: feross)
17:53:37  * fronxquit (Remote host closed the connection)
17:54:17  * calvinfojoined
17:56:01  * Guest25384changed nick to jden
18:00:44  * defunctzombie_zzchanged nick to defunctzombie
18:00:55  <defunctzombie>st_luke: :(
18:00:56  <defunctzombie>techwraith: :)
18:01:07  <defunctzombie>techwraith: I like the rework module too
18:01:37  <defunctzombie>st_luke: don't be sad
18:01:48  * shamaquit (Read error: Connection reset by peer)
18:01:58  * shamajoined
18:02:39  * mikolalysenkoquit (Ping timeout: 240 seconds)
18:04:42  <st_luke>i think i got mono from someone and that makes me pissed at everything open source
18:05:02  <st_luke>mini-aids
18:05:33  * fronxjoined
18:06:14  * dominictarrquit (Ping timeout: 264 seconds)
18:07:45  <defunctzombie>thlorenz: I think I am gonna add a --phantom flag to zuul that will run in phantomjs if the user has it installed
18:08:05  <thlorenz>defunctzombie: ala zuul-mp?
18:08:19  <defunctzombie>thlorenz: yea, except you won't need to specify the port
18:08:30  <thlorenz>defunctzombie: I was gonna fix that actually
18:08:43  <defunctzombie>cool
18:08:57  <thlorenz>I realized I don't need a port specified, but I'd like to override in some cases to get no conflict
18:09:31  <thlorenz>defunctzombie: so if you'd bake it into zuul you should make phantomjs a dependency (sucks to rely on global installed tools)
18:09:40  <defunctzombie>thlorenz: bah
18:09:44  <thlorenz>otherwise I just fix it in zuul today or tomorrow
18:09:51  <thlorenz>s/zuul/zuul-mp
18:09:52  <defunctzombie>thlorenz: I don't want to depend on phantomjs tho :/
18:09:58  <Raynos>techwraith: your proposed thing is not sustainable
18:10:06  <defunctzombie>maybe best to leave as separate tool then
18:10:14  * dguttmanjoined
18:10:15  <thlorenz>defunctzombie: yeah agreed, I'll fix zuul-mp
18:10:18  <defunctzombie>coo
18:10:29  <thlorenz>maybe we can add a link in zuul readme so ppl can find ig
18:10:29  <Raynos>CSS needs some mechanism to avoid the global namespace
18:10:37  <Raynos>otherwise using it with npm will not work
18:11:03  * st_lukequit (Remote host closed the connection)
18:11:23  * mikolalysenkojoined
18:12:42  * dominictarrjoined
18:14:33  * ralphtheninjajoined
18:14:46  <dominictarr>Domenic_, yo
18:15:46  <prettyrobots>dominictarr: Yo.
18:15:53  <prettyrobots>Who is Domenic_?
18:15:58  <prettyrobots>I are confuse.
18:16:14  * fronxquit (Remote host closed the connection)
18:17:19  * st_lukejoined
18:18:04  * substack_changed nick to substack
18:18:17  * chrisdickinson_changed nick to chrisdickinson
18:18:50  <dominictarr>prettyrobots, that is they other dominic
18:18:55  * fronxjoined
18:19:03  <prettyrobots>I am https://github.com/bigeasy
18:19:09  <dominictarr>he is like my evil twin
18:19:09  <dominictarr>everything about me, he is the opposite
18:19:32  <dominictarr>(except that we both do javascript)
18:20:39  <Domenic_>dominictarr: haha, hi there
18:20:53  * fronxquit (Remote host closed the connection)
18:21:21  * jgpelletierjoined
18:21:55  <prettyrobots>Does Domenic_ have black felt goatee?
18:22:19  <st_luke>yes
18:22:20  <st_luke>he does
18:22:38  <prettyrobots>Good. Someone watches Community.
18:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 47]
18:24:13  <Domenic_>dominictarr: what's up
18:24:40  <defunctzombie>prettyrobots: https://github.com/bigeasy/timezone
18:24:46  <defunctzombie>prettyrobots: where does it get the tz data?
18:25:00  <prettyrobots>The IANA TZ database.
18:25:41  <defunctzombie>prettyrobots: do I have to provide that
18:25:49  <prettyrobots>It's in there.
18:25:50  <dominictarr>Domenic_, hey
18:25:57  <prettyrobots>Compiled and ready to go.
18:26:10  <defunctzombie>prettyrobots: huh for all timezones?
18:26:15  <defunctzombie>prettyrobots: isn't that a big database?
18:26:23  <dominictarr><disclaimer> I'm a bit drunk right now
18:26:25  <prettyrobots>Include the zones you need.
18:26:47  <prettyrobots>dominictarr: Don't code any control systems for heavy machinery.
18:27:28  <prettyrobots>defunctzombie: The library itself is tiny, 3.7k minzipped.
18:27:30  <dominictarr>we are gonna talk about npm dev, does that count?
18:27:48  <defunctzombie>prettyrobots: so I have to build something else?
18:27:51  <prettyrobots>defunctzombie: The database is not so bad. It's all text files.
18:27:53  * pantografjoined
18:28:01  <prettyrobots>defunctzombie: No.
18:28:06  <prettyrobots>defunctzombie: Just `require`.
18:28:10  <prettyrobots>It's all built.
18:28:27  <prettyrobots>defunctzombie: The database is just JSON. It's a directory of JSON files.
18:28:31  <defunctzombie>prettyrobots: it is just not clear from the readme
18:28:35  <prettyrobots>defunctzombie: The database is the rules.
18:28:35  <defunctzombie>how to use this thing
18:28:39  <prettyrobots>defunctzombie: Nope.
18:28:46  <prettyrobots>defunctzombie: It sure ain't that.
18:28:47  * thlorenzquit (Remote host closed the connection)
18:30:24  <st_luke>this is so meta
18:30:34  * pantografquit (Remote host closed the connection)
18:30:34  * peutetrequit (Quit: peutetre)
18:32:38  * dominictarrquit (Ping timeout: 245 seconds)
18:37:13  <prettyrobots>defunctzombie: I mean, the database only contains the rules for determining the time. The library calculates on the fly.
18:39:11  * timoxleyquit (Remote host closed the connection)
18:41:42  <techwraith>Raynos: Why not? I'd love to make it sustainable :)
18:43:01  <Raynos>techwraith: to make it sustainable you need to be able to depend on the CSS module at TWO different versions
18:43:10  <Raynos>manually managing the namespace breaks unless you embed the version number in the namespace
18:43:24  <Raynos>if you cant have two different versions of the same module then your using npm wrong.
18:44:19  <techwraith>Raynos: I've been thinking about a way to handle this
18:45:04  <techwraith>You could prefix the version number for anything that isn't the "latest" version, then pass that version into the template
18:45:20  <techwraith>If you use Resin, it can do this namespacing for you
18:45:29  <techwraith>It's not pretty, but it will work
18:45:53  <Raynos>techwraith: or.
18:46:27  <techwraith>The point is, it's better than the mess we're in right now :)
18:46:31  <Raynos>techwraith: you use an existing solution that already works
18:46:35  <Raynos>Like javascript.
18:46:36  <Raynos>console.log('p', process._getActiveHandles);
18:46:44  <Raynos>https://gist.github.com/Raynos/7223537
18:46:45  <Raynos>^
18:47:00  <Raynos>techwraith: what we need is a LESS / SASS style CSS preprocessor that compiles down to javascript
18:47:08  <Raynos>modular javascript.
18:47:11  * forfeitjoined
18:47:34  <techwraith>That would be interesting, but then you don't benefit from precaching. Browsers aren't built for that kind of thing
18:47:46  <Raynos>I'd considered using https://gist.github.com/Raynos/7224374
18:48:15  <techwraith>No good way for browsers to cache CSS that's inserted by JS
18:48:16  <Raynos>as a way you build a widget that comes bundled with customizable CSS (customized by JSON config)
18:48:19  * ferossjoined
18:48:23  <Raynos>techwraith: who cares?
18:48:37  <Raynos>i cache it myself
18:48:38  <techwraith>People who develop mobile apps with JS and CSS :)
18:48:43  <Raynos>Ah i see
18:48:49  <Raynos>yeah i optimize for modular desktop web apps
18:48:55  <Raynos>where im like +5kb ? who cares!
18:49:01  <techwraith>:P
18:49:12  <Raynos>I'm going to add 100kb because esprima is useful :D
18:49:21  <Raynos>techwraith: BUT mobile browsers CAN cache javascript
18:49:24  <Raynos>and its just javascript!
18:49:30  <Raynos>so it shouldnt be a big deal
18:49:52  <techwraith>Mobile browsers do special stuff for CSS
18:49:55  * forfeitquit (Remote host closed the connection)
18:50:03  <techwraith>Actually, all browsers
18:50:53  * calvinfoquit (Quit: Leaving.)
18:51:05  <Raynos>anyway
18:51:12  <Raynos>efficient CSS caching is a compiler implementation detail
18:51:27  <Raynos>optimize for recursive modularity, not performance.
18:51:36  <Raynos>If that trade off isn't worth it then hand write all your CSS.
18:51:47  * fronxjoined
18:52:06  * st_lukequit (Remote host closed the connection)
18:52:56  <techwraith>Raynos: Sure, I agree there. It's all implementation details after that.
18:54:31  <Raynos>but i havn't tried these ideas yet.
18:54:37  <Raynos>I think there is much promise though
18:54:50  <Raynos>this gets me excited https://gist.github.com/Raynos/7224374#file-index-js-L11
18:54:58  * peutetrejoined
18:55:02  <Raynos>pass in a theme as a json configuration object into a higher order CSS generating function
18:55:14  <Raynos>instead of managing custom theming css files for plugins / modules
18:55:48  <techwraith>But you'd have to write a CSS file as a JSON file at that point :P
18:56:55  * spondilojoined
18:57:21  * fronxquit (Ping timeout: 272 seconds)
18:58:26  * ferossquit (Ping timeout: 264 seconds)
18:58:52  * st_lukejoined
18:58:57  * thlorenzjoined
18:59:20  * spondiloquit (Remote host closed the connection)
19:00:05  * ferossjoined
19:01:55  * ins0mnia_changed nick to ins0mnia
19:02:31  * ferossquit (Client Quit)
19:03:03  <thlorenz>Raynos: you should namespace your CSS selectors to your module that's what we are doing to make it apply only to part of the page
19:03:15  <thlorenz>and if it isn't namespaced you can use: https://github.com/thlorenz/namespace-css
19:04:13  <Raynos>thlorenz: then you have to embed the version number in the namespace
19:04:35  <Raynos>thlorenz: I think managing the namespace manually is bullshit.
19:04:50  <thlorenz>Raynos: that's fine you can autmate all that i.e.: https://github.com/thlorenz/jsdoc-githubify-inject/blob/master/scripts/update-jsdoc-css.sh
19:04:58  <techwraith>Raynos: It doesn't have to be manual.
19:05:04  <thlorenz>bullshit or not there seems to be no better way ;)
19:05:08  <Raynos>ugh
19:05:10  <Raynos>feels so ghetto
19:05:17  <Raynos>thlorenz: there is another way! npm-scoped
19:05:25  <Raynos>style scoped*
19:05:34  <techwraith>It's fucking CSS, of course it feels ghetto :)
19:05:39  <thlorenz>not without changing the CSS spec
19:05:59  <techwraith>web components will fix this
19:06:11  <techwraith>once we put these on npm, we'll be good
19:06:17  <techwraith>This just has to be a stop gap
19:06:19  <Raynos>just polyfill style scoped
19:06:31  <Raynos>web components wont magically fix things
19:06:42  <Raynos>we need to do something like https://github.com/jrburke/element
19:06:52  <Raynos>all web components do is introduce another module system & another package manager
19:06:57  <Raynos>both are worse then browserify & npm
19:07:24  <Raynos>there needs to be a very strong exploration effort from the npm/browserify community to convince web components to do the right thing
19:07:29  <Raynos>not to mention we still need to find the right thing
19:08:58  <techwraith>Raynos: Once they come out, we'll be able to use them to get web components on npm, I'm sure
19:09:21  <Raynos>thlorenz: https://gist.github.com/Raynos/7223537#file-style-scoped-js-L5
19:09:30  <techwraith>Once they're in most major browsers, I know I'm going to be working on this.
19:09:35  <Raynos>techwraith: have you seen web components? They are a mess.
19:09:44  <Raynos>they are a global soup & html imports system mess
19:09:49  <Raynos>dont get me wrong
19:09:54  <Raynos>shadow dom & template element are pretty cool
19:10:02  <thlorenz>Raynos: so you add css to each element in the gist?
19:10:25  <thlorenz>cause that would still affect all the children as well
19:10:36  <techwraith>Raynos: Yep! But I'm not an idealist. I work with what I have, in a way that other people can easily replicate
19:10:51  <techwraith>I don't want to reinvent the CSS spec, no one will use my fork :)
19:12:26  <thlorenz>Raynos: ok, actually see what you are doing now, basically same as the namespace-css module except on the fly
19:12:51  <thlorenz>downside is I have to write my css as object literals (or at least parse it on demand into one)
19:13:05  <Raynos>thlorenz: upside is you write css as object literals
19:13:22  <Raynos>which means you get all the advantages of https://github.com/dominictarr/hyperscript
19:13:24  <Raynos>but for CSS
19:13:28  * orenjoined
19:13:33  <thlorenz>last words of a dev to his designer before either got fired or left ;)
19:13:47  <Raynos>Agreed
19:13:57  <techwraith>thlorenz: lol, yep
19:13:59  <Raynos>thats why i need to write a LESS / SASS style pre processor that compiles down to objects
19:14:40  <thlorenz>Raynos: tj has css-parse
19:14:46  <thlorenz>and css-stringify
19:14:53  <thlorenz>may be just what you need
19:14:54  <Raynos>yeah those only stringy & parse valid css :p
19:19:21  * defunctzombiechanged nick to defunctzombie_zz
19:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 134]
19:28:28  * calvinfojoined
19:31:36  * ferossjoined
19:34:17  * ferossquit (Client Quit)
19:47:17  * kevino80joined
19:48:06  * defunctzombie_zzchanged nick to defunctzombie
19:49:49  * enjaworkquit (Ping timeout: 265 seconds)
19:50:12  * timoxleyjoined
19:52:49  * enjaworkjoined
19:54:43  * timoxleyquit (Ping timeout: 250 seconds)
20:01:43  <defunctzombie>Raynos: what do you use for async foreach?
20:01:53  <defunctzombie>series execution
20:01:55  <thlorenz>defunctzombie: runnel
20:02:18  <thlorenz>defunctzombie: or to reduce an array to values you can use asyncreduce
20:02:35  <defunctzombie>thlorenz: I want to run an async function for each array item
20:02:40  <thlorenz>defunctzombie: i.e. you'd map your array to an array of functions
20:02:46  <defunctzombie>and only go to next item when this one is done
20:02:54  <thlorenz>yep that's what that does
20:03:09  <defunctzombie>why is it so complicated?
20:03:15  <thlorenz>https://github.com/thlorenz/runnel#passing-array-of-functions
20:03:18  <thlorenz>it's not complicated
20:03:19  <defunctzombie>why can't I just have each(arr, done_cb) ?
20:03:42  <thlorenz>you could write a wrapper on top of it
20:03:45  <defunctzombie>wut
20:03:56  <defunctzombie>this each function that I want is like 5 lines of code...
20:04:15  <defunctzombie>does runnel return a fuction?
20:04:27  <thlorenz>i.e. all you have to do is [1, 2, 3].map(function (x) { return function (cb) { do async, cb(err, result) } })
20:04:28  <defunctzombie>runnel is overkill for what I want
20:04:33  <thlorenz>ok, maybe
20:05:00  <defunctzombie>hm
20:05:00  <thlorenz>runnel returns undefined, but it will end up last function in the chain and bubble errors to that last function
20:05:24  <thlorenz>so the last function becomes your final callback
20:05:34  <defunctzombie>yea.. I don't wanna map each array to a new function... seems like it can be way simpler
20:05:52  <thlorenz>maybe this is more like it then? https://github.com/thlorenz/asyncreduce
20:06:08  <thlorenz>just give it an array, an accumulator a worker and a final function
20:06:31  <defunctzombie>yea, that is a bit better
20:06:41  <defunctzombie>I don't need the reduce functionality but I can just not use it
20:06:49  <thlorenz>if you don't need to accumulate anything just give it null
20:06:55  <thlorenz>and ignore the first param
20:07:02  <defunctzombie>but it seems that this could be simpler
20:07:05  <defunctzombie>for this use case
20:07:43  <thlorenz>agreed, you could probably write something quickly, i.e. on top of runnel, i.e. something that automatically maps values to functions and passes it on to runnel
20:08:06  * ralphtheninjapart
20:08:28  * mikolalysenkoquit (Ping timeout: 245 seconds)
20:09:00  <defunctzombie>https://npmjs.org/package/async-foreach
20:09:08  <defunctzombie>this seems interesting but also seems overly engineered
20:09:38  <thlorenz>defunctzombie: I hate stuff that messes with this
20:09:47  <defunctzombie>messes with what?
20:09:56  <thlorenz>that's why I wrote runnel cause I liked step but it overloaded 'this'
20:10:09  <defunctzombie>oh "this"
20:10:16  <defunctzombie>meh
20:10:24  <thlorenz>cause then the functions I pass into it have to know about that special behavior
20:10:34  <defunctzombie>yea, I agree it is weird sometimes
20:10:42  <defunctzombie>well, they need to know something if they are async
20:10:46  <thlorenz>the idea of runnel was that you could write your functions as you would if you just do simple callback style
20:10:55  <defunctzombie>ah
20:10:56  <thlorenz>but you can use them inside runnel as well w/out change
20:11:36  * ferossjoined
20:12:21  * enjaworkquit (Ping timeout: 272 seconds)
20:13:03  <defunctzombie>thlorenz: yea I can dig that
20:13:04  * enjaworkjoined
20:13:21  * mikolalysenkojoined
20:13:24  <thlorenz>also it's only ~80loc so I use it all over the place :)
20:13:45  <Raynos>defunctzombie: series ?
20:13:51  <Raynos>defunctzombie: continuable-series
20:14:01  <Raynos>https://github.com/dominictarr/continuable-series
20:14:18  <defunctzombie>sigh
20:14:25  <defunctzombie>damn.. I guess I wasn't clear
20:14:34  <defunctzombie>I didn't want an array of functions
20:14:37  <defunctzombie>I have an array of values
20:14:43  <defunctzombie>and I needed to do an async operations for each
20:14:51  <Raynos>defunctzombie: https://gist.github.com/Raynos/1d6d6ad7885d3021aa44
20:14:52  <defunctzombie>in series
20:15:07  <defunctzombie>this is bad
20:15:13  <thlorenz>so yeah, asyncreduce is exactly that defunctzombie I don't think it gets much simpler
20:15:15  <defunctzombie>I do not want to make a function for each array item
20:15:17  <Raynos>I also wrote https://github.com/Colingo/in-order
20:15:35  <Raynos>defunctzombie: creating a new function is no big deal
20:15:55  <defunctzombie>it is when I don't need to make a function
20:16:05  <thlorenz>Raynos: but it doesn't catch/bubble errors
20:16:20  <defunctzombie>Raynos: in-order is what I want
20:16:21  <Raynos>thlorenz: it does ?
20:16:25  <thlorenz>I ran into lots of these issues with earlier runnel versions, hard to track bugs
20:16:51  <Raynos>thats because runnel is a flow control library :D
20:16:56  <thlorenz>Raynos: :)
20:17:05  <Raynos>defunctzombie: i do recommend the creation of 'thunk' functions because of composability
20:17:08  <thlorenz>well I just added https://github.com/thlorenz/runnel/blob/master/index.js#L55-L61 and it made my life a whole lot easier
20:17:15  <Raynos>the overhead of creating thunks is neglible
20:17:24  <defunctzombie>Raynos: meh, maybe if it was more complicated
20:17:25  <Raynos>thlorenz: just never throw errors.
20:17:27  <thlorenz>you could to that to in-order as well --
20:17:30  <thlorenz>not that
20:17:30  <defunctzombie>but in this case it is just stupid business logic
20:17:38  <defunctzombie>with one array looping
20:17:44  <Raynos>thlorenz: try catch should never be needed
20:17:48  <thlorenz>i.e. some var you are referencing may be undefined (i.e. typo)
20:17:53  <spion>or with promises, Promise.all(array.map(asyncFn)).then(function(results) { ... })
20:18:08  <Raynos>thlorenz: if you have a typo the process should crash & die
20:18:12  <spion>errors automatically propagated, LST available in some implementations
20:18:13  <Raynos>thlorenz: then you fix the typo. Done.
20:18:14  <thlorenz>I had lots of long debugging sessions with that when still using step, another reason I went away
20:18:30  <Raynos>anything that uses try catch should die in hell fire.
20:18:36  <spion>and .finally available to do transparent clean up
20:18:37  <thlorenz>Raynos: yep, but if you have no good stacktrace cause it happened inside async -- good luck :)
20:18:51  <defunctzombie>did someone just say Promises?
20:18:55  <defunctzombie>Domenic_: ^
20:18:57  <spion>yes I did!
20:20:44  * defunctzombiechanged nick to defunctzombie_zz
20:21:15  * fronxjoined
20:22:32  <Raynos>thlorenz: install long stack traces globally
20:22:53  <thlorenz>Raynos: huh? not sure what you mean
20:23:05  <Raynos>if you want a good stack trace then install long stack traces globally
20:23:17  <thlorenz>how do I "install long stack traces globally" ?
20:23:46  * thlorenzis getting ready for a relevation
20:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 48]
20:24:13  * thlorenzand needs to practice spelling english
20:24:48  <Raynos>thlorenz: https://github.com/tlrobinson/long-stack-traces
20:24:54  <Raynos>thlorenz: https://github.com/mattinsler/longjohn
20:25:03  <thlorenz>Raynos: thanks
20:25:41  <Raynos>thlorenz: https://github.com/mattinsler/longjohn
20:25:46  <Raynos>https://github.com/CrabDude/trycatch
20:25:48  <Raynos>I mean that one
20:26:01  * fronxquit (Ping timeout: 252 seconds)
20:26:10  <thlorenz>nice
20:26:22  <Raynos>you can also implement them yourself using async listener
20:26:39  * funkytekjoined
20:26:59  <Raynos>thlorenz: long stack traces can get incredibly annoying though :p
20:27:11  <spion>trycatch uses domains behind the scenes?
20:27:14  <Raynos>I tend to enable them in "wtf debug" sesision
20:27:20  <Raynos>yes trycatch piggy backs of domains
20:27:28  <spion>then its potentially unsafe to use it to continue running.
20:27:35  <thlorenz>I suppose, I guess you only add it to your script when shit hits the fan and you are clueless
20:27:53  <thlorenz>good to know this exists though
20:29:24  <Raynos>thlorenz: https://github.com/creationix/event-watcher/blob/master/dump.js#L1
20:29:39  <Raynos>here's an example of caswell using async listener to hook into every event emitted on every event emitter and then visualizing it
20:29:58  <Raynos>spion: long stack traces are a debugging tool. all throw errors should terminate processes
20:30:08  <thlorenz>Raynos: interesting
20:30:13  <spion>Raynos, can I try to persuade you otherwise?
20:30:14  <spion>:)
20:30:52  <Raynos>spion: thrown errors crash processes. error objects passed around in a monadic fashion can be used for recovery
20:32:14  <spion>promises pass errors around in a monadic fashion.
20:32:39  <spion>they capture shallowly thrown errors, leaving deep async errors alone.
20:33:10  <spion>domains capture all errors. node core isn't designed to continue running after a throw, and thats why its a problem to capture such errors coming from node core.
20:33:41  <spion>promises give you finally, which allows you to design your code to work with thrown errors by reliably cleaning up
20:34:43  <spion>and a good promise implementation like bluebird goes even further and gives you catch filters and .error(), which let you select which errors to catch (avoid capturing typeerror or referenceerror)
20:35:23  * ferossquit (Quit: feross)
20:37:55  <Raynos>spion: but i dont want to capture shallow errors
20:37:59  <Raynos>I want `yield new Error()`
20:38:03  <Raynos>not `throw new Error()`
20:38:20  <Raynos>spion: the problem is not capturing shallow errors. The problem is capturing all shallowly thrown errors
20:38:29  <Raynos>I only want to capture shallowly yielded errors
20:38:37  <Raynos>errors I yield VERY EXPLICITLY AND PURPOSEFULLY
20:38:38  <spion>you'd use throw new RejectionError()
20:38:47  <Raynos>that would work too
20:38:50  <spion>and capture errors with .error() instead of .catch()
20:38:51  <Raynos>but yield Error() is nicer
20:39:07  <Raynos>yield Error()
20:39:12  <Raynos>also avoids try catch penalties
20:39:31  <spion>in bluebird, try-catch penalties are confined to a tiny function
20:39:32  <Raynos>spion: I agree, i just think at the implementation detail using try / catch & throw RejectionError & filtering is bad.
20:39:41  <Raynos>yield new Error() is far better
20:40:06  <spion>capturing all throws in combination with finally lets you write robust code.
20:40:20  <Raynos>no.
20:40:21  <spion>that cleans up even if programmer errors occur (they're still reported to stderr)
20:40:23  <Raynos>never throwing errors
20:40:28  <Raynos>allows you to write robust code
20:40:45  <Raynos>uncaughtException & domains handle the cleanup on process exit nicely
20:40:48  <spion>yes it does. process-crash = finally cleanup
20:40:53  <spion>except it costs a lot
20:41:08  <Raynos>Oh your saying that promise error handling is cheaper then domains ?
20:41:18  <Raynos>i'd need a benchmark
20:41:21  <Raynos>of async listener vs promises
20:41:23  <Raynos>to believe that
20:41:26  <spion>yes, because "handling errors" with domains means that you have to let the process crash
20:41:32  <Raynos>...
20:41:35  <Raynos>the process has to crash
20:41:38  <Raynos>THE PROCESS IS CRASHING
20:41:38  <LOUDBOT>STOP LIGHTING FIRES EVERY DAY
20:41:50  <Raynos>all thrown errors have to crash process, you cant continue from throw Error()
20:41:58  <Raynos>you can continue from yield Error() or throw RejectionError()
20:41:58  <spion>no it does not. all you need to do is attach clean-up.
20:42:05  * funkytekquit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
20:42:09  <Raynos>...
20:42:25  <spion>think of it this way
20:42:30  <spion>instead of destroying the entire process
20:42:32  <spion>all its memory
20:42:34  <spion>all its file handles
20:42:40  <spion>you just destroy a small subset with finally
20:42:51  <Raynos>http://blog.izs.me/post/65712662830/restart-node-js-servers-on-domain-errors-sensible-fud
20:42:59  <spion>again, thats domains.
20:43:01  <Raynos>spion: we cant do that in javascript
20:43:06  <Raynos>spion: you need real coroutines to do that
20:43:07  <spion>yes, we can
20:43:12  <Raynos>spion: javascript has only one stack
20:43:12  <spion>I really need to write an article about all this.
20:43:17  <Raynos>real coroutines have a stack per coroutine
20:43:27  <Raynos>spion: the problem is that there is only one stack shared between the entire process
20:43:34  <Raynos>once you throw that stack is dead and you have to kill the entire process
20:43:47  <spion>oh dear lord.
20:43:53  <Raynos>spion: you can probably do this with fibers if it gives you one stack per coroutine
20:43:55  <spion>the problem with domains is that they go deep inside node core and node core isn't designed to handle throws.
20:44:07  <spion>there is nothing inherently wrong with JavaScript's throw otherwise.
20:44:28  <Raynos>i dont have the level of confidence
20:44:32  <Raynos>about node, v8 & my app
20:44:37  <Raynos>to say I can continue after EVERY thrown error
20:45:01  <spion>you don't continue after every thrown error. since node core isn't throw-safe, we crash if it throws. otherwise, if our own code throws, we can continue normally.
20:45:27  <spion>provided we use simple abstractions such as promise-based context managers.
20:45:59  <spion>return using (conn.open(blah), function(conn) { return some.typoo(conn, 'arg'); });
20:46:02  <spion>error gets reported
20:46:06  <spion>connection gets cleaned up
20:46:13  <spion><3
20:46:14  <Raynos>spion: oh wait your suggesting that in promise land
20:46:17  <Raynos>we write throw safe code
20:46:24  <Raynos>spion: I dont trust my app to be throw safe
20:46:34  <Raynos>spion: I dont trust third party modules I call to to be throw safe
20:46:55  <Raynos>i dont trust my team of javascript engineers to know how to write throw safe javascript
20:46:56  <spion>yes. its not really hard, since promises encourage some purity and there is the context-manager pattern which is dead-simple.
20:46:59  <Raynos>thats a new skill.
20:47:16  <Raynos>writing throw safe code is another layer of multi threaded complexity
20:47:31  <Raynos>like debugging and gaurding against async race conditions is already pretty hard
20:47:41  <Raynos>doing the same with gaurding againsts throws is also really hard
20:47:51  <Raynos>i'd rather not go there.
20:48:08  <Raynos>spion: but agreed, if you write throw safe code then within that real of throw safe code you can throw any error and catch all errors
20:48:15  <Raynos>within that realm*
20:48:39  <spion>Raynos, so you disagree that context-manager patterns make it trivial to write throw-safe promises code?
20:49:37  <spion>in that case, I propose a project where we try to inspect this in more detail
20:49:41  <Raynos>spion: not that
20:49:51  <Raynos>spion: i disagree with the notion that mikeal/request is throw safe
20:50:07  <Raynos>spion: and I want to continue using mikeal/request and do not want to learn how to determine how to make it throw safe
20:50:11  <spion>thats easy. you use var promisifiedRequest = unsafePromisify(request);
20:50:28  <Raynos>spion: but request can throw asynchronously internally
20:50:30  <spion>and that promisifier doesn't propagate shallowly thrown errors.
20:50:33  <Raynos>Oh wait
20:50:36  <spion>nor deeply async errors.
20:50:45  <spion>it crashes things.
20:50:48  <Raynos>but then you need both :P
20:50:55  <Raynos>then you need both a continue on my errors
20:50:58  <Raynos>and crash hard on unknown errors
20:51:13  <spion>yes, but you get what CrabDude is trying to get all this time.
20:51:17  <spion>yes, crash on external, unsafe things
20:51:22  <spion>no, don't always crash on throws.
20:51:24  <Raynos>spion: so i would only see the value if all my app code was continue on errors and only crash hard node core errors
20:51:45  <spion>I'll see if I can write promisifyUnsafe for bluebird
20:51:57  <Raynos>spion: I also i dont see the value of a try /catch in a context manager when i can just implement monadicly with `yield Error()`
20:52:06  <spion>for libraries where even shallow error capturing is considered unsafe.
20:52:18  <Raynos>spion: I think there is a strong beauty in having two parallel error mechanisms. the one that is 'throw-safe' i.e. 'yield'
20:52:23  <Raynos>and the one that is crash hard, i.e 'throw'
20:52:29  <Raynos>two keywords for the two types of errors
20:52:34  <spion>Raynos, you still have to clean up, either way.
20:52:44  <Raynos>yes.
20:52:47  <Raynos>so i agree with you about things
20:52:54  <Raynos>i just dont want to use `throw` for both types of errors
20:53:23  <Raynos>spion: because then when i look at some code that throws I can say "this is a hard crash exception. this is unrecoverable. this code is not throw safe. if it gets here process abort"
20:53:38  <Raynos>and when I look at some code that yields I can say "this is throw safe error. I can recover and handle it"
20:53:53  <Raynos>obvouisly unhandled yielded errors will crash the process if they bubble up
20:54:39  <spion>where I disagree is that crashing and restarting node is always the sensible way to go... ever.
20:54:45  <spion>(in your code)
20:55:42  <spion>i believe it only makes sense for libraries that are designed to work that way.
20:56:26  <Raynos>spion: we agree on that aspect
20:56:47  <Raynos>spion: i just dont like using the keyword `throw` for recoverable errors because overload. I want a simpler two channel system
20:57:48  <spion>hrm
20:57:51  <spion>angular picked that route
20:58:03  <spion>return $q.reject(new Error("text"))
20:58:13  * enjaworkquit (Ping timeout: 248 seconds)
20:58:16  <spion>all other errors are always reported to the console
20:58:22  <spion>(all throws)
20:58:33  <spion>(even though they're still properly propagated)
20:58:59  <spion>afaik all other promise implementations also let you return createRejectedPromise("args")
20:59:15  <Raynos>thats fine too
20:59:26  <Raynos>I dont use `return` because it doesnt work in `function* () {}`
20:59:39  <spion>I decided to avoid generators
20:59:42  <Raynos>`var foo = yield* foo()` if you return an error then `foo` is the error
20:59:49  <Raynos>so it has to be `yield Error()`
21:00:00  <spion>but for generators, yielding errors is a more sensible approach yes
21:00:19  <spion>since the language has no error (e) { } or catch (e if condition(e)) { ... }
21:00:39  * funkytekjoined
21:01:13  <spion>so yeah if you throw in generators you're forced with the pokemon exception handling pattern :D
21:01:28  <spion>s/with/to use
21:01:36  * contrahaxjoined
21:02:53  <spion>not that great.
21:03:24  * crankquit (Ping timeout: 252 seconds)
21:04:05  * enjaworkjoined
21:05:50  * AvianFlu_joined
21:07:44  * AvianFluquit (Disconnected by services)
21:07:48  * AvianFlu_changed nick to AvianFlu
21:08:01  * crankjoined
21:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 67]
21:28:34  * kevino80quit (Remote host closed the connection)
21:28:48  * kevino80joined
21:30:13  * peutetrequit (Ping timeout: 248 seconds)
21:42:59  <Raynos>thlorenz: https://github.com/jacobgroundwater/node-stackup
21:43:08  <Raynos>so jacob is working on a stack trace thing with async listener
21:43:40  * kevino80quit (Remote host closed the connection)
21:44:24  * kevino80joined
21:44:45  <thlorenz>Raynos: interesting, for now I'll keep using runnel to give me more info out of the box, but I know there'll be a time when long stack traces will be god sent
21:48:38  * kevino80quit (Ping timeout: 240 seconds)
21:50:19  * kevino80joined
21:50:26  * jxsonjoined
21:50:31  * jxsonquit (Remote host closed the connection)
21:50:39  * jxsonjoined
21:50:56  * jcrugzzjoined
21:51:45  * peutetrejoined
21:52:26  * jxsonquit (Client Quit)
21:54:01  * jxsonjoined
21:54:51  * ferossjoined
21:55:17  * jcrugzzquit (Ping timeout: 248 seconds)
22:00:25  * kevino80quit (Remote host closed the connection)
22:01:10  * kevino80joined
22:04:40  * AvianFlu_joined
22:05:58  * Guest34889changed nick to isaacs
22:06:14  * kevino80quit (Ping timeout: 264 seconds)
22:06:54  * AvianFluquit (Disconnected by services)
22:06:57  * AvianFlu_changed nick to AvianFlu
22:19:02  <jesusabdullah>st_luke: hey hey o/
22:19:39  <jesusabdullah>st_luke: haven't heard from yahoo in, oh, last Tuesday? You know what's going on maybe? :)
22:20:02  <jesusabdullah>st_luke: not trying to be annoying of course, I'd just love to keep it moving y'know? I'd feel bad if something that sounds this cool petered out
22:21:12  * fronxjoined
22:21:47  * defunctzombie_zzchanged nick to defunctzombie
22:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 46]
22:25:57  * fronxquit (Ping timeout: 250 seconds)
22:25:58  * funkytekquit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
22:30:56  <jesusabdullah>CRAP someone tried calling me from Manhattan
22:31:25  <jesusabdullah>CRAP I slept through a call from Lab49
22:32:47  * tmcwquit (Remote host closed the connection)
22:36:17  * timoxleyjoined
22:40:03  * tmcwjoined
22:41:50  <thlorenz>jesusabdullah: ws it that boring of a call :/
22:42:21  <jesusabdullah>thlorenz: No I mean I didn't even hear the phone ring
22:42:26  <thlorenz>jesusabdullah: just write'em an email and apologize -- they'll reschedule
22:42:32  <jesusabdullah>thlorenz: I picked up my phone and it was like, "4 MISSED CALLS FROM BROHATTAN"
22:42:36  <jesusabdullah>"oh siiiick"
22:42:39  <jesusabdullah>Yeah that's what I did thlorenz
22:42:56  <thlorenz>cool shouldn't be a big deal
22:43:06  <jesusabdullah>uuuugh I feel so lame, not for lab49 specifically but the whole thing of not getting up until 3:00
22:43:54  <thlorenz>I mean if you're writing code into the wee hours all shall be forgiven jesusabdullah
22:44:12  * contrahaxquit (Quit: Sleeping)
22:46:09  * kenperkinsquit (Quit: Computer has gone to sleep.)
22:46:17  <jesusabdullah>I was playing minecraft <_<;
22:46:24  <jesusabdullah>though I did write code earlier in the day
22:46:34  <jesusabdullah>oh, actually, I *did* go through the django tutorial
22:46:39  <jesusabdullah>and it finally clicked with me
22:46:44  <jesusabdullah>what it's All About
22:46:48  <thlorenz>see there ya go -- I saw that tweet
22:46:50  <jesusabdullah>I don't really LIKE it but I'll ALLOW it
22:47:05  * timoxleyquit (Remote host closed the connection)
22:47:07  <thlorenz>the only django I like is that gipsy guitar player
22:47:10  <jesusabdullah>I had a coding assignment for a job that was like, "build a crud app"
22:47:11  <jesusabdullah>and I did
22:47:13  <jesusabdullah>and that was fine
22:47:31  <jesusabdullah>but it was in express and it took significantly longer than their time estimate even though it's just ultra obvious MVC
22:47:48  <jesusabdullah>so I'm like, okay shit, these "big frameworks" must be targeted at the stupid use case
22:47:51  <jesusabdullah>sure as shit
22:48:16  * fronxjoined
22:48:23  <jesusabdullah>little admin panel's kinda cool though
22:48:31  <jesusabdullah>Big has that btw :)
22:48:41  <jesusabdullah>That was my other realization
22:49:01  <jesusabdullah>in some ways, Big is a pretty solid framework in terms of targeting that use case
22:49:13  <jesusabdullah>I've been kinda following dev on it again
22:53:09  <thlorenz>hey substack check it out: transform EVERYTHING https://github.com/thlorenz/transformify
22:54:10  * funkytekjoined
22:54:35  <jesusabdullah>NU
22:56:07  <techwraith>jesusabdullah: Should have just used Geddy :P
22:56:14  <jesusabdullah>pfffff
22:56:36  <jesusabdullah>Make it so I don't need an external bin to run geddy and we can talk >:P
22:56:43  <techwraith>jesusabdullah: Done
22:56:46  <jesusabdullah>orly
22:56:51  <techwraith>(already, for over a year)
22:56:54  <jesusabdullah>hah
22:56:57  <jesusabdullah>I'd believe that
22:57:03  <jesusabdullah>Yeah maybe I'll need to take another look
22:57:26  <techwraith>Model is pretty kickass
22:57:54  * contrahaxjoined
22:59:08  <jesusabdullah>I'm kinda starting to develop my own ideas as to what such a framework should look like
22:59:11  <jesusabdullah>I think everyone does
22:59:23  <jesusabdullah>thing is, I want these things but I kinda don't like building crud apps
23:02:14  * contrahaxquit (Ping timeout: 240 seconds)
23:03:29  <techwraith>jesusabdullah: I don't do a whole lot of crud these days either
23:03:44  <techwraith>But I recognize the utility of such frameworks
23:04:03  <techwraith>Especially for "internal tools" type apps.
23:04:57  * contrahaxjoined
23:06:04  * timoxleyjoined
23:06:12  * maksimlinjoined
23:11:34  <jesusabdullah>techwraith: Yeah def
23:12:05  * jcrugzzjoined
23:16:40  * fronxquit (Remote host closed the connection)
23:17:15  * kevino80joined
23:21:08  <rch>techwraith: what's Model?
23:21:34  <techwraith>rch: http://github.com/mde/model
23:21:59  <techwraith>It's a model + database abstraction layer
23:22:02  <rch>huh, ok thanks
23:22:17  <techwraith>So you can use (almost) any database with the same API
23:22:19  <rch>could use cass, i wonder how natural a fit that would be
23:22:34  <techwraith>cass?
23:22:35  <rch>i really wonder how portable APIs are across databases, the semantics of some databases are so different
23:22:37  <rch>cassandra
23:22:43  <techwraith>Ah, thought so
23:23:11  <techwraith>True, it's not the most performant for non-ralational, or non-queryable dbs
23:23:47  * ins0mniaquit (Read error: Operation timed out)
23:24:03  <rowbit>Daily usage stats: [developer: 8, free: 1048]
23:24:04  <rowbit>Hourly usage stats: [developer: 0, free: 25]
23:34:16  * defunctzombiechanged nick to defunctzombie_zz
23:35:00  * thlorenzquit (Remote host closed the connection)
23:35:10  * peutetrequit (Quit: peutetre)
23:47:10  * fronxjoined
23:47:55  * kevino80quit (Remote host closed the connection)
23:48:09  <robertkowalski>i talked about npm today at our hamburg javascript usergroup
23:50:37  <robertkowalski>Domenic_: promises was a topic in the talk afterwards.
23:51:52  * fronxquit (Ping timeout: 240 seconds)
23:52:13  * jcrugzzquit (Ping timeout: 245 seconds)
23:54:06  * tilgovijoined
23:55:13  * AvianFluquit (Ping timeout: 250 seconds)
23:58:09  * funkytekquit (Quit: My MacBook Pro has gone to sleep. ZZZzzz…)
23:59:14  <ogd>grncdr: techwraith http://github.com/mde/model https://github.com/grncdr/node-any-db