yorick has quit [Remote host closed the connection]
Sgeo has quit [Remote host closed the connection]
Sgeo has joined #elliottcable
alexgordon has quit [Quit: Computer has gone to sleep.]
Sgeo has quit [Read error: Connection reset by peer]
Sgeo has joined #elliottcable
Sgeo_ has joined #elliottcable
Sgeo has quit [Ping timeout: 248 seconds]
sephr has quit [Quit: Leaving]
brr has quit [Ping timeout: 240 seconds]
prophile_ has joined #elliottcable
prophile has quit [Remote host closed the connection]
brr has joined #elliottcable
<elliottcable> whitequark ⑊ hi.
<elliottcable> Bug in purr.
<elliottcable> >> var Doubler=function(n){this.n=n}; Doubler.prototype.valueOf=function(){return this.n * 2}; two = new Doubler(2); two == 4
<purr> elliottcable: false
<elliottcable> var Doubler=function(n){this.n=n}; Doubler.prototype.valueOf=function(){return this.n * 2}; two = new Doubler(2); two == 4
<purr> elliottcable: false
<elliottcable> devyn ⑊ I can't figure this out. Works fine in node, but not in purr.
<devyn> elliottcable: hm, when was the last time you updated node on the server? could be an old bug?
PSYCHEMYST has joined #elliottcable
<devyn> all caps nick. interesting.
PSYCHEMYST has left #elliottcable ["quit"]
<devyn> lolwut
<purr> lol
<elliottcable> He immediately joined #purr.
<elliottcable> Musta /whois'd purr for some reason.
<devyn> it's always fun to make conspiracy theories about people who do that
<elliottcable> lol!
<purr> lol
<elliottcable> anyway no
<elliottcable> node is up-to-date
<elliottcable> works fine in node on the server; just not in the bot o_O
<elliottcable> nor has node been updated in a while
<elliottcable> makes no sense at all, wtf
<devyn> runInNewContext bug?
<elliottcable> maybe. Not sure. Really fucking weird.
<devyn> yeah
<elliottcable> I thought purr didn't use runInNewContext.
<devyn> I think it does for v8 but not sure
<elliottcable> >> console.__proto__.constructor.constructor('Object')
<purr> elliottcable: function anonymous() { Object }
<elliottcable> >> console.__proto__.constructor.constructor('Object')()
<elliottcable> >> typeof console.__proto__.constructor.constructor('Object')()
<purr> elliottcable: 'undefined'
<elliottcable> >> typeof console.__proto__.constructor.constructor('return Object')()
<purr> elliottcable: 'function'
<elliottcable> >> typeof console.__proto__.constructor.constructor('return process')()
<purr> elliottcable: 'object'
<elliottcable> ಠ_ಠ
<devyn> :p
<elliottcable> >> typeof console.__proto__.constructor.constructor('return process')().exit()
purr has quit [Remote host closed the connection]
<elliottcable> Well.
purr has joined #elliottcable
<elliottcable> That bot is *nowhere* near as secure as I thought it was.
* elliottcable laughs for a couple minutes
<devyn> lol
<purr> lol
<elliottcable> >> typeof console.__proto__.constructor.constructor('return process')().exit()
<purr> elliottcable: ReferenceError: process is not defined
<elliottcable> Oh snap.
<devyn> we already established that a while ago :p
<devyn> haha wat
<elliottcable> IT LEARNS.
<elliottcable> I TOLD YOU IT WAS SENTIENT.
<elliottcable> I FUCKING TOLD YOU.
<devyn> lol killing myself laughing
<elliottcable> devyn ⑊ help me build Paws.js damnit
<elliottcable> you're a good programmer and should definitely be my minion
<elliottcable> I'll pay you in bitcoin and stale cookies
<devyn> maybe in a month. I'm still finishing up with school atm
<elliottcable> elliottcable: wat.
<purr> beep.
<elliottcable> lolk
<elliottcable> -wat
<purr> elliottcable: what the ever loving fuck are you saying
<elliottcable> -what
<purr> <eboy> triangle sally is the best performer. better than lady gaga
<elliottcable> -what
<purr> <locks> figures, talk about hookers and here comes alexgordon
<devyn> lol
<elliottcable> love that shit :3
<elliottcable> time to write more tests.
<elliottcable> devyn ⑊ But, for real, the codebase is no longer elliottcable-insane.
<devyn> well that's good
<elliottcable> it's in CoffeeScript, which, like Java, enforces boring but noob-accessible code.
<elliottcable> There's almost nothing I can do to fuck up CoffeeScript. Believe me, I've tried.
<devyn> hahaha
<elliottcable> the syntax rules are too fragile and non-deterministic to fuck with. Everything just breaks if I try to elliottcable.
<devyn> hmm, non-deterministic syntax rules… that gives me an idea…
<elliottcable> I'm also being rather anal about documentation and testing, so that's great
<elliottcable> oh gods devyn don't do it
<elliottcable> just say no.
<elliottcable> also: nice to see you, devyn. Feels like it's been a while.
<elliottcable> 51 ſ 396 21 PSYCHEMYST: Am i not allowed to join this channel
<elliottcable> 51 ſ 396 35 PSYCHEMYST: Ok i m ready to quit then
<elliottcable> 51 ſ 396 68 ‹ PSYCHEMYST [~androirc@202.70.84.81]
<elliottcable> What the everloving fuck, as purr puts it ...
<devyn> hahahaha
<devyn> what
<elliottcable> seriously what
<devyn> 12 year old. Probably.
<elliottcable> var Doubler=function(n){this.n=n}; Doubler.prototype.valueOf=function(){return this.n * 2}; two = new Doubler(2); two == 4
* purr scolds elliottcable and puts them in a time out.
<elliottcable> >> var Doubler=function(n){this.n=n}; Doubler.prototype.valueOf=function(){return this.n * 2}; two = new Doubler(2); two == 4
<devyn> lahl
<purr> elliottcable: (boolean) true
<elliottcable> okay, cool
<devyn> what changed since last time?
<elliottcable> so it only doesn't-work *in the priv'd environment*
<devyn> ohhh
<elliottcable> I was priv'd last time.
<devyn> I see
<elliottcable> And it turns out that >> works differently when priv'd.
<devyn> that's odd
<elliottcable> yeah, very
<elliottcable> wtf eboy
<devyn> I wonder if eboy fucked with Object.prototype.valueOf?
<elliottcable> I can only imagine so.
<devyn> (why he'd do that, I have no idea)
<elliottcable> sounds like something *I'd* do.
<elliottcable> sounds very-much like something I'd do, actually.
<elliottcable> man, I want to go fuck with global prototypes and see how badly I can break the langauge, now.
<devyn> haha
<elliottcable> you should see my utilities.
<elliottcable> in this project.
<elliottcable> My *syntax* may be enforced-approachable,
<elliottcable> but I did some Dirty, Dirty Things™ in there.
<elliottcable> not in the vein of dirty things, but in a similar vein:
<devyn> that doesn't surprise me
<elliottcable> function composition looks so fucking out-of-place in CoffeeScript.
<elliottcable> It feels like writing functional code in Java or something. >,>
<devyn> lol how can you even easily do function composition with multi-argument functions
<purr> lol
<whitequark> huh, global prototypes
<whitequark> reminds me of
<whitequark> errr, cannot find the article
<whitequark> some dude extracted internal methods from v8 by abusing defineProperty
<elliottcable> although it ends up working *really well* and being *really pretty*
<elliottcable> whitequark ⑊ oh my god, find me that and show me
<elliottcable> bugs probably got fixed >:
<elliottcable> oh, him. lol.
<elliottcable> oh, not that magical
<elliottcable> sneaky, though
<whitequark> elliottcable: btw
<devyn> elliottcable: so I'm doing a group project with someone… who is only ever available at 2:30am, and even then, sporadically. bitch. >_>
<whitequark> how much bitcoins for paws.js?
<elliottcable> whitequark ⑊ thanks for the link. Saved with extreme prejudice.
<elliottcable> whitequark ⑊ lol. You don't even know Paws!
<purr> lol
<whitequark> elliottcable: like that matters
<elliottcable> whitequark ⑊ I'm just offering bitcoin and stale cookies to steal the attention of people who're already interested in the project. I want *more* of their attention, not somebody to write it for me.
<devyn> one does not simply “know” paws.
<devyn> one must date paws first.
<elliottcable> I could always just throw money at a contract coder. Believe me, it's not like I haven't thought of it.
<elliottcable> Yeah, Paws needs a little wining and dining. Maybe a good romantic comedy.
* whitequark scratches his head
<elliottcable> And even then, she won't disgorge her operational semantics until the third date.
<elliottcable> She's a prude like that.
<elliottcable> But to answer your question:
<whitequark> you don't get it :) it's not like I'm going to work _just_ for money (and stale cookies, which are evidently equivalent of money)
<devyn> she'll also want you to spend a lot on her, at least at first
<devyn> but she's worth it
<elliottcable> I dunno, I'm pretty sure I offered Micha 50 BTC at one point.
<elliottcable> Wasn't entirely serious, but there you go.
<elliottcable> whitequark ⑊ well, maybe it's time for you to get interested in Paws. ;)
<elliottcable> she's available Tuesday after 8, I hear. Why don't you call her up?
<elliottcable> oh my god i've given my programming language a gender kill me now
<whitequark> heh
<elliottcable> devyn ⑊ teach whitequark paws, brb breakfast.
<elliottcable> ;)
<whitequark> on the serious note... I promised to roll out a beta of Foundry on about 15th July
<devyn> oh man, I don't really have time to do that right now, but uhhh
<whitequark> so that's what I'm doing in near future
<elliottcable> I was joking. Wait, do you think you could actually teach Paws?
<elliottcable> I forget, what's Foundry?
<whitequark> elliottcable: my ruby dialect for embedded sw
<devyn> whitequark: baaasically, it's a language designed around concurrency. think coroutine procedures (but not quite, and more flexible) + a data access model somewhat like STM
<elliottcable> Ah, yes
<elliottcable> ooo, well-summarized devyn
<whitequark> devyn: cool
<elliottcable> don't forget, concurrency *and* asynchronicity
<whitequark> coroutine procedures? CPS?
<elliottcable> and the latter moreso than thef ormer.
<devyn> right, right, and with asynchronicity and the STM-like data access model, the potential for automatic parallelism
<elliottcable> CPS-ish, yes, but the actuality is a bit lower-level (subcontinuations that I call “executions”), and then abstracted away a bit to be somewhat procedural-looking
<elliottcable> Current status: Arguing with CoffeeScript people because their shit is unintuitive. ಠ_ಠ
<devyn> heh
<whitequark> btw
<whitequark> elliottcable: you seen delimited continuations?
<elliottcable> yes!
<whitequark> I kinda get the idea (awesome) but didn't catch up on the formal semantics yet
<elliottcable> I can *barely* wrap my head around them
<elliottcable> yeah ditto same place exactly.
<elliottcable> My high-level opinion was “irrelevant / inapplicable to Paws”
<elliottcable> and with my mind-state in life right now, anything that I can't state to myself in terms of Paws, I don't have room to care about )'=
<whitequark> eating?
<elliottcable> I can't be a generalist when I'm trying to keep an entire fucking abstracted stack of programming-environment sane in my head
<whitequark> ... breathing?!
<elliottcable> and it sucks. because I'm missing out on a lot of shit I wish I could understand.
* whitequark calls an ambulance
<elliottcable> Did I ever hook you up with Bluebie?
<elliottcable> btw, I ordered an Othermill
<devyn> what
<elliottcable> might have a use for your Foundry soon enough ;)
<whitequark> elliottcable: you did
<elliottcable> devyn ⑊ wat
<whitequark> I think she uses AVRs
<whitequark> with the recent changes to Foundry memory model it may actually begin to work on AVRs
<elliottcable> “The extent to which continuations can be used to explain other general phenomena in natural language is a topic of current research.”
<elliottcable> So much wat
<elliottcable> NLP by breaking language down into fucking continuations and then processing them?
<elliottcable> a thing, that should definitely be a thing.
<devyn> I guess this is what I have to look forward to as a cognitive systems major
* whitequark chews a toast.
<whitequark> re generalist:
<elliottcable> whitequark: “chews a toast.” what.
<purr> beep.
<elliottcable> Hoare logic. Somebody explain to me the utility of this.
<elliottcable> I feel like I'd thoroughly enjoy being an academic computer-scientist. This shit just sounds out-and-out *fun*.
<elliottcable> But I fucking need to make a fucking programming language, or I can't focus, damnit.
<whitequark> doesn't wikipedia explain that?
<elliottcable> Plan: Make a Paws. Apply to a uni.
<whitequark> university...
<whitequark> I need a diploma to get the fuck out of here
<whitequark> and now I'm facing a moral dilemma
<whitequark> 1) spend some years of my life doing smth I don't care about in the slightest, get a piece of paper
<whitequark> 2) spend some money and get the same piece of paper, faster, with otherwise the same side effects
<elliottcable> Didn't we talk about this previously, you and me?
<elliottcable> going-to-unit or not-going-to-uni, and monetary investment, and all that?
<whitequark> elliottcable: that sounds like a topic I could talk about
<whitequark> what the conclusion was?
<elliottcable> I'm lucky that I can buy my way into a good Uni, and have an opportunity to enjoy myself with extremely intelligent people.
<elliottcable> whitequark ⑊ I don't know, something about your parents? Or am I confusing you with somebody else?
<whitequark> elliottcable: no, you don't get it. I have no problems paying for education
<elliottcable> ick, breakfast, too hungry to wait. Hope you're here when I get back. (=
<whitequark> it's waaaaay cheaper here
<devyn> 1) sounds like high school, 2) sounds like hookers
<whitequark> but. I have my work which I like, and I don't care about like 80% of the topics, like, at all
<elliottcable> Hi!
yorick has joined #elliottcable
* elliottcable pokes devyn and whitequark
<elliottcable> Anybody still alive? :3
<devyn> I, but not for long
<elliottcable> aw
<devyn> sun's comin' up
* elliottcable pats devyn on the head genially
<devyn> should sleep soon
<elliottcable> oh, you haven't slept yet?
<devyn> :p
* whitequark is bisecting llvm
<elliottcable> as in git-bisect?
<whitequark> yep
<elliottcable> never tried it
<whitequark> they broke my ffi binding somewhere between 3.2 and 3.3
<elliottcable> ah, I see it
<whitequark> llvm is a good backend if your language behaves like C++
<elliottcable> I've always done this manually! Somehow I didn't realize this was what it did.
<whitequark> i.e. is pretty static
<whitequark> ah, "it" = "git bisect"
<devyn> debugging, the hard way http://cl.ly/PCwY
<elliottcable> xxd :D
<elliottcable> the hard way, indeed
<elliottcable> VIM hilights xxd output? that's fucking cool.
<elliottcable> #youlearnsomethingeveryday
* whitequark has expected some wires there...
<devyn> heh
<elliottcable> wires? what?
<whitequark> elliottcable: well
<whitequark> how do you debug hardware?
<devyn> well, holy fuck, I'll be interested to see what's causing this… o__o
<elliottcable> I don't do anything with hardware. Confused. Are you working with hardware right now?
<elliottcable> oh, that's right, Foundry.
* elliottcable slaps self
<elliottcable> devyn ⑊ causing what?
<devyn> ok so the one on the left is the correct output, and the one on the right is this output that is correct at first and then suddenly diverges somewhat
<elliottcable> oh, wait
<devyn> and ends up being a somewhat significantly different file size
<elliottcable> I thought that message was from whitequark.
<devyn> lol
<purr> lol
<elliottcable> am SO much less confused now
<elliottcable> 9:00 AM here.
<devyn> anyway, it diverges at address 04c0, with 0161 000a 00f6 in the correct output, which is, indeed, correct. but in the wrong output, it's like 0161 000d 0a00 f600
<elliottcable> Time to turn the subs on and get productive.
<devyn> so somehow the endian got swapped and an extra byte snuck in
<devyn> what the fuck, windows?
<elliottcable> Just watched a lizard-squirrel run by my window.
<elliottcable> I kid you not, whatever the fuck it was looked exactly what one might expect the offspring of a grey squirrel and a common green gecko to look like.
<elliottcable> Fucking squizzards. Fuzzy little creepy-ass bastards.
<devyn> hahaha
<devyn> I'm gonna sleep. Too tired to deal with windows weirdness.
<devyn> oh nvm
<whitequark> elliottcable: doing drugs again?
<devyn> hahaha
<elliottcable> <e o7
<devyn> I got it
<elliottcable> I love all of you have my codebabies
<elliottcable> `curl -L http://ell.io/logs | grep -C 10 'codebab'`
<elliottcable> To my complete surprise, it turns out that I've only used the word “codebaby” *once* before in this channel.
<elliottcable> I feel like it's something I say weekly.
<elliottcable> Wow, ryah was in here for a while. I forgot about that.
<elliottcable> You *do* all realize that you're intellectually enslaved to the programming equivalent of the Hypercube guy, right?
<elliottcable> or whatever the fuck it was.
<elliottcable> Timecube. That.
<devyn> elliottcable: lol, so, the bug, man… the bug… I opened the file as "w", not "wb" — which is identical on Unix, but on Windows, without the 'b', it adds a '\r' before every '\n' from the C IO calls
<purr> lol
<elliottcable> “No man on Earth has no belly-button, it proves every believer on Earth a liar.”
<elliottcable> Man, I should just say shit that crazy, then *I'd* be famous *too*
<devyn> lol
<devyn> yaaaay I fixed a stupid bug
* devyn dances
<elliottcable> Ugh every time I visit this. DO NOT KNOW IF TROLL.
<elliottcable> DO NOT KNOW IF TROLL, AND IT BOTHERS ME
* devyn sleeps
<elliottcable> devyn ⑊ o7
<purr\Paws> [Paws.js] elliottcable pushed 2 new commits to copy-types+: https://github.com/elliottcable/Paws.js/compare/8cac02675b99...b058d3e8949d
<purr\Paws> Paws.js/copy-types+ caba5de elliottcable: (- meta fix) Fixing `cake clean` to protect .coveralls.yml
<purr\Paws> Paws.js/copy-types+ b058d3e elliottcable: + copied Label over, as well as Thing.pair and Thing#find
<whitequark> fuck
<whitequark> libRubyLLVMSupport-3.2.so
<whitequark> libLLVM-3.3.so
<whitequark> do you fucking see the problem here
<whitequark> it took me a WEEK
<whitequark> (well, two or three days of continuous time)
<elliottcable> to update?
<whitequark> elliottcable: to notice that I was loading two incompatible libraries
<whitequark> which caused all sorts of weird shit
<whitequark> because C++
<purr\Paws> [Paws.js] elliottcable pushed 1 new commit to Master: https://github.com/elliottcable/Paws.js/commit/b2f8fbd3fee8545bb1d8d03852cad97569203b22
<purr\Paws> Paws.js/Master b2f8fbd elliottcable: (- docs) Doing dirty things to my README for GitHub's sake....
<elliottcable> Whee C++
<whitequark> current status: pushing patches to llvm upstream.
<elliottcable> current status: being impressed.
<elliottcable> and rocking out to an unnecessarily loud bassline.
<elliottcable> Krewella <3
<whitequark> not sure if actually or just being sarcastic
<elliottcable> nope, was reasonably serious.
<elliottcable> er, purr, damnit
<elliottcable> <3 Krewella
<purr> Let it be known that elliottcable hearts Krewella.
<elliottcable> there we go.
<elliottcable> -loves
<purr> elliottcable: doesn't love anything :(
<elliottcable> wat
<elliottcable> lies!
<whitequark> -hearts
<elliottcable> oh
<elliottcable> -loves elliottcable
<purr> elliottcable: elliottcable loves cloudhead, devyn, tucker, gqbrielle, IamTash, Bluebie, alexgordon, Breaking Bad, zsh, purr, locks, last.fm, Zero 7, Tiberian Sun, cold, berri, NuckOff, git, George R. R. Martin, github, OS X, micahjohnston, ChelseaP, GitHub, brits, the cock, SubStack, Aria, isaacs, negative space, Lua, zzap, logs, #elliottcable, russfrank, Kaufmann Mercantile, iPad, tmux, SSH, Prompt.app, Little Snitch, Ronald Jenkees, JavaScript, judofyr, Primer,
<elliottcable> there we go
<elliottcable> jesus, that list is really long.
<whitequark> -loves whitequark
<purr> whitequark: whitequark loves git, console, purr, foo, and Adrian Thurston.
<elliottcable> I love a lot of people.
<whitequark> that's... a weird set
<elliottcable> th'fuck is Adrian Thurston
<whitequark> the author of ragel
<elliottcable> purr: “whitequark loves git, console, purr, foo, and Adrian Thurston.” wat.
<purr> beep.
<whitequark> -hates whitequark
<purr> whitequark: whitequark hates semicolonless javascript.
* whitequark hates javascript
* whitequark hates any kind of javascript
<elliottcable> D:
<elliottcable> blasphmey!
<elliottcable> also, it's </3 or --
<whitequark> --javascript
<whitequark> purr: huh?
<elliottcable> probably need a space
<elliottcable> </3 whitequark
<whitequark> -- javascript
<purr> Let it be known that whitequark hates javascript.
<whitequark> -- any kind of javascript
<purr> Let it be known that whitequark hates any kind of javascript.
<elliottcable> oh, it's ಠ_ಠ
<whitequark> -hates whitequark
<purr> whitequark: whitequark hates semicolonless javascript, javascript, and any kind of javascript.
<elliottcable> ಠ_ಠ whitequark
<purr> Let it be known that elliottcable disapproves of whitequark.
<elliottcable> -hates elliottcable
<purr> elliottcable: elliottcable hates mordof, darkf, colds, Express, having to make things complex so that they seem simple, Node.js, oftn-bot, fear of words, albel727, all of you, very much, prophile, reddit, alexgordon ಠ_ಠing ಠ_ಠ, his_hoofiness, single-threaded software, unnecessary semicolons, google, google’s style guides, Owl City, cats, Cracked, mikolalysenko, chjj, dnyy, upgrayedd, Katie K., Java, PHP, Deleware, david_mark, alcohol, pot, Deamonboy, rea
<elliottcable> “all of you, very much”
<elliottcable> laughed
<elliottcable> well-played, past-me.
<whitequark> <3 LLVM
<purr> Let it be known that whitequark hearts LLVM.
<elliottcable> -wholoves elliottcable
<purr> elliottcable: elliottcable is loved by devyn, locks, sephr, IamTash, gqbe, mix, little_boys, and brr.
<elliottcable> -find a
<purr> elliottcable: Found: bot, test, nuck, !, and clouds
<elliottcable> -find (c)
<purr> elliottcable: Found: where is the love (c)
<elliottcable> -where is the love (a)
<purr> elliottcable: var t=this; this.r=function(t,_,s){return Object.keys(t).reduce(function(acc,k){return _(acc,k,t[k])},s)}
<elliottcable> -where is the love (b)
<purr> elliottcable: var t=this; this.z=function(){return t.r(t.r(this.loves.object,function(acc,k,v){t.r(v,function(acc,k,v){acc[k] = (acc[k]||0)+v;return acc},acc);return acc},{}),function(acc,k,v){acc.push({name:k,total:v});return acc},[]).sort(function(a,b){return b.total-a.total}).map(function(e){return e.name+': '+e.total})}
<elliottcable> -where is the love (c)
<purr> elliottcable: this.register_command('whereisthelove',function(context){var z=this.z(),y=z.length;context.channel.send([z[0],z[1],z[2],z[3],z[y-4],z[y-3],z[y-2],z[y-1]].join(', '))});
<whitequark> what the fuck
<elliottcable> some shit I never got around to actually putting *into* the bot on the server
<elliottcable> so for reasons unclear to me I always just pull it out of a bot-factoid I stored it in, and exceute it dynamically.
<elliottcable> meh.
<elliottcable> lazy.
<elliottcable> var t=this; this.r=function(t,_,s){return Object.keys(t).reduce(function(acc,k){return _(acc,k,t[k])},s)}
<purr> elliottcable: function (t,_,s){return Object.keys(t).reduce(function(acc,k){return _(acc,k,t[k])},s)}
<elliottcable> var t=this; this.z=function(){return t.r(t.r(this.loves.object,function(acc,k,v){t.r(v,function(acc,k,v){acc[k] = (acc[k]||0)+v;return acc},acc);return acc},{}),function(acc,k,v){acc.push({name:k,total:v});return acc},[]).sort(function(a,b){return b.total-a.total}).map(function(e){return e.name+': '+e.total})}
<purr> elliottcable: function (){return t.r(t.r(this.loves.object,function(acc,k,v){t.r(v,function(acc,k,v){acc[k] = (acc[k]||0)+v;return acc},acc);return acc},{}),function(acc,k,v){acc.push({name:k,total:v});return acc},[]).sort(function(a,b){return b.total-a.total}).map(function(e){return e.name+': '+e.total})}
<elliottcable> this.register_command('whereisthelove',function(context){var z=this.z(),y=z.length;context.channel.send([z[0],z[1],z[2],z[3],z[y-4],z[y-3],z[y-2],z[y-1]].join(', '))});
<elliottcable> -whereisthelove
<purr> purr: 22, micahjohnston: 13, locks: 9, vil: 7, sephr: -3, : -3, darkf: -4, PHP: -12
<elliottcable> awww, everybody loves purr ('=
<whitequark> -- having to maintain my own LLVM tree
<purr> Let it be known that whitequark hates having to maintain my own LLVM tree.
<elliottcable> his*
<whitequark> because THE FUCK
<elliottcable> “++ having to maintain my own LLVM tree”
<whitequark> grr
<elliottcable> “-- having to maintain his own LLVM tree”
<whitequark> ++ having to maintain my own LLVM tree
<purr> Let it be known that whitequark is indifferent to having to maintain my own LLVM tree.
<elliottcable> like dat.
<whitequark> -- having to maintain his own LLVM tree
<purr> Let it be known that whitequark hates having to maintain his own LLVM tree.
* elliottcable laughs
<elliottcable> good job!
<elliottcable> you're slowly becoming a part of this channel.
<elliottcable> that's probably bad for you.
<whitequark> the fucking thing compiles for exactly six minutes and thirty seconds
<elliottcable> exactly?
<elliottcable> that seems unlikely.
<whitequark> with X86, X86_64 and ARM targets enabled, on Clang 3.2, with Debug+Assert build, yes.
<elliottcable> Zedd time.
<whitequark> I bisected it for the best part of the day.
<whitequark> I KNOW
<whitequark> oh and don't forget to add `make clean` and reconfigure it.
<whitequark> so.
<whitequark> exactly.
<whitequark> Spotify is currently not available in your country.
<elliottcable> really? ಠ_ಠ
<elliottcable> Can you get Rdio?
<whitequark> probably no
<elliottcable> then there's that
<whitequark> works
* elliottcable eyebrow
<elliottcable> why isn't that in the bot yet?
* elliottcable goes to add it
<whitequark> elliottcable: that is actually neat.
<whitequark> it even dampened my pure, unadulterated hate a little bit.
<elliottcable> oh?
<elliottcable> You hate dubstep quite a bit, I take it?
<whitequark> well, usually dubstep is far worse
<whitequark> (that hate remark was about maintaining my LLVM tree)
<whitequark> (though I do hate dubstep. usually.)
* whitequark sets it on repeat
* elliottcable laughs
<elliottcable> I'm glad you like it!
<elliottcable> I'll link you another good one in less than five minutes, hopefully
<elliottcable> -best
<purr> IS BEST
<elliottcable> -best fuck wit @ whitequark
<purr> FUCKWIT IS BESTWIT
<elliottcable> mmm.
<elliottcable> -factoid elliottcable @ whitequark
<purr> elliottcable: Popularity: 23, last changed by: mix, 285ſ 406mſ ago
<elliottcable> ugh
<elliottcable> thought that worked that way, I guess not.
eccloud has quit [Ping timeout: 264 seconds]
<whitequark> what
<whitequark> I wonder if I can download that song
<whitequark> why the fuck it 400's my curl request :/
<elliottcable> >> "\03abc"
<purr> elliottcable: '\u0003abc'
<elliottcable> hmm
<elliottcable> >> console.log("\03abc")
<elliottcable> ಠ_ಠ
<elliottcable> purr.
<elliottcable> -purr
* purr
<elliottcable> >> console.log("\03abc")
<elliottcable> >> console.log("abc")
<elliottcable> >> console.log("abc");
<elliottcable> fucker.
<elliottcable> context.get_channel('#elliottcable').send("5,12")
<purr> elliottcable: TypeError: Object #<Object> has no method 'get_channel'
<elliottcable> client.get_channel('#elliottcable').send("5,12")
<purr> 5,12
<elliottcable> client.get_channel('#elliottcable').send("\0e5,12")
<purr> e5,12
<elliottcable> client.get_channel('#elliottcable').send("\35,12")
<purr> ,12
<elliottcable> wat.
<elliottcable> >> "\35,12"
<purr> elliottcable: '\u001D,12'
<elliottcable> >> "\035,12"
<purr> elliottcable: '\u001D,12'
<elliottcable> >> "\0035,12"
<purr> elliottcable: '\u00035,12'
<elliottcable> client.get_channel('#elliottcable').send("\0035,12")
<elliottcable> dick.
<elliottcable> client.get_channel('#elliottcable').send("\0035,12abc")
<purr> abc
<elliottcable> bawhrawrahtk
<elliottcable> Y U DIK,PURR?
<elliottcable> client.get_channel('#elliottcable').send("\0032abc")
<purr> abc
<elliottcable> client.get_channel('#elliottcable').send("\00323abc")
<purr> abc
<elliottcable> client.get_channel('#elliottcable').send("\003234abc")
<purr> abc
<elliottcable> client.get_channel('#elliottcable').send("\0032345abc")
<purr> abc
<elliottcable> >> ""\0034abc""
<purr> elliottcable: SyntaxError: Unexpected token ILLEGAL
<elliottcable> >> "\0034abc"
<purr> elliottcable: '\u00034abc'
<elliottcable> >> "\0034abc"[0]
<purr> elliottcable: '\u0003'
<elliottcable> >> "\0034abc"[1]
<purr> elliottcable: '4'
<whitequark> Server:crack_is_whacknginx/1.0.14
<whitequark> what
* whitequark wonders
purr has quit [Remote host closed the connection]
purr has joined #elliottcable
purr has quit [Remote host closed the connection]
purr has joined #elliottcable
<whitequark> $ ruby -e 'File.write("fixed_#{ARGV[0]}", File.read(ARGV[0], mode: "rb").gsub(/^.*?(ID3)/m, "\\1"), mode: "wb")' -- zedd_hourglass.mp3
purr has quit [Remote host closed the connection]
<whitequark> on a stream captured with wireshark and request.uri ~ "stream.php"
purr has joined #elliottcable
<purr> “Cookies
<whitequark> hm what the hell
<whitequark> what the fuck did it capture
purr has quit [Remote host closed the connection]
purr has joined #elliottcable
<whitequark> very interesting
purr has quit [Remote host closed the connection]
purr has joined #elliottcable
purr has quit [Remote host closed the connection]
purr has joined #elliottcable
<whitequark> I'm dumb.
<whitequark> really, really dumb.
<whitequark> however
<whitequark> it's still weird
fwg_ has joined #elliottcable
fwg_ has quit [Changing host]
fwg_ has joined #elliottcable
purr has quit [Remote host closed the connection]
<whitequark> what the hell
<whitequark> the captured stream sounds like it has lost sync
purr has joined #elliottcable
<whitequark> DRM?..
<whitequark> if it is, that's very clever.
<whitequark> I need to diff the output.
purr has quit [Remote host closed the connection]
purr has joined #elliottcable
purr has quit [Remote host closed the connection]
fwg has quit [*.net *.split]
purr has joined #elliottcable
<elliottcable> whitequark ⑊ enjoying yourself? lol.
<purr> lol
<elliottcable> anyway.
<elliottcable> ♪ Zedd: Lost At Sea
<purr> elliottcable: “Lost At Sea”, Zedd: <http://tinysong.com/19iZm>
<elliottcable> ↑ enjoy
<elliottcable> Much better than the first one I sent you
<elliottcable> well, marginally better. It's rather famous and mainstream, though.
<elliottcable> If you want *really* good shit,
<elliottcable> -song Luma
<purr> elliottcable: “Luma”, The M Machine: <http://tinysong.com/1cqKD>, “Luma Daylight”, STS9: <http://tinysong.com/WG0j>, “Micaeli, Mariane, Jucimari, Luma, Francilini, Cristiane, Micheli Aranha & Lucimara / Igrejinha (Tocantins)”, Palavra Cantada: <http://tinysong.com/1cqKE>
<elliottcable> first of those
<elliottcable> It's truly excellent. Rather long, though.
<audy> cool grooveshark bot elliottcable
<audy> I have one too
* audy summons sharkbot
* audy summons harder
sharkbot has joined #elliottcable
<audy> purr sharkbot fight!
<audy> !songme Luma
<sharkbot> http://tinysong.com/1cqKD Luma - The M Machine
<elliottcable> grooveshark bot lol
<purr> lol
<elliottcable> just added one function to him.
<audy> that's what I mean
<audy> cool grooveshark bot functionality
* elliottcable laughs
<elliottcable> nonetheless: thanks. (=
<audy> -kick sharkbot
<whitequark> fucking ALSA :/
<elliottcable> gist
<elliottcable> There.
<elliottcable> Made a Purr github.
<elliottcable> And gave all of you faggots access.
<elliottcable> now you can fix shit and add shit yourselves.
* whitequark wonders
<whitequark> so flash security sandbox prevents it from writing to a file I designated via alsa file sink on my /home
<whitequark> supposedly
<whitequark> because I'm not going to strace that shit
<whitequark> /tmp?..
<whitequark> wow, it worked
<whitequark> even saved me from having to manually syncing two streams.
<whitequark> <3 alsa
<purr> Let it be known that whitequark hearts alsa.
<whitequark> in unrelated news
<whitequark> I really need to set up some scripts to deploy a proper glibc-based chroot on android phones
<whitequark> because shit doesn't compile with bionic
sephr has joined #elliottcable
<whitequark> hm
<whitequark> I should upload sine wave there and look how is it mangled!
<whitequark> fun for today's night
<audy> sol
<audy> ?
<audy> -factoid
<purr> audy: Error: Factoid not found.
<audy> -best
<purr> IS BEST
<audy> -best purr
<purr> PURR IS BESTPURR
<audy> !sol
<audy> -sol
<purr> audy: 15 851 ſ 716 010
<audy> -sol
<purr> audy: 15 851 ſ 718 948
<whitequark> I may even actually be as motivated as to rewrite my old flash decompiler.
<whitequark> port it to the SSA framework I wrote, make pattern matching in it sane
<whitequark> maybe read a paper or two on the loop/conditional reconstructioning used in emscripten/dagger
<elliottcable> dagger?
<whitequark> not sure if it's any good, though
<whitequark> but it probably includes the algorithm I need.
<elliottcable> ♪ Helix Domenico remix, Justic
<purr> elliottcable:
<elliottcable> fuck
<elliottcable> ♪ Helix Domenico remix, Justice
<purr> elliottcable: “Helix”, Justice (Domenico Torti's Headspin remix): <http://tinysong.com/1cqNU>
judofyr has joined #elliottcable
<judofyr> hey folks
<elliottcable> judofyr!
<elliottcable> where'd you come from? (=
<elliottcable> have you met whitequark? I think you two'd get along.
<purr> hah
<elliottcable> shut up, purr.
<judofyr> I have indeed met whitequark
eccloud has joined #elliottcable
<judofyr> I've even pull requested one of his projects
<elliottcable> whitequark ⑊ so, if you're not much of a fan of dubsteppy shit, what's your usual go-to? Got a last.fm?
<judofyr> elliottcable: I just got an email about elliottcable/purr, so I thought I'd check out this thing
* elliottcable laughs
<elliottcable> I just pushed purr's insanely messy and hacky source to GitHub so anybody here can contribute
<elliottcable> and you've still got a “wudofyr” in here, so I added you (=
<elliottcable> why don't you lurk anymore! You miss so much interesting shit.
<judofyr> ah, right
<judofyr> I also saw Paws.js
<elliottcable> For instance, yesterday, I spent half a hour laughing my ass off in here at this guy's videos:
<judofyr> in CoffeeScript?!
<elliottcable> LOL
<purr> lol
<elliottcable> have you seen µpaws.js? it's an insane fucking mess.
<elliottcable> Like, it's mired down to the point where I literally cannot continue to develop on it.
<judofyr> "elliottcable: have you seen [something I made]? it's an insane fucking mess." :D
<elliottcable> So, I bit the bullet, and decided that since I now have a *working Paws*, now that I've proven to myself that the concepts are sound and that it's *doable*,
<judofyr> oh, I didn't see the "mess" at the end there
<elliottcable> it's time to re-do it in a way that I can actually accrue contributors with.
<elliottcable> i.e. something that Micah and Devyn can meaningfully contribute to, so we can move this project forward as a whole.
<whitequark> elliottcable: I'm not a fan of *any* music service
<whitequark> though
<elliottcable> That means using all the common tools, and writing clean standard code, and documenting, and testing, and blah-de-blah.
<whitequark> wait a little bit of time and I'll explain what I like
<judofyr> elliottcable: so this thing is working now? https://github.com/elliottcable/muPaws.js
<elliottcable> whitequark ⑊ deal.
<whitequark> but first I need to break this grooveshark's obfuscation
<whitequark> because it really got me
<whitequark> it's weird
<elliottcable> LOL.
<whitequark> the streamed music is SHORTER
<whitequark> than whatever I record with alsa loopback
<whitequark> and than the track itself
<whitequark> wtf, how can that even work
<elliottcable> judofyr ⑊ yep, µpaws is “fully working”
<elliottcable> It doesn't do any of the *interesting* stuff.
<elliottcable> no time-travel, no distribution.
<elliottcable> But it proves that the core concepts and asynchronous model of execution are fundamentally sound.
<judofyr> cool
<judofyr> that includes the forking stuff?
<elliottcable> as an example, here's some functioning Paws:
<elliottcable> feel free to try it.
<elliottcable> $ git clone git://github.com/elliottcable/muPaws.js.git; cd muPaws.js
<judofyr> fatal: destination path 'muPaws.js' already exists and is not an empty directory.
<elliottcable> $ ./µPaws.js --no-start -e 'implementation util print abc'
<whitequark> judofyr: are you wudofyr__ ?
<judofyr> yes
<whitequark> y
<judofyr> I'm not logging in to that guy often though
<elliottcable> if you want to see some *actually interesting* output instead of boring shit,
<elliottcable> $ DEBUG=9 ./µPaws.js --no-start -e 'implementation util print abc'
<judofyr> Error: Cannot find module 'optimist'
<elliottcable> npm install optimist.
<elliottcable> Anyway, it *works*, but the problem is this: http://ell.io/iKYck
<elliottcable> even *I* can't make heads nor tails of it when something goes wrong, and given that everything is completely fucking untested and there's absolutely no error-checking or sanity verificatiomn anywhere in it, things go wrong *constantly*.
<elliottcable> So, moving on to the more *conceptually* complex shit ... I don't have the mind-space to *both* be trying to figure out whether it makes any fucking sense to call into an execution paused within on bubble from another parallel co-enclosed bubble **and** try and figure out why I'm getting `undefined is not an object` errors, at the same time.
<elliottcable> which isn't surprising, or news to anybody, anywhere, ever.
<elliottcable> µpaws.js served its' purpose: rapidly prototyping the boring but messy core shit in Paws, so we could work out the kinks in the object system and execution model in our own heads.
<elliottcable> (Also, to give me a mental rallying-point, something I could point at and say “I did a real thing!”, instead of banging my head against these ideas for three years with nothing to show for it.)
<elliottcable> it's time to move on, and apparently, CoffeeScript is where we're moving on *to*. >,>
<elliottcable> anyway.
<elliottcable> judofyr ⑊ how's life? We haven't talked in ages.
yorick has quit [Remote host closed the connection]
judofyr_ has joined #elliottcable
<judofyr_> damn this wi-fi
<elliottcable> -logs @ judofyr_
<purr> judofyr_: `curl -Lr -`bc <<<'2 ^ 16'` http://ell.io/logs | tail +2 | less -RS`
judofyr has quit [Ping timeout: 256 seconds]
judofyr_ is now known as judofyr
<judofyr> nice is good
<judofyr> Arrested Development season 4 has been released
<judofyr> haha
<judofyr> and I was too busy reading Getting.Started.md
<judofyr> because I tried to say "life is good"
<elliottcable> wat
<elliottcable> oh shit
<elliottcable> getting.starded.markdown is a thing
<elliottcable> forgot completely about that
<elliottcable> should proooooobably re-read that and fix it/finish it
<elliottcable> meh
<elliottcable> code.
<elliottcable> 1. clean implementation of the core concepts
<elliottcable> 2. working fowards into time-travel and distribution and the IPP
<judofyr> let me rephrase: AD4 has been released, the sun is shining and it's hot here in Norway, this has been a chill weekend = life is good
<elliottcable> *then* 3. documentation and advertisement
<elliottcable> judofyr ⑊ by the way, you should contribute to Paws. ;)
<elliottcable> despite CoffeeScript.
<elliottcable> Wow, this write-up is actually pretty clear.
<elliottcable> I mean, it's still confusing, because I suck terribly at explaining Paws, but it's better than anything I've managed before.
<judofyr> yeah, although you never mention why you do the locals['locals'], what affix does (or does it only handle the back-and-forth?) and where's the print?
<elliottcable> I don't know what any of those questions mean D:
<elliottcable> where does it say anything about locals[locals]?
<judofyr> infrastructure affix() (locals) Hello,world!
<judofyr> or, the JS translation of that
<elliottcable> ah, yess
<elliottcable> is that confusing enough that I truly need a bullet-point below to explain?
<judofyr> oh, I didn't read it properly: you do mention that you want to store it in the locals
<elliottcable> “handle the back-and-forth?”
<elliottcable> affix is like Array#push
<elliottcable> affix: Array#push
<elliottcable> prefix: Array#unshift
<judofyr> but where's the "get it out of the locals to print it"?
<elliottcable> unaffix: Array#pop
<elliottcable> unprefix: Array#shift
<elliottcable> oh. that's a really good point.
<elliottcable> I got side-tracked and never added a line of code later to actually print what I'd assigned, which is super-confusing when somebody's expecting that.
<judofyr> elliottcable: I looked at the definition of `affix` is the source; do you use Function.prototype.length to detect how many times you must coproduce?
<elliottcable> hahahaha
<elliottcable> don't go digging into the source. worst idea ever. I wasn't kidding when I said it was insane.
<elliottcable> but, if you must know,
<elliottcable> look at the definition of Execution.synchronous() near the top of the file.
<elliottcable> That's what's used to “generate” aliens from the JavaScript-function-implementations of various things down below
<judofyr> I'm mostly wondering about the coproduction "protocol": are all arities defined on the executions/functions/whatever, or do the caller say like "now I pass 3 args" or "this is the last arg"
<elliottcable> the actual generation is done iteratively by World.applyGlobals()
<elliottcable> er, are you talking about in Paws, or are we talking about the implementation you're looking at?
<elliottcable> I have trouble talking about both at once. Sorry. :x
<judofyr> not sure :)
<elliottcable> lol
<purr> lol
<elliottcable> answer in terms of Paws, I think, if I understood the question correctly:
<elliottcable> there's no methodology of telling how many more “arguments” a “function” can take.
<elliottcable> which sounds confusing, but makes sense when you understand that arguments aren't actually a thing.
<elliottcable> it's easier to look at it as there being a certain number of “holes” in a ‘function’, and as you pass things to it, those holes are used-up
<elliottcable> when they're all used up, the function is completely “spent.” It doesn't matter if you try to dump any more data on it to fill holes, nothing will happen.
<elliottcable> does that remotely answer your question?
<judofyr> remotely? yes
<elliottcable> Wow, that was the weirdest error I've ever gotten out of CoffeeScript.
<elliottcable> forgot the arrow after the constructor in a class-definition. The error message it generated was completely incomprehensible, and the generated code was even more confusing.
<elliottcable> fuckin' C-script. ಠ_ಠ
<elliottcable> ಠ_ಠ CoffeeScript
<purr> Let it be known that elliottcable disapproves of CoffeeScript.
<elliottcable> anyway.
<elliottcable> judofyr ⑊ I'm surprised you don't already know this shit about Paws. I thought we sat down and talked about it quite a bit, once upon a time.
<judofyr> elliottcable: I know parts and bits, but I still stumble when I see actual code
* elliottcable nods
<elliottcable> Bro, I *invented* that shit, have been working in it for three years, and it still confuses the shit out of me.
<elliottcable> It's a language that's *designed* to make absolutely no sense until it's abstracted.
<elliottcable> It's a bit like trying to make heads-n-tails of something by reading the LLVM bytecode.
<whitequark> hey, LLVM bytecode is pretty clear
<elliottcable> Sure, a sufficiently badass neckbeard from the 1970s could read and write raw x86 fluently, without getting confused, after half a decade of doing so.
<elliottcable> Most of us can't do that, though.
<elliottcable> Paws is a high-level VM, and cPaws is the “bytecode.”
<elliottcable> (In fact, micahjohnston made a spirited attempt to convince me to re-design it such that the jux-stream *was* a bytecode; and he managed to implement something pretty close to that with zippers in his haskell implementation, as I understand it.)
<whitequark> jux-stream?
<elliottcable> AHLVM? Asynch, high-level VM?
<elliottcable> ACHLVM? or CAHLVM?
<elliottcable> CA-HLVM.
<elliottcable> okay, done.
<elliottcable> whitequark ⑊ Paws boils down to a series of “juxtapositions.”
<elliottcable> There's only a single operator in the syntax, that of whitespace.
<elliottcable> `foo bar`
<elliottcable> you can “indirect” that operator with parenthesis:
<elliottcable> `foo (bar)`
<elliottcable> that's the entirety of the “syntax.” Which isn't really a syntax at all, because it's not yet actually a programming language.
<whitequark> grrrr, grooveshark did not muck with my own uploaded file
<whitequark> I need moar samples.
<whitequark> oh right, you posted some above
<elliottcable> lol
<purr> lol
<elliottcable> ♪ You Give Love a Bad Name
<purr> elliottcable: “You Give Love a Bad Name”, Bon Jovi: <http://tinysong.com/iEIV>
<elliottcable> ♪ Drops of Jupiter
<purr> elliottcable: “Drops of Jupiter”, Train: <http://tinysong.com/ZtUV>
<judofyr> elliottcable: this async stuff is confusing when you have multiple "calls": https://github.com/elliottcable/muPaws.js/blob/Master/examples/09.a.routine.paws#L5-L10 - what are the two arguments (ignoring the callee) to `stage`?
<elliottcable> ♪ Another Day from RENT
<purr> elliottcable: “Another Day”, Stage Stars Records: <http://tinysong.com/Fv1H>
<elliottcable> th'fuck is that shit
<elliottcable> karoke bullshit?
<elliottcable> -song Another Day RENT
<purr> elliottcable: “Another Day”, Rent Soundtrack: <http://tinysong.com/vSdA>, “Another Day”, Original Broadway Cast: <http://tinysong.com/saza>, “Another Day (karaoke)”, Jonathan Larson: <http://tinysong.com/iqrS>
<elliottcable> first one.
<elliottcable> judofyr ⑊ haven't the slightest fucking clue.
<elliottcable> It took me a solid three days to write that example. Because I suck at Paws.
<elliottcable> I'll stare at it for a moment and see if I can figure it out, if you like. (=
<elliottcable> Oh. I'm an idiot.
<elliottcable> The reason that stage() thing keeps happening, is that executions that don't have something *useful* to return, don't return *at all*.
<elliottcable> and if you use the ()-pattern (“call pattern”) to stage them, then you yourself are implicitly unstaged, “waiting for a return value.”
<elliottcable> follow, so far?
<elliottcable> so, if we just did:
<judofyr> ah, yeah
<elliottcable> infra affix() (locals) (infra empty())
<elliottcable> then “us” (the global-routine that all of this code is in) would stop right there, and nothing else would happen.
<judofyr> it's like using a callcc and no one calls the continuation?
<elliottcable> so, to avoid that, we use stage() to *explicitly* cause the very last staging of this routine we're calling into.
<elliottcable> every staging up until the last one (every “argument” except the last argument) can be done implicitly and easily;
<elliottcable> but the last staging (last “argument” we do explicitly.
<elliottcable> exactly like that, yes.
<elliottcable> this is a particular oddity of the API I designed for the core aliens.
<elliottcable> like affix().
<elliottcable> affix can't meaningfully return any value; it *changes state*, it doesn't *compute a value*
<elliottcable> so I opted, instead of building an “Okay I'm done, here's <nothing>” value into the system,
<elliottcable> or having some boring and unsemantic convention such as returning an empty string-ish,
<elliottcable> I decided that the most semantic thing (even if it's not very easy to *write* at this layer of abstraction), would be to signify no-return-value by, uh, not returning.
<elliottcable> so:
<elliottcable> those two lines, are more clearly written:
<elliottcable> infra affix() (locals) (infra empty())
<elliottcable> infra charge() (locals) (infra length() (locals))
<elliottcable> which basically boils down to, “add an element to this locals-array, and then “charge” that element”
<elliottcable> (`charge()` takes an index)
<judofyr> next question then: what does charge do? and how does that work when you call length() after affixing?
<elliottcable> do you remember how ownership works?
<judofyr> (e.g. wouldn't it return one number off?)
<judofyr> nope
<elliottcable> nope, because arrays are one-indexed in Paws
<judofyr> ah
<elliottcable> That was a decision made in December 2009, when Paws was still a series of long and involved threads on Google Wave.
<elliottcable> it actually resulted in about 2/3rds of the people I had involved in Paws at the time, leaving in a huff.
* elliottcable laughs
<elliottcable> I've always been a bit unconventional. ;)
<elliottcable> so, charging, has to do with ownership
<elliottcable> before I even try to *explain* it, let me tell you *why* that line's there.
<elliottcable> that line contributes to *ordering* the following code in the file.
<elliottcable> Since the language is inherently asynchronous and massively concurrent, obviously, there's gotta be some way for ordering sequential tasks or intra-dependant tasks.
<elliottcable> Ownership is that way.
<elliottcable> 'k.
<judofyr> makes sense
<elliottcable> code that's going to run, can “own” (verb.) data, to declare to the system that it's going to do things involving that data.
<elliottcable> very simple locks-like system.
<elliottcable> can get read-ownership or write-ownership.
<judofyr> I was wondering how you would guarantee that the affix() would happen before the length() though
<elliottcable> when it's done with some data, it can disown it.
<elliottcable> ah!
<elliottcable> good question!
<elliottcable> that's the inverse of why we use stage() the way I explained!
<elliottcable> when we do that last staging, via stage() (*explicitly*), it's because we don't want to be unstaged ...
<elliottcable> ... because the *implicit* stagings, like `infrastructure affix() (locals)`, *do* unstage us.
<elliottcable> So, basically, the back-and-forth coproduction between ourselves and the `affix` routine, is synchronous.
<elliottcable> that is beacause those implicit justapoxitions (like juxtaposing `(locals)` against it), result in us being unstaged; where we then “wait”, and are later staged again by affix() when it has some more data for us.
<elliottcable> with me so far?
<judofyr> yes
<elliottcable> this pattern is what we call “coproductive argumentation”.
<elliottcable> coproductively argumented routines, like most of those aliens provided by the system (affix, charge, stage ... all being examples you've seen),
<elliottcable> expect to *first* be staged with *you* (the ‘caller’)
<elliottcable> which is what those two empty parenthesis do:
<elliottcable> `affix()` is the first implicit-staging happening, and is equivalent to:
<elliottcable> affix( arguments.caller ) in JavaScript
<elliottcable> since it's an *implicit* staging; as I mentioned earlier, this involves unstaging *us*, the caller,
<elliottcable> so the very first thing a coproductively-argumented routine is going to do, is take the value it just got, and stage it again, *with itself*. Which resumes us, with them.
<elliottcable> Still with me?
<judofyr> yes
<elliottcable> after that, it can consume as many arguments as it may be specified as needing, each time re-staging us, the caller, which it now has a handle on, when it's ready for its next argument
<elliottcable> `affix() (something) (something.else)`a
<judofyr> I'm more confused to what happens if the thing *doesn't* unstage us
<elliottcable> *it* never unstages us.
<elliottcable> we unstage *ourselves* when we use the implicit form.
<judofyr> right
<elliottcable> so, re-phrase your question if you're still confused?
<judofyr> but it's possible for us to invoke something without unstaging?
<elliottcable> yep!
<judofyr> s/it's possible/is it possible/
<elliottcable> for instance, via the stage() alien
<elliottcable> the one we've been staring at.
<elliottcable> let's use some psuedo-syntax.
<elliottcable> a = affix
<elliottcable> b = a ()
<elliottcable> c = b (locals)
<elliottcable> d = stage[c]
<elliottcable> the ()'s in that syntax are implicit-stagings, and then the last one is explicit; thus, after the line containing d=, we can continue doing other things.
<elliottcable> that's exactly what happens in the linked code.
<elliottcable> with me?
<elliottcable> however, there's no *assignment* at this level of abstraction (we haven't implemented it yet!), so, Lisp-like, we just toss it inside the parenthesis.
<judofyr> what happened with empty() ?
<elliottcable> empty() just generates a new, meaningless object.
<elliottcable> think of it as `new Object()`a
<judofyr> right, but won't have to stage c with that object?
<elliottcable> except our core object is an array, not a dictionary, so in this case, it's being used more like `new Array()`
<elliottcable> yep!
<elliottcable> which is why the second argument to stage() is that object
<elliottcable> so:
<elliottcable> the “return value” from `infrastructure affix() (locals)`
<elliottcable> is the *execution* for affix
<elliottcable> because it hasn't consumed all of its arguments yet, and it just returned itself to us one last time, expecting its last argument
<elliottcable> that execution, is the *first* argument to stage()
<elliottcable> then, on the next line, an empty() is the *second* argument to stage()
<judofyr> well, I still don't see how this ensures that the first `infrastructure execution stage()` (which does affix) is executed before the second (which does length())
<elliottcable> I just literally said “... oh.”
<elliottcable> out loud.
<elliottcable> and made that sort-of-sick face that makes me look like an idiot.
<judofyr> or, what happens after we've called stage() with two arguments?
<elliottcable> Barring ownership considerations, stagings are guaranteed to process in-order.
<elliottcable> but, you're right, that may very-well be a race condition on multiple cores.
<elliottcable> I don't have a working multi-threaded Paws yet to test that out. /=
<elliottcable> it'd be easy to work around that with ownership, though; you'd just need a hell of a lot more boilerplate code up there to set-up the ownership constraints around that call. hm.
<elliottcable> I'm going to create an issue for that.
<elliottcable> to remind me to look into it in-depth in the framework of my planned semantics. You may have sussed out a substantial bug.
<elliottcable> Anyway. Ignore it for the moment. Any further questions?
<judofyr> elliottcable: so the next code (line 12-19) will push two two values to the object we just allocated: the label "‡" and the existing infra-object
<elliottcable> yepyep
<judofyr> s/two two/two/
<elliottcable> basically building an assignment-pair out of them
<judofyr> which somehow dictates the scoping rules further down the file
<elliottcable> (the 10th example is implementing actual assignment as a useful, call-able routine)
<judofyr> question: what makes Paws suddenly look into the new object when it tries to lookup "‡"
<judofyr> ?
<judofyr> is it because it's inside locals?
<purr\Paws> [Issues] elliottcable opened issue #4: Race-condition in examples/09? https://github.com/Paws/Issues/issues/4
<elliottcable> 'k, time to discuss the actual semantics of juxtaposition
<elliottcable> `<foo> bar`
<elliottcable> (to be clear: I'm not talking about `foo bar`, which is *two* juxtapositions, the first of which is special; I'll get to that in a moment. I'm talking about the juxtaposition of `bar` against a given value that we already have in-hand, which we'll call <foo>.)
<elliottcable> if <foo> is an `execution`, you already understand what happwns:
<elliottcable> the call-pattern abstraction.
<elliottcable> specifically, exactly three things happen, in order: <foo>, the execution, is clone()'d. The clone thereof, is stage()'d. Then we, ourselves, are unstage()'d.
<elliottcable> `stage(clone()); unstage()` ... “call-pattern.”
<elliottcable> More genreally speaking, that is a “default juxaposition handler.”
<elliottcable> something that happens when a value, like <foo>, is juxtaposed *against*.
<elliottcable> the default juxtaposition handler for executions is the call-pattern algorithm;
<elliottcable> and the default juxtaposition handler (jux-handler) for *things*, is the *find* algorithm.
<elliottcable> luckily for me, I don't have to explain find to you, because I just wrote down an implementation :)
<elliottcable> or, if reading unit-tests is more your thing,
<elliottcable> basically:
<elliottcable> treating each object in the `thing` as a “pair” (that is, another `thing`, the first element of which is a `label`, and the second of which is any other value),
<elliottcable> it iterates over them in reverse-order, pulling out ones where that `label` compares truthfully with the key we're find()'ing.
<elliottcable> Thus: find() returns the *value* from the *last* pair in the thing, having a key matching the key-being-searched-for.
<elliottcable> simple enough?
<judofyr> yes
<elliottcable> bringing it back to your original question:
<elliottcable> we laboriously created a pair that looks like this: (‡, <infra>)
<elliottcable> so that when it find()'s through <locals>, which looks like (..., (‡, <infra>)), it returns <infra>.
<elliottcable> now, back to discussing juxtapositions.
<elliottcable> the *first* label in an expression is implicitly juxtaposed against `locals`, which we'll call $ for a moment
<elliottcable> so `foo bar` is $['foo']['bar']
<elliottcable> in many of the later lines in the file, that's $['‡']['affix']... or similar
<elliottcable> which means it looks in $, which looks like [ ... , ['‡', <infra>] ], and finds <infra>
<elliottcable> reducing that line to <infra>['affix']
<elliottcable> all clear?
<judofyr> yes
<elliottcable> coo coo
<elliottcable> next question? :3
<judofyr> block
<judofyr> or whatever that is
* elliottcable nods
<elliottcable> that's an *execution literal*
<elliottcable> which, since an execution is a continuation, means a continuation literal
<elliottcable> in fact, now's a good time to use the interesting comparison that inimino came up with:
<elliottcable> an execution, more than anything else, is likenable to a *first-class program counter.*
<elliottcable> as I used to call it a long time ago, a “pointer into the AST.”
<elliottcable> so, the *value* of that literal, is a pointer into the very first word of that literal.
<elliottcable> or what we call a “pristine” execution. One that's never been staged, never been advanced.
<elliottcable> if you type this into the µpaws.js parser, you'll see that for yourself:
<elliottcable> crap. There's no easy, visual way to advance the parser. Lemme write a quick hack.
<elliottcable> judofyr ⑊ http://ell.io/idrom
<elliottcable> so, the {} itself right-off-the-bat, points to the *start* of it (or, as this implementation looks at it, it points at the whole thing)
<elliottcable> in the example you linked to, we're passing a pristine execution (that when eventually staged, will simply print “success!”), *as a value* (as a continuation) to affix
<elliottcable> clear at all?
<elliottcable> forgive me if I over-explain everything. I've seen too many people make bad assumptions and get completely confused about Paws.
<judofyr> yes
<judofyr> next part looks simple enough: https://github.com/elliottcable/muPaws.js/blob/Master/examples/09.a.routine.paws#L33-L44. parameters = [self, my.routine, locals]
<elliottcable> yepyep
<elliottcable> that's directly returning the “default jux-handler” *as a routine*.
<elliottcable> “receiver” is another word for “jux-handler”
<elliottcable> which I'm pretty sure I decided to switch to
<elliottcable> but I still use years-old jargon when I'm trying to teach Paws, because it's pretty ingrained in me >,>
<judofyr> ah
<elliottcable> so, receiver is a function, that given an object, returns that object's handler as a routine
<elliottcable> `‡ receiver() (‡ empty())` thus being the equivalent of
<judofyr> so `‡ receiver() (‡ empty())` will return the default jux-handler on Things?
<elliottcable> `{}.method_missing`
<elliottcable> or something
<elliottcable> idk hard to mix JavaScript and Ruby to show you what I mean
<elliottcable> yes. you got it.
<elliottcable> basically, we're grabbing 'find'
<elliottcable> because it's not exposed anywhere.
<judofyr> and then currying with (parameters)
<elliottcable> yep!
<judofyr> thus returning a execution which takes 1 argument which will lookup in the `parameters` Thing we just made
<elliottcable> now, knowledge you need here, and don't have:
<elliottcable> a *receiver* has to follow a particular pattern.
<elliottcable> It *does not* use coproductive-argumentation.
<elliottcable> for reasons that should be obvious.
<elliottcable> instead, it takes a *list* of arguments, as its only argument.
<elliottcable> that list is standard, because it's what is provided by the implementation to any custom, libside, receivers
<elliottcable> they're staged with 1. the *caller*-execution, 2. the left-side (value), and 3. the right-side (‘key’)
<elliottcable> so, up at #L42-L44, we're putting together that list of parameters;
<elliottcable> which, as you said earlier, is self, my.routine, locals;
<elliottcable> and then we're argumenting the “find” algorithm with that, priming it for easy realization
<elliottcable> with me?
<judofyr> yes
<elliottcable> the rest should be fairly obvious, it seems to me
<elliottcable> we proceed to expose the “implementation” bag within the function-body, by storing it on the locals; then we can call the function, and it will operate as intended.
<elliottcable> honestly, I haven't the slightest fucking clue what's going on with the receiver(parameters) thing
<elliottcable> I can't figure out for the life of me why I'm doing that, but I'm sure there's a reason
<elliottcable> I take the same approach in the (much *much* more complicated) implement.assignment example
<judofyr> that whole receiver() business made my head dizzy
<judofyr> what is my.locals?
<elliottcable> Dude, if that's the only thing that makes your head dizzy about that file, then you're wayyyyy smarter than me
<elliottcable> my.locals is the locals *of my.routine*
<elliottcable> look up at the routine literal again:
<elliottcable> it does: locals['implementation']['util']...
<elliottcable> which means locals['implementation'] needs to exist.
<elliottcable> The only place where, right out of the gate, `implementation` is *defined*, is on the locals of the root-level execution.
<elliottcable> To use it in *sub*-routines, we need to add it to their locals from the outside.
<elliottcable> yet more bootstrapping. get it?
<judofyr> where's the connection from my.routine to my.locals?
<elliottcable> gives us parameters = [<me>, my.routine, "locals"]
<judofyr> I'm going have nightmares where everything I read looks like "‡ execution stage"
<elliottcable> LOL
<purr> lol
<elliottcable> then,
<elliottcable> #L54,
<elliottcable> okay, 46-46 is creating a new pair on the end of our root-locals, just like we've done a billion times elsewhere,
<judofyr> I thought I understood L54, but no. `receiver() (‡ empty())` returns the receiver of Thing. that is an execution that requires two arguments (rv, here). correct?
<elliottcable> 50-51 is setting the key of that pair to "my.locals",
<elliottcable> and 52-54 is setting the *value* of that pair, to the result of receiver.apply(parameters)
<elliottcable> which means, given our parameters,
<elliottcable> setting that value to the result of my_routine.find('locals')
<elliottcable> oh duhhhhh
<elliottcable> which reminds me *why* we do all that.
<elliottcable> basically:
<elliottcable> here.
<elliottcable> really great way to explain it.
<elliottcable> Function.toString() is gonna return some function-y shit. It's overridden.
<elliottcable> But in this case, we want the *objecty-stringy-ness* of our function.
<elliottcable> so we do Object.prototype.toString.apply(our_function).
<elliottcable> common JavaScript trick. yeah?
<elliottcable> this is the Paws equivalent of *that*.
<elliottcable> We're grabbing the *object* receiver (which preforms a find), and effectively `apply()`ing it to our *execution*.
<elliottcable> Because if we just juxtaposed against our execution, since it's an execution, it would *stage* it. Not at all what we want.
<elliottcable> so, line 54,
<elliottcable> is basically:
<elliottcable> Thing.prototype.receiver.apply(my_routine)
<elliottcable> 46..54, all together, is
<elliottcable> locals.affix( ['my_locals', Thing.receiver.apply(my_routine, 'locals')] )
<elliottcable> storing the result of looking-up 'locals' on my_routine, in my_locals
<judofyr> but didn't Thing.receiver take two arguments (one list and one "here"?)
<elliottcable> three
<judofyr> oh wait
<elliottcable> here, a thing, and a key
<elliottcable> looks up key on the thing
<judofyr> I'm mixing up the coproducer thingie
<elliottcable> yep, no coproduction going on here
<elliottcable> except for the routine affix() and charge() and such
<judofyr> so every execution literal/AST has its own "locals"?
<elliottcable> yep
<elliottcable> there's absolutely no scoping *built in* at this level of abstraction.
<elliottcable> if you want to “expose” something to a sub-routine, lexically or otherwise, you have to explicitly grab their locals and copy the data you want over.
<elliottcable> that's all abstracted away quickly.
<judofyr> why wouldn't just `my.routine locals` work again?
<elliottcable> because that'd *call* my.routine
<elliottcable> remember, although you're used to the looks of it from other languages, parentheses *aren't* a call.
<elliottcable> they're indirection. irrelevant to the call.
<judofyr> oh right
<elliottcable> for instance, the routine ITSELF
<elliottcable> implementation util print Success!
<elliottcable> ...['util']['print']
<elliottcable> results in an execution
<elliottcable> so the next juxtaposition uses the *execution*-receiver
<elliottcable> ...['util']['print']('Success!')
<judofyr> I get your example of Function.toString() now
* elliottcable nods
<judofyr> Execution is_a Thing
<judofyr> but you want Thing's receive, not Execution's
<elliottcable> yep!
<elliottcable> yepyepyep
<elliottcable> this is all hax.
<elliottcable> probably wouldn't be necessary.
<judofyr> you can only execute this routine once though
<elliottcable> easy enough to expose find().
<judofyr> I'm confused again: does calling my.route automatically clone it, or is that something you have to do inside the routine (when implementing a function call with coproduction)?
<elliottcable> calling it *by juxtaposition* clones it.
<elliottcable> but any other methodology, you'd have to clone it if you wanted it cloned.
<elliottcable> basically, jux-powered coproductive-argumentation (JPCA!) leaves behind a series of one-off clones that are never used again.
<judofyr> what happens to the `locals` if you clone it. is it shared?
<elliottcable> currently, shared.
<elliottcable> that's actually a thing that's changing once I can copy the implementation over.
<elliottcable> One of the big up-in-the-air design elements is how to *fork* the locals, along with forks of execution-path.
<elliottcable> if we clone something twice, and resume it with different arguments, how do we “fork” the locals?
<elliottcable> the goal being to have some sort of inherently-forking data-structure instead of a simple list.
<judofyr> yeah, I was wondering how to deal with recursive function calls
<judofyr> (where you want to set `locals` to different values in the same "stack frame")
* elliottcable nods
<elliottcable> gotcha
<elliottcable> generally speaking, you clone it *first*, and then do your thing, and then call the clone
<elliottcable> but as you mentioned that leaves questions about locals
<elliottcable> another item for the new Issues repository :D
<elliottcable> I'm pretty sure what I'd decided to do for the immediate future, is shallow-copy the locals object *itself*.
<elliottcable> Allowing for shadowing “earlier” definitions with “later” ones, but allowing the sharing of data at deeper levels of depth.
<elliottcable> Very naïve, but puts off dealing with the problem.
<elliottcable> Needs more thought. (=
<judofyr> is the plan that the parser of the "proper" language will be implemented on top of this? so calling "foo.bar(123)" still uses the jux system of cPaws.js?
<elliottcable> neither
<judofyr> or, more likely: "foo bar(123)"
<elliottcable> there will never be another “parser.” Paws isn't meant to be parsed.
<elliottcable> Paws programs are *shared* as something like bytecode, or a binary;
<elliottcable> more accurately, a frozen, mostly-binary, data-space representation.
<elliottcable> Those representations are *built up*, originally, obviously, from some sort of code; but that code is not intended to be standardized, nor is it intended to be universally-shared.
<elliottcable> cPaws is only a bootstrapping language.
<elliottcable> Think of it a little bit like this:
<elliottcable> You know RPython? Or that restricted Ruby subset the RubySpec project uses?
<elliottcable> that's a bit like cPaws.
<judofyr> (restricted Python subset that PyPy uses, yes)
<elliottcable> *but*, there's not any one standard “superset”, like there is fully-Ruby or full-Python;
<elliottcable> instead, there's an infinitude of possible languages, built out on top of cPaws.
<elliottcable> none of which are intended to be syntax/code-loading compatible.
<elliottcable> Instead, they are *run* by whatever handles them, and they gradually result in what is called a Unit
<elliottcable> and then, at some point, when the construction is “finished” for a given value of finished, that program-state can be frozen: a frozen Unit.
<elliottcable> this is all very tightly tied into the distribution mechanic.
<elliottcable> Operations are intended to change the program-data-space (what we call the “data graph”) in a particular way; and those changes can progress across implementation boundaries
<judofyr> but must these languages on top of Paws be parseable/runnable by cPaws, or could you create a parser and "compile" to cPaws?
<elliottcable> at any point, that entire graph can be frozen and serialized; or a graph can be loaded from a serialization.
<elliottcable> not at all.
<elliottcable> first off, you'll never *compile* to cPaws.
<elliottcable> second, there's two ways to write code that *isn't* raw-cPaws, and result in Paws-stuff-happening.
<elliottcable> One, is the obvious “write a new parser for your own syntax/whatever/system, and ensure it follows Paws semantics and federates via the Paws distribution protocol.”
<elliottcable> only *my* Paws implementations will be necessarily using cPaws, as well as the specifications, of course.
<elliottcable> But the far more interesting one, and the one I spend most of my time thinking about ... the one *my* implementations are designed for ... is the “IPP.”
<elliottcable> or P₃.
<elliottcable> the Paws PreProcessor, or more generally, an “Interpretative Pre-Processor.”
<elliottcable> It's one of my more insane ideas, if I do say so myself. I get a lot of incredulous responses when I try to explain it.
<elliottcable> Basically, I was dead-set on Paws' Units being *compilable*, for a given value of the term; that is, at runtime, I don't want the AST, executions' code-data bodies, being modifiable.
<elliottcable> But, despite that, I wanted better-than-lisp-y self-modification abilities.
<elliottcable> So, an IPP-powered Paws environment progresses through two, completely unrelated, stages of execution:
<elliottcable> The first, self-modification stage, *all* external-world-accessing/modifying functionality is black-holed. Disabled. Inaccessible. If you try to access it, basically, nothing happens.
<elliottcable> but, instead, a special API allowing access-to and modification-of the AST and source-code itself, is temporarily *enabled*.
<elliottcable> During this process, every single time that API is accessed, the code is re-run.
<elliottcable> Finally, when the code preforms a full realization without any new access to that API, it's considered “fully preprocessed,” that preprocessing API is disabled, external-access is again allowed, and *true* interpretation of the code is allowed to begin.
<elliottcable> This means that the source-code can progressively self-modify, even modifying later parts that self-modify, until it's “constructed” itself into a final, stable state.
<judofyr> yeah, I think I've heard about this before
<elliottcable> Yes, that sounds slow as all ungodly hell (running the entire setup process possibly hundreds, thousands of times);
<elliottcable> but it's not any different than a compilation phase or similar: once it's done, you won't be *running* it again, because you'll be storing your program as a frozen Unit after the first time you do that.
<elliottcable> So, it's a bit like self-compiling code. It compiles itself once, and then it's no longer in a source-code state.
<elliottcable> So:
<elliottcable> Since, in the self-modifying state, it's still a full programming language (not some half-arsed shit seperated like M4 or even worse the CPP),
<elliottcable> you can have libraries that *also* define *syntax*.
<elliottcable> that is, define ways to process syntax into a slightly-less-abstracted form ... which can then, itself, be processed ... etcetcetc.
<elliottcable> in this way, syntax is meant to be built, just like the semantics, from-the-ground-up, bootstrapped from within the language.
<elliottcable> And, more importantly,
<elliottcable> *also* just like the semantics, it's meant to be defined entirely by libraries / frameworks. Not by the language designer, myself.
<judofyr> I like it
<elliottcable> There's an entire plan in my head built ontop of these foundational pieces
<elliottcable> what I've described thus far is “the Nucleus.”
<elliottcable> It's basically buttfucking unusable.
<elliottcable> You just spent several hours trying to decipher about 100 lines of Nucleus-level code.
<elliottcable> there's “Paws' Core” on top of that, which is an absolutely minimal set of abstractions to “fill out” and “fatten up” the Nucleus; they're meant to be a bare-minimum shared-standard of sanity.
<elliottcable> Writing code at the Core-supported level of abstraction will still be difficult, but *doable*. Not mind-bendingly painful.
<elliottcable> Core includes basic shit like assignment, copying, iteration, etcetcetc.
<elliottcable> conspicuously, it will *not* include any form of inheritance, or object-orientation/object-abstraction. It will adhere as closely as possible to the spirit of Nucleus that I've already shown you a bit of.
<elliottcable> then, on top of Core, I intend for people to *create programming languages*
<elliottcable> one of which I, myself, have: “Paws' Fullness.”
<judofyr> and how many years until you're there? :D
<elliottcable> Fullness being a langauge developed on top of [Nucleus+Core], something with true object-orientation/inheritance, with all sorts of nice syntactic sugar and helpful stuff
<elliottcable> originally, the plan was seven years.
<elliottcable> unfortunately, I'm only about two years' into my schedule, and it's *been* about three and a half.
<elliottcable> I'm moving, ironically-not-surprisingly, slower-than-expected.
<elliottcable> But, I have high-hopes for garnering some support and attention soon. need to get a *cleaner*, contribute-to-able, working-example out the door;
<elliottcable> and I also need to start implementing some of the more *exciting* stuff, to get the attention and time of the smart people I value.
<elliottcable> I'm fairly certain I'll never keep devyn, or micahjohnston, or alexgordon's attention *until* I have something concrete to show for, say, time-machines. or distribution.
<elliottcable> and to get those things, I need a clean codebase I can innovate on top of.
<elliottcable> I'd like to have that by the end of the summer, basically.
<judofyr> right now I really have no idea what to do with Paws: really terrible writing uPaws code, and I don't know enough about uPaws.js to contribute…
* elliottcable nods
<elliottcable> but you *could* contribute to Paws.js.
<elliottcable> I have a little more to do before I can start pointing you at un-done stuff; I need to port some more over from the clusterfuck-that-is-µpaws.js
<elliottcable> and I doubt I could talk anybody else into doing *that* task.
<elliottcable> it's too ugly and I'm the only one who knows what the hell's going on.
<elliottcable> but once it's ported over a little more, we've got obvious shit that can be worked on:
<judofyr> if you write some tests, I can implement stuff ;)
<elliottcable> I need the parser ported. Parsers are easy to understand, easy to implplement, and nicely-uncoupled from the rest of the code.
<elliottcable> I need the debugging code ported.
<elliottcable> Or, rather,
<elliottcable> I need *all* of the debugging-code thrown away and ignored; and I need *some* debugging code of some sort, written.
<elliottcable> sorry, er, debugging-output-code.
<elliottcable> Stuff for printing out a Thing in a pretty way to the terminal. Stuff for showing the state of an AST within an execution.
<elliottcable> There's extant, and quite-beautiful stuff in µpaws.js that you can *run* to show you the kind of output I'm talking about, but the code is the most spaghetti, tangled, bullshit mess I've ever written in my life.
<elliottcable> (Seriously. I've never written any code worse than µpaws.js; and there's no part of *it* that's worse than the D() code.)
<elliottcable> It's not even interesting. Just fucking confusing.
<elliottcable> Anyway.
<elliottcable> If you really want to contribute, we can talk about it more.
<elliottcable> But we've been talking for hours. If you're interested, but want to wait, why don't we schedule a time to dive into “showing you where to contribute?”
<elliottcable> unless you seriously have another five hours sitting infront of you, un-spoken-for, right now.
<elliottcable> :3
<judofyr> nah, right now I need to get some sleep
* elliottcable nods
<elliottcable> thought as much
<elliottcable> What're you doing tomorrow? It's a holiday 'round these parts, so I'll have the entire day free.
<elliottcable> We can sit down and work out how to work together.
<elliottcable> For whatever it's worth: you have no idea how much I appreciate the interest.
<elliottcable> getting tired of feeling like the Timecube guy, only possibly crazier.
<judofyr> 17:00 UTC (or maybe earlier) tomorrow
<elliottcable> judofyr ⑊ tweet at me, unless I'm already online in here. (=
<judofyr> will do
<judofyr> see ya
judofyr has quit [Remote host closed the connection]
<purr\Paws> [Issues] elliottcable opened issue #5: Oldie, but a goodie: forking-data-structure for locals https://github.com/Paws/Issues/issues/5
alexgordon has joined #elliottcable
<elliottcable> alexgordon!
<alexgordon> elliottcable4!
<elliottcable> I roped judofyr into helping on paws. I'm super-stoked.
<elliottcable> what client are you in, that it doesn't display colour-codes?
<alexgordon> it does
<alexgordon> but
<alexgordon> growl doesn't
<elliottcable> lol'd
<purr> lol
<elliottcable> DUEDDD
<elliottcable> sup.
<elliottcable> I'm like, tracking issues and shit. I feel like an adult programmer.
<alexgordon> uh oh
<elliottcable> I'm getting antsy, maybe I need to put some unicorns on it.
* alexgordon writes in notes: "subject is having delusions of maturity"
sharkbot has quit [Ping timeout: 245 seconds]
<elliottcable> alexgordon: wat.
<purr> beep.
<elliottcable> bbl, picking up depressed friend for sleepover.
<alexgordon> <+elliottcable> bbl, picking up
<elliottcable> probably end of my Internet-participation for the night, unless she gets über-boring.
<alexgordon> <+elliottcable> bbl, picking up for sleepover
<alexgordon> elliottcable: I hear depressed people love teh sex
sharkbot has joined #elliottcable
<devyn> sharkbot: who the fuck a' you
<elliottcable> lol alexgordon
<purr> lol
<elliottcable> devyn ⑊ that's audy's bot.
<elliottcable> also,
<elliottcable> ♪ Piano Sonata No. 3
<purr> elliottcable: “Sonata No. 3 in B minor, Op. 58: I. Allegro maestoso”, Frédéric Chopin: <http://tinysong.com/37oI>
<elliottcable> :D
<alexgordon> O
<elliottcable> you liek mah coeded?
<alexgordon> M
<alexgordon> G
<elliottcable> -song Kesha
<purr> elliottcable: “Die Young”, Kesha: <http://tinysong.com/17GmL>, “Blow”, Kesha: <http://tinysong.com/HFpb>, “Your Love Is My Drug”, Kesha: <http://tinysong.com/GnuU>
<alexgordon> NO WAY
<elliottcable> you're welcome.
<elliottcable> Unicode ♪ for a single, high-probability match song
<elliottcable> and -song for a selection of related shit <3
<alexgordon> ♪ Never Gonna Give You Up
<purr> alexgordon: “Never Gonna Give You Up”, Rick Astley: <http://tinysong.com/HHyt>
<alexgordon> :D
<elliottcable> you know you love me.
<alexgordon> ♪ Monads
<purr> alexgordon: “Spit Fire”, The Monads: <http://tinysong.com/AINh>
<alexgordon> this is ridiculously cool
* elliottcable laughs
<elliottcable> I design a massively-concurrent language that you can barely understand, but my song-script for the bot, you appreciate.
<elliottcable> alexgordon ⑊ You, my friend, are a man of simple tastes.
<elliottcable> <3
<alexgordon> understanding => appreciation
<elliottcable> ♪ Penis
<purr> elliottcable: “Penis Song”, Macklemore: <http://tinysong.com/xOCC>
<elliottcable> wat.
<elliottcable> MAKCLEMORE THAT I HAVEN'T HEARD.
<elliottcable> WITH “PENIS” IN THE NAME.
<elliottcable> THIS IS *DEFINITELY* THE BEST THING.
<elliottcable> ♪ Alex Gordon
<purr> elliottcable: “03. puerto rican cousins [prod. gordon voidwell and alex kestner]”, Das Racist: <http://tinysong.com/IOKr>
<elliottcable> also Das Racist.
<elliottcable> this is liking me today.
<elliottcable> -song Devyn
<purr> elliottcable: “Free Your Mind (The Voice Performance)”, Devyn DeLoera: <http://tinysong.com/1blhf>, “MetaSaxuation”, Devyn Edwards: <http://tinysong.com/w033>, “Who Could You Trust (feat. Devyn)”, PMD: <http://tinysong.com/1cqXi>
<elliottcable> -song Micah Johnston
<purr> elliottcable:
<elliottcable> aw >:
<elliottcable> -song Elliott Cable
<purr> elliottcable:
<elliottcable> double-aw >:
<elliottcable> -song purr
<purr> elliottcable: “Purr Like A Cat”, T. Mills: <http://tinysong.com/D57Z>, “Ghost”, The Dodoz: <http://tinysong.com/13y5h>, “Purr”, Sonic Youth: <http://tinysong.com/11Xq0>
<alexgordon> -song Alex Gordon
<purr> alexgordon: “03. puerto rican cousins [prod. gordon voidwell and alex kestner]”, Das Racist: <http://tinysong.com/IOKr>, “Song of Mor'du”, Patrick Doyle, Billy Connolly, Alex Norton, Carey Wilson, Scott Davies & Gordon Neville: <http://tinysong.com/1bZaT>, “Cutting Ferns/Alex Dan MacIsaac's/Brenda Stubbert's Reel/Mutt's Favorite Reel/Bernadette's Reel/Lady Gordon Of Gordonstown”, Jerry Holland: <http://tinysong.com/fw6K>
<elliottcable> Obviously the T. Mills song is purr's anthem.
<elliottcable> 'k. bbl. all dressed.
<elliottcable> -topic Puppy paws patter placidly through the pale passageways…
<purr> elliottcable: SyntaxError: Syntax is `s/expression/replacetext/gi`.
<alexgordon> elliottcable: have fun
<elliottcable> ffuh
elliottcable changed the topic of #elliottcable to: Puppy paws patter placidly through the pale passageways…
<alexgordon> -song Gonzalo Rubalcaba
<purr> alexgordon: “Besame Mucho”, Gonzalo Rubalcaba: <http://tinysong.com/yKD3>, “Oro”, Gonzalo Rubalcaba: <http://tinysong.com/11JwX>, “Silence”, Charlie Haden: <http://tinysong.com/exZ9>
<alexgordon> fuuu no headphones
<elliottcable> LOL
<purr> lol
<elliottcable> #alexgordonproblems.
<alexgordon> ikr
<elliottcable> I like you :3
<elliottcable> 'ta all
<alexgordon> ♪ Verona
<purr> alexgordon: “Verona”, Geographer: <http://tinysong.com/PLvg>
<alexgordon> no...
<alexgordon> yes, this is indeed not very good
<alexgordon> ♪ Everyday I Thank You
<purr> alexgordon: “Everyday (I Thank You)”, Pat Metheny: <http://tinysong.com/169Ry>
<micahjohnston> ♪ fuck
<purr> micahjohnston: “Fuck Tha World”, Lil Wayne: <http://tinysong.com/p1Td>
<micahjohnston> ♪ fuck
<purr> micahjohnston: “Fuck Tha World”, Lil Wayne: <http://tinysong.com/p1Td>
<micahjohnston> ♪ shit
<purr> micahjohnston: “Knock Knock”, Mac Miller: <http://tinysong.com/CltA>
<micahjohnston> ♪ paws
<purr> micahjohnston: “Dirty Paws”, Of Monsters and Men: <http://tinysong.com/LQzy>
<micahjohnston> ♪ sound
<purr> micahjohnston: “Black Hole Sun”, Soundgarden: <http://tinysong.com/gI0c>
<micahjohnston> this is sweet
<micahjohnston> elliottcable: the problem with not-returning is that you often want to know about completion
<micahjohnston> elliottcable: for instance you want to block on a print to print the next line
<alexgordon> micahjohnston!
<alexgordon> ♪ cunt
<purr> alexgordon: “Part Of Me (Jacques Lu Cunt's Thin White Duke Mixshow)”, Katy Perry: <http://tinysong.com/Z5Au>
<alexgordon> Jacques Lu Cunt?
<alexgordon> ♪ Rosbif
<purr> alexgordon: “Ne nous fâchons pas/Rosbif attack”, Bernard Gerard: <http://tinysong.com/16Lhc>
<alexgordon> ♪ Chiottes
<purr> alexgordon: “Avocat aux chiottes”, François Pérusse: <http://tinysong.com/Ngix>
<alexgordon> ♪ foutre
<purr> alexgordon: “Rien à foutre”, Sexy Sushi: <http://tinysong.com/ICr2>
<alexgordon> micahjohnston: are we arguing about callbacks?
<micahjohnston> alexgordon: yeah
<micahjohnston> well paws
<micahjohnston> so first-class continuations basically
<micahjohnston> and calling conventions in their presence
<alexgordon> micahjohnston: btw
<alexgordon> micahjohnston: HI
<alexgordon> how is mormonville?
<micahjohnston> alexgordon: still tiringly mormon
<micahjohnston> moving away to college in like 2-3 months though
<alexgordon> has the second orgasm of jesus arrived?
<micahjohnston> also i have lots of good friends who are not mormon too
<micahjohnston> yeah we're waiting on the third
<alexgordon> three's the charm
<alexgordon> micahjohnston: so you'll be able to watch like star wars and harry potter and backdoor sluts 9
<micahjohnston> lol
<purr> lol
<micahjohnston> yeah
<micahjohnston> i watch lots of movies at friends' houses now
<micahjohnston> haven't done a whole lot of drugs and stuff yet but
<alexgordon> hey now, there's four or perhaps five years of college ahead of you!
<alexgordon> micahjohnston: you've done paws haven't you?
<micahjohnston> alexgordon: well it's not as much of a social drug
<micahjohnston> you kind of just sit in your room on an irc with term and a text editor
<micahjohnston> sometimes it feels sad
<alexgordon> jacking in
<alexgordon> micahjohnston: so you're studying CS?