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