←2011-12-11 2011-12-12 2011-12-13→ ↑2011 ↑all
00:00:09 <elliott> yes, by patching things vaguely
00:00:21 <kallisti> by adding a map which associates orderless values to cursors.
00:00:35 <kallisti> not vague. just now a composite data structure.
00:00:51 <kallisti> more memory overhead, slower add/remove
00:01:26 <elliott> *sigh* show code
00:01:35 <kallisti> sorry too lazy.
00:02:08 <elliott> well then.
00:02:30 <kallisti> what's confusing about having symbolic values or indices associated with each cursor that are irrelevant to its ordering, which are maintaining in a Map Index Cursor?
00:02:49 <kallisti> or doing a linear search to improve memory add head + add/remove time?
00:02:55 <kallisti> er
00:02:59 <kallisti> s/add head/overhead/
00:05:20 <elliott> kallisti: the thing is that what you're saying makes nos ense.
00:05:21 <elliott> *no sense.
00:06:05 <kallisti> by "out-of-order" do you mean that you have indices associated with each cursor and you want that to be unrelated to their position in the sequence?
00:06:23 <kallisti> in other words, "get cursor 5" refers to the same cursor always?
00:07:03 <oerjan> also, simple order makes no sense for quadtrees.
00:07:36 <kallisti> I thought we were talking about zippers as in regular zippers over a linear sequence.
00:07:51 <elliott> oerjan: yes, but kallisti has always tried to do list zippers, for whatever reason.
00:07:58 <elliott> kallisti: the original zipper was a tree zipper.
00:08:08 <kallisti> oh, well, okay.
00:08:10 <elliott> so "regular" is questionable.
00:08:12 <oerjan> well yes, for list zippers an order should work
00:10:04 <oerjan> because you never have a meeting of more than two branches, all the machinery i described previously should simplify immensely to something like that.
00:10:40 <oerjan> (branches including both down and upward ones here)
00:11:08 -!- warg has joined.
00:11:40 <oerjan> moreover most of it can be transfered to binary trees as long as you never focus on an inner branch
00:11:58 <oerjan> well, maybe not directly.
00:12:03 <Sgeo> FUCK GNUMERIC
00:12:09 <oerjan> but you have an order to use then.
00:12:12 <monqy> hi Sgeo
00:12:14 <monqy> hi Sgeo
00:12:40 <quintopia> hi monqy
00:12:44 <monqy> hi
00:13:09 <Sgeo> So, I put -1/2 into a cell
00:13:12 <Sgeo> It shows up as 1/3
00:13:14 <Sgeo> erm, 1/2
00:13:32 <Sgeo> Because I have the cells set to display as fractions with a whole number
00:13:43 <Sgeo> Since the whole part is 0, Gnumeric apparently decides there's no place to put a sign
00:13:44 <elliott> hi
00:15:17 <kallisti> elliott: I assume you're familiar with generic zippers?
00:15:20 <elliott> one thing I'm unsure about is which representation to choose for this situation: http://sprunge.us/SQAK
00:15:21 <elliott> kallisti: yes.
00:15:40 <oerjan> elliott: crazy idea, use a hilbert curve as your coordinates into funge space, turn the quadtree into a binary one :P
00:15:46 <elliott> oerjan: heh
00:18:15 <oerjan> for a value of crazy equal to: someone probably thought of something similar before
00:18:41 <elliott> oerjan: you're not going to comment on that sprunge are you :(
00:18:53 <elliott> i guess it's not really clear waht i maen by it :P
00:19:11 <kallisti> elliott: solution: implement a perl interpreter: use Perl
00:19:25 <Sgeo> Am I allowed to be ticked off at pieces of junk?
00:19:29 <kallisti> no
00:19:36 <kallisti> well, yes
00:19:38 <kallisti> technically.
00:19:40 <elliott> no
00:20:09 <kallisti> elliott: I can only assume that was a no to Sgeo and not a no to my brilliant idea.
00:20:20 <elliott> it was both
00:20:24 <oerjan> completely incomprehensible, check
00:20:25 <monqy> double no :o
00:20:36 <elliott> oerjan: oh is it really
00:20:38 -!- Jafet has quit (Quit: Leaving.).
00:20:39 <elliott> sorey
00:20:41 <kallisti> elliott: you gotta warn people when you double no like that.
00:20:49 <oerjan> _or_ i haven't had enough to eat.
00:20:54 -!- Nisstyre has quit (Ping timeout: 240 seconds).
00:20:57 <elliott> oerjan: try more ets
00:21:11 <oerjan> *munch*
00:22:24 -!- Nisstyre has joined.
00:22:30 <kallisti> elliott: tree zippers look like trees except turnways.
00:22:48 <kallisti> (this should make total sense)
00:23:06 <elliott> kallisti: no, they look like a tree threaded through a http://en.wikipedia.org/wiki/Zipper
00:23:27 <oerjan> on second thought i think the universe just wanted to keep me away from deranged762.
00:23:38 <elliott> oerjan: don't stop reading the log
00:23:39 <kallisti> elliott: yes and therefore turnways
00:23:39 <elliott> because
00:23:51 <kallisti> elliott: you know nothing about turnways
00:23:52 <elliott> oerjan: he disses the ~scientific worldview~
00:24:06 <elliott> seriously
00:24:23 <oerjan> he didn't mention columbus too?
00:24:24 <elliott> the spherical earth, a well-known victory of ufology
00:24:46 <elliott> oerjan: no, but he did mention us being mind-controlled
00:24:51 <elliott> unfortunately not sheeple
00:25:09 <kallisti> elliott: I think his point was supposed to be that humans have a history of having firmly established mainstream beliefs that are wrong. however, it was executed terribly. not to mention that's not a very good argument against the majority of established scientific theory.
00:25:34 <oerjan> hm where is that asimov link
00:25:40 -!- sebbu2 has quit (Ping timeout: 255 seconds).
00:26:03 <elliott> kallisti: When arguing for faith over science, try not to cite possibly *the* most famous victory of science over faith.
00:26:07 <kallisti> elliott: because there's a fundamental difference in the way science derives knowlege from the way folklore derives knowlege.
00:26:15 <kallisti> elliott: yes.
00:26:34 <oerjan> http://chem.tufts.edu/AnswersInScience/RelativityofWrong.htm
00:26:42 <elliott> oerjan: (was I wrong in referring to you as a theist, btw? I don't think so but I might as well check)
00:27:09 <oerjan> i think "theist" may be too precise.
00:27:35 <kallisti> elliott: okay so tree zippers were a little confusing at first but I think I've got it now.
00:27:49 <kallisti> well, binary tree zippers.
00:27:55 <elliott> oerjan: that would be _so_ easy to mock you with :)
00:28:05 <elliott> but OK, noted
00:28:24 <kallisti> but I'm guessing n-degree trees work similarly just with more constructor arguments or a list of subtrees instead.
00:28:47 <monqy> waht
00:29:29 <kallisti> type Loc a = (Tree a, Cxt a)
00:29:32 -!- Klisz has quit (Quit: You are now graced with my absence.).
00:29:36 <kallisti> so here the first tuple element is the entire tree, right?
00:29:43 <elliott> no
00:29:52 <elliott> it is the focused subtree
00:29:57 <kallisti> oh okay.
00:29:59 <kallisti> the thing that's left out
00:30:00 <kallisti> by the context
00:30:19 <kallisti> which is how to build the rest of the tree from that location.
00:30:23 <oerjan> kallisti: you should know that my theory which elliott dismisses as being too overcomplicated only really picks up in complexity once you have at least 3 cursors.
00:30:23 <kallisti> is that right?
00:30:34 <kallisti> oerjan: um, okay, noted.
00:30:35 <kallisti> :P
00:31:03 <elliott> oerjan: um it is too complicated because it involves something like 10 GADTs, a supporting data type requiring unsafeCoerce to implement, and you haven't told me how to implement even a single function.
00:31:05 <oerjan> kallisti: that, by the way, is a warning not to assume you can easily generalize from the 1 and 2 cases.
00:31:12 <elliott> oh, I see
00:31:24 <elliott> I thought you meant your final structure only picks up in complexity at that point
00:31:33 <kallisti> elliott: oerjan is not actually a programer.
00:31:44 <kallisti> this is probably the mistake you're making.
00:31:55 <oerjan> kallisti: I SUPPORT THAT IDEA
00:32:00 <elliott> kallisti: um he is certainly proficient enough _to_ program.
00:32:04 <monqy> whats program
00:32:07 <elliott> so I'm not sure what your point is
00:32:16 <kallisti> elliott: my point is TOTAL SERIOUSNESS
00:32:48 <oerjan> i assume since there were no comments that you've all read that asimov link before :P
00:33:08 <elliott> oerjan: no comments because i'm busy reading it
00:33:11 <oerjan> ah
00:33:26 <kallisti> aha, this makes way more sense now.
00:33:57 <elliott> kallisti: a zipper of a type is just that data type with a hole in a recursive position
00:34:10 <kallisti> well, yes, but that doesn't really help you understand the implementation
00:34:14 <elliott> (you can generalise it beyond that, but that definition is most elegant because you can derive it by taking the _derivative_ of the type by the standard derivative laws)
00:34:14 <kallisti> which is all I'm trying to do right now
00:34:18 <kallisti> I understand the /concept/
00:34:28 <kallisti> or the basic one
00:34:32 <kallisti> not the derivative stuff.
00:34:51 <elliott> you can quite literally derive the implementation for the one-hole case. that's the key to understanding
00:36:14 <pikhq_> What's this about oerjan and theism?
00:36:15 <kallisti> elliott: but my idea for an n-cursor list is satisfactory right? or did I not explain it well enough?
00:36:20 <elliott> kallisti: no
00:36:23 <elliott> well, probably for lists
00:36:26 <elliott> I don't care about lists
00:36:40 <elliott> pikhq_: oerjan is completely atheistic and holds absolutely non-naturalistic viewpoints.
00:37:07 <pikhq_> elliott: I think you a word
00:37:15 <elliott> *absolutely no, of course.
00:37:18 <kallisti> elliott: it has the added bonus that you can FIND SUBSEQUENCES BETWEEN ADJACENT CURSORS
00:37:22 <kallisti> this is probably useful for something I imagine.
00:37:33 <pikhq_> elliott: Ah, what I actually *thought* was the case re: oerjan.
00:37:38 <elliott> pikhq_: Yes.
00:38:45 <kallisti> elliott: oh, huh, you know... I just realized my n-cursor list is probably equivalent to a 2D list. :P
00:38:55 <kallisti> or a 2D sequence or whatever.
00:39:13 <kallisti> yes it is.
00:40:18 <kallisti> a cursor can be visualized as a point between two subsequences
00:40:39 <Vorpal> <oerjan> i assume since there were no comments that you've all read that asimov link before :P <-- no, just finished reading it. Interesting.
00:41:14 <pikhq_> Yeah, I'd read it before.
00:41:37 <kallisti> elliott: why are you focusing so much effort on n-cursor zippers when you only need the quadtree case?
00:41:47 <elliott> ...
00:41:47 <pikhq_> Also, you don't need to be a programmer by profession to be a programmer. To be a programmer, you just need to be able to program.
00:41:49 <elliott> kallisti: what
00:41:52 <pikhq_> And oerjan sure as heck can do that.
00:42:01 <warg> jah
00:42:06 <kallisti> elliott: oh.... nevermind.
00:42:14 <elliott> kallisti: quadtree =/= 4 cursors
00:42:16 <kallisti> elliott: right
00:42:23 <kallisti> elliott: no I didn't think that I just got briefly confused
00:42:29 <kallisti> perhaps from lack of food or something.
00:42:52 * kallisti wouldn't want you to think I'm /always/ this confused. :P
00:42:59 <Vorpal> how many cursors do you end up with in the quad tree case?
00:43:03 <kallisti> n
00:43:07 <Vorpal> oh
00:43:10 <kallisti> it varies
00:43:20 <Vorpal> yeah, makes sense when I think about it
00:43:20 <kallisti> they're instruction pointers in a fungespace, I believe.
00:43:30 <Vorpal> quad tree funge space? heh
00:43:43 <Vorpal> I believe fizzie tried that at some point with rather mediocre results
00:44:00 <elliott> Vorpal: It's not going to be a quad-tree.
00:44:00 <Vorpal> forgot what the implementation was called
00:44:24 <elliott> Vorpal: It's just that a quad-tree n-cursor zipper is a lot easier to implement as a prototype than a k-d tree n-cursor zipper.
00:44:28 <Vorpal> elliott, btw I recently learned enough maths to actually understand the CCBI2 funge space.
00:44:35 <Vorpal> it is a really nice way to do it
00:44:36 <elliott> There's maths involved?
00:45:00 <Vorpal> elliott, well, compsci/math/whatever
00:45:11 <elliott> It's... not exactly complicated.
00:45:19 <monqy> wjat is it
00:45:29 <elliott> Anyway my plan is to implement the fungespace Deewiant wants but couldn't be arsed to write.
00:45:41 <Vorpal> elliott, what is that funge space?
00:45:45 <ais523> hmm, so I've decided that I will have to write a linker
00:45:51 <ais523> for my hardware compiler
00:46:04 <Vorpal> ais523, hm. compiling to vhdl or verilog?
00:46:08 <ais523> Vorpal: VHDL
00:46:17 <Vorpal> ais523, why would you need a linker?
00:46:22 <kallisti> ais523: if you think about it a trash compactor is a kind of hardware compilre.
00:46:27 <ais523> to do libraries properly
00:46:31 <Vorpal> hm
00:46:41 <elliott> Vorpal: A k-d tree; I believe he specifically wants a bucket PR-CIF k-d tree or something.
00:46:46 <elliott> I forget the exact one he wanted.
00:46:53 <monqy> kallisti: glue: a hardware linker
00:46:56 <Vorpal> elliott, ah, yeah k-d trees are nice
00:47:02 <elliott> ais523: Do you need separate compilation? :p
00:47:09 <ais523> yes, that's the hard part
00:47:17 <ais523> well, actually, the hard part is just the object file format
00:47:26 <ais523> I can work out what entities I need in the VHDL
00:47:34 <ais523> but what I need in the object file is "VHDL with a tiny amount of metadata"
00:47:42 <elliott> ais523: why do you need separate compilation :'(
00:47:45 <ais523> I suppose I could use specially-formatted comments or something
00:47:45 -!- PiRSquared17 has joined.
00:47:52 <ais523> elliott: to prove that it's possible
00:47:55 <elliott> heh
00:48:04 <elliott> ais523: I'd just make a simple file format on top of VHDL
00:48:14 <PiRSquared17> warg: "oerjan is completely atheistic and holds absolutely non-naturalistic viewpoints"
00:48:18 <Vorpal> elliott, what is the name of the type of tree that is like k-d tree but need not be axis aligned now again?
00:48:19 <PiRSquared17> What?
00:48:22 <elliott> ais523: say, "key: value" lines with a blank line to terminate, after which the VHDL starts
00:48:27 <elliott> PiRSquared17: warg didn't say that?
00:48:29 <ais523> hmm, seems reasonable
00:48:32 <elliott> Vorpal: Dunno.
00:48:34 <PiRSquared17> Yes
00:48:35 <ais523> I think I'll make it -- key: value
00:48:39 <PiRSquared17> In #wikipedia-en
00:48:42 <ais523> so that the file can be run through a VHDL compiler unchanged
00:48:52 <elliott> PiRSquared17: hmm, warg is randomly quoting this channel in #wikipedia-en?
00:49:02 <elliott> for what reason?
00:49:16 <monqy> warg................................
00:49:17 <PiRSquared17> "oops wrong window"
00:49:17 <elliott> Because I was the one who said that, in here.
00:49:42 <elliott> PiRSquared17: For it to be the wrong window, he would have to be about to completely parrot something I say in here...
00:49:51 <elliott> or else be quoting it to somebody in private I suppose
00:50:21 <Vorpal> elliott, oh I think it is more general BSP trees I'm thinking about
00:50:22 <Vorpal> perhaps
00:50:32 <elliott> ais523: you might want to add start and end comments so that adding comments doesn't break things, then
00:50:54 <ais523> well, if it's always at the start of the file, it should be obvious to not add anything before it
00:50:58 <elliott> fair enough
00:50:59 <ais523> VHDL comments /are/ --, right?
00:51:02 <ais523> err, yes, i think so
00:51:04 <elliott> yes
00:51:06 <elliott> warg: Well?
00:52:03 <warg> I dunno, I can only get two fingers in her, maybe I should wait until she's five.
00:52:08 <warg> Ooops, wrong window.
00:52:19 <monqy> oops
00:52:49 <elliott> ais523: ^
00:52:53 <Vorpal> ......
00:52:58 <elliott> get rid of him already...
00:53:06 <warg> ...
00:53:07 <Vorpal> report to the police?
00:53:12 <warg> report what?
00:53:14 <elliott> Vorpal: obvious trolling
00:53:21 <Vorpal> elliott, I hope so
00:53:36 <monqy> reported for being an idiot on the internet
00:53:43 <monqy> jails sentence: so many years
00:53:47 <warg> the cyberpolice are backtracing my emails
00:53:51 <warg> oh noes
00:56:06 <elliott> ais523: ping
00:56:26 <kallisti> oerjan: YOU HAVE THE POWAH
00:57:39 -!- derdon has quit (Remote host closed the connection).
01:00:42 <kallisti> elliott: LOL DUDE3
01:00:49 <kallisti> elliott: an n-cursor zipper is liek
01:00:53 <kallisti> elliott: LIST OF ZIPPERS.
01:00:56 <kallisti> ..
01:01:00 <elliott> no
01:01:04 <Sgeo> I think I'm going to bite the bullet and install Libreoffice Calc
01:01:40 -!- ChanServ has set channel mode: +o oerjan.
01:01:43 <kallisti> elliott: you have to admit that it would be a possible implementation...
01:01:48 <elliott> kallisti: no, it would not
01:01:52 -!- oerjan has set channel mode: +b *!*warg@*.pdx.net.
01:01:52 -!- oerjan has kicked warg _Too_ obvious..
01:01:59 <elliott> oerjan: um that is a rather suboptimal ban
01:02:03 <elliott> seeing as this is his second alias
01:02:17 <oerjan> elliott: it's the one irssi does automatically.
01:02:20 <elliott> ah
01:02:23 <elliott> thanks, anyway
01:02:47 <elliott> I wonder why he quoted me in the first place.
01:02:50 <PiRSquared17> What is his first alias?
01:02:53 <elliott> PiRSquared17: Deathly
01:02:57 <Sgeo> o.O
01:03:00 <Sgeo> Deathly == warg?
01:03:06 <elliott> yes
01:03:14 <kallisti> elliott: why does a list of zippers not work?
01:03:27 <elliott> kallisti: you zip (1/\2)/\(3/\4) at the 1, and take another zipper at the 4
01:03:31 <elliott> you change the 1 to a 20
01:03:40 <elliott> the zipper at the 4 still sees a 1
01:03:41 -!- oerjan has set channel mode: -o oerjan.
01:03:42 <elliott> q.e.d.
01:03:48 <kallisti> ah you can't share the data, right.
01:03:58 <kallisti> UNLESS
01:04:02 <kallisti> YOU CAN SHARE THE DATA.
01:06:37 <kallisti> use IORefs and unsafeCoerce
01:06:39 <kallisti> problem solved
01:06:40 <kallisti> :)
01:07:50 <elliott> oerjan: finally i have shifted the complexity from the types to the algorithms :P
01:08:16 <kallisti> that's good. more time. less memory.
01:08:37 <oerjan> elliott: well assuming your types work, that is.
01:09:19 <elliott> oerjan: snarky :P
01:09:49 <oerjan> elliott: i don't quite see where you are supporting more than 1 cursor.
01:09:58 <elliott> data Tree a = Tip a | Branch (Tree a) (Tree a) deriving (Show)
01:09:58 <elliott> data Dir = L | R deriving (Show)
01:09:58 <elliott> data Ctx a = Top | Fork Dir (Tree a) (Ctx a) deriving (Show)
01:09:58 <elliott> type Zipper a = (a, Zipper a)
01:09:58 <elliott> data NCtx a = Connect Dir | NFork Dir (Tree a) (NCtx a) deriving (Show)
01:09:59 <elliott> type NZipper a = (a, NCtx a)
01:10:01 <elliott> data ZipNode a = Subtree (Tree a) | Zipper (NZipper a) deriving (Show)
01:10:03 <elliott> type NZippers a = Zipper (ZipNode a)
01:10:05 <elliott> that might help, it's the full thing
01:10:08 <elliott> focus :: [Dir] -> Tree a -> NZippers a
01:10:16 <elliott> moveCurrentZipper :: Dir -> NZippers a -> NZippers a, etc.
01:10:31 <elliott> moveToNextZipper :: NZippers a -> NZippers a, and so on
01:10:47 <elliott> well this _does_ force zippers to be arranged in space order internally, but even yours did that
01:10:58 <elliott> and the overhead of maintaining a list of paths to each zipper should be small
01:11:13 <oerjan> elliott: type Zipper a = (a, Zipper a) ? ;P
01:11:35 <elliott> oerjan: THAT'S WHERE THE POWER COMES FROM!!!
01:11:39 <elliott> fixed :P
01:13:10 <oerjan> well what was that supposed to be, it's rather essential
01:13:25 <kallisti> s/Zipper/NCtx/
01:13:26 <elliott> oerjan: (a, Ctx a)
01:13:30 <elliott> kallisti: no!
01:13:34 <kallisti> the second one
01:13:36 <kallisti> I meant
01:13:41 <elliott> <elliott> type NZipper a = (a, NCtx a)
01:13:42 <kallisti> ambigiuous blah
01:13:43 <elliott> that one was already fixed.
01:13:48 <elliott> kallisti: not the second one.
01:13:50 <elliott> you are wrong
01:13:51 <kallisti> oh okay.
01:14:35 <Sgeo> I hate Libreoffice why am I installing it just because the alternative sucks more
01:15:00 <kallisti> because the alternatives suck more.
01:15:16 <kallisti> also because
01:15:19 <kallisti> there are no other reasons.
01:16:32 * kallisti nobel prise
01:16:41 <kallisti> s/nobel/noble/
01:17:09 <oerjan> ...
01:17:13 <elliott> oerjan: actually focusN :: Tree a -> NZippers a
01:17:17 <elliott> the whole thing starts as one big Subtree
01:17:18 <elliott> node
01:17:23 <elliott> = 0 zippers
01:17:38 -!- calamari has joined.
01:18:29 <kallisti> oerjan: it's important that I misspell correctly.
01:18:52 <elliott> oerjan: now to write addZipper :: [Dir] -> NZippers a -> NZippers a...
01:19:04 <oerjan> elliott: good luck
01:19:28 <elliott> oerjan: hey, at least i already know what a 2-zipper case of a simple tree looks like...
01:19:56 <elliott> hm i think the NCtx thing is unnecessary, the direction can always be inferred
01:20:08 <elliott> it's the last path element you need to get to the tree in the metatree
01:20:22 -!- sebbu has joined.
01:20:23 -!- sebbu has quit (Changing host).
01:20:23 -!- sebbu has joined.
01:21:17 <oerjan> which means that Ctx ~ NCtx
01:21:40 <kallisti> elliott: SUCKER
01:21:47 <elliott> oerjan: yes, that's the point :)
01:22:06 <elliott> oerjan: you can jut look at the Fork in the metatree, basically
01:22:32 <kallisti> the great tree beyond...
01:25:13 <kallisti> why does tartar have so many different meanings...
01:25:16 <elliott> oerjan: i have a feeling a lot of complexity is added by the final step
01:25:20 <kallisti> that are COMPLETELY IRRELEVANT to one another.
01:25:21 <elliott> oerjan: i.e. zipperising the tree of zippers
01:25:42 <elliott> oerjan: and actually I'm not sure it helps much; the order zippers are traversed in isn't the spatial order
01:25:59 <elliott> so i have a feeling that moving to the next zipper requires as much rejiggling as just going from the top each time, especially since zippers should be relatively few
01:26:19 <elliott> the nicest thing would be to somehow zipperise it in a different order, but I don't think that's possible
01:26:21 -!- sebbu has quit (Ping timeout: 248 seconds).
01:26:26 <elliott> still, I worry for my performance with thousands of IPs
01:28:04 <oerjan> a titanic task
01:29:26 <elliott> idgi
01:29:52 <elliott> oerjan: if it helps you understand, going from the initial Tip (Subtree t) case to one zipper turns it into Tip (Zipper <whole-tree-zipper>)
01:30:37 <oerjan> elliott: i'm just saying there might be more than a Tip on that iceberg
01:30:48 <elliott> oerjan: that... is the worst pun ever
01:31:10 <monqy> good pun
01:31:30 <oerjan> yay
01:31:54 <elliott> oerjan: DID THAT HELP YOU UNDERSTAND
01:32:02 <kallisti> elliott: I bet oerjan will come up with a worser pun in the future.
01:32:19 <kallisti> it's his gift to the world.
01:32:38 <oerjan> it's not the gift i wanted, but it's the gift i have
01:33:09 <Sgeo> And Libreoffice doesn't know how to open .gnumeric files.
01:33:10 <Sgeo> Lovely
01:33:47 -!- sebbu has joined.
01:34:36 <Sgeo> Let's try data interchange format
01:34:38 <Sgeo> Whatever that is
01:35:20 <Sgeo> Nope. The formulas are gone.
01:36:06 <kallisti> poker? I 'ardly -- NO STOP AAAAAAH
01:37:55 <kallisti> I think zeroth person to prove something refers to the person who proved something before the historically accepted proof
01:38:09 <kallisti> so, if someone becomes well known as the "first person to prove spontaneous human combusion"
01:38:14 <kallisti> then the zeroth would be the one before that.
01:39:31 <elliott> Sgeo: i am sure gnumeric can save in the openoffice format
01:39:37 <elliott> since it's a standard and everything.
01:40:10 <kallisti> standards schmandards
01:40:47 <Sgeo> elliott, o.O I just needed to scroll down in the list of formats
01:40:52 <elliott> Sgeo: CLAP
01:40:53 <elliott> CLAP
01:40:54 <elliott> CLAP
01:40:54 <elliott> CLAP
01:41:37 <quintopia> no slow clap for you today
01:42:54 <kallisti> 99 + i problems but a bitch ain't one.
01:42:56 <oerjan> ^ul (CL)(~(A)*:(P )*S~:^):^
01:43:18 <elliott> oerjan:
01:43:19 <elliott> addZipper :: [Dir] -> NZippers a -> NZippers a
01:43:19 <elliott> addZipper ps (Tip (Subtree t)) = Tip (Zipper (focus ps t))
01:43:19 <elliott> addZipper ps (Tip (Zipper z)) = tricky
01:43:19 <elliott> addZipper (L:ps) (Branch a b) = Branch (addZipper ps a) b
01:43:19 <elliott> addZipper (R:ps) (Branch a b) = Branch a (addZipper ps b)
01:43:21 <elliott> progress :P
01:43:42 <oerjan> i see there's a tricky part.
01:43:51 <elliott> well it _would_ be simple
01:44:00 <elliott> if it always looked like Branch (Tip (Zipper a)) (Tip (Zipper b)) afterwards
01:44:12 <elliott> but I _think_ you might end up needing to split out a piece into a Subtree
01:44:19 -!- Klisz has joined.
01:44:30 <elliott> for the part that neither zipper focuses on
01:44:43 <Sgeo> At least LibreOffice Calc doesn't display -1/2 as 1/2
01:45:20 <elliott> thanks for continually specifying the 'calc" part
01:45:27 <elliott> i thought you were referring to the word processor
01:45:27 <elliott> *"
01:46:20 <kallisti> elliott: http://wiki.teamliquid.net/starcraft2/Mining_Minerals STARCRAFT MATH
01:47:43 <elliott> fsvo math
01:47:54 <elliott> people do more mathematics about minecraft
01:48:21 <kallisti> there are other maths in starcraft.
01:49:18 <elliott> /home/elliott/Code/ntree/ntree.hs:23:33: Not in scope: `tricky'
01:49:19 <elliott> oerjan: he;lp
01:50:09 <oerjan> elliott: maybe you should try the newfangled SOS signal
01:52:27 -!- Jafet has joined.
01:54:01 -!- TeruFSX has quit (Remote host closed the connection).
01:54:11 <quintopia> kallisti: that formula is stupid. why would they write it -I_f*d/(I_i-I_f) when I_f*d/(I_f-I_i) doesn't make you go "WHY ARE WE PUTTING A NEGATIVE AND PURPOSEFULLY SUBTRACTING THE BIGGER THING FROM THE SMALLER THING?'
01:54:57 -!- Vorpal has quit (Ping timeout: 252 seconds).
01:55:40 <elliott> quintopia: more MATHS.
01:56:51 <quintopia> good answer
01:57:21 <oerjan> you should always use a double negation to spite the constructivists
01:57:48 <elliott> split [] _ = error "whoooops!!!"
01:57:48 <elliott> split (L:ps) (Fork R t up) = \x -> (focus ps t, (x, up))
01:57:48 <elliott> split (R:ps) (Fork L t up) = \x -> ((x, up), focus ps t)
01:57:48 <elliott> split (L:ps) (Fork L t up) = help
01:57:48 <elliott> split (R:ps) (Fork R t up) = help!!!
01:57:51 <elliott> oerjan: im a genus
01:58:16 <Jafet> My kingdom for a genus
01:58:23 <kallisti> $ runHaskell saveworld.hs
01:58:29 <kallisti> whoooops!!!
01:58:39 <elliott> that case is actually impossible though
01:58:40 <elliott> also
01:58:41 <elliott> it's runhaskell
01:58:42 <elliott> little h
01:58:52 <kallisti> SO DEMANDING OF MY JOKES
01:59:33 <oerjan> elliott: you realize if you used undefined or error you could at least get it typechecked?
01:59:36 <elliott> well it's not impossible but
01:59:39 <elliott> you shouldn't do it
01:59:53 -!- azaq23 has quit (Max SendQ exceeded).
01:59:58 <elliott> oerjan: um yes but I need to figure these cases out :P
02:00:07 <elliott> I'm filling them out now :P
02:01:33 <oerjan> i predict this will technically work but turn out to traverse the entire tree every time you change something ;P
02:01:55 <kallisti> quintopia: my guess is that starcraft players aren't very good at math, and that's just how they worked it out.
02:02:28 -!- azaq23 has joined.
02:02:34 <elliott> split [] _ _ = error "whoooops!!!"
02:02:35 <elliott> split (L:ps) (Fork R t up) x = Branch (Tip (Zipper (focus ps t))) (Tip (Zipper (x, up)))
02:02:35 <elliott> split (R:ps) (Fork L t up) x = Branch (Tip (Zipper (x, up))) (Tip (Zipper (focus ps t)))
02:02:35 <elliott> split (L:ps) (Fork L t up) x = Branch (split ps up x) (Tip (Subtree t))
02:02:35 <elliott> split (R:ps) (Fork R t up) x = Branch (Tip (Subtree t)) (split ps up x)
02:02:38 <elliott> there we go, had to change the type a little
02:02:39 -!- azaq23 has quit (Max SendQ exceeded).
02:02:41 <elliott> oerjan: this is just for adding a _new_ zipper
02:02:50 <elliott> oerjan: zipper-local modifications don't have to move anywhere at all
02:02:56 <oerjan> O KAY
02:03:01 -!- azaq23 has joined.
02:03:11 <elliott> oerjan: and moving a zipper is about as fast as moving a zipper normally
02:03:15 <elliott> so SHUT YOUR MOUTH >:(
02:03:25 <elliott> you're just bitter that it's simpler >:)
02:03:44 <oerjan> i'm not bitter, i just like to kick puppies
02:04:43 <elliott> addZipper :: [Dir] -> NZippers a -> NZippers a
02:04:44 <elliott> addZipper ps (Tip (Subtree t)) = Tip (Zipper (focus ps t))
02:04:44 <elliott> addZipper ps (Tip (Zipper z)) = split ps z
02:04:44 <elliott> addZipper (L:ps) (Branch a b) = Branch (addZipper ps a) b
02:04:44 <elliott> addZipper (R:ps) (Branch a b) = Branch a (addZipper ps b)
02:04:44 <elliott> split :: [Dir] -> Zipper a -> NZippers a
02:04:46 <elliott> split [] _ = error "whoooops!!!"
02:04:48 <elliott> split (L:ps) (x, Fork R t up) = Branch (Tip (Zipper (focus ps t))) (Tip (Zipper (x, up)))
02:04:50 <elliott> split (R:ps) (x, Fork L t up) = Branch (Tip (Zipper (x, up))) (Tip (Zipper (focus ps t)))
02:04:52 <elliott> split (L:ps) (x, Fork L t up) = Branch (split ps (x, up)) (Tip (Subtree t))
02:04:54 <elliott> split (R:ps) (x, Fork R t up) = Branch (Tip (Subtree t)) (split ps (x, up))
02:04:56 <elliott> easy
02:04:58 <elliott> (it actually is pretty simple if you ignore the constructor cruft in split :P)
02:07:14 <elliott> *Main> addZipper [L,R,L] . addZipper [L,L,L] . focusN $ test
02:07:14 <elliott> Branch (Branch (Tip (Zipper (1,Fork L (Tip 2) Top))) (Tip (Zipper (3,Fork L (Tip 4) Top)))) (Tip (Subtree (Branch (Branch (Tip 5) (Tip 6)) (Branch (Tip 7) (Tip 8)))))
02:07:18 <elliott> oerjan: MEET YOUR NEW GOD!!!
02:10:15 <oerjan> O KAY
02:11:10 <elliott> oerjan: :(
02:11:26 <elliott> (even though i quite likely will re-add some of the type safety stuff :P)
02:17:15 <elliott> oerjan: ok now for move. the best function.
02:19:49 <oerjan> make your move, elliott
02:19:57 <elliott> yes.
02:22:33 <elliott> oerjan: when did you discover your pun calling
02:22:37 <elliott> like that one moment
02:22:40 <elliott> where you were like
02:22:41 <elliott> yes
02:22:42 <elliott> this is what i must do
02:22:51 <elliott> this is my purpose in life.
02:23:06 <kallisti> same day he became a theist
02:23:24 <elliott> kallisti: he's already said he disagreed with that label, sheesh
02:24:20 <kallisti> I can go to whatever past label I want.
02:24:24 <kallisti> >_>
02:25:09 -!- warg has joined.
02:25:23 -!- ChanServ has set channel mode: +o oerjan.
02:25:33 <warg> you seriously registered my name?
02:25:37 <warg> lol
02:25:46 -!- oerjan has set channel mode: +b *!*@*.pdx.net.
02:25:50 -!- oerjan has kicked warg warg.
02:26:15 -!- oerjan has set channel mode: -b *!*warg@*.pdx.net.
02:26:32 -!- oerjan has set channel mode: -b *!*lament@184.71.170.*.
02:26:53 -!- oerjan has set channel mode: -o oerjan.
02:27:38 <elliott> oerjan: hey, that's going against another op's decision!
02:27:38 <kallisti> registered his name?
02:27:40 <elliott> without discussion!
02:28:11 <PiRSquared17> ?
02:28:15 <elliott> lament banned himself :)
02:28:23 * elliott considers joining #wikipedia-en and seeing wtf warg is doing there.
02:28:54 <PiRSquared17> http://pastebin.com/ShGiLDDP
02:28:56 <kallisti> elliott: use a different name to disguys yoreself
02:29:05 <PiRSquared17> Banned?
02:29:33 <kallisti> lol wow
02:29:34 <elliott> lament? yes
02:29:40 <elliott> he is perhaps not the biggest fan of this channel :p
02:29:44 <kallisti> click link
02:29:49 <kallisti> elliott: click it
02:29:53 <elliott> the pastebin one?
02:29:54 <elliott> I did
02:29:59 <PiRSquared17> That's warg
02:30:02 -!- ChanServ has set channel mode: +o oerjan.
02:30:03 <elliott> yeah :P
02:30:15 <elliott> smart guy.
02:30:22 <PiRSquared17> except for the "...", which was someone else
02:31:10 <elliott> oerjan: wat
02:31:41 <kallisti> elliott: casting magic spells
02:31:44 <kallisti> it takes a while.
02:32:00 <elliott> oerjan: waht are you doign i ACCUSE YOU OF SUSPICIOUS!!nes
02:32:01 <elliott> s
02:32:40 <oerjan> i am trying to /ban *!*@069-064-236-*.pdx.net but it's not working
02:33:27 <oerjan> maybe it's because of overlap
02:33:41 <kallisti> try *!*@*
02:33:44 -!- oerjan has set channel mode: -b *!*@*.pdx.net.
02:33:48 -!- oerjan has set channel mode: +b *!*@069-064-236-*.pdx.net.
02:33:53 <oerjan> ah so it was
02:34:00 <PiRSquared17> You banned *!*@* ???
02:34:05 <kallisti> obviously
02:34:14 -!- oerjan has set channel mode: -o oerjan.
02:35:15 <kallisti> elliott: I wonder why lament did ban himself
02:35:43 <elliott> kallisti: someone else joined here yelling some nonsense, lament followed him
02:35:54 <elliott> and said that he had asked him (lament) to ban everyone in here, and asked who he should start with
02:36:00 <elliott> so i said the other guy and lament
02:36:03 <elliott> so he opped himself
02:36:04 <elliott> banned the other guy
02:36:06 <elliott> banned himself
02:36:09 <elliott> and kicked both
02:36:10 <kallisti> no I know the story
02:36:13 <kallisti> but that doesn't explain why.
02:36:14 <elliott> oh.
02:36:20 <elliott> because i told him to and he hates this channel?
02:36:28 <kallisti> that makes no sense.
02:36:33 <kallisti> maybeh e was druhnk
02:36:34 <elliott> I have no idea how it came up in whatever other channel that happened in (I think #not-math or something)
02:36:38 <elliott> kallisti: why does it make no sense
02:36:40 <elliott> it's very simple
02:36:46 <elliott> if you hate a channel, you don't care about whether or not you're banned in it
02:36:55 <kallisti> sure
02:37:13 <kallisti> but it sounds like he wanted to CAUSE trouble.
02:37:20 <kallisti> also he could just not join
02:37:23 <kallisti> instead of that.
02:37:43 <elliott> there was obviously some sort of flamewar or something going on
02:37:51 <elliott> anyway
02:38:01 <elliott> you are basically saying "it is really weird that lament is kind of an asshole"
02:38:04 <elliott> which is
02:38:05 <kallisti> NO
02:38:07 <elliott> hello! have you ever talked to lament
02:38:28 <kallisti> more like "it's really weird that lament would join a channel threatening to ban people and then ban himself when told to do so"
02:38:44 <elliott> it wasn't "threatening", he was obviously trying to piss the other guy off
02:39:23 <kallisti> if you say so.
02:40:03 <kallisti> perhaps it's more obvious in the lowgs
02:43:39 <elliott> I should write something in ATS sometime.
02:43:49 <kallisti> eeeeeys
02:44:33 <kallisti> `word 25
02:44:38 <HackEgo> jli rocrismaropjohlen inappelchth lowelons gamuto cara drondaed chon deremg hunmanstiontelfydeardemetarvapt licca luch eruins hannge prayacift besberstargeightsant deileikoshamen gallornan cass ilvan bestonsidesse fyismingentattationos rectiontuayeity inamits tapopfgran
02:44:55 <elliott> i wish english was `word
02:45:04 <kallisti> me too.
02:46:36 -!- calamari has quit (Quit: Leaving).
02:49:22 <elliott> oerjan: help i can't write a simple function :(
02:49:47 <elliott> the worst part is it's a function on regular zippers :D
02:49:52 <kallisti> elliott: write a complex one instead.
02:50:14 <kallisti> seem to be pretty good at those.
02:50:16 <oerjan> yeah that's the ticket
02:50:43 <oerjan> if nothing else works, convert via XML.
02:51:27 <kallisti> elliott: I bet I can write thefu nction
02:52:09 <elliott> kallisti: move :: Dir -> Zipper a -> Maybe (Zipper a); moves in that direction (treating the underlying tree as 1-dimensional space as quadtrees do for 2-dimensional space)
02:52:12 <elliott> data Tree a = Tip a | Branch (Tree a) (Tree a) deriving (Show)
02:52:12 <elliott> data Dir = L | R deriving (Show)
02:52:12 <elliott> data Ctx a = Top | Fork Dir (Tree a) (Ctx a) deriving (Show)
02:52:12 <elliott> type Zipper a = (a, Ctx a)
02:52:13 <elliott> enjoy
02:53:16 <kallisti> move R (a,Fork R ... FUCK THIS
02:53:19 -!- GreaseMonkey has joined.
02:56:31 <kallisti> elliott: is that somehow different from a regular zipper move?
02:56:41 <kallisti> I don't really understand the "treated as 1-dimensional space" part.
02:57:42 <elliott> kallisti: well you might have to ascend an arbitrary amount...
02:57:52 <elliott> the space thing is obvious
02:57:57 <elliott> you divide it into halves, forever
02:58:06 <elliott> think cantor set
02:58:17 <elliott> except obviously a finite number of halvings because the space is finite
02:58:37 <elliott> pikhq_: Ping
02:58:46 <kallisti> okay so basically sometimes moving right or left makes you move up?
02:59:04 <elliott> kallisti: always, in fact. since zippers are always on a laef
02:59:05 <elliott> leaf
02:59:12 <elliott> so they at least have to ascend one to go down to the neighbour
02:59:18 <kallisti> oh, didn't know that.
02:59:48 <elliott> <elliott> type Zipper a = (a, Ctx a)
02:59:50 <elliott> these zippers are
03:00:02 -!- Klisz has quit (Quit: You are now graced with my absence.).
03:00:10 <oerjan> move L (t, Fork R t' ctx) = Just (t', Fork L t ctx)
03:00:30 <oerjan> that's the easy one
03:00:39 <pikhq_> elliott: Gnip
03:00:54 <elliott> pikhq_: magnet:?xt=urn:btih:8837dd230bf2fbaf49a4ec45b9c3334ad74eeb7e
03:01:14 <elliott> oerjan: yeah
03:01:16 <elliott> same for R/L
03:01:24 <elliott> um no
03:01:29 <elliott> oerjan: you read the definition of Zipper wrong
03:01:36 <elliott> you need to match t' against (Tip x)
03:01:38 <elliott> (which it always will be)
03:01:40 <pikhq_> elliott: Care to tell me why I care?
03:01:52 <elliott> (since the tree is balanced like that, etc.)
03:01:58 <elliott> pikhq_: It's DHT, man! It's MAGICAL.
03:02:00 <oerjan> oh hm
03:02:14 <pikhq_> 0 peers YAY
03:02:26 <elliott> NOT FOR LONG!!!!!
03:02:27 <elliott> Or maybe for long, depending on how MAGICAL the DHT is feeling this time of year.
03:02:43 <elliott> But I'm connected to a very well-seeded torrent that I WON'T DISCLOSE SINCE GOING VIA A KNOWN INTERMEDIATE IS TOTALLY CHEATING.
03:03:08 <elliott> But I think like half the internet are on this one, so it can't take THAT long.
03:04:02 <oerjan> move' :: Dir -> Tree a -> Ctx a -> Maybe (Tree a, Ctx a)
03:04:33 <oerjan> for moving at higher levels
03:04:52 <elliott> pikhq_: Hmmm, I have this huge hunch that Transmission just fails at DHT seeding somehow.
03:04:58 <elliott> oerjan: right
03:05:32 <elliott> Hey! I've talked to one of the inventors of the DHT BitTorrent uses. And I never even knew.
03:05:45 <pikhq_> elliott: Could be.
03:05:56 <elliott> I'M TOTALLY FAMOUS?
03:07:13 <elliott> pikhq_: It would probably work if you downloaded ubuntu-11.10-desktop-i386.iso, but that's cheating :'(
03:07:26 <elliott> (I was connected to OVER 500 PEERS before! OVER 500 PEERS!)
03:07:29 <pikhq_> elliott: I actually did for a few minutes.
03:07:38 <elliott> Dammit, how did you guess :P
03:07:53 -!- h[A]gb4rd has changed nick to hagb4rd.
03:07:55 <pikhq_> Popular torrent that's trivial to find.
03:08:09 <elliott> I guess Transmission just can't do it for some reason, then.
03:08:38 * elliott considers implementing Kademlia.
03:08:49 <elliott> It looks really cool.
03:09:28 <oerjan> move' L (t, Fork L t' ctx) = do (Branch u u', ctx') <- move L (Branch t t', ctx); return (u', Fork R u ctx')
03:10:02 <elliott> oerjan: I wish Haskell had better support for point-free with multiple return values :-(
03:10:32 <oerjan> elliott: that and its mirror should be the hardest case, i think
03:10:43 <oerjan> er, s/move /move' /
03:10:49 <elliott> oerjan: exercise to the reader, eh :P
03:10:53 <elliott> *for
03:11:24 <elliott> oerjan: well i can tell your implementation is wrong.
03:11:29 <elliott> because it doesn't type.
03:11:40 <oerjan> elliott: i changed the type a bit
03:11:46 <elliott> ok :P
03:12:12 <oerjan> actually that's not necessary
03:12:34 <oerjan> move' L t (Fork L t' ctx) = do (Branch u u', ctx') <- move L (Branch t t') ctx; return (u', Fork R u ctx')
03:12:48 <oerjan> s/move /move' / again
03:15:31 <elliott> move' L t (Fork L t' ctx) = do (Branch u u', ctx') <- move L (Branch t t') ctx; return (u', Fork R u ctx')
03:15:31 <elliott> move' R t (Fork R t' ctx) = do (Branch u u', ctx') <- move R (Branch t t') ctx; return (Fork R u ctx', u')
03:15:32 <elliott> right?
03:18:16 <oerjan> elliott: s/move /move' / i said ;P
03:18:28 <elliott> oerjan: yes yes
03:18:32 <elliott> but did i flip anything around ;_;
03:18:34 <elliott> oh i must have
03:18:41 <elliott> because its return tuple isn't homogeneous
03:18:51 <elliott> and I forgot to s/R/L/
03:18:58 <elliott> move' L t (Fork L t' ctx) = do (Branch u u', ctx') <- move L (Branch t t') ctx; return (u', Fork R u ctx')
03:18:58 <elliott> move' R t (Fork R t' ctx) = do (Branch u u', ctx') <- move R (Branch t t') ctx; return (u', Fork L u ctx')
03:19:00 <oerjan> you flipped the wrong things :P
03:19:01 <elliott> help am i right...........
03:19:09 <oerjan> elliott: FIX THE DAMN moves
03:19:12 <elliott> ok done
03:19:13 <elliott> :P
03:20:17 <oerjan> and no the last one isn't right
03:21:08 <oerjan> move' R t (Fork R t' ctx) = do (Branch u u', ctx') <- move' R (Branch t' t) ctx; return (u, Fork L u' ctx')
03:21:22 <elliott> oh, right
03:21:35 -!- hagb4rd2 has joined.
03:21:38 <oerjan> i should have called the branches something with l/r in them
03:21:47 <oerjan> er subtrees
03:21:49 <elliott> i agree :P
03:21:54 -!- hagb4rd has quit (Disconnected by services).
03:22:05 -!- hagb4rd2 has changed nick to hagb4rd.
03:24:09 <oerjan> also i think the distinction between move and move' will disappear if you make it type safe in the same way as in one of our previous discussions.
03:24:42 <elliott> oerjan: I agree.
03:24:58 <elliott> oerjan: but I'd like to get this done /first/ so that (a) I know what it'll look like, and (b) I can revert if it gets too messy
03:27:59 <oerjan> because this is essentially one of the go/select/moveLeft/Right functions that was written back then
03:28:42 <oerjan> well, two of them
03:29:36 <elliott> right
03:34:36 <elliott> oerjan: actually i think i will move back to a zipper-tree-of-zip-nodes solution, it seems to have benefits...
03:34:57 <elliott> and the worst case is the best case of the tree-of-zip-nodes option :P
03:35:29 <oerjan> as long as the process converges
03:36:11 <elliott> oerjan: are you suggesting that i might end up with a zipper-of-zipper-of-... :P
03:36:52 <oerjan> IT'S ZIPPERS ALL THE WAY DOWN
03:37:33 <Jafet> Pull your zippers all the way down.
03:41:05 -!- zzo38 has joined.
03:42:17 <zzo38> I have connected the DVD recorder's output to a digital video stabilizer (which is not turned on; it has no power source) and then the digital video stabilizer's output to the DVD recorder's input. What happens is that the menu is cancelled, it remains visible but becomes increasingly blurry and then fades away.
03:42:49 <zzo38> (I connected the RF out to the TV set)
03:46:25 <zzo38> What do you think of such things as this????
03:46:42 <elliott> yes
03:48:22 <monqy> me too
03:48:27 <zzo38> I suppose it is like composite video feedback?
03:51:48 <zzo38> What is this monad transformer m (x, m x)
03:55:54 -!- PiRSquared17 has quit (Read error: Connection reset by peer).
03:57:03 <Jafet> @mtl m (x, m x)
03:57:04 <lambdabot> Maybe you meant: ft map msg pl unmtl url
03:57:25 <Jafet> @unmtl ReaderT
03:57:25 <lambdabot> Plugin `unmtl' failed with: `ReaderT' is not applied to enough arguments, giving `/\A B C. A -> B C'
03:57:45 <Jafet> Most helpful error message ever
03:58:06 <elliott> are you being sarcastic?
03:58:15 <elliott> it IS helpful!
03:58:47 <elliott> Jafet: anyway itym writer
03:58:59 <Jafet> Indeed. It was as good as if I had used @unmtl correctly
03:59:13 <Jafet> Because it gave the type at the end
03:59:20 <Jafet> @unmtl WriterT
03:59:20 <lambdabot> Plugin `unmtl' failed with: `WriterT' is not applied to enough arguments, giving `/\A B C. B (C, A)'
03:59:37 <Jafet> @unmtl WriterT (m x) m x
03:59:37 <lambdabot> m (x, m x)
03:59:37 <elliott> not type
03:59:40 <elliott> definition
04:00:08 <Jafet> Type definition
04:00:25 <elliott> Jafet: that relies on Monoid (m a), anyway
04:00:46 -!- Jafet has quit (Quit: Leaving.).
04:07:59 <oerjan> you could define mappend = (>>), mempty is a little awkward.
04:08:13 <zzo38> I think I have managed to define the monad and comonad transformers for the type I have given
04:08:39 <zzo38> oerjan: Any Alternative or MonadPlus instance is a monoid (or, at least, should be a monoid, although some aren't)
04:09:38 <oerjan> hm i guess getting x >> mempty = x is difficult
04:11:12 <zzo38> oerjan: Yes..... If the type inside is monoid, then you can make applicative monoid by: mempty = pure mempty; mappend = liftA2 mappend;
04:11:14 <kallisti> aka (>>) = const
04:12:27 <oerjan> kallisti: um it's supposed to old only for mempty
04:12:40 <oerjan> but for all x of the same type
04:13:05 <oerjan> *hold
04:14:14 <kallisti> ah right
04:15:41 <zzo38> As far as I know, the only way is Alternative/MonadPlus and the other way I specified
04:16:13 <oerjan> and it basically doesn't work because of the derivable law fmap f x >> y = x >> y
04:17:03 <oerjan> which means if y = mempty, fmap f x = x for all f of the right type
04:17:42 <zzo38> So it is a constant functor, then
04:17:46 <oerjan> or put differently, >> never preserves the return value of its first argument.
04:18:42 <oerjan> it can work for m (), but not much else
04:18:53 <oerjan> (ignoring undefined)
04:19:24 <zzo38> oerjan: Yes it works with m () I did not think of that at first but yes
04:21:23 <zzo38> But this way is going to work as long as return type is monoids (and it works for any Applicative; it doesn't necessarily have to be Monad): mempty = pure mempty; mappend = liftA2 mappend;
04:22:12 <zzo38> At least, I think it is!
04:22:46 -!- cheater_ has quit (Ping timeout: 240 seconds).
04:22:56 <oerjan> yes i think so. basically you can do the same with any algebraic structure instead of Monoid.
04:24:21 <oerjan> like lambdabot does with Num and ->
04:24:39 <oerjan> > (2 + id) 5
04:24:41 <lambdabot> 7
04:24:55 <elliott> *Conal
04:25:01 <elliott> it imports Conal's module to do that
04:25:05 <oerjan> ok
04:25:10 <monqy> which conal moduel
04:25:28 <elliott> http://hackage.haskell.org/package/NumInstances
04:26:30 <Sgeo> I like how looking at the Haddock page is completely useless
04:26:53 <zzo38> Sgeo: They have source codes views, too, though.
04:27:09 <Sgeo> True
04:27:39 <elliott> lift2 :: (a->u) -> (b->v) -> (a,b) -> (u,v)
04:27:39 <elliott> liftA2 :: (a->b->u) -> (c->a) -> (c->b) -> (c->u)
04:27:45 <elliott> it feels like there must be a way to relate these two
04:28:03 <elliott> or at least
04:28:21 <elliott> foo :: (a->b->c) -> (a,a) -> (b,b) -> (c,c)
04:28:32 <monqy> lift2 looks familiar
04:28:39 <monqy> (***)?
04:28:43 <zzo38> I have made proper Eq and Ord and Show instance for some functions.
04:28:49 <Sgeo> Yes, accoridng to the soirce
04:28:52 <Sgeo> Tyop
04:29:02 -!- oerjan has quit (Quit: Good night).
04:29:20 <elliott> NO IWAS GOING
04:29:21 <elliott> TO ASK YOU
04:29:22 <elliott> ;_;
04:29:28 -!- Jafet has joined.
04:30:12 <zzo38> At first I made a AllValues class, and then I made instance (Eq y, AllValues x) => Eq (x -> y) instance (AllValues x, AllValues y) => AllValues (x -> y) instance (AllValues x, AllValues y) => Ord (x -> y) instance (AllValues x, AllValues y) => Enum (x -> y) instance (AllValues x, AllValues y) => Bounded (x -> y) instance (AllValues x, Show x, AllValues y, Show y) => Show (x -> y)
04:30:40 <monqy> what is AllValues
04:31:10 <zzo38> class Eq x => AllValues x where { allValues :: [x]; }; It make a list of all values
04:32:07 <zzo38> instance AllValues Zero where { allValues = []; }; instance AllValues () where { allValues = [()]; }; instance AllValues Bool where { allValues = [False, True]; };
04:32:14 <elliott> s/AllValues/Countable/ :)
04:32:40 <zzo38> instance AllValues x => AllValues (Maybe x) where { allValues = Nothing : (Just <$> allValues); }; instance (AllValues x, AllValues y) => AllValues (x, y) where { allValues = liftM2 (,) allValues allValues; }; instance (AllValues x, AllValues y) => AllValues (Either x y) where { allValues = (Left <$> allValues) ++ (Right <$> allValues); };
04:35:26 * elliott notes http://sprunge.us/LZRT to self
04:35:38 <elliott> zzo38: Do you need (Eq a)?
04:35:50 <elliott> instance (AllValues x, AllValues y) => AllValues (Either x y) where { allValues = (Left <$> allValues) ++ (Right <$> allValues); };
04:35:56 <elliott> you should probably interleave rather than (++)
04:35:57 <elliott> consider Integer
04:36:12 <monqy> i think the point is that infinite lists are criminal
04:36:17 <monqy> note Bounded instance
04:39:41 <monqy> but does the bounded instance even work
04:39:41 <zzo38> What is m (x, m x) and what is m (m () -> x)
04:40:36 <zzo38> monqy: instance (AllValues x, AllValues y) => Bounded (x -> y) where { minBound = const $ head allValues; maxBound = const $ last allValues; };
04:41:01 <elliott> ais523: how does nethack prevent save-scumming apart from permissions, again? ISTR that it deletes your gamefile under some circumstance
04:41:40 <monqy> are there any Bounded laws
04:41:56 <elliott> maxBound >= minBound, one suspects :P
04:42:37 <zzo38> Note with (Zero -> Zero) that you have allValues = [id] and meaning $0^0=1$ as well
04:44:05 <elliott> |0^0| = 1 is easy to prove, set-theory wise, I think.
04:44:16 <elliott> well you need extensional equality
04:48:02 <zzo38> It is all using extensional equality.
04:53:06 <elliott> no, I don't mean your instance, I mean in type theory
04:53:36 <elliott> where = denotes actual equality (i.e. only refl : x = x, extensionality being an additional, optional axiom), so you can't just define an instance of it, you have to prove things :)
04:54:38 <zzo38> Extensionality is probably useful with a lot of things in Haskell, though
04:54:53 -!- PiRSquared has joined.
04:57:40 * kallisti thinks for his second skyrim character he'll focus on stealth and illusion.
04:58:41 <kallisti> oh and conjuration I guess.
04:59:03 <kallisti> also vampire because they works well with stealth and illusion
04:59:28 <kallisti> you can literally sneak around dungeons, frenzying enemies and conjuring things without actually killing a single thing.
05:06:47 -!- PiRSquared has quit (Quit: ChatZilla 0.9.87 [Firefox 8.0.1/20111120135848]).
05:07:05 -!- azaq23 has quit (Read error: Connection reset by peer).
05:08:34 <elliott> kallisti: write my code. wait, no, you'll fuck it up
05:10:47 <elliott> split (L:ps) (x, Fork R t up) = Branch (Tip (Zipper (focus ps t))) (Tip (Zipper (x, up)))
05:10:48 <elliott> split (R:ps) (x, Fork L t up) = Branch (Tip (Zipper (x, up))) (Tip (Zipper (focus ps t)))
05:10:48 <elliott> note to self: maybe make this a bit smarter? I think I can try and balance the tree between the two
05:18:10 <ais523> elliott: it deletes the savefile if it notices inconsistencies, e.g. a level file having been renamed (which would otherwise duplicate the level), or an open level file having the wrong stored PID (i.e. copied from a different game)
05:18:46 <elliott> ais523: heh
05:19:00 <elliott> ais523: I wonder why, did it not always use to be setgid?
05:19:09 <ais523> savescumming by directly copying the savefile isn't detected
05:19:16 <ais523> and it's for non-setgid setups, or people cheating using sudo, etc
05:19:23 <ais523> or Windows
05:19:35 <elliott> cheating with sudo sure is impossible now!
05:21:15 -!- pikhq_ has quit (Ping timeout: 268 seconds).
05:25:52 <zzo38> Even in UNIX some player could have their own private copy to do whatever they want to, and then keep the high scores file separate from the system score file.
05:26:00 -!- pikhq has joined.
05:26:41 <zzo38> If you have sudo then of course you can cheat by changing whatever files you want
05:28:18 <elliott> zzo38: nethack only reads from the system directories
05:28:24 <elliott> a user could, of course, compile their own version
05:28:31 <elliott> but it wouldn't be recorded in the system's high score files and so on
05:28:47 <elliott> but you can't copy out things from the data directory
05:28:51 <elliott> since users don't have read permissions on them
05:29:31 <elliott> You could determine the RNG seed by doing a huge number of RNG-reading actions at the start of the game
05:29:42 <elliott> But I doubt NetHack's RNG is insecure enough for that to be practical; ais523?
05:29:54 <ais523> elliott: heh, hahahahaha
05:29:58 <ais523> this has been discussed to death already
05:30:04 <ais523> Adeon even has a rainbow table
05:30:08 <elliott> wow
05:30:09 <zzo38> elliott: Yes, it is like I have mentioned. But if you have sudo then you can affect any file so you can easily cheat like that
05:30:14 <elliott> so it _is_ possible?
05:30:18 <elliott> only locally, one presumes
05:30:24 <ais523> in unpatched versions, yes; it just uses libc rng
05:30:28 <ais523> which only has a 32-bit keyspace
05:30:33 <elliott> heh
05:30:38 <elliott> still, not relevant for the remote-use situation
05:30:39 <elliott> unless, hmm
05:30:40 <ais523> which is small enough for rainbow tables to be practical
05:30:45 <elliott> i guess you could script nethack remotely
05:30:48 <elliott> with ptys and shit
05:30:49 <ais523> most servers have cryptoRNGs now, though
05:30:54 <elliott> same way as locally, one presumes
05:30:58 <ais523> precisely to stop that sort of shenanigans
05:30:59 <zzo38> You could use RNG that partially uses private files that users do not have access to, and adjust those files some times
05:31:01 <elliott> ais523: I'm assuming a UNIX shell account setup
05:31:04 <elliott> which just happens to have nethack
05:31:11 <elliott> that's the only setting nethack's weird security choices make sense in
05:31:14 <ais523> elliott: oh, that'd probably have libc rng, and the rainbow tables would work fine
05:31:19 <elliott> right
05:31:32 <elliott> ais523: but how big are they :P
05:31:41 <ais523> "how big"?
05:31:46 <elliott> ais523: the tables
05:32:03 <elliott> zzo38: well, that doesn't help if the RNG's output is still too small
05:32:08 <ais523> I'd guess a little over 4 GiB
05:32:12 <ais523> umm, 16 GiB
05:32:18 <elliott> ais523: right, so that wouldn't work for a shell account.
05:32:23 <ais523> need to fit 4-billion 4-byte numbers in there
05:32:30 <ais523> you can brute-force it reasonably easily, it's just much slower
05:32:35 <elliott> they usually have quotas :)
05:32:44 <elliott> ais523: well, of course you can; the question is how much slower
05:32:54 <Jafet> "nethack is turn based.
05:33:07 <Jafet> You just won't get any time records.
05:33:10 <elliott> Jafet: yes, it is
05:33:13 <ais523> 4 billion item ID generations would probably be done in a few minutes on a modern system
05:33:18 <elliott> but if you have a unix shell account on a large server
05:33:23 <elliott> and peg the CPU for a few weeks
05:33:28 <elliott> you won't have a unix shell account for much longer
05:33:30 <ais523> for a wizard, starting inventory generally gives enough entropy to determine the RNG by itself
05:33:41 <elliott> ais523: right
05:33:46 <elliott> won't at least 4 billion turns pass, though?
05:33:56 <Jafet> nice 19 ./winnethack
05:33:57 <elliott> you'd ideally want a zero-turn RNG observation
05:34:02 <elliott> Jafet: 2347892349234 weeks :P
05:34:16 <ais523> no? you look at the appearances of all the random items in your inventory, write them down, save, then put them into your bruteforce script
05:34:30 <Sgeo> elliott, kallisti, update
05:34:53 -!- itidus20 has quit (Ping timeout: 248 seconds).
05:34:54 <elliott> ais523: hmm, but surely that has fewer bits than the RNG state
05:35:11 <ais523> it has way more than 32 bitsw
05:35:12 <ais523> *bits
05:35:16 <ais523> 32 bits is not a lot of bits
05:35:19 <Jafet> You can also just look at the current time, can't you
05:35:23 <Jafet> And pid
05:35:29 <elliott> ais523: oh, right, 32-bit state
05:35:33 <ais523> Jafet: right, in an unpatched version it's seeded with current time
05:35:38 <ais523> so you don't even need to reverse the seed
05:35:47 <elliott> yeah but what if you have a patch for that but not the other thing!!! :P
05:36:24 <ais523> elliott: that was the situation on NAO for a while
05:36:28 <ais523> it's why the rainbow tables were invented
05:36:31 <elliott> heh
05:36:38 <elliott> but this is a shell account scenario! you're ruining everything
05:37:20 -!- MDude has changed nick to MSleep.
05:38:03 <ais523> wait what? how did I miss http://esoteric.voxelperfect.net/wiki/Merthese
05:38:05 <Jafet> NAO is not much different from a shell account that only lets you play nethack
05:38:13 <ais523> it needs to be added to categories and lists
05:38:21 <ais523> I'm just not sure whether regular or joke
05:38:37 <elliott> <ais523> wait what? how did I miss http://esoteric.voxelperfect.net/wiki/Merthese
05:38:39 <ais523> it's rather reminiscent of HQ9+, just less interesting
05:38:43 <elliott> ais523: under the massive, crippling delude of spam, one presumse
05:38:44 <elliott> *presumes
05:38:50 <elliott> Jafet: "only" being the key thing
05:38:56 <elliott> you can't compile a local copy of nethack
05:39:14 <ais523> compile nethack on the shell account? it's not like its source isn't available, and you probably have some cc
05:39:57 <elliott> I swear there was a reason for it at the time
05:40:48 <Sgeo> Hussie, learn2relativity
05:43:20 <monqy> thanks
05:43:29 <elliott> thanks -- monqy, 2011
05:43:35 <elliott> -- monqy's tombstone, 2012
05:43:52 <monqy> but was monqy ever alive
05:44:10 <ais523> elliott: do you think there'll be mass panic in 2013 from all the people who thought the world would end in 2012?
05:44:23 <elliott> ais523: it's december 21st, so I assume the panic will be on december 22nd.
05:44:30 <elliott> or 23rd, perhaps
05:44:39 <ais523> nah, most 2012 conspiratorist people don't care about the exact date
05:44:44 <elliott> yes, they do
05:44:50 <elliott> it's the mayan calendar date, they care about it more than anything
05:44:57 <elliott> ofc they'll find another wacky thing to believe in afterwards
05:44:57 <monqy> people actually believe?
05:45:02 <elliott> but it isn't just "2012", it's december 21st, 2012
05:45:07 <elliott> i predict: suicides
05:45:20 <elliott> which makes no sense, but it happened in Y2K
05:45:29 <elliott> *on Y2K
05:45:41 <Jafet> We should start a cult that promotes mass suicide on that day.
05:45:46 <Jafet> That would get rid of a lot of dumb people.
05:45:58 <elliott> "social darwinism" --Jafet, 2011
05:46:27 <Jafet> "applied memetics"
05:46:32 <shachaf> elliott: Isn't that just regular Darwinism?
05:46:41 -!- Ngevd has quit (Ping timeout: 252 seconds).
05:47:16 <elliott> shachaf: I don't think so.
05:47:44 <elliott> Darwinism is about natural situations; Social Darwinism is trying to "help" Darwinism along by killing people indirectly.
05:47:58 <elliott> (Well, very imprecisely.)
05:48:07 * shachaf has a very broad definition of "natural".
05:48:07 <elliott> (Social darwinism does not really have much to do with Darwinism.)
05:48:34 <elliott> shachaf: If you intentionally practice social darwinism, it means you don't believe Darwinism works by itself.
05:48:43 <shachaf> elliott: Huh? No.
05:48:53 <elliott> Sure it does.
05:49:16 <shachaf> That's like saying that thinking and making decisions is "deviating from evolution" because it's not acting on "instinct" anymore.
05:49:44 <Jafet> By the way elliott, nice racking us up to one godwin
05:49:51 <elliott> It kind of is? The "purpose" of evolution is to keep you alive and reproducing until you're 20-something.
05:50:00 <shachaf> I believe Darwinism works by itself, and sometimes it works *through* people intentionally practicing X.
05:50:01 <elliott> Jafet: Nobody's said the word Nazi yet! This is at most 0.75 Godwins.
05:50:15 <shachaf> Where X can be anything.
05:50:42 * elliott also thinks that believing Darwinism "should" work is ridiculous. Or even saying it *does* "work", theories don't work, they're just true or not.
05:50:55 <Jafet> Yes. I hope Hitler is never mentioned in this conversation.
05:51:06 <elliott> Shut up, Jafet "Hitler" Jafet.
05:51:17 <zzo38> Jafet: But you did, right now, isn't it?
05:51:50 <shachaf> elliott: That's a very narrow-minded view of the "purpose" of evolution.
05:52:31 <elliott> shachaf: I don't really see how, but hopefully I'm using enough "scare quotes" to convey that I don't think the terminology is worthwhile in the first place.
05:52:49 -!- itidus21 has joined.
05:53:03 <shachaf> Well, for example, it assumes that you're talking about humans.
05:53:34 <shachaf> Anyway, the "purpose" of evolution is whatever happens.
05:53:38 <elliott> Well, the 20-something part does, definitely.
05:53:42 <elliott> But I agree with that.
05:53:52 <elliott> Which just makes social Darwinism all the more ridiculous, are we violently agreeing?
05:54:08 <zzo38> If it is suicide cult, then you have to insist on exactly the date and make the method of suicide depending on your time of birth or whatever (maybe suicide by being eaten by sharks or whatever so that at least hungry animal can survive even if people don't)
05:54:24 <elliott> zzo38: Yes, definitely.
05:54:37 <shachaf> elliott: I'm not sure what social Darwinism is anymore, so I have no idea.
05:55:42 <elliott> shachaf: I don't think its supporters know, either, but everything I've heard from them boils down to "weak people are inferior, and therefore we should not have <public service> because it'd be better if they just died instead".
05:55:52 <elliott> I wish that was an unfair caricature.
05:57:04 <pikhq> As though evolution made any sort of judgement beyond "this reproduces, this does not"
05:57:05 <shachaf> elliott: That seems, in a sense, reasonable to me.
05:57:29 <shachaf> But if you don't support social Darwinism then you should at least support eugenics.
05:57:55 <pikhq> shachaf: Perhaps if one presumes a truly perfect judge of what we "ought" to have?
05:58:16 <shachaf> "ought"? I'm not a moralist, I don't know about "ought".
05:58:17 <elliott> shachaf: I don't see how; justifying it with Darwinism certainly doesn't make any sense, and "weaker = less worthy of life" is beyond ridiculous.
05:58:24 <elliott> shachaf: And no, I don't support eugenics.
05:59:03 <shachaf> elliott: Who said anything about "worthy"?
05:59:18 <pikhq> The truly obvious fault with eugenics is that someone has to make the call on that. And inevitably, this call is going to be disliked. Some *deity* might be able to make perfect eugenic selections that everyone would agree is reasonable.
05:59:22 <pikhq> We don't have deities.
05:59:30 <shachaf> Anyway, humanity certainly embraces "different = less worthy of life".
05:59:31 <elliott> shachaf: If you think that weaker people should die, then it seems a fair assessment to say you think weaker people are less worthy of life?
05:59:49 <pikhq> We live in a world where "different" implies "undeserving of life".
05:59:50 <elliott> And maybe humanity does, but I certainly don't, and it's ridiculous to suggest that we must.
05:59:59 <shachaf> elliott: I don't think "should" is a word I would use.
06:00:21 <elliott> <shachaf> But if you don't support social Darwinism then you >>>should<<< at least support eugenics.
06:00:23 <shachaf> elliott: You don't?
06:00:27 <elliott> Q.E.D. bitches!
06:00:36 <shachaf> elliott: That was meant in a non-moral sense.
06:00:40 <elliott> It was a joke.
06:00:41 <shachaf> But, fine.
06:00:58 <elliott> shachaf: The fact that I don't embrace "different = less worthy of life" surprises you?
06:01:02 <elliott> Maybe you need to define "different".
06:01:04 <shachaf> I certainly think we must treat things that are sufficiently different, like bacteria, as less worthy of life.
06:01:36 <shachaf> Some people draw the line at "other humans"; some draw it at "seemingly conscious animals"; some draw it at "humans sufficiently similar to me".
06:01:42 <elliott> Well, that's *very* different; it's non-sentient.
06:01:45 <shachaf> I don't see one of those as all that objectively different from the others.
06:01:50 <zzo38> I don't support eugenics and I don't support "different = less worthy of life" but not having public service is a much more complicated decision to make.
06:02:27 <pikhq> shachaf: If we only deal with objective differences, we are all merely different arrangements of mass.
06:02:37 <shachaf> pikhq: Well, exactly.
06:02:38 <pikhq> This, of course, is a completely worthless viewpoint.
06:02:41 <shachaf> elliott: So are you against the killing of sentient animals?
06:02:46 <elliott> Things that aren't sentient have as much right as tables. But I essentially agree with pikhq; if you insist on complete "objectivity", then you'll never derive anything of *human* moral use.
06:03:06 <elliott> (And yeah, yeah, "not a moralist", but you're definitely making judgements.)
06:03:23 <shachaf> I think I'm being a devil's advocate more than making judgements. :-)
06:04:13 <zzo38> You shouldn't break a table for no reason either; because then it cannot be used to put stuff on there.
06:04:26 <shachaf> zzo38: You speak wise words.
06:05:33 <elliott> shachaf: Broadly, yes. Stopping sentient animals from dying is a very important thing. I admit I eat meat, and thus support the killing of sentient animals. It's hard to defend this, I admit, and some of it surely must be chalked up to my human irrationality, but I think stopping eating meat would have completely neglegible effect on the meat industry, and I don't think enough people make judgements th
06:05:33 <elliott> e way I do for it to be important, morally, for me to decide not to eat meat.
06:06:15 <shachaf> elliott: "I think voting would have a completely negligible effect on the voting industry", etc.
06:06:36 * shachaf doesn't eat meat, and is therefore obviously morally superior to you!
06:06:47 <elliott> shachaf: You missed the important part of that message.
06:06:49 <shachaf> (That's actually not a thing I say, despite not eating meat.)
06:06:56 <elliott> "and I don't think enough people make judgements the way I do for it to be important, morally"
06:07:04 <zzo38> It is OK to be vegetarian (or vegan) if you want to, or to eat meat. But, is better for the such animals dead only if you must eat instead of for other purposes such as just to use fur or whatever (but if you must eat; then you shouldn't waste the rest either. However you also shouldn't waste people)
06:07:13 <elliott> What-if-everyone-did-what-you-did only works if everyone thinks sufficiently like you.
06:08:08 <elliott> Or if you want to set an example to others, I suppose, but I don't think anyone holds me in great esteem.
06:08:29 <elliott> (I'm not sure I do believe that voting is worthwhile, but that's another matter entirely.)
06:08:31 <shachaf> That's reasonable. The actual reason I don't eat meat probably has to do with as much irrationality as your reason for doing it.
06:08:44 <shachaf> elliott: Right, but replace "voting" with something else.
06:09:09 <elliott> Yes, indeed.
06:09:11 <shachaf> There exist games of prisoner's dilemma where coöperating is worthwhile.
06:09:20 <zzo38> Voting is different. Vote or don't vote is really a matter of choice; only the vote ought to be affected in this way and how voting is supposed to work by the people voting
06:10:03 <elliott> shachaf: I do admit I generally value human life over non-human sentient life. But I'm inclined to say that this is irrationality derived from, well, being human.
06:10:16 <shachaf> elliott: I don't think that's really irrational.
06:10:24 <shachaf> Well, at least in any sense of the word "irrationality" worth considering.
06:10:34 <zzo38> I think it is good thing that some people are vegetarian and some people are not vegetarian.
06:10:37 <shachaf> Any species that valued every other species just as much as itself would probably soon go extinct.
06:10:39 -!- homo has joined.
06:11:14 <elliott> But also the position I'm coming from is more "killing humans and killing $other are both terrible" rather than "killing humans isn't any worse than killing $other", which is one of those tricky non-arithmetic distinctions.
06:11:27 <elliott> shachaf: I don't buy that.
06:11:43 <elliott> shachaf: Like you said, if you go by what's "good for evolution", then lots of things are bad.
06:12:45 <zzo38> I generally do not value human life over non-human sentient life; although it is sometimes useful to do so if they must be given unequal values; however, to kill some people or non-people, for self-defense, is still necessary, so the problem of value is not necessarily to solve. If you put in your will someone should eat you instead then maybe they should eat you instead.
06:13:03 <zzo38> And use your blood to write the note of your death, instead of using normal ink.
06:13:21 <elliott> This conversation has suddenly taken an incredibly sinister tone.
06:13:57 <zzo38> The difference in values also depends a lot on circumstances
06:14:17 <shachaf> elliott: At any rate, I think my point was, vaguely: Some people say "doctors are weakening humanity by healing people who would otherwise die, thereby perpetuating bad genes! They shouldn't do that!", and that's a silly argument, of course, because some things are more valuable than resistance-to-disease-$FOO.
06:14:28 <shachaf> Like intelligence-to-be-able-to-make-a-cure-for-$FOO.
06:14:39 <shachaf> (Genetic-resistance, I mean.)
06:15:01 <zzo38> One such circumstance (for the things I mentioned) might be the level of overpopulation/underpopulation.
06:15:46 <elliott> shachaf: I'm pretty sure my utilities work out that $PERSON-dying is much, much worse than resistance-to-disease-$FOO for almost all $PERSON and $FOO.
06:15:57 <elliott> Erm.
06:16:00 <elliott> *than not having resistance-to-
06:16:08 <shachaf> But if you keep doing this, you eventually end up with a population of terribly-weak-but-intelligent humans, who require dozens of medications for staying alive.
06:16:14 <zzo38> shachaf: Well, you use healing it can help it is really their choice. But it is good things in general. However, be careful in case it is impossible to do so or in case of the person does not want to be healed or would rather practise on themself, or write a report about the disease which is eventually dying.
06:16:43 <shachaf> So that's a bad thing. Therefore it makes sense to use all this intelligence that you've been sacrificing other things for to improve humanity by modifying genes directly, or something.
06:16:55 <elliott> shachaf: I don't buy that. Slippery slope arguments are tricky.
06:17:10 <elliott> There's far too many externalities and other noise involved to keep that from working out as simply as that.
06:17:19 <zzo38> shachaf: No! You should modify your own genes directly! But not other people.
06:17:31 <shachaf> By the way, "eugenics" doesn't refer to genetic engineering for the purpose of improving humanity?
06:17:40 <shachaf> zzo38: Sure, I'll be happy to just modify my own genes.
06:17:59 <elliott> shachaf: But it seems what you're basically saying is "assume strict utilitarianism, ergo everyone drop everything and work on saving humanity".
06:18:29 <shachaf> elliott: I think you have an irrational bias towards any individual human rather than humanity as a whole.
06:18:31 <elliott> shachaf: And I'm sure its supporters think of it like that.
06:18:42 <zzo38> And I should modify my own genes, and they should modify their own genes, and so on.
06:18:48 <elliott> shachaf: Eugenics in practice is "you need a license from the government to breed, and they reject you if you're not $attributes enough".
06:19:11 <shachaf> elliott: Oh. Well, that's not what I meant.
06:19:24 <shachaf> And hearing "1000000 humans died" doesn't actually make you 1000000 times as sad as hearing "human $X" died -- it might even make you less sad.
06:19:28 <elliott> You just mean genetic engineering.
06:19:32 <elliott> And yes, I'm aware of that particular bias.
06:19:48 <elliott> But *intellectually*, I'm pretty sure it's about 1000000 times as bad.
06:20:05 <shachaf> elliott: OK, genetic engineering, then.
06:20:10 <elliott> You can't really expect my emotions to match my moral viewpoints in scenarios the human brain basically draws a blank on.
06:20:53 <elliott> shachaf: Right, genetic engineering for the benefit of humanity, certainly, go for it. I'm not sure how well it'll work out in the short term or whatever but it has noble goals.
06:20:55 <zzo38> shachaf: What do you think I care? Unless, it is someone I happen to know about (whether I know them personally or not). Since they are *already dead*, what do you think I should care about it afterward? They aren't dead only temporarily (probably)
06:21:08 <elliott> But no, eugenics is just about controlling breeding.
06:21:18 <shachaf> But of course your moral viewpoints are pretty much "your emotions + some logic in a desperate attempt to get some self-consistency". :-)
06:21:45 <shachaf> elliott: OK, so that was the wrong word to use.
06:22:01 <elliott> shachaf: Guilty. It doesn't bother me much since I realised that trying to justify my morals to myself was one of the least productive things I could possibly do.
06:23:40 <zzo38> It is also probably better for mortals to eat immortals (regardless of human or not). Which means that immortality can also be one of the circumstances to consider?????
06:23:41 <shachaf> Anyway, I do think humanity-getting-weaker-in-the-long-run is a potential problem. And if you start "interfering" with evolution's method of doing genetic engineering, it's a good idea to figure out some substitute yourself.
06:24:01 <shachaf> Of course, talking about "interfering" with evolution is ludicrous.
06:24:07 <shachaf> Whatever you do, that's evolution.
06:24:19 <zzo38> shachaf: You think it is a potential problem, or will it be balanced by overpopulation?
06:24:22 * elliott doesn't quite agree with that.
06:24:34 <shachaf> With which that?
06:24:42 <elliott> "Whatever you do, that's evolution."
06:25:17 <shachaf> Why not?
06:25:22 <homo> hi
06:25:25 <homo> a - a blessed +5 mace (weapon in hand)
06:25:28 <homo> is this any good?
06:25:29 <shachaf> This goes together with my view of "natural" as "whatever happens". :-)
06:25:34 <hagb4rd> plus whatever it does with you
06:25:36 <homo> i'm level 3
06:25:39 <elliott> homo: You're warg.
06:25:39 <shachaf> homo: Depends on what point of the game you're in.
06:25:41 <elliott> ais523: homo's warg.
06:25:46 <shachaf> homo: Yes, pretty good.
06:25:52 <ais523> homo: wrong channel
06:25:57 <shachaf> Wait, I don't even know what game you're playing.
06:26:00 <elliott> shachaf: Feeding a ban-evading troll there.
06:26:04 <shachaf> I assumed it was NetHack.
06:26:09 <elliott> It is.
06:26:15 <shachaf> Ah.
06:26:33 <elliott> Say the Big Friendly Singularity-God From The Sky comes down and makes us all immortal and stops us reproducing ever and we all live in a happy utopia until the universe's t variable rolls over; we'll have reached a desirable state (if you don't find the scenario desirable, mentally modify it appropriately), but there'll be no reproduction or selection or any of that happening. Would you say evolution
06:26:33 <elliott> is happening, a billion years down the line?
06:27:29 <shachaf> Maybe I'm using the wrong word again.
06:27:31 <homo> Is that rhetorical?
06:27:41 <shachaf> Perhaps I should stick to "The Tao" instead of "evolution". :-)
06:28:01 <shachaf> My meaning of the word in this context also includes things that happened before there was any life, for instance.
06:28:01 <zzo38> elliott: In that case, we had better not eating or drinking anything ever.
06:28:19 <homo> I think elliott is being alegorical
06:29:20 <zzo38> Evolution of nature probably doesn't happen, but evolution of languages might still be able to happen.
06:29:33 <shachaf> elliott: By the way, have you seen my pet?
06:29:47 <elliott> shachaf: No.
06:30:31 <shachaf> elliott: My reasoning is that a maximally-happy sentient being would not have any need for doing human things like feeling "emotions" other than happiness, or doing anything, or anything like that.
06:30:35 <homo> Can evolution cease without complete stasis? Isn't any type of change, even in thought, a form of evolution?
06:30:43 <elliott> shachaf: "Your" reasoning.
06:30:43 <shachaf> And you must treat sentience extensionally, right?
06:30:49 <homo> or were you speaking strictly from a geneticist pov?
06:30:52 <shachaf> Therefore: http://slbkbs.org/pet.txt
06:31:14 <elliott> shachaf: Reminds me of 1/0.
06:31:25 <shachaf> 1/0?
06:31:48 <homo> dont try it shachaf! the universe will implode!
06:32:15 <elliott> shachaf: A comic, most of which is devoted to the characters arguing with the author and hashing out the (meta)physics of the universe. (It's better than it sounds, apart from a brief period where the author tries to argue for monotheism with the medium.)
06:32:18 <homo> dividing by zero is very dangerous.
06:32:18 <shachaf> elliott: Anyway, if you opened that in your browser, you'd better not close the tab. That would be akin to murder, and, worse, murder of a maximally-happy person.
06:32:27 <elliott> Well, *was devoted, I suppose.
06:33:19 <zzo38> homo: "Isn't any type of change, even in thought, a form of evolution?" Like, that is what I meant by my comments, such as evolution of languages and so on, possibly
06:33:34 <elliott> shachaf: I think what you're doing is assuming I'm a strict utilitarian and trying to prove me wrong, but it's really more that my moral reasoning is /broadly/ utilitarian with a bunch of fuzzing out to eliminate things I don't like :-)
06:34:15 <shachaf> elliott: No, I consider that my actual pet, and my goal is to fill the universe with copies of it that will run for as long as possible.
06:34:23 <elliott> shachaf: Also, I'm not sure the happiness of the killed being matters.
06:34:29 <homo> T_T
06:34:34 <homo> You see here an uncursed kitten corpse named Samantha.
06:34:36 <zzo38> Dividing by zero is not allowed; it is improper.
06:34:36 <hagb4rd> evolution? what we can say for sure: there is movement.. heat
06:34:42 <elliott> I don't necessarily buy that killing someone sad is way worse than killing someone happy.
06:34:54 <hagb4rd> stardust
06:35:02 <homo> nethack killed a kitten
06:35:14 <shachaf> elliott: What about killing someone who's sad and in pain etc. and wants to die?
06:35:37 <elliott> shachaf: The keyword is "wants", isn't it? :)
06:35:43 <zzo38> shachaf: I think if they want to die, even in future, then they should commit suicide, isn't it?
06:36:03 <homo> what if they don't want to die, but they don't want to live any more either.
06:36:05 -!- ChanServ has set channel mode: +o ais523.
06:36:19 -!- ais523 has set channel mode: +b *!*@ec2-50-112-122-72.us-west-2.compute.amazonaws.com.
06:36:25 -!- ais523 has kicked homo User terminated!.
06:36:33 <ais523> ban evasion is not good…
06:36:47 -!- Ngevd has joined.
06:36:49 -!- ais523 has set channel mode: -o ais523.
06:36:53 <shachaf> elliott: Given the choice of killing one of two people, one of whom is miserable and will continue to be miserable for the rest of their life, and the other one of whom is happy and will continue to be happy for the rest of their life, you wouldn't chooise to kill the unhappy one?
06:36:57 <elliott> ais523: the union of the two Deathly bans is *!*@*2*
06:37:00 <elliott> you should ban that instead :-)
06:37:05 <ais523> elliott: too much chance of a false positive :)
06:37:08 <shachaf> Given that they'll be equally productive-to-society-and-whatever-else.
06:37:11 <ais523> I have a feeling he'll be back
06:37:17 <elliott> me too
06:37:32 <shachaf> ais523: Foolproof solution: *!*@*
06:37:44 <ais523> but I think you actually have to pay Amazon money to change your IP
06:38:05 <elliott> shachaf: I dunno, but I'm really sceptical that it's relevant to states that my inevitably-self-contradictory utility function will actually be called on.
06:38:13 <elliott> Because of the "all else equal" part.
06:38:19 <ais523> oh, homo's mostly repeated what he said here in #nethack
06:38:24 <ais523> but it's not massively offtopic there like it is here
06:38:31 <elliott> ais523: hmm, word-for-word?
06:38:39 <ais523> no, same meaning but paraphrased
06:38:41 <elliott> he seems to like pasting things to other channels :)
06:38:41 <elliott> ah
06:39:17 <shachaf> elliott: Well, you're just making it more complicated by not considering the all else to be equal.
06:39:17 <zzo38> homo: In that case, let them to live unless you are required to eat them which will kill them too; or let them maybe they have some good idea to work other people might like that. But first be careful. If they are live then they can remain live or dead later (especially, if they change their mind later; please give time) but if dead it cannot be made back live again
06:39:29 <shachaf> I think it's a fair thing to consider.
06:39:35 <elliott> shachaf: Well, the point is that I'm pretty sure being really miserable makes you less productive.
06:39:45 -!- Ngevd has quit (Client Quit).
06:40:06 <ais523> also, turns out you can't kickban an IP
06:40:08 <elliott> shachaf: But yes, it's overcomplicating things, but the point is that "I could try and answer this, but why bother, if (a) it'll never come up, and (b) I can get better results by not defining the result?".
06:40:11 <ais523> the ban works but the kick doens't
06:40:21 <elliott> /kick
06:40:24 <shachaf> elliott: No, there are some excellent tortured artists.
06:40:31 <elliott> ais523: also, *doesn't
06:40:34 <zzo38> elliott: Yes probably. It is why you can learn to be less miserable.
06:40:38 <elliott> shachaf: Well, yes.
06:40:52 <elliott> I'm not convinced they wouldn't be excellent if properly untortured.
06:41:01 <shachaf> I do agree that in general taking these things to some ridiculous extreme doesn't help with reasoning much.
06:41:25 <shachaf> elliott: Oh, I think that, as far as actual practical humans go, it's sometimes necessary for producing a particular brand of excellent art.
06:41:49 <zzo38> In other words, some people don't want to be live but don't want to be dead either, leave them live to be able to make a choice. That way you are not indecisive enough yet.
06:41:50 * elliott suspects there would be a theorem to the effect of "everybody's utility function goes haywire on /some/ input", if we had better tools for reasoning formally about this stuff.
06:42:15 <elliott> shachaf: Yes, quite possibly. But what if making them really happy inspires them to create the Non-Sentient Tortured-Art-O-Matic 3000? :-)
06:42:36 <ais523> this sentence is true, but you will never believe that it is true
06:42:39 <zzo38> elliott: That is because sometimes you need to use logic involving things that you cannot figure out from logic
06:42:43 <elliott> You could also argue that as long as they'd still produce equally-good art of another variety if happy, it doesn't matter.
06:42:45 <elliott> ais523: argh
06:43:10 <ais523> I think I tried that one on Agora once
06:43:18 <elliott> shachaf: Anyway, I assume you were deliberately invoking paperclipping with the universe-of-pets thing.
06:43:26 <zzo38> What is Non-Sentient Tortured-Art-O-Matic 3000?
06:43:31 <shachaf> I'm not sure what paperclipping is.
06:43:34 <shachaf> But I probably was.
06:44:22 <elliott> shachaf: It's what fashionable Less Wrong-dwelling hipsters call an AI that decides "oh, these human people have told me that smiles are really nice, and I'm omnipotent now; guess I'll fill the universe with 'em".
06:44:52 <zzo38> Philosophy in general becomes very deep and/or confusing and/or difficult so don't expect to understand it everything perfectly please
06:45:05 <elliott> <zzo38> What is Non-Sentient Tortured-Art-O-Matic 3000?
06:45:15 <ais523> `log <zzo38>
06:45:16 <elliott> zzo38: A very non-sentient machine with a button on it that makes it produce a brilliant work of tortured art.
06:45:47 <HackEgo> 2011-09-06.txt:00:32:57: <zzo38> I still like to turn off monomorphism restriction though, since it allows making declarations by macro or Template Haskell or whatever else it is
06:46:04 <hagb4rd> guess beeing immortal and almighty and knwoing source and destination of everything must be horrible boring
06:46:14 <hagb4rd> so one decide to mess things up
06:46:21 <elliott> shachaf: Anyway, the pet thing also reminds me of the mathematical universe hypothesis.
06:46:22 <hagb4rd> spending not more than 3 lives
06:46:27 <zzo38> elliott: Well, if someone wants to make such a machine then you can do so, possibly only the plans for it, or a computer program to emulate such a machine
06:46:42 <shachaf> I like how my ltency to is about 2.2 seconds.
06:48:03 <elliott> shachaf: Which can be justified like "it's easy to imagine an algorithm to simulate some CA-esque world that doesn't have to actually simulate parts of the world you're not looking at; and if you're inside that world, you can't distinguish this from how things normally are, and so those other parts still /exist/; so there's no reason why you should have to be observing /any/ part of the world for it to
06:48:03 <elliott> exist; therefore all mathematically possible universes exist; therefore this universe exists".
06:48:14 <shachaf> Which means that the text field I'm typing into also has a latency of ~2 seconds between keypress and effect.
06:48:27 <elliott> I kind of see that as similar to "my pet doesn't have to do anything but be happy, so it doesn't actually have to do /anything/".
06:48:46 <elliott> shachaf: Your IRC client does a DNS query for every keypress?
06:48:49 <shachaf> elliott: Hey, that's *my* pet theory!
06:48:50 <ais523> shachaf: why would you need to bounce keystrokes off a DNS server?
06:49:00 <elliott> shachaf: http://en.wikipedia.org/wiki/Mathematical_universe_hypothesis
06:49:03 <zzo38> That is mathematical existence.
06:49:04 <elliott> shachaf: Sorry to burst your bubble!
06:49:06 <shachaf> This is latency to any external server; was just an example.
06:49:17 <elliott> shachaf: I like it too, though.
06:49:42 <elliott> shachaf: As a friend pointed out, it also makes universe simulation quite interesting: you're not actually /causing/ anything, just looking through a window.
06:50:02 <elliott> Which seems to imply that, e.g. spawning a billion simulated universes of eternal torture and pain for the sentient beings inside isn't really bad at all.
06:50:24 <shachaf> Aha, a counterargument for Pascal's Mugging.
06:50:31 <shachaf> Am I a lesswrongian hipster now?
06:50:41 <zzo38> I think it is simply a point of view. It is the point of view of mathematical existence like anything in mathematics, rather than talking about physical existence. And maybe you can think of other existences too.
06:50:44 <elliott> This is getting too Less Wrong-dwelling hipster for my tastes now. :-(
06:50:53 <elliott> But yes.
06:51:04 <ais523> <southpointingchariot> I'm not sure how you define magic <southpointingchariot> but if it is a thing, it is recursion
06:51:18 <Sgeo> I like Less Wrong. Is this bad?
06:51:24 <Sgeo> I'm reading some of the sequences now
06:51:35 <elliott> I'm contractually forbidden from answering questions involving the words "Sgeo" and "bad".
06:52:16 <elliott> shachaf: I'm not sure I agree with the counterargument though. Simulating awful things doesn't /feel/ intuitively bad, but I have a hard time believing that's not just because it's hard to relate to.
06:52:49 <elliott> I'd also like to see some analyses of partial world simulation algorithms to see whether it actually works.
06:53:01 <elliott> I know Hashlife maintains different parts of the space at different times, so it seems plausible.
06:53:06 <elliott> In-universe, everything looks normal.
06:53:12 <elliott> But that's not the same thing as never stepping them at all.
06:53:18 <Gregor> Heyyyyyyyyyyy
06:53:26 <Gregor> I've come to that conclusion philosophically myself.
06:53:27 <elliott> Of course you could just arbitrarily extend the delay before you step each piece, but that doesn't necessarily work in the limit.
06:53:29 <Gregor> (MUH)
06:53:46 <elliott> Gregor: I think people say this every time someone brings it up, anywhere :P
06:54:04 * elliott thinks it's plausible even if that particular argument doesn't work.
06:54:16 <elliott> shachaf: Anyway, even if I buy that your pet is real, it's certainly not that graph.
06:54:25 <elliott> So I've closed the tab.
06:54:33 <shachaf> :-(
06:54:39 <shachaf> At least it was a painless death.
06:54:53 <Gregor> *eh*
06:54:55 <elliott> shachaf: I was tempted to try and keep that tab open FOREVER, but I actually use this computer and it freezes a lot.
06:55:13 <elliott> shachaf: I was also tempted to cry and ask me why you gave me this horrible burden.
06:55:16 <shachaf> You could go buy a new computer.
06:55:30 <shachaf> But I guess that pet's life i worth less to you than $n.
06:55:31 <elliott> The amusement isn't worth hundreds of pounds to me.
06:55:42 <shachaf> Sorry, £n.
06:55:59 <Sgeo> What tab?
06:56:02 <elliott> But seriously, I don't think you can fix the fact that that graph is not the pet; more generally, I don't think you can make a text file a lifeform.
06:56:07 <elliott> Not in that sense, at least.
06:56:13 <ais523> elliott: hmm, let me mention my idea of client-side web hosting again
06:56:19 <elliott> Sgeo: http://slbkbs.org/pet.txt (warning: possibly a maximally-happy sentient being)
06:56:21 <ais523> the idea is that a site is hosted by all the computers currently visiting it
06:56:22 <shachaf> elliott: What if it was a machine which beeped and showed a line for "happiness"?
06:56:36 <ais523> and not centralised at all
06:56:40 <shachaf> And the line was 100% *almost* all the time, but not all the time.
06:56:43 <ais523> and, umm, I haven't figured out the details
06:56:46 <elliott> shachaf: Nah. The pet is the *abstract concept*.
06:56:52 <elliott> ais523: That just sounds like a DHT without caching or replication.
06:57:03 <elliott> shachaf: You just thought of it, and made a machine to honour it.
06:57:12 <shachaf> elliott: What if you have a human who's conscious and lying in a hospital bed and can't communicate?
06:57:14 <pikhq> Sgeo: As far as I'm aware, elliott mostly has issues with the sorts of people who read Less Wrong and go "hurr i'm more rational than everyone now the fools".
06:57:14 <ais523> elliott: DHT?
06:57:17 <shachaf> Is the human an abstract concept too?
06:57:19 <elliott> But I can't imagine that it didn't exist before you thought of it.
06:57:25 <elliott> ais523: distributed hash table
06:57:27 <pikhq> Certainly, there are interesting things on there.
06:57:30 <ais523> elliott: ah, I se
06:57:32 <ais523> *see
06:57:41 <ais523> but I mean, on actual people's browsers who aren't involved with the site, other than reading it
06:57:44 <elliott> ais523: WHICH I'VE BEEN READING ABOUT >:) >:) >:)
06:57:44 <elliott> and yes
06:57:47 <elliott> that's what DHTs do
06:57:51 <elliott> well, sort of
06:57:53 <Sgeo> That pet does not look maximally happy
06:57:56 <pikhq> And Eliezer's interesting when he's not having an ego the size of the solar system.
06:58:17 <elliott> ais523: "Some implementations (eg. Kad) do not have replication nor caching. The purpose of this is to remove old information quickly from the system. The node that is providing the file will periodically refresh the information onto the network (perform NODE-LOOKUP and STORE messages). When all of the nodes having the file go offline, nobody will be refreshing its values (sources and keywords) and the
06:58:18 <elliott> information will eventually disappear from the network."
06:58:22 <shachaf> Ooh, distributed hash tables?
06:58:26 * shachaf likes distributed hash tables.
06:58:37 <elliott> shachaf: I only brought them up because I've been reading about them a bit today. :p
06:58:42 <elliott> Also because they seem vaguely relevant!
06:58:49 <shachaf> elliott: Imagine if HTTP used content-based addressing!
06:58:54 <elliott> Anyway,
06:58:58 <shachaf> It would render things like Akami obsolete.
06:59:01 <elliott> <shachaf> elliott: What if you have a human who's conscious and lying in a hospital bed and can't communicate?
06:59:01 <pikhq> elliott: Lemme guess, for @.
06:59:09 <elliott> Sure, I'll buy it, but it's probably not maximally-happy.
06:59:15 <elliott> How do you even define maximally-happy? There's no limit to happiness.
06:59:23 <elliott> It's limited by the brain you're making happy.
06:59:27 <shachaf> elliott: OK, he's not maximally happy.
06:59:30 <elliott> And what's stopping you from extending the brain?
06:59:49 <elliott> Also, /me isn't sure he buys DHTs in general, even though they *are* very neat.
06:59:49 <shachaf> elliott: But by making him *happier*, and more consistent, he suddenly becomes an abstract concept? That's not fair.
07:00:12 <elliott> shachaf: He's already in abstract concept! He doesn't actually exist.
07:00:13 <elliott> *an
07:00:16 <pikhq> I wouldn't call "maximal happiness" a desirable target, anyways. Down that road is naught but wireheads.
07:00:21 <shachaf> elliott: Fine, not maximally happy. Just "as happy as you've ever been in your life, all the time".
07:00:34 <elliott> pikhq: That's shachaf's point, or some of it at least.
07:00:41 <elliott> shachaf: That's not all that happy, but okay.
07:00:53 <shachaf> elliott: Fine, "as happy as *I've* ever been".
07:01:04 <shachaf> elliott: Are you a tortured artist or something?
07:01:07 <elliott> That too. :p
07:01:19 <pikhq> shachaf: I'd go with "angsty teenager", except I don't see much angst.
07:01:20 <elliott> No, I'm just human, and I don't think I've ever been completely super massively mega happy or anything.
07:01:37 <shachaf> Really?
07:01:49 <elliott> shachaf: You realise I'm not going by everyday standards, because that's sort of the point here?
07:01:56 <shachaf> Not even that one time when you were happy?
07:01:57 <elliott> The problem is that you can't really objectively compare happiness.
07:02:03 <elliott> It's brain-architecture-specific.
07:03:15 <shachaf> "I'm wondering if there is a fundamental trade-off between being able to experience extremely good emotions, like energetic excitement, and being the sort of person who can weather emotional low periods. Over the course of my life I've self-modified to be much better at weathering low periods, but the frequency with which I feel energetic excitement seems to have gone down a lot." -- $PERSON_I_KNOW (who happens to be a lesswrong person)
07:04:08 * elliott doesn't really see the relevance to what I said.
07:04:30 <shachaf> I was just reminded of that.
07:04:59 <shachaf> I don't think "you can't really objectively compare happiness" is as fundamental a problem as you make it out to be.
07:05:28 <shachaf> There's at least an intuitive partial ordering I can make between some humans that seems reasonably reliable to me.
07:05:33 <elliott> Well, the point is that you're saying "what if my super-happy human was HAPPY=1?".
07:06:03 <elliott> And I'm saying "which happy=1? They're human, if you go outside human parameters for happy then you're working with a different brain architecture entirely."
07:06:14 <shachaf> It doesn't *really* matter how happy he is all that much.
07:06:18 <elliott> And yes, you can quite arguably migrate "people" to different architectures.
07:06:22 <elliott> The architecture in this case being an abstract concept.
07:06:51 <elliott> (Prediction: Everyone in the future agrees mind-uploading by writing an autobiography and committing suicide works; RIP humanity.)
07:06:51 <shachaf> elliott: At least pet.txt is more concrete than @.
07:07:10 <elliott> :-(
07:07:15 <elliott> <shachaf> There's at least an intuitive partial ordering I can make between some humans that seems reasonably reliable to me.
07:07:17 <elliott> Humans, sure.
07:07:17 <pikhq> elliott: :P
07:07:23 <elliott> I'm talking about between architecures.
07:07:46 <shachaf> OK, but I don't think it's as fundamental a problem as you make it out to be.
07:08:16 <elliott> Well, why?
07:08:37 <elliott> I think you're trying to say "just forget all that, let's say there's a being whose survival has infinite utility".
07:08:53 <shachaf> It doesn't have to be infinite, just positive.
07:09:02 <elliott> Well, /that's/ easy.
07:09:06 <elliott> Go on then.
07:09:09 <shachaf> Then you can make a trillion copies and say that, put together, they're more important than humanity.
07:09:44 <shachaf> $VERY_BIG_NUMBER has a lot in common with \infty, practically speaking.
07:09:50 <elliott> Hey! Isn't this just the Repugnant Conclusion in reverse!
07:09:52 <elliott> *reverse?
07:11:13 <shachaf> I hadn't come across that before.
07:11:24 <shachaf> Anyway, it doesn't have to be infinite, just very high.
07:11:30 <shachaf> I think you can make pet.txt closer to a human than it is.
07:11:48 <elliott> The problem is that you're assuming utility(A lives and B lives) ~>= utility(A lives) + utility(B lives).
07:12:00 <elliott> Where ~>= is like approximately-equal, but for >=.
07:12:13 <elliott> Well, that's one problem, at least.
07:12:33 <elliott> But I'm still not sure where you're actually going with this.
07:12:35 <shachaf> For example, let's say you make a happiness-measurer machine, which happens to have a front panel that looks exactly like pet.txt, and also a wire, and you attach the wire to a human lying in a hospital bed, and the front panel shows 100% constantly.
07:12:51 <shachaf> elliott: I'm not sure I was actually going anywhere...
07:12:52 -!- itidus21 has quit (Ping timeout: 252 seconds).
07:13:11 <elliott> :-D
07:13:17 <elliott> Well, I'm happy to continue ambling down this path, I suppose.
07:13:25 <elliott> shachaf: Okay. (Spoiler: I don't believe it.)
07:13:35 <shachaf> I consider myself the victim of this pointless epistemological discussion, by the way.
07:13:38 <elliott> What that's saying to me is, you're measuring an arbitrary value as 1.
07:13:43 <elliott> And calling that value "happiness".
07:13:49 <zzo38> shachaf: How can you be sure it is working accurately?
07:13:53 <elliott> Which neatly fits in to my preconception of the definition of "happiness" depending on brain architectures.
07:14:05 <shachaf> zzo38: We've tested it on other humans and it always reports them accurately.
07:14:50 <elliott> Oh, hmm.
07:14:57 <elliott> You're saying it's actually measuring, not just a fancy pet.txt displaying machine.
07:15:01 <shachaf> Right.
07:15:07 <elliott> Well then, what's the scale?
07:15:14 <elliott> Happiness the human brain architecture can support?
07:15:45 <shachaf> This human's min before hospital bed - ...max...
07:15:45 <elliott> I don't consider that different, on a universal scale, to a human that just happens to be pretty happy, so I have no problems buying that.
07:15:55 <zzo38> shachaf: I would still think it is not working accurately. Either it broke, you did not connect it correctly, or it simply cannot measure that person's happiness accurately for whatever reason (people are different; so it is possible sometimes it won't work). I would think the readout would vary at least a little bit isn't it?
07:16:07 <shachaf> But the human + machine is extensionally indistinguishable from just pet.txt!
07:16:32 <shachaf> zzo38: OK, it varies by a little bit.
07:16:47 <shachaf> Or we used some drugs to maximize the human's happiness, I don't know.
07:17:14 <zzo38> Then *maybe* it works accurately. I still don't know but with those other tests, the machine seems to be OK.
07:17:17 <elliott> shachaf: The machine isn't important.
07:17:25 <elliott> It's just evidence that the guy is really happy.
07:17:30 <elliott> You're telling me, imagine a happy dude. Okay, done.
07:17:48 <elliott> He'd still be happy without that machine (unless he likes it a lot, I guess).
07:18:21 <shachaf> elliott's humanity-bias strikes again.
07:18:31 <elliott> shachaf: Sigh.
07:18:37 <elliott> shachaf: I'm not biased towards humanity over sentient .txt files.
07:18:42 <elliott> I don't think pet.txt is sentient.
07:19:03 <shachaf> `addquote <elliott> I'm not biased towards humanity over sentient .txt files.
07:19:06 <HackEgo> 760) <elliott> I'm not biased towards humanity over sentient .txt files.
07:19:22 <shachaf> elliott: Yes, I guess it's not that.
07:19:26 <elliott> Yes yes, very good. Can I just *tell* you why I don't think pet.txt is sentient?
07:19:45 <shachaf> Can you?
07:19:50 <elliott> I believe so.
07:21:05 <shachaf> elliott: By the way, a universe full of maximally-happy humans lying in hospital beds is also distasteful to me.
07:21:43 <elliott> OK, you can imagine a really happy pet that does nothing but exist, happily, and sure, I buy that it /exists/ because I tend to believe in the mathematical universe hypothesis. But that's not the same thing as existing /in this universe/; I don't buy that you can be sentient without /computation/ (and before you propose it does some trivial computation: it has to do computation that leads to sentience,
07:21:43 <elliott> and I don't know what that is). And I don't care about other universes when considering moral issues, because they can have no effect on this one whatsoever, and we can have no effect on them.
07:22:19 <shachaf> elliott: OK, I don't know what computation that leads to sentience is either.
07:22:24 <elliott> (On the other hand, I've believed that a lookup table can be sentient at least once before, so I'm not sure how clear my "computation" view is... but in that case, it was an optimisation of a definitely-sentient computation.)
07:22:26 <shachaf> So it seems we've come to an agreement. :-)
07:22:57 -!- Ngevd has joined.
07:23:01 <shachaf> I think "computation" is an easy thing to consider abstractly, as in something a big complicated computer does.
07:23:01 <Ngevd> Hello!
07:23:10 <elliott> Hmm, I think the answer is that pet.txt is not an optimisation of any sentient process.
07:23:25 <elliott> It seems weird that the facts would reverse-engineer everything to decide whether it's sentient or not, though.
07:23:40 <elliott> And that the existence of an algorithm could change the sentience of something running on another algorithm.
07:23:46 <shachaf> But if you consider a human moving little tokens around to end up with a pile of red tokens in the left side, and sentience arising out of *that*, it seems less obvious.
07:23:48 <Ngevd> Bye
07:23:50 -!- Ngevd has quit (Client Quit).
07:24:13 <elliott> Ngevd.
07:24:13 <shachaf> elliott: pet.txt is exactly an optimization of a sentient process!
07:24:15 <elliott> That was like 3 seconds.
07:24:22 <shachaf> Namely, our human+machine.
07:24:23 <zzo38> It also depends how you have to exactly define sentience?
07:24:45 <elliott> shachaf: Wow, this suddenly sounds like the Chinese Room argument.
07:25:00 <shachaf> Did you just pull a Searle-Godwin?
07:25:24 <zzo38> elliott: O, yes. I know how that works too.
07:25:33 <elliott> shachaf: On /myself/.
07:25:37 <shachaf> What I was saying *was* along the lines of the Chinese Room argument, of course.
07:25:38 <elliott> I'm arguing the room can't understand Chinese.
07:25:45 <elliott> And I didn't realise it until now; why didn't I realise it until now?
07:25:59 * shachaf considers mission accomplished.
07:26:15 <elliott> shachaf: Is it accomplished if you've just confused me about my own beliefs? :/
07:26:15 <shachaf> The mission was apparently to bamboozle elliott.
07:26:21 <elliott> What do *you* think about pet.txt, then?
07:26:44 <shachaf> Whoa, whoa, I don't have opinions, I just argue with other people about theirs.
07:27:08 <shachaf> I "think" pet.txt is not sentient, of course.
07:27:13 <elliott> BUT I NEED COMFORTING OPINIONS!!!!
07:27:54 <shachaf> But it's an interesting example of something I *do* believe in taken to an extreme. I don't know "where to draw the line", if there is a line to draw.
07:28:00 <ais523> yay, I think I just won Agora again
07:28:30 <elliott> ais523: pfft, I heard about it seconds before you announced it
07:28:36 <elliott> #esoteric is behind the times.
07:28:40 <ais523> heh, via email?
07:28:42 <ais523> what do you think?
07:28:45 <shachaf> elliott: Don't worry -- humans, unlike pet.txt, have the "right causal powers to produce intensionality".
07:28:51 <elliott> ais523: nope, IRC
07:28:58 <ais523> who told you?
07:29:06 <shachaf> What's Agora?
07:29:07 <elliott> shachaf: I hate you.
07:29:09 <shachaf> Other than a currency.
07:29:12 <ais523> I was talking about it in ##nomic on Slashnet, but you aren't there
07:29:14 <elliott> shachaf: A nomic, 1993-present.
07:29:19 <elliott> ais523: don't you mean #nomic?
07:29:24 <ais523> err, yes
07:29:30 <elliott> shachaf: anyway, comex
07:29:35 <elliott> <comex> oh hey, ais523 just won
07:29:35 <elliott> <comex> well, not really
07:29:35 <elliott> <elliott> That immediately made me think ais523 discovered spontaneous human combustion and I was really confused for a second. :/
07:29:35 <elliott> <elliott> * Topic for #esoteric is: Zeroth to prove spontaneous human combustion wins | http://codu.org/logs/_esoteric/
07:29:35 <elliott> <elliott> * Topic for #esoteric set by ais523!~ais523@unaffiliated/ais523 at Sun Dec 11 20:11:10 2011
07:29:40 <ais523> sorry, the slashnet and freenode channels have similar names and I get them muddled
07:29:58 <ais523> hmm, I wonder if comex considers the win genuine?
07:30:09 <shachaf> elliott: What channel is that in?
07:30:12 <shachaf> And what's a comex?
07:30:13 <elliott> ais523: <comex> well, not really
07:30:19 <ais523> the fun thing is, that the victory rule's designed to be pragmatic, but somehow manages to be platonic in this case
07:30:23 <elliott> shachaf: It's the comex channel, and he's this guy who works for Apple.
07:30:44 <ais523> elliott: I thought he more worked against Apple
07:30:49 <shachaf> Oh, that comex.
07:30:53 <shachaf> copumpkin's friend.
07:31:00 <copumpkin> ?
07:31:05 <shachaf> copumpkin: Wasn't he?
07:31:05 <elliott> ais523: he did, past tense
07:31:08 <copumpkin> yeah
07:31:12 <copumpkin> he is
07:31:16 <copumpkin> wasn't he in here for a while?
07:31:17 <ais523> hmm, copumpkin's bound to be recruited for a scam by comex and coppro at some point
07:31:20 <elliott> copumpkin: for years
07:31:24 <elliott> he's too famous for us now :'(
07:31:26 <copumpkin> comex is pretty legit
07:31:32 <elliott> ais523: coppro knows copumpkin?
07:31:33 <ais523> they recruited a meatpuppet called costanza at one point just so the name of all the scamsters would start with co
07:31:39 <elliott> haha
07:31:41 <copumpkin> I don't know who coppro is
07:31:49 <elliott> nomic player, #esoteric member
07:31:59 <copumpkin> yeah, I mean beyond seeing the nick in here
07:32:04 <copumpkin> oh
07:32:11 <copumpkin> I know coppro under a different name
07:32:17 <ais523> scshunt?
07:32:19 <elliott> Stop knowing everybody.
07:32:21 <copumpkin> yeah
07:32:25 <elliott> shachaf: WHY ISN'T PET.TXT SENTIENT
07:32:36 <shachaf> elliott: MURDERER
07:32:41 * copumpkin is listening to some nice bolero
07:33:09 <shachaf> copumpkin: elliott is murderer
07:33:19 <elliott> shachaf: Anyway, I'm pretty sure I never thought killing wireheads was all that bad.
07:33:27 <elliott> I find them to be of dubious sentience.
07:33:28 <copumpkin> I am getting frustrated with agda
07:33:35 <shachaf> copumpkin: Too limiting?
07:33:53 <copumpkin> I'm trying to construct iteratees that aren't shitty (unlike all the usual ones) and prove things about them
07:33:57 <shachaf> elliott: Oh, "wirehead", that's what it's called.
07:33:59 <copumpkin> but it's remarkably difficult
07:34:05 <elliott> shachaf: The term has only come up like ten times, dude.
07:34:10 <elliott> copumpkin: What do non-shitty iteratees look like?
07:34:18 <copumpkin> elliott: they're contravariant in the input type
07:34:25 <copumpkin> and don't have a crapload of special nasty cases
07:34:30 <elliott> copumpkin: Aren't all iteratees?
07:34:34 <copumpkin> not at all
07:34:48 <shachaf> elliott: My /last counts one...
07:34:52 <copumpkin> the fact that they carry "leftover" data in the done case prevents them from being contravariant
07:34:53 <pikhq> shachaf: Not a Niven fan I take it?
07:34:57 <elliott> shachaf: 1 ~ 10
07:35:00 <elliott> copumpkin: Oh, right.
07:35:03 <copumpkin> the leftover data is also messy, cause you can lie in it
07:35:08 <copumpkin> and stick shit that was never input into it
07:35:11 <copumpkin> or rearrange input
07:35:18 <copumpkin> it's a huge mess
07:35:23 <copumpkin> also, enumeratees are fucked up
07:35:26 <zzo38> What should it be called a transformer f (x, f x) and what should call f (f () -> x) do they have any names?
07:35:30 <shachaf> pikhq: Haven't read anything by him.
07:35:41 <pikhq> shachaf: Shame, he's quite enjoyable.
07:35:49 <elliott> copumpkin: My favourite flavour of iteratees is iterIO, which doesn't have the enumeratee/enumerator/blah blah blah distinction.
07:35:55 <elliott> But yes, the leftover stuff is ugly.
07:35:57 <shachaf> elliott: Anyway, you only consider people to be worthwhile if they're miserable occasionally, eh?
07:36:03 <pikhq> Presuming you like hard sci-fi, of course.
07:36:09 <elliott> copumpkin: But "what do they look like" was a more concrete question than you're interpreting it as :)
07:36:15 <copumpkin> elliott: yeah, some of us are trying to come up with something that actually breaks out of the shitty mold oleg constructed
07:36:22 <shachaf> pikhq: I have _A Mote in God's Eye_ somewhere in this room.
07:36:26 -!- comex has joined.
07:36:29 <elliott> copumpkin: I think saying that is illegal in at least 40 FP states.
07:36:29 <copumpkin> elliott: they all feel _almost_ elegant
07:36:38 <elliott> comex: Sorry, we've moved on from talking about you.
07:36:42 <copumpkin> but there's something shitty about each of them
07:36:44 <comex> baw
07:36:50 <copumpkin> and it all stems from the shitty underlying idea
07:36:55 <pikhq> shachaf: I highly recommend that one in particular.
07:37:00 <comex> what's the shitty underlying idea?
07:37:02 <elliott> shachaf: I don't think for(;;){happy();} is sentient; its happiness level doesn't matter much.
07:37:03 <copumpkin> which is not fundamentally shitty, but its execution is
07:37:05 <copumpkin> comex: iteratees
07:37:59 <comex> hmm
07:37:59 <comex> https://john-millikin.com/articles/understanding-iteratees/
07:38:01 <shachaf> elliott: But, in theory, that's what a human is trying to do. At what point does it stop being sentient?
07:38:05 <copumpkin> comex: those are the ones
07:38:17 <comex> they look pretty similar to python's iterat_ors_
07:38:30 <copumpkin> an iteratee is a consumer of data
07:38:36 <elliott> Everything looks like $trivial_imperative_concept to a trivial imperative programmer OHHH
07:38:37 <elliott> BUUUUUURN
07:38:40 <elliott> Ahem.
07:38:45 * copumpkin slaps elliott
07:38:46 <comex> iterators can consume data
07:38:47 <elliott> shachaf: I don't really think that's what a human is trying to do.
07:38:57 <copumpkin> comex: I mean, it's all they do
07:39:07 <shachaf> elliott: Maximize its utility function?
07:39:22 * shachaf will take care of that by redefining "trying".
07:39:30 <elliott> shachaf: Utility functions like that are broken, IMO.
07:39:38 <shachaf> You're probably right.
07:39:44 <elliott> I don't know how to un-broken them, although I'm sure some aforementioned hipsters will tell you they know how.
07:39:47 <comex> the difference is that iterators must receive all the data at once
07:39:50 <copumpkin> comex: I thought python iterators provided an interface for asking for data
07:40:01 <shachaf> elliott: By the way, $SOMETHING_ABOUT_@.
07:40:03 <comex> iirc it's something = (yield)
07:40:08 <elliott> shachaf: Cry.
07:40:09 <comex> and then iterator.send(data)
07:40:25 <elliott> That's that opposite of consuming data.
07:40:27 <ais523> shachaf: oh no, the eventual log search/replace may well end up putting a space in that keyword, if @ ends up expanding to a multi-word name
07:40:28 <copumpkin> comex: so if I have an iterator called x, I can ask x for its next data item
07:40:43 <elliott> ais523: it'll be too smart for that!
07:40:51 <shachaf> ais523: @ will just end up being called ellioxx or something.
07:40:52 <ais523> oh, the expansion?
07:40:54 <copumpkin> comex: an iteratee produces exactly one value and accepts data
07:40:57 <shachaf> And it'll be a UNIX just like everything else.
07:41:08 <comex> oh, only one value
07:41:13 <elliott> ais523: It won't have a space in the name.
07:41:19 <copumpkin> comex: yeah, then oleg went insane and started creating portmanteaus
07:41:24 <ais523> elliott: wow, decided that already?
07:41:25 <pikhq> I doubt elliott could make himself do another UNIX.
07:41:26 <elliott> copumpkin: comex: And it doesn't send that value back to the data source.
07:41:27 <comex> okay, fair enough
07:41:31 <elliott> like foo.send() does.
07:41:40 <ais523> "Microsoft Windows" and "Mac OS X" both do
07:41:42 <copumpkin> comex: so then he came up with an enumerator that corresponds roughly to the python iterator, and then he went bonkers and made an enumeratee
07:41:45 <fizzie> (Ehux.)
07:41:51 <elliott> ais523: it's just "Windows"
07:41:52 <ais523> "Microsoft Windows" and "Mac OS X" both do
07:41:55 <copumpkin> portmanteaux?
07:41:55 <copumpkin> :P
07:42:00 <pikhq> I'd be a little bit surprised if he did what I consider to be a "UNIX-family" OS (examples of this include Windows and Plan 9).
07:42:01 <ais523> *(It's not "Windows" because that's too generic to be trademarked)
07:42:03 <copumpkin> that feels like it should be the correct plural
07:42:10 <elliott> ais523: http://upload.wikimedia.org/wikipedia/en/b/b7/Windows_logo.svg
07:42:14 <ais523> (note: it is very easy to typo a line as a copy of a previous line in Konversation)
07:42:24 <elliott> I don't care what the trademark is.
07:42:25 <comex> this is also reminiscent of a type of unix program
07:42:35 <shachaf> Microsoft® Windows® XP® Professional® Edition®
07:42:38 <elliott> comex: a unix program has the same input and output types
07:42:42 <comex> that accepts data via a pipe (reading input data as it is provided), then finally spits out a result
07:42:44 <elliott> it's enumeratees that are like pipelines
07:42:45 <copumpkin> comex: yeah, basically I'd have called them consumer, producer, and transducer
07:42:53 <zzo38> I know how yield and that stuff works in Python and JavaScript.
07:42:58 <copumpkin> comex: although those types aren't fundamentally different
07:43:01 <comex> aw, I don't know anything about transducers except their applications on Solaria
07:43:11 <elliott> copumpkin: (In iterIO, there's just consumers and transducers.)
07:43:24 <copumpkin> elliott: HOW CAN I PRODUCE SHIT!!!
07:43:27 <shachaf> Python's iterators always make me sad because they're not real coroutines.
07:43:30 <copumpkin> I AM A PRODUCER, NOT A CONSUMER
07:43:39 <elliott> copumpkin: Producers are special-cases with input type () that are fed EOF. (I think it should be input type Void.)
07:43:41 <comex> shachaf: how so?
07:43:46 <copumpkin> elliott: ick
07:43:56 <elliott> copumpkin: Well, I don't see what's wrong with taking Void as input.
07:44:00 <elliott> They must receive EOF.
07:44:03 <elliott> So it all works out.
07:44:06 <elliott> Starts to feel like arrows, though.
07:44:10 <fizzie> ais523: "Oracle Solaris" has a space in the name now too.
07:44:15 <copumpkin> that's what I want it to feel like
07:44:19 <shachaf> comex: How which?
07:44:25 <elliott> copumpkin: That's a shame.
07:44:27 <comex> shachaf: iterators not being coroutines
07:45:04 <shachaf> Let me see.
07:45:09 <shachaf> Only a top-level thing can yield.
07:45:46 <comex> I believe python 3 has a "yield from" keyword that lets you pass that down
07:46:01 <elliott> Python's solution to everything is to add more keyword plasters.
07:46:13 <comex> of course, you could always just do "for i in some_subiterator(): yield i", or some more fanciness to support .send
07:46:15 <zzo38> Pass what down?
07:46:16 <comex> of course it's a horrible hack
07:46:24 <elliott> (Like Python.)
07:46:35 <shachaf> Hmm, you still need to mark it explicitly in that case.
07:46:47 <elliott> shachaf: Just Greenspun it and make every function work like that.
07:46:50 <shachaf> Though I suppose that as a Haskell person maybe I shouldn't complain about that...
07:47:07 <ais523> <ais523> I intend, without objection, to transfer rule 2166 from the Lost and Found department to myself.
07:47:15 <ais523> I should really reread the ruleset more often
07:47:22 <ais523> that isn't a scam, I'm just amused that it's possible
07:47:34 <comex> I don't think it is possible.
07:47:42 <zzo38> Like "for i in some_subiterator(): yield i" I suppose that the barrier monads I made up, you can use the monadic join operation to do something like that.
07:47:43 <comex> although I do like that kind of thing
07:47:47 <ais523> comex: rules meet the definition of assets
07:47:54 <comex> they are not "defined as such"
07:47:57 <ais523> with rule 2141 as the backing document
07:48:04 <comex> I believe I made it possible (or protoed making it possible) at some point in B
07:48:04 <ais523> oh, missed that bit
07:48:16 <ais523> they meet the /rest/ of the definition of assets, though
07:48:20 <comex> or it was possible and I protoed something similar
07:48:20 * shachaf has no idea about this Agora thing and isn't sure he wants to have one.
07:48:28 <ais523> and rule ownership doesn't do anything, so nothing secures the transfer
07:48:31 <elliott> shachaf: http://agoranomic.org/
07:49:02 <elliott> Tierced palewise sable, argent, and sable, charged with a quill and an axe in saltire, proper, and in the chief a capital letter A, gules.
07:49:10 <elliott> (I don't care if we repealed the Arms, I like them.)
07:49:19 <ais523> they're still around, they just aren't a rule
07:49:25 <zzo38> Was that, that oerjan posted the horoscope for the first speaker's message?
07:49:29 <elliott> zzo38: yes
07:49:48 <elliott> shachaf: I believe Agora is the longest-running nomic ever.
07:50:05 <elliott> shachaf: At least, that people actually play. I'm sure there's a billion pet.txt nomics humming along happily in the background.
07:50:06 <ais523> elliott: FRC?
07:50:13 <comex> ais523: reminds me of whoever joined the Bayes contract, because we didn't explicitly forbid it
07:50:19 <ais523> OK, it's only very slightly a nomic
07:50:22 <ais523> comex: heh, I remember that
07:50:26 <elliott> ais523: Canada is hundreds of years old.
07:50:33 <shachaf> elliott: pet.txt's H(t) just went down to 99% briefly from being used as an adjective.
07:50:35 <comex> or when you terminated my mousetrap as obsolete
07:50:42 <comex> elliott: not really
07:50:52 <elliott> shachaf: Good! It's not a wirehead now, so I value its rights.
07:50:58 <elliott> comex: It's older than FRC, at least.
07:51:04 <comex> "This widening autonomy was highlighted by the Statute of Westminster 1931 and culminated in the Canada Act 1982, which severed the vestiges of legal dependence on the British parliament."
07:51:05 <elliott> Neither's much of a nomic.
07:51:18 <elliott> comex: I don't think that Canada started existing in 1982.
07:51:29 <shachaf> You can't implement threads reasonably on top of Python's yield, can you?
07:51:34 <elliott> And 80 years is hundreds.
07:51:44 <comex> shachaf: not unless you're insane
07:51:49 <elliott> shachaf: Sure, you just have to greenspun it by turning everything into an iterator.
07:51:58 <comex> I think I like Stackless
07:52:07 <shachaf> elliott: Which is the Haskell solution to it, of course.
07:52:18 <elliott> shachaf: FSVO Haskell solution.
07:52:24 <shachaf> elliott: With s/iterator/monadic function/
07:52:29 <elliott> shachaf: Anyway, Agora is fun, you should play.
07:52:40 <elliott> Apart from when it's boring, which it looks like it's stopping being.
07:52:48 <ais523> elliott: it's coming out of a slump
07:53:01 <elliott> ais523: Just like B.
07:53:16 <ais523> elliott: B is not currently showing signs of coming out of a slump
07:53:25 <elliott> ais523: Yes it is, that's a universal law.
07:53:30 <zzo38> shachaf: What about monadic function?
07:53:40 <ais523> elliott: nope; that universal law turned out to never have been enacted after all
07:53:46 <elliott> ais523: ;_;
07:53:58 <shachaf> zzo38: Well, you have to write mapM, not just map.
07:54:14 <shachaf> Similarly you have to write map_yield(), not just map().
07:54:33 <shachaf> Coroutines are good fun to implement threads on top of.
07:54:59 <zzo38> shachaf: For what purpose do you need to write mapM and map_yield() and whatever? I do not understand completely
07:55:25 <shachaf> zzo38: Are you asking why mapM exists in Haskell, in addition to map?
07:55:53 <shachaf> mapM contains more strictly more information than map, by the way; someone should do a thing where non-monadic versions of functions are autoderived from monadic versions.
07:56:13 <zzo38> shachaf: No, I am asking for the reason to do it in your circumstances.
07:56:42 <zzo38> I don't know what map_yield() is.
07:56:46 <shachaf> Well, you have the function map() in Python, which calls a function. And then you need an additional one that "yields from" the function.
07:56:47 <elliott> shachaf: It's almost as if someone already did that and you showed #haskell and #esoteric.
07:57:09 <elliott> The problem with mapM is that it's overspecified; evaluation order, etc.
07:57:21 <zzo38> What do you mean "yields from" the function?
07:57:41 <shachaf> elliott: What?
07:57:45 <shachaf> elliott: Who did that?
07:57:53 <elliott> Um, that language you linked?
07:58:00 <shachaf> Oh, monad-embed?
07:58:05 <shachaf> That doesn't really do what I want.
07:58:23 <shachaf> elliott: Evaluation order isn't specified if you run it in Identity, is it?
07:58:27 <shachaf> It's just execution order.
07:58:52 <ais523> ^style agora
07:58:52 <fungot> Selected style: agora (a large selection of Agora rules, both current and historical)
07:59:00 <ais523> fungot: you were involved in agora once, weren't you?
07:59:00 <fungot> ais523: whenever a cfj to have been sent to the
07:59:15 <elliott> shachaf: The point is that you can "peek into" mapM and find out what evaluation order it's using.
07:59:29 <elliott> shachaf: So it's not as opaque as map, and so it's not as nicely-defined.
07:59:42 <shachaf> elliott: Execution order, not evaluation order?
07:59:46 <elliott> Yes, yes.
07:59:50 <shachaf> Well, yes.
08:00:04 <shachaf> But if you write mapM and then extract map from it, you can't "peek into" the extracted map.
08:00:18 <zzo38> I think the monadic join with barrier monads allows to run a function that can yield and then it yield the same one itself
08:00:21 <elliott> Well, sure.
08:00:32 <shachaf> Given that people write both map and mapM *anyway*, you might as well have that done automatically for you so you have to write half as much code.
08:00:46 <elliott> I bet you could do it with a trivial bit of TH.
08:00:59 <shachaf> I don't think it's *so* trivial.
08:01:00 <shachaf> Well, maybe.
08:01:04 <ais523> and ofc CFJ 2623 was awesome
08:01:13 <shachaf> At any rate, writing *M involves more thought than writing *.
08:01:14 <elliott> shachaf: Sure it is, wherever Identity occurs in argument position, compose Identity.
08:01:19 <elliott> Whenever it occurs in result position, compose runIdentity.
08:01:25 <elliott> *it is;
08:01:26 <shachaf> There might be multiple ways to make the same function monadic.
08:01:42 <shachaf> elliott: Oh, I thought you meant figure out the type of foo from the type of fooM.
08:01:53 <elliott> That *does* do that.
08:02:01 <elliott> As long as it's fully polymorphic on a single m.
08:02:31 <elliott> Instantiate m = Identity498573495345, turn (Identity498573495345 a) into a for all a.
08:02:35 <elliott> With the number so that it doesn't clash with
08:02:42 <elliott> fooM :: (Monad m) => Identity a -> m a
08:02:43 <elliott> or similar.
08:02:52 <shachaf> Well, I suppose.
08:02:56 <elliott> ...i.e. just turn (m a) into a everywhere. :p
08:03:06 <shachaf> Anyway, monad-embed is different. It doesn't really let you specify evaluation order at all.
08:03:19 <elliott> Doesn't "flip" let you.
08:03:22 <elliott> f x y vs. flip f x y.
08:03:35 <elliott> But yes, it's the reverse; I misread your statement.
08:03:52 <shachaf> elliott: Right, it does.
08:04:29 <shachaf> If I understand correctly, "f x y" "executes" f, then x, then (f x), then y, the (f x y).
08:04:43 <elliott> Right.
08:05:01 <shachaf> Where "executes" means, kind of, "if it has a monadic type, execute it, and then shadow the result with the original name for the remainder of this sentence". :-)
08:05:15 <elliott> It always has a monadic type in monad-embed, no?
08:05:31 <shachaf> Oh, I guess?
08:05:34 * shachaf doesn't recall.
08:05:41 <elliott> "Flavours" and all.
08:05:41 <shachaf> elliott: OK, now do one that autoderives monads from their monad transformers. :-)
08:05:48 <elliott> shachaf: = FooT Identity
08:05:50 <shachaf> I guess mtl does that anyway these days, except manually.
08:05:55 <shachaf> Right.
08:06:04 <elliott> That's how you should do it anyway.
08:06:15 <comex> ha, I forgot about 2623!
08:06:57 <shachaf> elliott: Actually, I don't like monad transformers at all.
08:07:02 <elliott> I know.
08:07:08 <shachaf> I've said this before?
08:07:12 <elliott> Repeatedly.
08:07:18 <zzo38> "if it has a monadic type, execute it...." Execute what?
08:07:23 <shachaf> It.
08:07:32 <zzo38> Execute f?
08:07:51 <shachaf> Right.
08:07:55 <comex> oh hey, http://agora-notary.wikidot.com/ still exists
08:08:07 <shachaf> If f :: m (a -> b -> c).
08:08:13 <shachaf> Which, as elliott pointed out, it always is.
08:08:52 <ais523> comex: indeed
08:08:57 <ais523> it's still a useful historical refernce
08:08:58 <ais523> *reference
08:09:21 <zzo38> O, that is what f is. How exactly can you "execute it"? As far as I know you can use <*> with such a type?
08:09:37 <comex> On this the whole head appeared,
08:09:37 <comex> and then turned to the table to measure herself by it, and on it
08:09:37 <comex> except a tiny golden key, and Alice's elbow was pressed so closely
08:09:37 <comex> against her foot, that there was no more to come, so she set the
08:09:37 <comex> little door was shut again, and put it to be assigned as judge of
08:09:38 <comex> the posting of the CotC.
08:10:07 <elliott> comex: remember the equity case?
08:10:09 <zzo38> Haskell is a functional programming, you cannot execute anything?
08:10:28 <comex> other than 2623?
08:10:36 -!- kmc has joined.
08:10:38 <shachaf> zzo38: Sure you can.
08:10:52 <ais523> elliott: I referenced the fungot equity case already
08:10:53 <fungot> ais523: land bureau. if a registered player, or
08:10:56 <comex> did that amendment thingy ever get used?
08:11:04 <elliott> ais523: fungot only judged it, right?
08:11:04 <fungot> elliott: ( a) an office, with the
08:11:16 <ais523> elliott: it was about a contract fungot created
08:11:17 <fungot> ais523: a rebellious player) are a class d frankenstein monster fails to comply with the player
08:11:19 <shachaf> kmc!
08:11:20 <elliott> not fungot
08:11:20 <shachaf> @ohai kmc
08:11:21 <fungot> elliott: a blot change is made only to assessor. the
08:11:21 <lambdabot> welcome to #esoteric, kmc!
08:11:21 <elliott> or was it
08:11:24 <ais523> it was fungot
08:11:24 <fungot> ais523: a criminal case has a budget containing the maximum deck diversity, which have been judged undecided. the herald
08:11:31 <elliott> ais523: nah, fungot is all lowercase
08:11:31 <fungot> elliott: e may be
08:11:33 <ais523> well, maybe Bayes
08:11:34 <elliott> it was an online markov generator
08:11:48 <ais523> fungot provided arguments towards the judgement, but they made the judge's head hurt
08:11:49 <fungot> ais523: speaker-elect. if the speaker publicly announces within a week, that
08:11:50 <elliott> feeded the ruleset + alice in wonderland excerpt + I forget
08:12:34 <shachaf> elliott: By the way: <http://oneoverzero.comicgenesis.com/>?
08:12:54 <elliott> shachaf: I read it via http://www.undefined.net/1/0/. It's less crufty.
08:13:06 <elliott> It's "only" 1000 comics, to the dot.
08:13:23 <shachaf> elliott: *Now* you tell me.
08:13:55 <elliott> Also it takes ages to actually get into the interesting stuff rather than just messing around, but it doesn't make any sense if you skip there.
08:13:56 <elliott> LIFE IS HARD.
08:16:43 <shachaf> I thought it was "life is tough".
08:17:07 <elliott> It's that too.
08:17:13 -!- itidus21 has joined.
08:19:54 <shachaf> elliott: I'll have you know that pretty much my entire time-to-be-productive got wasted on that silly discussion, by the way.
08:19:59 <zzo38> Do you have idea what the types I have specified would be called?
08:20:01 <shachaf> I hope you're pleased with yourself.
08:20:54 <zzo38> shachaf: Oops! Too bad! Sorry.
08:21:04 <shachaf> zzo38: ?
08:21:22 <shachaf> zzo38: I was not objecting to anythig you said.
08:21:27 * shachaf has long ceased doing that.
08:21:28 -!- itidus21 has quit (Ping timeout: 248 seconds).
08:21:33 <shachaf> zzo38: What are the types that you specified?
08:21:43 <zzo38> f (x, f x)
08:21:46 <zzo38> f (f () -> x)
08:22:04 -!- itidus21 has joined.
08:22:29 <elliott> shachaf: Yay!
08:22:40 <zzo38> (Where f is a functor and x is a return type of a functor)
08:23:08 <shachaf> zzo38: You mean an argument to a functor?
08:23:15 <zzo38> shachaf: Yes
08:23:16 <shachaf> Well, no. It's just a type.
08:23:24 <shachaf> Anyway, I have no idea.
08:24:55 <zzo38> I put it on paper already. But I cannot put it into the computer very well withouts their name?
08:26:28 <elliott> FsdfkfsdT and QqqqkdkT.
08:27:01 <shachaf> elliott has a point.
08:29:02 -!- itidus21 has quit (Read error: Operation timed out).
08:29:58 -!- itidus21 has joined.
08:30:40 <zzo38> OK, and then I could change their name later if there is better name, I suppose. Because these names seem very worse.
08:31:59 -!- zzo38 has quit (Remote host closed the connection).
08:32:45 <elliott> copumpkin: You should do it in Epigram 2 instead.
08:33:02 <elliott> The perfect iteratees for the perfect language!
08:36:44 <ais523> Epigram 2 is a perfect language?
08:36:51 <ais523> elliott: I think we've found what @lang should be based on
08:37:21 <elliott> It's similarly vapourous.
08:37:31 <ais523> oh, I didn't realise
08:37:40 <ais523> perl 6 is in an interesting state
08:37:49 <ais523> it's not really solidified yet, but it's not vaporware either
08:37:54 <ais523> liquidware?
08:37:57 <shachaf> Ooh, base @lang on Perl 6!
08:38:08 <elliott> :D
08:38:19 <shachaf> By the way, is "@lang" its own macro?
08:38:43 <shachaf> Or will the language be called "@" ++ "lang"
08:38:44 <ais523> hmm, I'm not sure
08:39:01 <ais523> the language might even be called "@lang"; it's a good name for a language even if "@" is a bad name for an OS
08:39:09 <ais523> (the quotes block macro expansion, right?)
08:40:31 <shachaf> Oh, they do?
08:41:26 <elliott> of course not
08:41:35 <elliott> the text inside quotes is English
08:41:41 <elliott> and we're replacing @ with the name, in English
08:41:52 <elliott> try making "@" be in Spanish, instead
08:42:14 <elliott> <q lang="es">@</q>
08:43:13 <elliott> ais523: actually, calling Epigram 2 "similarly vapourous" to @ is unfair to it; it's produced thousands of lines of code and more than a few papers
08:43:20 <elliott> which is thousands and more than a few more than I have
08:44:07 <elliott> hmm, I want to write a really fast grep for some reason
08:45:21 <shachaf> Can you make it O(1/log n)?
08:48:50 <elliott> shachaf: O(0)
08:53:57 <elliott> hmm, does GNU grep even search in parallel?
08:53:58 <elliott> I suspect not
08:54:11 <elliott> that seems like a massive flaw
08:54:29 <shachaf> elliott: Why?
08:54:47 <elliott> shachaf: Well, it's a fairly obvious large speedup.
08:54:53 <shachaf> Is it?
08:55:02 <elliott> By fairly I mean completely.
08:55:12 <elliott> shachaf: The segments of the file can be scanned completely independently, so... yes?
08:55:18 <elliott> It scales linearly.
08:55:19 <shachaf> Well, grep is presumably I/O-bound.
08:55:38 <elliott> shachaf: Not in /tmp, it's not :)
08:55:44 <shachaf> So it's not that obvious in general.
08:55:50 <shachaf> Well, sure, if you're reading from a ramdisk.
08:56:00 <elliott> Although it might be syscall-overhead-bound then. :/
08:56:07 <elliott> This is where I mumble @.
08:56:12 <shachaf> Maybe. But as a default "optimization" it seems like it might have significant overhead.
08:56:25 <elliott> shachaf: Anyway, I doubt grep is always IO-bound.
08:56:27 <elliott> Or perhaps even usually.
08:56:45 <elliott> This was sparked by me reading that GNU grep used to be two thousand times slower in UTF-8 locales.
08:57:01 <elliott> Even post-fix, it's 2-4x slower.
08:57:10 <elliott> That seems rather massive for something that /should/ be IO-bound.
08:57:20 <olsner> but I read in a blog post that gnu grep was really really fast!
08:57:26 <shachaf> Well, I suppose it depends.
08:57:34 <Sgeo> Night
08:58:10 <shachaf> elliott: They were probably not benchmarking it on an I/O-bound case.
08:58:18 <elliott> olsner: I read that one too!
08:58:20 <elliott> shachaf: Um?
08:58:23 <shachaf> Actually, I can't find that post anymore, but didn't they say it was doing something like ~30KB/s?
08:58:25 <elliott> shachaf: It was just a large gob of data.
08:58:31 <elliott> Yes. But then also http://rg03.wordpress.com/2009/09/09/gnu-grep-is-slow-on-utf-8/.
08:58:40 <elliott> /usr/share/dict/words is not IO bound.
08:58:44 <elliott> But that big file they tested should be.
08:58:56 <elliott> "done" is not a complicated regular expression.
08:59:02 <elliott> http://dtrace.org/blogs/brendan/2011/12/08/2000x-performance-win/ is the link.
08:59:04 <olsner> the possible speed should depend a lot on whether it can do a simple substring search using a good algorithm or if it has to do regexp matching, and if so how complex the regexp is
08:59:23 <elliott> olsner: it doesn't do the former unless you call it fgrep
08:59:31 <elliott> but no regexp engine should find "done" tough :)
08:59:42 <shachaf> elliott: Well, the file was probably in the cache when they tested it.
09:00:10 <elliott> shachaf: Well, things are in cache a lot of the time.
09:00:16 <shachaf> True.
09:00:17 <olsner> hmm, some things that KMP and smart algorithms do should be generalizable to regexps
09:00:37 <elliott> shachaf: Also, I'd be surprised if GNU grep is the fastest it could possibly be with its IO.
09:00:42 <elliott> Although Unix limits it in that area.
09:00:50 <elliott> olsner: Yeah, yeah, grep has done that for decades :P
09:01:13 <elliott> olsner: Well, fgrep at least.
09:01:20 <olsner> how can this be? the creators of grep were at least as clever as me!?
09:01:52 <olsner> fgrep? but I want a normal grep to do the best thing possible with the regexp I give it
09:02:03 <shachaf> The best possible thing!
09:02:16 <elliott> It should just use an Oracle.
09:02:22 <elliott> grep (C) Larry Ellison
09:02:29 <olsner> error: this is not the string you're looking for
09:04:55 <elliott> shachaf: Ideally, the kernel would grep for us.
09:04:58 <elliott> That would avoid all the IO overhead.
09:05:05 <elliott> Erm, the IO overhead that isn't the actual IO, that is.
09:05:14 <shachaf> Ideally, we would already know the answer.
09:05:26 <elliott> Deep.
09:05:31 <elliott> Neutrinos, man.
09:05:34 <olsner> anyway, at least I want a single command to be able to tell when I give it a simple string that isn't a regexp
09:05:37 <olsner> or to use a regexp engine that is smart enough to make a simple regexp as efficient as a string search
09:07:06 <elliott> olsner: You obviously want it to be smarter than just "pass it off to fgrep if I can"; consider "foo.bar".
09:07:26 <elliott> You can do "foo" and "bar" as fixed-string matches.
09:07:50 <elliott> In fact, do them both at the same time, independently; when two hit at the right position offsets, you're done.
09:08:39 <shachaf> Every searching program should use only Rabin-Karp.
09:09:35 <elliott> shachaf: More like: Rabin-Crap.
09:10:21 <shachaf> Oh, you showed that substring search algorithm who's who!
09:14:44 -!- Vorpal has joined.
09:23:24 -!- GreaseMonkey has quit (Quit: The Other Game).
09:27:06 -!- monqy has quit (Quit: hello).
09:38:54 <Sgeo> elliott, updoot
09:39:00 <Sgeo> I should be sleeping, not updooting you
09:50:47 <elliott> shachaf: So what's The Best DHT???
09:51:12 <shachaf> elliott: Are we talking about drugs?
09:51:17 <elliott> Obviously.
09:51:37 <shachaf> Oh, no, I'm thinking of DMT.
09:51:43 <elliott> SAME THING.
09:51:49 <shachaf> elliott: I've never used any DHT.
09:51:51 <shachaf> Well, maybe I have.
09:51:57 <elliott> BUT YOU SAID YOU LIKED THEM ;__;
09:51:57 <shachaf> Maybe git counts!
09:52:01 <elliott> pet.txt is so sad right now.
09:52:03 <shachaf> elliott: Don't you like them?
09:52:11 <elliott> Well, maybe.
09:52:19 <shachaf> I like them in principle.
09:52:25 * shachaf does everything in principle.
09:52:31 <shachaf> Practice is for other people.
09:52:45 <elliott> My problem with them is that distribution of data is basically unrelated to who /cares/ about that content.
09:52:54 <shachaf> What do you mean?
09:53:16 * shachaf would like to add that he knows pretty much nothing about DHTs.
09:53:25 <elliott> As in, I have to store a bunch of data I don't care about, in return for being able to store data I care about somewhere else, maybe somewhere slow or unreliable.
09:53:47 <elliott> Sure, you can mitigate that, but on the other hand, it seems better to store the data with who cares about it in the first place.
09:53:47 <shachaf> Everything I know about them is a result of saying "wouldn't it be neat if X existed? Oh, look, there's something vaguely similar to X described on Wikipedia. It must be exactly the thing I'm thinking of."
09:53:55 <shachaf> Oh, I see.
09:54:03 <shachaf> Well, in the sense I was thinking of it, you would do that.
09:54:11 <elliott> Then how do you do routing?
09:54:19 <shachaf> You'd have something like a URL, dht:host/hash
09:54:30 <shachaf> Or maybe a collection of hosts that you could ask for any particular hash.
09:54:37 <elliott> shachaf: So you reinvented IP, and then layered content-addressed HTTP on top of it?
09:54:44 <elliott> Okay, but that's definitely not a DHT.
09:54:51 <shachaf> ...Yes.
09:54:56 <shachaf> OK, that's not the only thing I want.
09:55:26 <shachaf> But I want that too.
09:59:14 <shachaf> elliott: So when you find out what the Best DHT is, tell me.
09:59:26 <elliott> shachaf: Okay, but it won't look like that.
09:59:43 <shachaf> elliott: Yes, I just read about DHTs.
09:59:51 <elliott> Okay.
10:00:02 <shachaf> Today I learned about DHTs and eugenics!
10:00:04 <shachaf> A productive day.
10:00:24 <elliott> Eugenics: Not actually genetic engineering. DHTs: Not actually content-addressed HTTP.
10:00:26 <elliott> A DAY OF DISCOVERY.
10:01:04 <elliott> I feel like stating the incredibly obvious: The problem with content-based addressing is that when your content changes, your addresses do too.
10:01:08 <shachaf> What's "membase" doing on the DHT Wikipedia page?
10:01:25 <shachaf> elliott: That's not really a huge problem for a lot of content.
10:01:32 <elliott> shachaf: "distributed object storage system"?
10:01:34 <elliott> Sounds DHTy to me.
10:01:54 <elliott> Have I mentioned that the Storm botnet is really cool?
10:02:03 <elliott> I just wish it wasn't used for such boring things.
10:03:17 <shachaf> elliott: Membase is like memcached on more than one machine.
10:03:30 <shachaf> (And also persistence.)
10:03:36 <elliott> shachaf: memcached is a hash table, yes?
10:03:46 <elliott> So membase is a distributed hash table.
10:03:50 <elliott> I don't see the issue here.
10:04:05 <shachaf> I suppose, technically, maybe.
10:04:44 <shachaf> It's "distributed" in a local sense, I think.
10:05:02 <shachaf> Also the person who added it to the wiki page works at the company that makes it.
10:05:05 <elliott> shachaf: Sure, but DHTs work with even a small number of nodes.
10:05:14 <shachaf> Also I work at competitor. So I might just be biased.
10:05:22 <elliott> I had started to suspect some personal bias. :p
10:05:54 <elliott> shachaf: I think the problem your company might have is that it's competing against a company offering a DHT but its employees don't know what a DHT is.
10:05:56 <elliott> OHHHH SNAP
10:05:59 * elliott works at a eugenics company.
10:06:19 <shachaf> elliott: I prefer the term "key-value" store.
10:06:44 <shachaf> Also, move that right quotation mark a word over to the right.
10:07:10 <elliott> shachaf: I don't have a derogatory name for those, but I need to come up with one, because I don't like them. (Well, in some situations they're good, but I can prove why each of those situations is caused by bad design elsewhere!)
10:08:15 <shachaf> elliott: You can call it "NoSQL" and it has built-in derogatory overtones for the right people.
10:08:27 <elliott> shachaf: But I like SQL even less.
10:08:45 <shachaf> elliott: Do you also hate Data.Map?
10:09:03 <elliott> Data.Map is quite nice, although the implementation is pretty slow.
10:09:17 <elliott> (Data.HashMap is nicer, but lacks some nice functions that Data.Map has.)
10:10:19 * elliott waits for the point.
10:10:38 <shachaf> elliott: You like SQL even less than than you like people who say "NoSQL"?
10:10:48 <elliott> Than than.
10:11:00 <shachaf> elliott: The point was that Data.Map stores keys and values?
10:11:34 <elliott> shachaf: Well, OK, but "key-value stores" almost always use bytestrings as keys, and either bytestrings as values, or (bytestring,bytestring)s.
10:12:24 <shachaf> Sometimes they use ASCII-strings-without-newlines-or-NULs-or-spaces as keys!
10:12:48 <elliott> shachaf: So much better!
10:13:01 <elliott> But no, maps are fine, maps with /those/ types are not.
10:13:26 <shachaf> Anyway, Data.Map internally stores N-BYTE POINTERS TO ITS VALUES!
10:13:43 <elliott> The pointers are composed of BYTES?
10:13:46 <elliott> Gasp!!!
10:13:54 <elliott> Not really, they're bits.
10:14:03 <elliott> The byte boundaries aren't relevant.
10:14:15 <shachaf> byte=8 bits
10:14:21 <elliott> If you're telling me things are composed of bits, then thanks, Shannon! Thannon.
10:14:31 <elliott> Similarly the CPU executes machine code, so we write in machine code, etc.
10:14:32 <shachaf> So what's your point?
10:14:48 <shachaf> You store bytestrings in the values and then you fetch them and give them meaning.
10:14:51 <elliott> Specifically we write in x86-64 machine code because that's what our CPUs do and so it clearly must be the One True etc. etc. etc. who gives a damn what the CPUs do.
10:15:46 <elliott> shachaf: I dislike parsing intensely.
10:16:04 <elliott> Rather, I *strongly* dislike serialisation/deserialisation as a regular part of the computing cycle.
10:16:18 <shachaf> Well, so what would you rather do?
10:16:32 <elliott> It breaks types, it wastes cycles (yeah, yeah, it's what the CPU does, but it's still /time/), [...]
10:16:43 <elliott> shachaf: It sounds like you're asking me to mumble about @. :)
10:17:06 <shachaf> So your answer is "I have no practical answer but I hate it anyway"?
10:17:14 <shachaf> Fair enough. I say that to most everything.
10:17:17 <elliott> shachaf: No, I'm saying "do you want me to mumble about my practical answer"?
10:17:20 <elliott> *?"
10:17:28 <shachaf> Is @ your practical answer?
10:17:37 <elliott> @ contains my practical answer to that particular question.
10:17:59 <shachaf> "practical" means "can be used by any of the things that use databases that actually exist today".
10:18:21 <elliott> That's a rubbish definition. Key-value stores didn't exist until $t$.
10:18:31 <elliott> Did that stop them being a practical idea?
10:18:51 <elliott> I mean, I kind of am planning to write this @ thing.
10:19:33 <shachaf> I'll be delighted to use it once you do!
10:20:10 <elliott> shachaf: I take it you're not interested in its solution to this problem. :p
10:20:34 <shachaf> elliott: I'm trying to decide whether to listen to your solution or go to sleep, given that I need to be awake in some smallish number of hours.
10:20:40 <shachaf> Eh, fine. What's your solution?
10:21:08 <elliott> Okay.
10:21:39 <shachaf> (Get ready to quake in your boots, membase! The end is nigh!)
10:21:42 <shachaf> (Ahem. Sorry.)
10:21:54 <elliott> (Will your company implement @ for me?)
10:22:22 <shachaf> That depends on what @ is.
10:24:35 * shachaf wonders if he's waiting for a response right now.
10:24:38 <elliott> Yes.
10:24:42 <elliott> I am typing it. :p
10:26:48 <elliott> shachaf: Well, objects (term used outside of the context of OOP) certainly must be stored in RAM, and on disk, and they certainly must be transferred over the network, and all these things have to work with bytes. What @ changes is to turn this into a service of the system; certainly the bytes used to represent an object in a certain context must be tailored to that object in many circumstances -- you
10:26:49 <elliott> probably want to store and transfer a lot of images as PNGs, for instance, while operating in memory works better with a less compressed approach -- but this can be controlled by the implementation of the types in question without changing the basic model. The interface to a key-value-store-done-right must be *typed* -- you can imagine something like the vault API (http://hackage.haskell.org/packages/a
10:26:49 <elliott> rchive/vault/ All algorithms for replication, blah blah blah, are already written without actually caring what the bytes are, or what they mean, so they can just as well be polymorphic instead. The serialisation/deserialisation to bytes, when necessary, is taken care of by the system when boundaries like memory/disk and memory/network are traversed. And to tie it all t
10:26:54 <elliott> ogether, @ also provides, as a system service, a "metaprotocol" which allows distributed programming to be done without sacrificing types: the system ensures everything is well-typed, and the programmer doesn't have to, doesn't want to, and shouldn't care about how erasure of this is handled.
10:27:16 <elliott> (Not when writing a store, at least; it certainly makes sense to care about it when, for example, implementing custom serialisation code.)
10:27:25 <elliott> http://hackage.haskell.org/packages/archive/vault/, since that link got split.
10:27:53 <coppro> copumpkin: regrettably, I am not a ppro with my arrows reversed
10:28:11 <elliott> coppro: Instead you're just pooppy.
10:28:35 <coppro> it's true ^_^
10:28:48 <shachaf> elliott: Makes sense.
10:28:54 <elliott> coppro: Good to see you're finally embracing your identity!
10:29:08 <elliott> shachaf: membase will be out of business in a week!
10:29:13 <coppro> all your poop are belong to us
10:29:17 * elliott considers purchasing products from membase.
10:29:24 <shachaf> elliott: It's true.
10:29:47 <shachaf> elliott: By the way, have considered writing all these things about @ in a place that isn't your IRC text entry prompt?
10:29:52 <shachaf> I may have brought this up before.
10:30:30 <elliott> shachaf: Anyway, the degree to which I can be concrete ends at what "distributed-ready" code would look like, and thus what the "metaprotocol" would look like. I've found what I've read about Reactive-Demand Programming quite compelling, but I'm not sure it's The Path.
10:30:36 <elliott> shachaf: And yes, I have.
10:30:49 <shachaf> You have?
10:30:50 <elliott> shachaf: The problem is that I rarely get the motivation to write so in-depth about it until someone mocks it. :-)
10:30:54 <shachaf> Oh, have considered.
10:31:07 <elliott> But I probably will set up such a thing sometime soon.
10:31:17 <shachaf> elliott: OK, so we need to mock you at regular intervals.
10:31:24 <elliott> Yes.
10:31:33 <shachaf> elliott: Can we mock an outline out of you, and then mock each segment of it?
10:31:49 <elliott> Wow, membase is expensive.
10:32:04 <elliott> I don't know if I can afford $2,499.00/node just to annoy shachaf.
10:32:11 <elliott> Maybe I'll get a thousandth of a node.
10:32:19 <coppro> elliott: you should call each bit an apocralypse
10:32:27 <elliott> Wait, that's like £3.
10:32:36 <coppro> in refeence to both perl 6 and discworld
10:32:46 <elliott> shachaf: How much do *you* guys charge per node???
10:33:06 <shachaf> elliott: If you have to ask, you can't afford it.
10:33:19 <elliott> shachaf: Maybe I don't have to ask. Maybe I just want to.
10:33:49 <shachaf> Oh, well, the clustered version isn't actually released yet.
10:34:22 <elliott> So... is it possible to give you money?
10:35:05 <shachaf> ...The "give us money" bit of the website is "currently under maintenance".
10:35:31 <elliott> Ah! One of those post-business-model companies. I've heard about them.
10:35:33 <shachaf> But you can download a free single-machine no-replication version.
10:35:40 * elliott was just waiting for an opportunity to say that.
10:35:47 <elliott> shachaf: I CAN'T WAIT.
10:35:55 <elliott> How can I be web-scale???
10:36:02 <elliott> I MUST KNOW.
10:36:18 <elliott> I'm not even THINKING about giving money to membase any more.
10:36:30 <shachaf> Good to hear.
10:36:42 <shachaf> * elliott fights mockery with mockery.
10:37:07 <elliott> shachaf: Hey, maybe I just really want to be web-scale.
10:37:11 <elliott> Maybe I'll make the next big thing.
10:37:22 <elliott> Maybe Y Combinator -- no, PAUL GRAHAM HIMSELF -- will fund me.
10:37:32 -!- kmc has quit (Quit: Leaving).
10:37:33 <elliott> Maybe I'll buy EVERY SINGLE COPY YOU HAVE and you won't be able to sell your software any more?
10:37:50 <elliott> Maybe you'll be fired because I'll be RICH and giving money to MEMBASE instead!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
10:37:54 * shachaf wonders whether to mention that the company he works at is funded by Y Combinator.
10:38:05 <shachaf> Mockery will undoubtedly ensue.
10:38:07 <elliott> I already said it was post-business-model!
10:38:17 * shachaf sighs.
10:38:45 * elliott abandons his dreams of scaling. To the web.
10:38:50 <elliott> Wait, I haven't said cloud yet.
10:39:13 <shachaf> You just did.
10:39:23 <elliott> Not when I said that, I didn't!
10:40:00 <shachaf> By the time you'd said it, you'd already said it.
10:40:23 <elliott> Agoran precedent clearly states that one of the temporal orderings to things like that applies, I just can't remember what it is.
10:40:28 <elliott> It came up recently when I failed to register.
10:41:13 * elliott looks at vault's implementation again.
10:41:19 <elliott> I remember these unsafeCoerces.
10:41:23 <elliott> where f' = unsafeCoerce . f . unsafeCoerce
10:41:34 <elliott> shachaf: The best composition, no?
10:42:18 <shachaf> I must admit it has a certain charm to it.
10:42:29 * shachaf looks at Agora's rules.
10:42:43 <elliott> That's, um, possibly not the best introduction to Agora?
10:42:50 <elliott> Well, it is if you get all the way through.
10:42:50 <shachaf> Ugh. These are the sorts of rules that have paragraphs that start with WHEREAS.
10:42:54 <elliott> shachaf: No.
10:42:56 <elliott> Only one of them.
10:43:00 <elliott> R101 is Special.
10:43:15 <elliott> Rule 104 is the most important one, read that first.
10:43:34 <elliott> It's existed in its original form for 18 years, and has had absolutely no effect for approximately 18 years.
10:44:02 <shachaf> What do the slashes mean?
10:44:12 <elliott> Revision number.
10:44:15 <elliott> It's like CVS.
10:44:25 <elliott> In fact, the rules are kept under RCS!
10:44:31 <elliott> Or at least were, until a few years ago, at least.
10:44:32 <shachaf> "A person SHOULD NOT violate a rule."
10:44:51 <elliott> They also SHALL NOT, but SHOULD NOT means something else entirely.
10:44:58 <elliott> (See rule 2152.)
10:45:15 <shachaf> So does the game end when someone wins?
10:45:37 <elliott> No.
10:45:42 <elliott> Hundreds of people have won.
10:45:47 <shachaf> Have you won?
10:46:01 <elliott> Um, once or twice, I think. By teaming up with others, mostly.
10:46:04 <elliott> By mostly, I mean entirely.
10:46:11 <shachaf> Have I won?
10:46:37 <shachaf> Someone should make a rule where everyone wins.
10:46:39 <elliott> No.
10:47:43 <elliott> http://sprunge.us/jGYX
10:47:43 <elliott> http://sprunge.us/RFhK
10:47:48 <shachaf> Are these people attempting to use Spivak pronouns?
10:47:52 <elliott> I'm not sure why I sprunged that, but I did.
10:47:54 <elliott> shachaf: "Attempting"?
10:48:02 <elliott> Spivak is the universal standard.
10:48:08 <elliott> On the lists, too.
10:48:11 <elliott> Although Norrish doesn't like it.
10:48:22 <shachaf> Oh, apparently there's more than one variety.
10:48:24 <elliott> But he posts like, once every two years, so who cares.
10:48:31 * shachaf had only encountered "Elverson".
10:48:33 <elliott> s/sprunged that/sprunged those/
10:48:39 <elliott> shachaf: You mean the "ey" ones?
10:48:41 <elliott> I can't stand the "ey" ones.
10:48:46 <shachaf> Aye, those.
10:49:01 <elliott> I just keep hearing "eyyyyyyyyyyyyy" whenever anyone uses a pronoun.
10:49:39 <elliott> shachaf: Have I mentioned oerjan used to play Agora?
10:49:51 <elliott> Before I was born. :-/
10:49:54 <shachaf> You are apparently a plagiarist and a scamster.
10:50:02 <elliott> (Although after that too.)
10:50:18 <elliott> shachaf: I completely forget what the former was, and why I got the latter.
10:50:23 <shachaf> Nonsense, the world came into existence when you were born.
10:50:41 <elliott> Heh, the PerlNomic Partnership is in the Scroll.
10:50:46 <shachaf> So why is it "e" but "eir"?
10:50:55 <elliott> shachaf: Why not?
10:51:30 <elliott> I suspect it derives from the LambdaMOO use, since the original nomic was played on a MUD.
10:51:32 <elliott> But that's just a hunch.
10:51:33 <elliott> Erm.
10:51:35 <elliott> *original online nomic
10:51:50 <shachaf> Are you, in fact, a penguinofthegods?
10:51:59 <elliott> Although, NomicWorld was only like one year after LambdaMOO spivak, apparently...
10:52:03 <elliott> shachaf: No, I'm actually a turtle.
10:52:42 <shachaf> And apparently you are a "goon".
10:53:03 <shachaf> Or were, before you were banned.
10:53:14 <elliott> Stop googling me.
10:53:23 -!- elliott has quit (Remote host closed the connection).
10:53:37 <shachaf> @tell elliott OK.
10:53:37 <lambdabot> Consider it noted.
11:57:21 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 , Skype: patashu0 .).
12:14:46 -!- Slereah_ has joined.
12:15:22 -!- Slereah has quit (Ping timeout: 252 seconds).
12:58:10 -!- derdon has joined.
13:12:49 -!- kmc has joined.
13:24:54 -!- ais523 has quit (Remote host closed the connection).
14:28:34 -!- derdon has quit (Remote host closed the connection).
15:19:35 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
15:48:05 -!- copumpkin has joined.
15:53:14 -!- kmc has quit (Quit: Leaving).
15:56:02 -!- Phantom_Hoover has joined.
15:57:33 <Phantom_Hoover> Hello lambdabot.
15:57:33 <lambdabot> Phantom_Hoover: You have 8 new messages. '/msg lambdabot @messages' to read them.
16:01:55 -!- MSleep has changed nick to MDude.
16:18:16 -!- atehwa has quit (Ping timeout: 240 seconds).
16:19:04 -!- copumpkin has changed nick to BTCopumpkin.
16:19:24 -!- atehwa has joined.
16:20:03 -!- BTCopumpkin has changed nick to btcopumpkin.
16:21:38 -!- btcopumpkin has changed nick to copumpkin.
16:22:28 -!- Phantom__Hoover has joined.
16:23:11 -!- Phantom_Hoover has quit (Read error: Connection reset by peer).
16:26:15 -!- sebbu2 has joined.
16:26:15 -!- sebbu2 has quit (Changing host).
16:26:15 -!- sebbu2 has joined.
16:27:46 -!- sebbu has quit (Ping timeout: 240 seconds).
16:28:04 -!- sebbu2 has changed nick to sebbu.
16:30:25 -!- kmc has joined.
16:31:28 -!- zzo38 has joined.
16:33:55 -!- Phantom__Hoover has quit (Ping timeout: 240 seconds).
16:34:31 -!- Phantom__Hoover has joined.
16:42:37 <itidus21> `log
16:42:43 <HackEgo> 2003-05-08.txt:22:13:31: -!- Aardappel has joined #esoteric.
16:42:53 <itidus21> `log
16:42:56 <HackEgo> 2007-06-06.txt:19:07:03: <oerjan> !bf +++++++++++++[>+++++>++++++>+++++++++>++<<<<-]+.>.++.>++++++.<++++++.++++++.-.<.>>>>++++++.<-.<+++++++++++++++++.>-.+.-.
16:42:59 <itidus21> `log
16:43:02 <HackEgo> 2006-03-22.txt:20:55:02: <ihope> !daemon pager bf +[,>,<[->++++++++ ++++++++ ++++++++ ++++++++<]>.<[-]+]
16:43:12 <itidus21> hehe hehe
16:45:47 <Gregor> !bf +++++++++++++[>+++++>++++++>+++++++++>++<<<<-]+.>.++.>++++++.<++++++.++++++.-.<.>>>>++++++.<-.<+++++++++++++++++.>-.+.-.
16:45:50 <EgoBot> ​.ACTION. tests
16:46:01 <Gregor> That would've worked in 2007 :P
16:46:15 -!- Phantom__Hoover has quit (Ping timeout: 240 seconds).
16:48:00 <itidus21> log seems even more fun when no specific query is made
16:48:39 <itidus21> `log
16:48:41 <HackEgo> 2006-08-02.txt:08:09:22: <Arrogant> 3 am.
16:50:56 <itidus21> for some reason this 3 am thing brings me back to memories of a board game about "big rigs" which was essentially about driving large trucks great distances
17:00:44 -!- kmc has quit (Quit: Leaving).
17:06:50 -!- Phantom__Hoover has joined.
17:06:55 -!- Phantom__Hoover has quit (Changing host).
17:06:55 -!- Phantom__Hoover has joined.
17:43:28 -!- Klisz has joined.
18:16:42 -!- monqy has joined.
18:18:01 -!- zzo38 has quit (Remote host closed the connection).
18:28:46 -!- kmc has joined.
18:28:57 <Gregor> <itidus21> for some reason this 3 am thing brings me back to memories of a board game about "big rigs" which was essentially about driving large trucks great distances // that sounds almost as exciting as 1835: The game of railroad unification in Germany.
18:49:16 <Phantom__Hoover> That sounds a little less boring than Transport Tycoon Deluxe.
18:49:32 <Phantom__Hoover> (OH SNA— oh wait nobody except fizzie will care.)
18:49:48 <Phantom__Hoover> (Insert speech recognition snipe.)
18:51:40 <itidus21> i am bored enough to care
18:52:11 <itidus21> simulating railway history with a boardgame is more important than anything else
18:56:54 <Gregor> itidus21: WELL THEN HAVE I GOT GOOD NEWS FOR YOU!
18:57:03 <Gregor> itidus21: There's a whole SLEW of 18XX railroad unification board games!
19:14:53 <kallisti> @tell elliott http://www.3rdshiftthoughts.com/2008/11/thank-less-culture.html
19:14:54 <lambdabot> Consider it noted.
19:15:50 <monqy> this is a joke right
19:16:27 <kallisti> monqy: I don't think so.
19:16:33 <monqy> i................
19:16:57 <kallisti> dude read the panel on the right it's hilarious
19:17:35 <kallisti> and also fucked up
19:18:17 <monqy> please be a joke
19:18:22 <itidus21> the bright side of abortions
19:19:17 <kallisti> "abortions"
19:19:52 <Gregor> "Satan is tempting and effortlessly distracting people from anything tree and right and good to that which pleases themselves." <-- this typo adds so many layers of lols.
19:20:00 <Gregor> Satan is distracting us from Christmas trees you guys.
19:20:04 <Gregor> They're the true meaning of Christmas.
19:21:29 <kallisti> I like how people don't think twice about accidentally killing an animal on a highway, but.. one human cell is a big deal (and also is waiting for them in heaven)
19:21:38 <kallisti> I wonder if they'll be able to find their unborn daughters. they're pretty small.
19:21:43 <kallisti> is that how heaven works?
19:21:45 <kallisti> help
19:22:13 <Phantom__Hoover> http://www.cracked.com/blog/31-inspirational-tumblr-photos-adjusted-honesty/
19:22:18 <Phantom__Hoover> I find this strangely hilarious.
19:23:37 <Gregor> kallisti: "There has never been any evidence presented that the soul can enter the body at any time later than conception." Conservapedia
19:23:40 <Gregor> You can't make this shit up.
19:24:07 <monqy> wow good job conservapedia
19:24:32 <Phantom__Hoover> Gregor, there's a moderately high chance that someone did indeed make that shit up.
19:25:01 <Gregor> Fair point.
19:25:17 <Gregor> But /I/ can't make this shit up, and /you/ cant make this shit up, because we're smarter than turnips :P
19:25:25 <Gregor> (No offense to the humble turnip)
19:25:47 <Phantom__Hoover> Ah, but we /could/ make that shit up if we were trying to mock the kind of people who say it.
19:25:55 <Gregor> I don't think I could.
19:26:05 <Gregor> I'm not capable of the sheer convolution of stupidity required.
19:28:50 <Phantom__Hoover> There are bits of the Conservative Bible Project which would be glaringly obvious parody were it not for the fact that the diffs clearly show that Schlafly wrote them.
19:29:06 <kallisti> I was wondering why I felt so tired, and then I realized
19:29:09 <kallisti> I have no caffeine in me.
19:29:27 <Phantom__Hoover> Like when it says that Jesus telling the disciples to cast their nets on the right of the boat clearly showed his endorsement of conservatism.
19:29:41 <kallisti> lol
19:32:04 <Gregor> That ...
19:32:09 <Gregor> See, I couldn't make that shit up.
19:32:31 <Gregor> I wonder if maybe Schlafly is just the greatest troll on Earth.
19:51:41 <Slereah_> I think at that level of effort, it stops being a troll and blooms into a problem
19:58:57 -!- variable has changed nick to const.
20:13:52 -!- oerjan has joined.
20:40:42 <kallisti> so I think next time I get paid I'm gonna buy a computer.
20:45:27 <olsner> kallisti: you don't have a computer!?
20:49:28 <oerjan> he's just using telepathy
20:49:38 <oerjan> or would that be telekinesis
20:56:28 -!- GreaseMonkey has joined.
21:14:06 <kallisti> oerjan: telemagnetism
21:16:26 <oerjan> ah.
21:17:40 <kallisti> olsner: but yes, obviously wanting to buy a computer implies I don't have one.
21:18:04 <Phantom__Hoover> Telemagnetism!
21:18:23 <Phantom__Hoover> Telectromagnetism.
21:19:23 <kallisti> more accurately, I suppose.
21:24:54 -!- boily has joined.
21:34:04 -!- boily has quit (Ping timeout: 240 seconds).
21:46:53 -!- Jafet has quit (Quit: Leaving.).
21:51:58 -!- Ngevd has joined.
21:52:14 <Ngevd> Well, I've got my todo list for this down to one thing.
21:52:23 <Ngevd> Write an actual todo list
21:52:26 <Ngevd> Also, hello!
21:52:52 <oerjan> i was thinking you had got it down to "hello!"
21:53:12 <Ngevd> Nah, "hello!" is absent from this todo list
21:53:22 <oerjan> shocking
21:53:44 <Phantom__Hoover> Damn telectromagnetism.
21:54:23 <oerjan> Telectromagnetism: The shocking story
21:55:56 <oerjan> Telekinesis: The story of a movement
21:56:09 <Ngevd> When I get the todo list empty, you'll be able to critisize my Haskell programming again!
21:56:13 <Ngevd> Everyone loves that!
21:56:53 <oerjan> > unwords $ repeat "Yay!"
21:56:54 <lambdabot> "Yay! Yay! Yay! Yay! Yay! Yay! Yay! Yay! Yay! Yay! Yay! Yay! Yay! Yay! Yay!...
21:58:24 <monqy> yay!...
21:59:37 <Ngevd> How do you make IRC tell you when someone comes online?
22:02:24 <olsner> you just need to watch it constantly
22:02:30 <Ngevd> Okay
22:02:49 <Ngevd> Even if it's a particular person I'm looking for?
22:03:10 <monqy> depends on the client??
22:03:19 <kallisti> it occurs to me that a tree zipper can be used quite trivially with the State monad, however
22:03:37 <kallisti> I don't really think it's very useful because the zipper abstraction pretty much hides the state.
22:04:02 -!- derdon has joined.
22:04:25 <kallisti> Ngevd: perhaps you could set up a hilight that matches their join message (is that even a thing you can do?)
22:04:46 <kallisti> or maybe, in irssi, a perl script that outputs a notification to the main window
22:04:52 <Ngevd> I've added them to my friends list?
22:05:05 <kallisti> friends. list? IRC?
22:05:23 <Ngevd> On XChat, somehow
22:05:30 <Ngevd> Or maybe it was Facebook...
22:06:04 -!- Patashu has joined.
22:06:25 -!- kallisti has changed nick to xxDarkAbyssxx.
22:06:40 <xxDarkAbyssxx> so this is going to be my new nick from now on.
22:06:57 <Ngevd> I preferred CakeProphet
22:07:35 -!- xxDarkAbyssxx has changed nick to xxDarkProphetxx.
22:07:37 <xxDarkProphetxx> there we go.
22:12:19 <oerjan> the prophet of the chocolate cake
22:14:19 <pikhq> http://i.imgur.com/4mQLU.jpg Jesus. Fuck China.
22:14:31 <pikhq> (that's *smog*)
22:15:36 <Ngevd> Ha! They are a good fifty years behind London's scientists in smog making techniques!
22:16:14 <pikhq> London's got fog problems. You're not literally looking at the sun through miles of soot.
22:16:28 <Ngevd> Fifty years ago, however...
22:16:38 <Ngevd> Or was it 100?
22:17:02 <pikhq> Still probably not that bad.
22:17:18 <Ngevd> http://en.wikipedia.org/wiki/Great_Smog_of_1952
22:17:35 <pikhq> That was a picture of a normal day.
22:18:00 <Ngevd> Fair nuff
22:18:51 <Ngevd> London was, to my knowledge, the first place to have air pollution laws
22:19:52 <Ngevd> In 1306
22:20:00 <Ngevd> Silly southeners
22:22:14 -!- hagb4rd has quit (Quit: Nettalk6 - www.ntalk.de).
22:22:52 <Ngevd> Hmm
22:23:06 -!- elliott has joined.
22:23:07 -!- elliott has quit (Client Quit).
22:23:20 <Ngevd> If I used Either StdGen Int instead of (StdGen, Bool) it would make things easier
22:23:34 <Ngevd> No it wouldn't
22:23:37 <Ngevd> :(
22:23:43 <Ngevd> ...IDEA!
22:23:45 -!- elliott has joined.
22:23:46 <Ngevd> :D
22:23:48 <elliott> 22:14:19: <pikhq> http://i.imgur.com/4mQLU.jpg Jesus. Fuck China.
22:23:48 <lambdabot> elliott: You have 4 new messages. '/msg lambdabot @messages' to read them.
22:23:51 <elliott> pikhq: this is pretty
22:24:12 <pikhq> elliott: Your lungs disagree.
22:26:19 -!- Jafet has joined.
22:27:59 <copumpkin> could that just be a foggy day?
22:28:18 <Ngevd> I remember going to London as a chil
22:28:19 <Ngevd> d
22:29:10 <Ngevd> Seeing as at that point I'd lived mainly in the remote town of Hexham, and had poor weak lungs, I coped badly
22:29:21 -!- TeruFSX has joined.
22:30:45 <Ngevd> Why does
22:30:51 <Ngevd> > init . init [1..10]
22:30:51 <lambdabot> No instances for (GHC.Num.Num [a], GHC.Enum.Enum [a])
22:30:52 <lambdabot> arising from a use...
22:30:57 <Ngevd> not work
22:31:06 <Ngevd> but > (.) init init [1..10]
22:31:09 <Ngevd> Wait
22:31:10 <Deewiant> ?unpl init . init [1..10]
22:31:10 <lambdabot> (\ c -> init (init [1 .. 10] c))
22:31:21 <Ngevd> > (.) init init [1..10]
22:31:23 <lambdabot> [1,2,3,4,5,6,7,8]
22:31:32 <Ngevd> Ah
22:31:35 <Ngevd> Thanks Deewiant
22:31:39 <pikhq> copumpkin: Theoretically it could be, but it genuinely isn't. Beijing just has constant pollution.
22:31:45 <Ngevd> (.) confuses me a lto
22:31:55 <Deewiant> > init . init $ [1..10]
22:31:56 <lambdabot> [1,2,3,4,5,6,7,8]
22:31:58 <Deewiant> > (init . init) [1..10]
22:32:00 <lambdabot> [1,2,3,4,5,6,7,8]
22:32:17 <Ngevd> > init $ init [1..10]
22:32:18 <lambdabot> [1,2,3,4,5,6,7,8]
22:32:47 <elliott> Hey Deewiant I figured out roughly how Shiro's fungespace works, GET TREMBLING
22:33:20 <oerjan> ah i can hear they've started selling new year fireworks
22:33:32 <Deewiant> Yeah I saw something about it some 22 hours ago
22:33:33 <oerjan> (which means _someone_ has to try them out now)
22:33:38 <Deewiant> Hope it works out
22:34:33 <copumpkin> pikhq: ah
22:35:58 <elliott> Deewiant: Weeeell technically that's only the prototype fungespace :)
22:36:13 <elliott> Deewiant: I need to figure out what the zipper of a k-d tree is to get the real thing
22:36:31 <oerjan> Ngevd: you just have to remember that function application has higher precedence than all operators, so you cannot just add an argument to apply an expression with an operator in it
22:36:35 <Deewiant> Quadtree might be good enough
22:36:55 <Deewiant> But, sleep -->
22:37:24 <elliott> Deewiant: Uhh, no
22:37:28 <elliott> Deewiant: That won't handle slowdown
22:38:00 <elliott> I'm not releasing until I'm faster than CCBI on all the programs I can find that don't run in less than half a millisecond :P
22:39:21 <oerjan> vaporware by design
22:39:34 <Ngevd> I'm not going to stop until I can search through the logs for me saying "I may" and can say, "I did!"
22:39:38 <Ngevd> Honestly
22:39:53 <Ngevd> Stop what, do I hear you ask?
22:40:04 <oerjan> `log Ngevd> .*I may
22:40:06 <elliott> Saying "I may"?
22:40:10 <elliott> oerjan: Taneb too
22:40:18 <HackEgo> 2011-12-11.txt:15:58:15: <Ngevd> During that, I think I may have worked out a way to do rudimentary arithmetic
22:40:21 <oerjan> `log Taneb> .*I may
22:40:27 <HackEgo> 2011-07-11.txt:15:27:10: <Taneb> I may make an esolang based on football (soccer)
22:40:46 <Ngevd> The first one was in my fervent bytepusher dream
22:40:55 <Ngevd> Which was... yesterday
22:41:08 <Ngevd> The second one, I don't remember
22:41:12 <Ngevd> But was in...
22:41:18 <Ngevd> July!?
22:41:20 <elliott> I can't believe you have to scan a document with a phone number to contribute to tup.
22:50:01 <Ngevd> Well, my awful code is almost ready to be posted in here for...
22:50:06 <Ngevd> Help
22:50:27 <monqy> hi
22:50:32 <Ngevd> I just need to save it and see if it works
22:50:35 <Ngevd> Hi, monqy
22:51:04 <Ngevd> In other news, tiffany is now my strongest Pokmon
22:51:29 <Ngevd> After she defeated the Mauville and Lavaridge gym leaders singlehandedly
22:51:40 <Phantom__Hoover> And just like that, tiffany's existence was given some justification.
22:52:51 <tswett> Hey, I found Gregor on Spokeo. He's a married black male in his late 50s who lives in an apartment worth about $37,000. He did not go to college and works in sales.
22:52:58 <tswett> He lives in Detroit.
22:53:18 <Ngevd> `log Ngevd> .*I may
22:53:23 <HackEgo> 2011-12-12.txt:22:40:04: <oerjan> `log Ngevd> .*I may
22:53:28 <Ngevd> `log Ngevd> .*I may
22:53:34 <HackEgo> 2011-10-04.txt:20:37:46: <Ngevd> I may try to write a Fibonacci numbers thing in Brook
22:53:42 <elliott> `addquote <tswett> Hey, I found Gregor on Spokeo. He's a married black male in his late 50s who lives in an apartment worth about $37,000. He did not go to college and works in sales. <tswett> He lives in Detroit.
22:53:45 <HackEgo> 761) <tswett> Hey, I found Gregor on Spokeo. He's a married black male in his late 50s who lives in an apartment worth about $37,000. He did not go to college and works in sales. <tswett> He lives in Detroit.
22:53:46 <Ngevd> Okay, I did try to do that
22:53:47 <tswett> I... think we might have found the wrong one.
22:53:50 <Ngevd> Didn't get very far
22:53:54 <elliott> `delquote 761
22:53:57 <HackEgo> ​*poof* <tswett> Hey, I found Gregor on Spokeo. He's a married black male in his late 50s who lives in an apartment worth about $37,000. He did not go to college and works in sales. <tswett> He lives in Detroit.
22:54:00 <elliott> `addquote <tswett> Hey, I found Gregor on Spokeo. He's a married black male in his late 50s who lives in an apartment worth about $37,000. He did not go to college and works in sales. <tswett> He lives in Detroit. <tswett> I... think we might have found the wrong one.
22:54:02 <HackEgo> 761) <tswett> Hey, I found Gregor on Spokeo. He's a married black male in his late 50s who lives in an apartment worth about $37,000. He did not go to college and works in sales. <tswett> He lives in Detroit. <tswett> I... think we might have found the wrong one.
22:54:28 <tswett> And, of course, it says "To see all of Gregor Richards's personal information » Click Here".
22:54:37 <tswett> I just love how everyone's personal information is up for sale now.
22:56:03 <oerjan> nah Gregor cannot be black, he looks nothing like Michael Jackson.
22:57:49 <Jafet> Are you saying all black people look alike? Michael Jackson looks nothing like Eminem.
22:58:15 <oerjan> well, just the skin color, of course
22:58:38 <tswett> I'm beginning to doubt that everything in this channel is completely true and unmisleading.
22:58:54 <monqy> :o
22:59:08 <oerjan> tswett: well we do occasionally get trolls, like that guy earlier
22:59:24 -!- pikhq has quit (Ping timeout: 240 seconds).
22:59:36 -!- pikhq has joined.
23:04:46 -!- Ngevd has quit (Ping timeout: 276 seconds).
23:13:54 * Phantom__Hoover → sleep
23:13:56 -!- Phantom__Hoover has quit (Quit: Leaving).
23:19:24 <elliott> Gregor: I like how your hostname is still "foobar".
23:19:27 <elliott> *username
23:25:21 -!- hagb4rd has joined.
23:26:22 <Gregor> elliott: It's a good'n.
23:34:28 <hagb4rd> listen and enjoy.. berlin! http://homepage.alice.de/hagbard/stadtkind_(barbara_morgenstern_remix).mp3
23:38:57 -!- pikhq has quit (Ping timeout: 245 seconds).
23:39:02 -!- pikhq has joined.
23:48:03 -!- zzo38 has joined.
23:54:57 <zzo38> If the DVD recorder is connected to itself, it allows to record a Macrovisioned VHS tape to DVD.
←2011-12-11 2011-12-12 2011-12-13→ ↑2011 ↑all