devyn changed the topic of #elliottcable to: yorickpeterse is undergroin
yorick has quit [Remote host closed the connection]
<whitequark> the fuck is this
<alexgordon> I miss cuttle
<cuttle> hi alexgordon
<alexgordon> YAY
<cuttle> haha
<alexgordon> cuttle: so I've been thinking about list slicing in fast languages
<alexgordon> you know how in python you can do stuff like
<alexgordon> xs[-1] for the last element
<alexgordon> xs[-2] for the second to last
<alexgordon> xs[:-1] for everything but the last element
<alexgordon> etc
<alexgordon> it's really neat and useful
<cuttle> yeah
<alexgordon> but, slow as fuck
<cuttle> but yeah
<alexgordon> no idea how to get something like xs[-1] to work in a compiled language
<whitequark> alexgordon: lolwhat?
<purr> lolwhat
<cuttle> compile down to library functions
<alexgordon> seems like you'd need two different syntaxes
<cuttle> and make a typeclass so that you can reimplement for different datatypes
<cuttle> for effiency and control
<alexgordon> one for "fast" indexing, and one for "slow" indexing
<cuttle> typeclass for sliceable or whatnot
<whitequark> alexgordon: ah, you mean the overhead spent for checking whether the index is lower than zero?
<alexgordon> whitequark: yeah
<whitequark> negligible
<whitequark> with branch prediction
<whitequark> you're overthinking it.
<alexgordon> eh but people practically expect list subscripting to be *(ptr + idx)
<whitequark> no ?
<cuttle> alexgordon: so I've decided on the producer name "glowcoil"
<whitequark> if your language is memory-safe, then it at least check bounds
<whitequark> *checks
<cuttle> alternative choice was coilnoise
<cuttle> what do you think?
<alexgordon> whitequark: ew
<whitequark> and memory-unsafe by default is... well, let's just not do this.
<alexgordon> C++ has operator[] for unsafe indexing, and .at() for safe indexing
<alexgordon> which sucks
<whitequark> I mean honestly, for that case where you really-need-uber-fast-indexing you can have unsafe { array.unsafe_get(shit) }
<alexgordon> maybe I AM overthinking this
<whitequark> now forget about that, it's not even relatively common
<whitequark> you are.
<alexgordon> maybe the answer is a rich library of functions and combinators
<alexgordon> map replaces 90% of the things that C++ programmers use [] for
<whitequark> yep
<whitequark> that's how you solve the constant bound checking.
<alexgordon> most of the time when I use [] in python it's to get the last element
<alexgordon> or to copy a list
<whitequark> an array*
<alexgordon> shuddup
<whitequark> regardless of how guido wants to call it, it's an array.
<whitequark> that man needs to check his NIH syndrome
<alexgordon> list is shorter
<alexgordon> list() vs array()
<whitequark> int is even shorter
<alexgordon> it's like one extra character
<whitequark> let's call them ints
<alexgordon> python logic: "string()" is too long, let's use "str()". THEN: "str()" is too xenophobic, let's use "unicode()". THEN "unicode()" is too long, let's use "str()"
<alexgordon> whitequark: it's kind of hard to balance safety with practicality
<whitequark> guido: "you don't need map, therefore let's make it awkward"
<alexgordon> heh
<whitequark> alexgordon: it's not. everything is safe by default. at this time, it's not a question.
<alexgordon> what about integer overflow!
<alexgordon> division by zero!
<whitequark> imo both should be checked
<alexgordon> it depends really
<alexgordon> in a game? no way
<alexgordon> in a CRUD server? sure
<whitequark> disagree
<whitequark> what's a game? say an RPG? of course you want to check for overflows and div/0
<alexgordon> I dunno, anything that does drawing can't use checked integers
<whitequark> and if you mean something that heavily uses 3D... that will use floating point won't it?
<alexgordon> not for loops and stuff
<whitequark> not even 3D, powerful 2D libraries like cairo use floats too.
<whitequark> loops. which loops?
<whitequark> iterating over a collection? doesn't apply here
<whitequark> when you have higher-order functions, you don't use bare loops all that much
<alexgordon> lots of drawing code does stuff like "while (x is onscreen) { draw something }"
<whitequark> still floats
<alexgordon> there might be a counter
<alexgordon> but anyway, it's just not really *necessary* in a game
<whitequark> perhaps, but it doesn't hurt.
<alexgordon> in a perfect world, any network code would be in a separate process, so it doesn't matter if the game process crashes
<alexgordon> haven't quite got to that reality yet though
<whitequark> are you interested in designing languages for perfect world? I sure not
eligrey has joined #elliottcable
<alexgordon> yeah I always design for a perfect world, usually when you're done the world has caught up ;)
<alexgordon> but anyway, you want to be able to turn checked integers off
<alexgordon> but that kind of precludes linked libraries
<whitequark> I don't think so
<whitequark> well, there's two ways. first, you can record the flags in the compiled object. you should do that anyway.
<whitequark> second, you probably shouldn't make that a global flag. enable that locally. no problem then.
<whitequark> don't forget there might be code relying on checked integers for correctness and/or security
<alexgordon> yeah but if your game can't use checked integers, you don't want your libraries to use them anyway
<eligrey> are there any pnp (for windows) usb 3 802.11ac adapters?
<alexgordon> eligrey: ur mom
<eligrey> what do you guys use for 802.11ac on desktops?
<whitequark> alexgordon: wat?
<eligrey> (and no my primary link for my desktop isnt wireless im not that crazy)
<whitequark> alexgordon: you don't make sense.
<whitequark> there's no reason the fact your codebase is a "game" should prevent it from using checked integers in its entirety.
<whitequark> I can see why you would want to avoid that on hot paths. most paths aren't hot.
<whitequark> that is, I agree with the general sentiment that you should be *able* to turn that off for hot paths, but I don't see why you must be able to turn that off globally.
<alexgordon> it's all fun and games until you have to drop down to C though
<alexgordon> this is why people use C++!
<whitequark> or perhaps because there's all sorts of libraries and C++ in general allows you to have realtime guarantees
<whitequark> whereas most managed runtimes prevent that outright.
<alexgordon> yeah well fuck managed runtimes :P
<alexgordon> managed runtimes are the reason why I have to write games in C++!
<whitequark> I wish I could burn things on people's foreheads. realtime isn't about "fast", it's about having a higher bound on the execution time.
<whitequark> granted you usually want it to be fast too, but that becomes less and less of an issue with years passing.
<alexgordon> well it's the object references that are the problem
<whitequark> the boundedness however only becomes worse. it's one thing to GC 128K of memory, and it's another one to GC 16GB of it!
<alexgordon> arbitrary mutable references, means a GC, means unpredictibility
<whitequark> there are realtime GC's around
<alexgordon> seems a bit like clean coal
<whitequark> the problem with them is that they're generally much slower :3
<whitequark> and often impose constraints of varying strictness
<whitequark> e.g. Lisp got off incredibly easy in that area because it only has cells, therefore there's no fragmentation
<whitequark> realistically you do have to worry about fragmentation and everything. I don't think you can truly write a modern game fully supporting hard realtime requirements, there's just too much to think about
<whitequark> you just make sure the most problematic places are taken care of, and build the rest so it won't break catastrophically
<alexgordon> games run the full gamut
<whitequark> hm?
<alexgordon> is that a mixed metaphor?
<whitequark> what do you mean?
<alexgordon> whitequark: angry birds vs call of duty
<alexgordon> angry birds has no problem using a GC
<whitequark> is that so?
<alexgordon> it's kind of not optional on android
<whitequark> I don't think they wrote their game in Java
<alexgordon> even minecraft uses a GC, I wouldn't say it works well however
<whitequark> pretty sure they did not, in fact
<alexgordon> does it not run on android?
<whitequark> you do realize android specifically supports native binaries for writing games?
<alexgordon> nope
<whitequark> well, it does
<whitequark> it gives you a GL context and an input context and nothing more really
<alexgordon> when I looked into that, I was told it's impossible -_-
<whitequark> so the only thing you can write with that is a game
<whitequark> note how most games don't include native UI. now you know why: you can't interact with Javaland from native very well
<whitequark> and the UI is all written in Java
<whitequark> find whomever told you that, and tell them they're a moron.
<alexgordon> LOL
<purr> LOL
<alexgordon> well anyway, minecraft uses a GC
<alexgordon> I forgot what we were arguing about
<whitequark> managed runtimes
<alexgordon> ah yes, nuke them
<whitequark> minecraft experiences some hefty GC pauses
<alexgordon> minecraft turns my PC into a heater
<alexgordon> like no other game
<whitequark> but JRE was never really written for games, keep that in mind
<whitequark> it's written for noninteractive, high-throughput servers
<alexgordon> I guess I just don't get the attraction of "managed runtimes"
<whitequark> not goddamn physics engines
<alexgordon> interpreted scripting languages like Python have charm
<whitequark> well, closures don't work well with manual memory management
<alexgordon> as long as you're not using say... numpy... they very useful for casual scripting
<alexgordon> whitequark: that's possibly true, but most uses of closures are contrived
<whitequark> lolwhat?
<purr> lolwhat
<whitequark> we were just discussing map like five minutes before
<alexgordon> nah I mean REAL closures
<whitequark> usefulness of higher-order functions without closures is... rather limited
<alexgordon> not simply lambdas
<whitequark> same thing
<alexgordon> not really, lambdas don't need fancy memory management
<alexgordon> it's just a function pointer
<whitequark> it's a procedure then
<alexgordon> it's when you start closing variables in the enclosing scope that things get complicated
<alexgordon> *over
<whitequark> as I've said, passing procedures to higher-order functions is rather useless
<alexgordon> depends on the language
<whitequark> not at all
<whitequark> why would it?
<alexgordon> in haskell most "function values" are partial application
<whitequark> so, currying. that still requires closures
<alexgordon> in objc you have stuff like GCD where a closure gets copied and stored in a queue
<alexgordon> yes but the memory management ramifications are different
<whitequark> how?
<alexgordon> like I said, if a closure has no state attached, then it's just a function pointer
<alexgordon> an int
<alexgordon> there's no memory to manage
<alexgordon> you don't need a GC for passing ints around!
<whitequark> (+) 10 creates an object
<whitequark> allocates memory for it somewhere. gotta free that.
<alexgordon> it does because haskell is designed that way, but there's no reason why it should
<whitequark> curried functions are completely equivalent to closures
<alexgordon> (+) 10 is just int __plus10(int x) { return x + 10; }
<whitequark> yes
<whitequark> (+) n is what ?
<alexgordon> more difficult
<alexgordon> :P
<whitequark> *facedesk*
<alexgordon> although if n is an int, then it's just struct { int n; int(*__func)(int); }
<whitequark> it's a closure, yay.
<alexgordon> yes but the easy sort
<alexgordon> __block int x = 1; dispatch_sync(^{ x = 2; });
<alexgordon> in objc
<whitequark> if you want, you can represent all mutability via cells
<alexgordon> I'm not exactly sure what that code gives in fact o_o
<whitequark> this way, even if the captured environment is a copy, you preserve the behavior
<alexgordon> is it 1 or 2! it's like schrodinger's cat
<whitequark> I believe it's 1
<whitequark> but not sure
<alexgordon> it's definitely 1 if you do dispatch_async
<alexgordon> depends on whether the block is copied
<alexgordon> by dispatch_sync
<whitequark> ah, no, __block makes it visible outside
<whitequark> so 2
<alexgordon> oh right I'm getting muddled
<alexgordon> if the block is copied, it stores a pointer to the variable
<alexgordon> eh mutability sucks :P
<whitequark> yeah, when you can take pointers to memory on stack, you're in a world of pain
<alexgordon> but somehow not as painful as rust's swearing !@$~
<whitequark> java solves that by disallowing it, but it's still in a world of pain because slow
<whitequark> hm?
<alexgordon> rust tries to solve the problem with sigils, to hilarious effect
<whitequark> no, it solves the problem with types
<whitequark> sigils are merely manifestation of them
<alexgordon> anyway, I have no solution for this either
<whitequark> a managed runtime :p
<alexgordon> it's tremendously convenient to be able to modify variables inside a closure
<alexgordon> but it also creates the possibility of weird dangling pointer pain
<whitequark> naw, it's not related to mutability
<whitequark> if everything is immutable, you technically could make a copy to put it into a closure
<whitequark> but you probably won't want to do that for big objects
<alexgordon> there's mutable objects and mutable variables
<whitequark> same thing
<alexgordon> ehhh
<whitequark> think of mutable variables as immutable variables holding mutable cells
<alexgordon> an int is not mutable, it's just a damn int
<whitequark> this both simplifies the model and is more correct
<alexgordon> but the variable that contains it can be mutable...
<alexgordon> on the other hand, an array can be mutable, a tuple is never so
<whitequark> see above: it's a convenient representation which simplifies the model
<whitequark> and is equivalent to what's happening in reality
<whitequark> so basically, your problem is that you need to ensure that the closure won't outlive a transitive set of objects it references
<alexgordon> right
<alexgordon> most of the time a closure never escapes
<whitequark> yup. rust catches such closures with the type system
<alexgordon> at tremendous cost though
<alexgordon> human cost
<whitequark> I think most of it is just the language being immature
<alexgordon> I hope so
<devyn> whitequark: interesting cartoon, heh
<whitequark> I disagree, the type system itself is sound
<whitequark> devyn: I watched it in my childhood, it's really nice
<whitequark> turns out they have an official english dub
<whitequark> a pretty good one at that
<alexgordon> it may well be sound, but it manages to be less approachable than haskell
<alexgordon> there must be a less horrible way of handling escaping closures
<whitequark> both haskell and rust suck at the interface to their type systems
<whitequark> rust really requires you to do a lot of things it could figure out itself and/or have sane defaults for
<whitequark> and that list of things shrinks continuously
<alexgordon> perhaps we can take a leaf out of objc's book
<alexgordon> objc has the concept of copying a closure
<alexgordon> used to have to do that manually, now ARC does it
<whitequark> objc is not memory-safe though
<alexgordon> it's memory safe if you tread on eggshells
<alexgordon> ;)
<alexgordon> -nope @ devyn
<whitequark> alexgordon: which means it's not
<whitequark> encouraging people to use memory-unsafe languages is like encouraging people to write their own crypto
<whitequark> with similarly disastrous results
* alexgordon needs sleep
<alexgordon> lifetime annotations is such an obvious solution, from a proglang designer point of view
<alexgordon> it's a shame it just *sucks*
<whitequark> it's still not memory-safe though
<whitequark> if you can verify it, you can infer it
<alexgordon> another problem is that it becomes part of the API
<alexgordon> if you have different types of references
<whitequark> that's a problem with anything that doesn't use a GC globally
<alexgordon> I love that in C++ there's this concept of "const references" which *are* memory safe (as long as you don't do stupid shit) and ridiculously easy to use
<alexgordon> but I do agree that that kind of thing can and should be inferred
<whitequark> you should stop talking about memory safety when there isn't
<whitequark> const_cast etc
<alexgordon> that counts as stupid shit ;)
<alexgordon> for the most part, if you use a const reference, it acts like the thing it represents, except that it's a pointer! the compiler copies if it needs to. everything is good
<whitequark> yay, C++ discovers immutability
<alexgordon> *exactly*
<alexgordon> and without runtime cost
<alexgordon> COUGH HASKELL COUGH
<alexgordon> const references remind me of generators in python, how slick they are
<alexgordon> I want more of that sort of thing in programming languages. less runtime heroics
* alexgordon has lost the ability to talk about technical subjects
* alexgordon is now on a happy rant
<devyn> alexgordon: omg stargate
<whitequark> what
<devyn> stargate
<alexgordon> we should add that to purr
<alexgordon> -wacko @ devyn
<purr> devyn: Learned `wacko`.
<alexgordon> -wacko @ devyn
<devyn> -learn wacko =~ s/\?\d+$//
<alexgordon> rust makes me seasick
<alexgordon> too much mental workload
<devyn> I've never actually given it a proper shot because the sigils totally turned me off
<devyn> the rest of the syntax is quite nice
<devyn> and then that
<devyn> is just *barf*
<devyn> yeah, right
alexgordon has quit [Quit: My iMac has gone to sleep. ZZZzzz…]
<whitequark> OOOOH
<whitequark> "Beavers eat wood."
<whitequark> so THIS is why it's a slang word for vagina
<whitequark> that evaded me for years.
<whitequark> I think I'm metaphorically impaired.
eligrey has quit [Quit: Leaving]
<whitequark> second one: Was HIV created by the United States Government?
<whitequark> No, AIDS was not created by the United States Government.
<whitequark> -_
<purr> whitequark: undefined
<whitequark> purr: what
<whitequark> -_()
<devyn> haha weird
<devyn> -factoid _
<purr> devyn: Popularity: 1, last changed by: <unknown>, <unknown time> ago
<devyn> lol someone added it intentionally whitequark
<purr> lol
<devyn> a long
<devyn> time ago
<devyn> since there's no data
<devyn> idk why
<devyn> hmm
<devyn> this.factoids.length
<devyn> this
<purr> devyn: {__commands: {-: {callback: function (context, loved) { this.love(context, context.sender.name, loved.trim(), -1); }, options: {allow_intentions: false, help: 'No help for `-`', hidden: false}}, 34: {callback: function (context, text){ if (!this.isDick(context)) return; rule34(context, text.split(/\s*,\s*/), function(link){ context.channel.send_reply(context.intent, "Here. "+link, {color: true});
<devyn> this.factiods
<devyn> this.factoids
<purr> devyn: {changed: false, db: {changed: false, file: '/srv/irc/purr/data/purr-factoids.json', instantwrite: false, loaded: true, object: {factoids: {green: {modified_by: …, popularity: …, timestamp: …, value: …}, green: {alias: …}, red: {modified_by: …, popularity: …, timestamp: …, value: …}, !: {modified_by: …, popularity: …, timestamp: …, value: …}, !!: {alias: …}, !!!: {alias: …}, !!!!!: {alias:
<whitequark> how the fuck does it recognize commands
<whitequark> -!!!!!
<purr> whitequark: ikr!!
<whitequark> -!!!!
<whitequark> -!!!
<purr> whitequark: ikr!!
<whitequark> -!!
<purr> whitequark: ikr!!
<whitequark> -!
<purr> whitequark: ikr!!
<whitequark> lol
<whitequark> -learn _ = undefined is not a function
<purr> whitequark: Learned `_`.
<whitequark> -_
<purr> whitequark: undefined
<whitequark> um
<devyn> this.factoids.db.object._
<purr> devyn: {factoids: {green: {modified_by: 'ec', popularity: 1, timestamp: '15 322 ſ 244 153', value: 'yes ... master ... whatever you say ... master ...'}, green: {alias: '\u00033green'}, red: {modified_by: 'devyn', popularity: 1, timestamp: '15 322 ſ 245 791', value: 'invalid access code. access denied.'}, !: {modified_by: '<unknown>', popularity: 100, timestamp: '16 004 ſ 589 084', value: 'ikr!!'
<devyn> what the
<devyn> this.factoids.db.object.factoids
<purr> devyn: {green: {modified_by: 'ec', popularity: 1, timestamp: '15 322 ſ 244 153', value: 'yes ... master ... whatever you say ... master ...'}, green: {alias: '\u00033green'}, red: {modified_by: 'devyn', popularity: 1, timestamp: '15 322 ſ 245 791', value: 'invalid access code. access denied.'}, !: {modified_by: '<unknown>', popularity: 100, timestamp: '16 004 ſ 589 084', value: 'ikr!!'}, !!: {ali
<devyn> this.factoids.db.object.factoids._
<purr> devyn: {green: {modified_by: 'ec', popularity: 1, timestamp: '15 322 ſ 244 153', value: 'yes ... master ... whatever you say ... master ...'}, green: {alias: '\u00033green'}, red: {modified_by: 'devyn', popularity: 1, timestamp: '15 322 ſ 245 791', value: 'invalid access code. access denied.'}, !: {modified_by: '<unknown>', popularity: 100, timestamp: '16 004 ſ 589 084', value: 'ikr!!'}, !!: {ali
<devyn> this.factoids.db.object.factoids._._
<purr> devyn: {green: {modified_by: 'ec', popularity: 1, timestamp: '15 322 ſ 244 153', value: 'yes ... master ... whatever you say ... master ...'}, green: {alias: '\u00033green'}, red: {modified_by: 'devyn', popularity: 1, timestamp: '15 322 ſ 245 791', value: 'invalid access code. access denied.'}, !: {modified_by: '<unknown>', popularity: 100, timestamp: '16 004 ſ 589 084', value: 'ikr!!'}, !!: {ali
<whitequark> the fuck is this shit
<devyn> o_O
<whitequark> -green
<purr> whitequark: green = mind control
<whitequark> -red
<devyn> this.factoids.db.object.factoids['_']
<purr> devyn: {green: {modified_by: 'ec', popularity: 1, timestamp: '15 322 ſ 244 153', value: 'yes ... master ... whatever you say ... master ...'}, green: {alias: '\u00033green'}, red: {modified_by: 'devyn', popularity: 1, timestamp: '15 322 ſ 245 791', value: 'invalid access code. access denied.'}, !: {modified_by: '<unknown>', popularity: 100, timestamp: '16 004 ſ 589 084', value: 'ikr!!'}, !!: {ali
<devyn> this.factoids.db.object.factoids['red']
<devyn> but
<devyn> what the fuck
<devyn> this.factoids.db.object.factoids.red.value
<purr> devyn: TypeError: Cannot read property 'value' of undefined
<devyn> BUT IT'S RIGHT THERE
<devyn> this.factoids.db.object.factoids.green
<purr> devyn: {modified_by: 'ec', popularity: 5, timestamp: '15 322 ſ 243 016', value: '\u00033green = mind control'}
<whitequark> this
<whitequark> this.factoids
<whitequark> oh come on.
<devyn> oh you have to be special to do that
<ELLIOTTCABLE_> Wat even
<devyn> -! @ ELLIOTTCABLE_
<purr> ELLIOTTCABLE_: ikr!!
<devyn> whitequark: wait, how the fuck are there two 'green' definitions in this.factoids
<devyn> this.factoids.db.object*
<whitequark> doesn't seem like it escapes keys
<whitequark> !: is not a valid js key
<whitequark> so
<whitequark> like green and grееn
<whitequark> in fact, lemme try
<whitequark> -grееn
<whitequark> naw
<devyn> >> var o = {}; o['!'] = 'hello'; o['!']
<purr> devyn: 'hello'
<devyn> totally a valid js key
<whitequark> um
<whitequark> invalid literal syntax
<devyn> well yes, but I don't think the toString() function takes that into account
<devyn> the custom one
<whitequark> well
<whitequark> I've hd'd those two greens and they are all the same
<whitequark> but irc might have eaten any funky characters
<devyn> >> {'!': 'hello'}
<purr> devyn: SyntaxError: Unexpected token :
<devyn> >> {"!": 'hello'}
<purr> devyn: SyntaxError: Unexpected token :
<whitequark> lol
<purr> lol
<devyn> eh?
<whitequark> >> ({'!': 'hello'})
<purr> whitequark: (object) {!: 'hello'}
<whitequark> devyn: you fail at js
<devyn> apparently
<whitequark> {} basically introducts local scope
<whitequark> like in C
<whitequark> except it doesn't, because hoisting
<devyn> lol
<devyn> js is so fail
<whitequark> I *think* there could be some incredibly obscure use for it
<whitequark> sec
<devyn> >> ({'!': 'hello'})._
<purr> devyn: {!: 'hello'}
<devyn> [devyn] ~ - node
<devyn> > ({'!': 'hello'})._
<devyn> undefined
<whitequark> >> L: { while(true) { while(true) { break L; } }; "foo" }
<devyn> something is not right, ELLIOTTCABLE_
<purr> whitequark: undefined
<whitequark> like that
<whitequark> it's basically goto
<devyn> yes, I know about continue/break with labels
<ELLIOTTCABLE_> What're you trying to do? I'm on my phone.
<whitequark> I'm trying to forget JS
<whitequark> doesn't work out well as you can see
<devyn> ELLIOTTCABLE_: we noticed that the _ factoid returns undefined
<devyn> -_
<purr> devyn: undefined
<devyn> -find _
<purr> devyn: undefined
<devyn> and it turns out that in whatever system oftn-bot runs in
<devyn> _ on any object
<devyn> is the object's self
<ELLIOTTCABLE_> wat
<devyn> (sorry, purr, not oftn-bot, but it is oftn-bot code)
<ELLIOTTCABLE_> so the db is undefined,
<ELLIOTTCABLE_> lolwateven
<purr> lolwateven
<devyn> no no no
<devyn> somehow, this.factoids.db.object['_'] causes it to print undefined
<devyn> except it's not
<devyn> somehow
<devyn> and learning it
<devyn> doesn't do anything
<devyn> this.factoids.db.object['_']
<purr> devyn: {factoids: {green: {modified_by: 'ec', popularity: 1, timestamp: '15 322 ſ 244 153', value: 'yes ... master ... whatever you say ... master ...'}, green: {alias: '\u00033green'}, red: {modified_by: 'devyn', popularity: 1, timestamp: '15 322 ſ 245 791', value: 'invalid access code. access denied.'}, !: {modified_by: '<unknown>', popularity: 101, timestamp: '16 004 ſ 589 084', value: 'ikr!!'
<whitequark> >> (1)._
<purr> whitequark: undefined
<devyn> this.factoids.db.object.factoids['_']
<purr> devyn: {green: {modified_by: 'ec', popularity: 1, timestamp: '15 322 ſ 244 153', value: 'yes ... master ... whatever you say ... master ...'}, green: {alias: '\u00033green'}, red: {modified_by: 'devyn', popularity: 1, timestamp: '15 322 ſ 245 791', value: 'invalid access code. access denied.'}, !: {modified_by: '<unknown>', popularity: 101, timestamp: '16 004 ſ 589 084', value: 'ikr!!'}, !!: {ali
<devyn> I meant
<whitequark> >> ({})._
<purr> whitequark: undefined
<devyn> >> Object.prototype._
<purr> devyn: {_: (Getter/Setter), __defineGetter__: (function) __defineGetter__, __defineSetter__: (function) __defineSetter__, __lookupGetter__: (function) __lookupGetter__, __lookupSetter__: (function) __lookupSetter__, constructor: (function) Object, filter: function (cb, thisObject){ var that = this return Object.keys(that).reduce(function(acc, key){ if ( cb.call(thisObject, that[key], key, that) ) acc[key
<ELLIOTTCABLE_> I'm off.
<devyn> okay
<devyn> I'm confused
<whitequark> eh fuck it
<cuttle> hi ELLIOTTCABLE_
<cuttle> aw you left
<ELLIOTTCABLE_> Hi
<purr> ELLIOTTCABLE_: hi!
<cuttle> ELLIOTTCABLE_: want to hear an attempt at a hip hop beat
<ELLIOTTCABLE_> No
<cuttle> ok
<cuttle> ELLIOTTCABLE_: how are you doing
<cuttle> ok
<cuttle> i'm gonna sleep
<cuttle> good night
alexgordon has joined #elliottcable
yorick has joined #elliottcable
niggler has quit [Quit: Computer has gone to sleep.]
silentbicycle has quit [Ping timeout: 245 seconds]
silentbicycle_ has joined #elliottcable
gozala has quit [Ping timeout: 246 seconds]
gozala has joined #elliottcable
silentbicycle_ has quit [Ping timeout: 260 seconds]
gazoombo has quit [Ping timeout: 246 seconds]
ELLIOTTCABLE_ has quit [Ping timeout: 252 seconds]
dnyy has quit [Ping timeout: 252 seconds]
silentbicycle_ has joined #elliottcable
gazoombo has joined #elliottcable
dnyy has joined #elliottcable
ELLIOTTCABLE__ has joined #elliottcable
eligrey has joined #elliottcable
vil has quit [Quit: Go, take flight.]
vil has joined #elliottcable
sharkbot has quit [Remote host closed the connection]
sharkbot has joined #elliottcable
eligrey has quit [Ping timeout: 240 seconds]
eligrey has joined #elliottcable
<whitequark> why