00:06:14 15:26:12 is there a canonical example of an applicative functor that isn't a monad? 00:06:14 15:26:56 or rather can't have a monad constructed around it. 00:06:14 15:29:51 tnks: ZipList 00:06:14 15:29:53 tnks: ZipList 00:06:15 AAAAAAARGH 00:06:27 @tell oerjan GET YOUR ZIPLIST JOIN FORMULATED, I NEED TO GO ON THE OFEFNSIVE ALREADY 00:06:27 Consider it noted. 00:06:35 @tell oerjan *OFDSIOFG 00:06:35 Consider it noted. 00:12:14 -!- Jafet has joined. 00:20:17 -!- Nisstyre has joined. 00:21:52 Phantom__Hoover 00:21:55 Im disapointe in you 00:23:53 elliott: What? 00:23:56 ZipList join? 00:24:01 Yes. 00:24:24 You can make such a thing? 00:24:36 oerjan reckons he has. 00:24:37 -!- nooga has quit (Ping timeout: 260 seconds). 00:24:52 It's basically just diagonalisation a la the reader monad, but tricksy because of the no guarantee of equal length. 00:25:18 Right, but I thought that was "tricksy" as in "impossible" because of that. 00:25:19 (oerjan is sceptical that there are any Haskell ADTs that can be made applicative functors that can't be made monads (with the two instances agreeing)) 00:25:34 shachaf: Well, he wrote it out once in here I think and claimed it worked :P 00:26:04 (oerjan is sceptical that there are any Haskell ADTs that can be made applicative functors that can't be made monads (with the two instances agreeing)) 00:26:08 Well, I suppose that's easily disprovable. 00:26:15 But you need existential quantification. 00:44:23 -!- Jafet has quit (Quit: Leaving.). 00:51:45 * Phantom__Hoover → sleep 00:51:54 If only I had a way of indicating DEFCONery. 00:52:05 -!- Phantom__Hoover has quit (Quit: Leaving). 01:02:53 -!- Jafet has joined. 01:04:16 -!- Jafet has quit (Client Quit). 01:05:01 -!- Jafet has joined. 01:13:29 -!- Jafet has quit (Quit: Leaving.). 01:16:08 -!- xmorc has joined. 01:18:04 -!- xmorc has quit (Client Quit). 01:30:26 https://upload.wikimedia.org/wikipedia/commons/b/bd/CricketBattingAverageHistogram.gif Wow. 01:40:25 integration should be banned 01:41:40 pikhq_: join me in "anti integration league" 01:41:45 wait no that sounds racist 01:43:01 -!- pikhq has joined. 01:43:03 -!- pikhq_ has quit (Ping timeout: 240 seconds). 01:48:16 pikhq: :( 01:55:46 elliott: ? 01:55:51 integration should be banned 01:55:51 pikhq_: join me in "anti integration league" 01:55:51 wait no that sounds racist 01:55:56 Ah. 01:56:03 Why should it be banned? 01:56:16 It's icky. Also uncomputable. 01:56:53 ^in the general case 01:57:15 pikhq: The general case including........... Newtonian physics 01:57:36 Um? 01:58:04 Which means numeric approximations 01:58:06 Which means pain :'( 01:59:28 pikhq: ("Um?"?) 02:08:42 -!- Jafet has joined. 02:19:21 > text $ "pikhq: (" ++ fix ("\"" ++) ++ "Um" ++ fix (++ "\"?") ++ ")" 02:19:26 > var $ "pikhq: (" ++ fix ("\"" ++) ++ "Um" ++ fix (++ "\"?") ++ ")" 02:19:33 WORK WITH ME HERE LAMBDABOT 02:19:38 mueval-core: Time limit exceeded 02:19:38 thread killed 02:19:53 > "pikhq: (" ++ fix ("\"" ++) ++ "Um" ++ fix (++ "\"?") ++ ")" 02:19:58 mueval-core: Time limit exceeded 02:20:10 pah 02:33:03 -!- pikhq has quit (Ping timeout: 240 seconds). 02:33:09 -!- pikhq_ has joined. 03:10:47 -!- Jafet has quit (Quit: Leaving.). 03:11:26 -!- Jafet has joined. 03:46:42 > deriv (\x -> (+3) * x) (+4) 03:46:43 Couldn't match expected type `a -> a' 03:46:43 against inferred type `Data.N... 03:50:22 Hmm! 03:50:44 > ((cos^2) + (sin^2)) 03:50:46 Overlapping instances for GHC.Show.Show (a -> a) 03:50:46 arising from a use of `... 03:50:49 > ((cos^2) + (sin^2)) 5 03:50:50 0.9999999999999999 03:51:17 :t deriv (\x -> (+3) * x) 03:51:18 Couldn't match expected type `a -> a' 03:51:18 against inferred type `Dif a1' 03:51:18 In the second argument of `(*)', namely `x' 03:51:29 > deriv (\x -> (+3) * x) (+4) 10 03:51:31 Couldn't match expected type `a -> a' 03:51:31 against inferred type `Data.N... 03:51:43 @env 03:51:43 Maybe you meant: v wn 03:51:47 bleh /me finds L.hs 03:51:54 gotta track down where deriv is from so I know what the constructor is 03:52:42 http://hackage.haskell.org/packages/archive/numbers/2009.8.9/doc/html/Data-Number-Dif.html 03:53:19 :t deriv (\x -> df (+3) (deriv (+3)) * x) 03:53:20 The section `+ 3' takes one argument, 03:53:21 but its type `Dif a' has none 03:53:21 In the first argument of `df', namely `(+ 3)' 03:53:31 er duh 03:53:43 :t deriv (\x -> df (+3) 1 * x) 03:53:44 The section `+ 3' takes one argument, 03:53:44 but its type `Dif a' has none 03:53:44 In the first argument of `df', namely `(+ 3)' 03:53:46 oops 03:53:51 :t (\x -> df (+3) 1 * x) 03:53:52 The section `+ 3' takes one argument, 03:53:52 but its type `Dif a' has none 03:53:52 In the first argument of `df', namely `(+ 3)' 03:53:58 oh! 03:54:00 :t deriv (\x -> mkDif (+3) 1 * x) 03:54:01 forall a. (Num a) => (a -> a) -> a -> a 03:54:07 > deriv (\x -> mkDif (+3) 1 * x) (+4) 03:54:08 Overlapping instances for GHC.Show.Show (a -> a) 03:54:08 arising from a use of `... 03:54:09 kallisti: ^ 03:54:23 :t mkDif 03:54:24 forall a. a -> Dif a -> Dif a 03:55:22 I don't see what's wrong with kallisti's original thing? 03:55:46 the types don't work 03:55:50 (+3) does not match (Dif _) 03:55:53 because it's (_ -> _) 03:56:55 ah right 03:56:59 can't do fromInteger magic there. 03:57:12 > deriv (\x -> mkDif (+3) 1 * x) (+4) pi 03:57:13 *Exception: (==): No overloading for function 03:57:17 A+ 03:57:31 * elliott doesn't know why that doesn't work. 03:57:44 :t deriv (\x -> mkDif (+3) 1 * x) (+4) pi 03:57:45 forall a. (Floating a) => a 04:30:20 elliott: I'm guessing pi for (->) is const pi? 04:30:36 it couldn't exactly be anything else 04:31:15 Ah 04:31:38 * elliott has no idea why the deriv thing there invokes == 04:32:53 > mkDif (+3) 1 04:32:54 Overlapping instances for GHC.Show.Show (a -> a) 04:32:54 arising from a use of `... 04:32:58 > mkDif (+3) 1 * pi 04:32:59 Overlapping instances for GHC.Show.Show (a -> a) 04:32:59 arising from a use of `... 04:33:19 > deriv (\x -> (+ (Dif 3)) * x) (+4) 04:33:20 Not in scope: data constructor `Dif' 04:33:21 maybe it checks the output for some reason? 04:33:25 Sgeo: ... 04:33:32 > deriv (\x -> (+ (Dif 3 0)) * x) (+4) 04:33:34 Not in scope: data constructor `Dif' 04:33:40 > deriv (\x -> (+ (D 3 0)) * x) (+4) 04:33:41 Not in scope: data constructor `D' 04:35:54 I believe in you Sgeo. 04:36:02 I believe in your ability to read previous lines of code. 04:36:08 :t mkDif 04:36:09 forall a. a -> Dif a -> Dif a 04:36:15 Sgeo: yesssss! 04:36:18 triumph! 04:37:03 :t deriv 04:37:05 forall a b. (Num a, Num b) => (Dif a -> Dif b) -> a -> b 04:38:31 "Now we're told that coyotes don't TYPICALLY eat children" -- local CBS news 04:40:57 wow 04:41:22 elliott: there are apparently some coyotes in Atlanta's parks 04:41:26 (park? I don't know) 04:46:03 kallisti, elliott update 04:46:45 there are lots of parks 04:47:08 if any has coyotes, i'd bet on palisades 04:47:19 its just a forest 04:49:24 ..no 04:50:29 -!- copumpkin has quit (Quit: Computer has gone to sleep.). 04:53:35 -!- copumpkin has joined. 05:05:18 -!- Jafet has quit (Quit: Leaving.). 05:09:18 -!- zzo38 has joined. 05:24:07 Now I invented the functions: opencont, closecont, opencontT, closecontT 05:25:23 o.O 05:26:11 opencont (Barrier a c) = Barrier (a, c) opencont; closecont (Barrier (a, c) f) = Barrier a $ closecont . f . c; 05:26:37 Oh 05:26:47 * Sgeo still has no idea what barrier monads are 05:26:52 nobody does 05:26:57 closecont . opencont = id 05:27:31 Sgeo: Do you know about the generator functions (with yield) in JavaScript and in Python? Barrier monads is similar to that 05:27:41 Ah 05:27:53 Not familiar with JS, but am familiar with Python generator functions 05:28:21 There's a Haskell library with yield somewhere 05:28:23 I think the JS and Python generator functions are similar to each other 05:32:31 -!- Sgeo has quit (Ping timeout: 244 seconds). 05:33:05 -!- Sgeo has joined. 05:36:30 @pl \f xs -> tail xs ++ [f xs] 05:36:30 liftM2 (++) tail . flip flip [] . ((:) .) 05:36:33 @t \f xs -> tail xs ++ [f xs] 05:36:34 Maybe you meant: tell thank you thanks thx ticker time todo todo-add todo-delete topic-cons topic-init topic-null topic-snoc topic-tail topic-tell type . ? @ ft v 05:36:35 @ty \f xs -> tail xs ++ [f xs] 05:36:38 forall a. ([a] -> a) -> [a] -> [a] 05:36:43 @. hoogle ty \f xs -> tail xs ++ [f xs] 05:36:44 Plugin `compose' failed with: Unknown command: "ty" 05:36:47 @. hoogle type \f xs -> tail xs ++ [f xs] 05:36:48 Parse error: 05:36:48 forall a. ([a] -> a) -> [a] -> [a] 05:36:48 05:36:55 @hoogle ([a] -> a) -> [a] -> [a] 05:36:55 Foreign.Marshal.Utils withMany :: (a -> (b -> res) -> res) -> [a] -> ([b] -> res) -> res 05:36:56 Data.Generics.Aliases ext1Q :: (Data d, Typeable1 t) => (d -> q) -> (forall e. Data e => t e -> q) -> d -> q 05:41:43 zzo38, http://hackage.haskell.org/packages/archive/generator/0.5.4/doc/html/Control-Monad-Generator.html 05:43:13 um 05:43:17 Sgeo: isn't that just Writer 05:43:18 except stupid 05:43:43 Life is weird at times. 05:43:52 https://upload.wikimedia.org/wikipedia/commons/3/3d/Ventricaria_ventricosa.JPG That's a fucking single-celled life form. 05:44:21 They typically are 1-4 centimeters in diameter. 05:45:05 I take it that Barrier is more like Python's abilities to pass in arguments to a generator? 05:45:26 Or, actually, even getting items out one at a time makes sense, doesn't it... no, it does not 05:45:38 Except as an already existing monad 05:45:57 Will laziness cause the writer monad to also pause? 05:46:09 If I only ask for the log 05:46:28 "pause"? 05:46:53 elliott, as in, not continuing to compute past, say, the first tell until I ask for the next item in the list 05:47:13 how could it compute things you didn't force 05:47:55 What was the other function used with the Writer monad 05:48:32 In JavaScript, there is a function g.send(x) that sends x to the result of yield inside of the generator function 05:48:48 zzo38, Python has something similar 05:49:06 And I guess that's what Barrier monads do? 05:49:40 "The Monad: and other essays upon the higher consciousness - Google Books Result" 05:49:40 -!- kallisti_ has joined. 05:49:49 "The sceptic erects a barrier round himself by his aggressive unbelief — a barrier which it is not worth the while of the non-physical entity to pierce ..." 05:50:15 Sgeo: Yes, it does that. This is the definition: data Barrier f b t = Unit t | Barrier f (b -> Barrier f b t) | Fail String; yield :: f -> Barrier f b b; yield = flip Barrier Unit; 05:51:45 -!- kallisti has quit (Ping timeout: 245 seconds). 05:51:58 So f is the type of values that can be passed out of the Barrier monad, and b is the type that can go into it? 05:52:56 Sgeo: Yes. 05:53:07 That's cool 05:53:14 Is it on Hackage yet? 05:53:14 >.> 05:53:33 Not yet. But I will put it on later. 05:54:20 It vaguely reminds me of Iteratees, although Iteratees can only give one answer 05:54:26 iirc 05:59:17 The function to make it to a list is collect :: Barrier f () t -> [f] 05:59:51 There is also reverse operation is uncollect :: [x] -> Barrier x a () 06:02:45 I'm trying to envision bind 06:03:12 I can tell you how I defined it if you want that 06:03:27 Hmm, I guess if the thing on the left is a Barrier f (b -> Barrier f b t), the whole thing could be of that form 06:04:21 But sure 06:05:15 Unit x >>= f = f x; Barrier a c >>= f = Barrier a $ c >=> f; 06:06:20 That is far more concise than I could have written at first glance. 06:06:49 I assume Fail a >>= _ = Fail a 06:06:50 ? 06:07:04 Sgeo: Yes. 06:07:26 And there is instance of Alternative which is based on that. 06:07:36 -!- Jafet has joined. 06:07:42 * Sgeo is still a bit shaky on how Alternatives work in general 06:07:47 Or what they're useful for 06:08:02 Except parsing monads, ofc, but I don't understand how parsing monads work internally either 06:09:01 They allow parser embiggenment 06:09:29 They can be used with things other than parsers too. 06:10:13 -!- DCliche has joined. 06:11:42 Now I added a MonadPlus instance. However, it doesn't follow the right zero law but MonadPlus for many other monads also does not follow right zero law (but there are also many that do follow the right zero law). 06:12:01 empty = Fail []; Unit x <|> _ = Unit x; Fail y <|> x = annotateFail y x; Barrier a c <|> x = Barrier a $ \y -> (c y <|> x); 06:12:09 mzero = empty; mplus = (<|>); 06:13:46 -!- Klisz has quit (Ping timeout: 244 seconds). 06:13:53 zzo38, when you were writing Barrier a c >>= f = Barrier a $ c >=> f, did you first write that c >=> f as something else? 06:14:11 I guess I want reassurance that I don't need to catch things like that immediately 06:14:54 Sgeo: I did first write it like that, but maybe some other people might not (I don't know) 06:18:43 zzo38, it should be possible to write crosstalk :: Barrier f b t1 -> Barrier b f t2 -> ([f],[b]), right? 06:19:45 Wait, what if one wants to consume more than the other? 06:28:08 Sgeo: I have not thought of that function, but I might be able to. I suppose if one wants to consume more than the other, then you just use the shorter one 06:37:25 -!- pikhq has joined. 06:37:42 -!- pikhq_ has quit (Ping timeout: 252 seconds). 06:42:07 @ask oklopol remember when you used to be stupid? j-invariant: actually i probably couldn't lecture all night, since the first nontrivial thing you usually do about CA is a theorem i actually don't know how to prove :D 06:42:08 I managed to do this: crosstalk :: Barrier f b t1 -> Barrier b f t2 -> [(f, b)]; crosstalk (Barrier a1 c1) (Barrier a2 c2) = (a1, a2) : crosstalk (c1 a2) (c2 a1); crosstalk _ _ = []; 06:42:08 Consider it noted. 06:54:35 -!- DCliche has quit (Quit: You are now graced with my absence.). 07:01:36 crosstalkT :: (Functor m, Monad m) => BarrierT f b m t1 -> BarrierT b f m t2 -> m [(f, b)]; crosstalkT x y = liftM2 (liftA2 (,)) (runBarrierT (() <$ x)) (runBarrierT (() <$ y)) >>= either (const $ return []) (\((a1, c1), (a2, c2)) -> ((a1, a2) :) <$> crosstalkT (c1 a2) (c2 a1)); 07:06:44 crosstalkT x y = liftM2 (liftA2 (,)) (runBarrierT ([] <$ x)) (runBarrierT ([] <$ y)) >>= either return (\((a1, c1), (a2, c2)) -> ((a1, a2) :) <$> crosstalkT (c1 a2) (c2 a1)); 07:13:24 -!- GreaseMonkey has quit (Quit: The Other Game). 07:22:58 -!- copumpkin has quit (Quit: Computer has gone to sleep.). 07:33:21 @hoogle deriv 07:33:21 package derivation-trees 07:33:21 package derive 07:33:21 package derive-gadt 07:33:32 aw, mu-eval doesn't have those. 07:33:39 :t deriv 07:33:40 forall a b. (Num a, Num b) => (Dif a -> Dif b) -> a -> b 07:33:46 @hoogle (Dif a -> Dif b) -> a -> b 07:33:47 Warning: Unknown type Dif 07:33:47 Data.Generics.Aliases ext1T :: (Data d, Typeable1 t) => (forall e. Data e => e -> e) -> (forall f. Data f => t f -> t f) -> d -> d 07:37:49 kallisti_: i found the package earlier 07:39:06 elliott: so you actually added it to lambdabot? 07:39:15 ...no 07:39:34 @src deriv 07:39:35 Source not found. You speak an infinite deal of nothing 07:39:56 elliott: also how does AD work in languages like C where there's no operator overloading. 07:40:03 you said it could be used to differentiate C functions and the like. 07:40:09 external tools 07:40:18 in C++ they do horrible template hacks 07:41:39 well duh 07:41:49 that's how you do anything complex in C++ 07:43:03 does it require the C source? 07:43:07 obviously 07:44:40 elliott: who knows it could do some machine code hacks. 07:45:37 elliott: so if you didn't add ad to lambdabot how is it there? 07:45:45 lambdabot imports a fuckton of shit 07:45:52 oh. 07:46:05 hm, I guess mu-eval hasn't caught up or doesn't use the same imports. 07:46:10 it's very picky about its imports. 07:50:40 what's the name of the package that defines deriv? 07:51:27 tried ad, fad, rad, and Data.Ring.Module.AutomaticDifferentiation but I don't think it's the same one 07:51:42 kallisti_: stop attributing these things to mueval 07:51:44 it is L.hs alone 07:52:52 grr, I wish this glib queue had the property I want 07:53:30 elliott: L.hs? 07:53:37 kallisti_: see lambdabot sourec 07:57:24 I think lists encode an at-most: 07:57:28 Data.Number.Dif is commented out from the mueval source. :( 07:57:32 [] fits the type [a], [[a]], etc. 07:57:43 kallisti_: mueval is irrelevant 07:57:56 elliott: ...to? 07:57:57 Is there a way to encode at-least? 07:58:03 kallisti_: the lambdabot imports 07:58:08 Sgeo: i don't have any idea what you are talking about 07:58:10 elliott: it's certainly relevant to what I'm talking about. 07:58:14 which is not lambdabot 07:58:16 it's mueval 07:58:28 heh 07:58:44 ..I mean, clearly lambdabot imports it. 07:58:47 that wasn't the issue. :P 07:58:55 [] fits the type [[[a]]], as do [[]] and [[[]]] and [[[[]]]] but [[[[[]]]]] does not 07:59:37 (Typeclasses could be used to clean up that a, but I need to go to sleep soon) 07:59:56 So [[[a]]] means "Accept at most [[[[]]]] but no numbers larger than that" 08:00:15 (Treating these nested lists as numbers) 08:00:34 I should go to sleep now, I have an exam tomorrow 08:01:53 Hmm, I'd wonder if tuples are a better bet, but there are no one-element tuples 08:02:02 ...and also, it wouldn't work, so n/m 08:02:40 1-tuples are a completely pointless thing. 08:02:49 ugh, this sucks 08:03:15 except newtypes I guess. newtypes are kind of like 1-tuples I guess. 08:03:33 The point here is the nesting, though 08:04:10 Just (Just (Just Nothing ) ) zomg 08:05:17 That works just as well (or better), but which is easier to type? 08:05:27 > Nothing :: Maybe ( Maybe ( Maybe a ) ) 08:05:28 Nothing 08:06:16 What I'm curious about is if it's possible to encode at-least 08:06:20 Sgeo: which is less broken. (not completely unbroken, but less broken at least) 08:06:37 Sgeo: what does that even mean. 08:06:46 (note: I read the explanation above; still confused) 08:06:52 Values of a certain "value" or greater, as specified in the type, pass the type 08:06:56 basically, what are you doing. 08:07:14 What I currently have is values of a certain "value", or less, as specified in the type, pass the type 08:07:21 So [] represents 0, for instance 08:07:36 And passes [a], [[a]], [[[a]]], etc 08:07:39 pikhq: Deewiant: I need a C language lawyer, ping 08:07:45 Pong 08:08:03 Whereas [[]] represents 1 and passes ... erm, [a], [[a]], [[[a]]]. Let's say that [[]] is 0 08:08:14 [[[]]] passes.... ok, bluh 08:08:16 elliott: I need a real lawyer; I may actually kill Sgeo. 08:08:19 Let's start this again 08:08:21 Sgeo: [[]] doesn't pass [a] 08:08:29 Deewiant: Does C99 give enough guaranteed on accesses to a global volatile bool so that {x = false;} and {x = true;} are atomic with respect to "if (x)" 08:08:40 [] doesn't fit the oh so heavy burden imposed by a? 08:08:48 i.e. can I assume it works like an atomic shared bit for setting and testing 08:08:56 (Setting to constants) 08:09:18 "At sequence points, volatile objects are stable in the sense that previous accesses are complete and subsequent accesses have not yet occurred." 08:09:29 Let's say that [] is 0. It passes [()], [[()]], [[[()]]], etc. 08:09:41 > [[]] :: [a] 08:09:42 Couldn't match expected type `a1' against inferred type `[a]' 08:09:43 `a1' is a ... 08:09:53 kallisti_: You can pass [[]] to a function expecting [a] 08:09:57 Is I think Sgeo's point 08:10:05 Deewiant: Alright. I still feel bad about using it. 08:10:13 [[]] 1, by contrast, does not fit [()], but does fit [[()]], [[[()]]], etc. 08:10:41 > let id :: [a] -> [a]; id x = x in id [[]] 08:10:43 [[]] 08:10:50 Deewiant: (I was hoping to eliminate the global volatile variable world_running from mcmap, but GLib doesn't offer something as simple as "a queue that you can disown so that pushes just do nothing" (or equivalent).) 08:11:00 So, So, [[]] 1 is not at-most [()] 0 08:11:08 Deewiant: (So removing world_running would cause every received world-relevant packet to leak memory in the queue.) 08:11:09 -!- oerjan has joined. 08:11:09 (The former is the value, the latter is the type) 08:11:11 (If the world's stopped.) 08:11:37 So, [()] in the type means at-most 0. [[()]] in the type means at-most 1. etc. 08:11:50 elliott: Can't you clear the queue at some later time? 08:12:00 I'm still pondering potential usages of this, but I also have to wonder if there's a way to encode at-least. 08:12:01 Deewiant: Clear it howso 08:12:11 Deewiant: The point is that after the world thread ends, nobody is popping the queue 08:12:15 But the proxy thread is still pushing 08:12:27 When does this matter 08:12:47 The world thread sounds like something important (note: I have no idea what the threads are for) 08:13:04 kallisti_, is anything I'm saying making sense? 08:13:15 Deewiant: When the world thread crashes in a predictable manner :) 08:13:32 Deewiant: fizzie thought it important that the proxy continue to function even if the map and commands break 08:13:42 elliott: And you want to keep the program running after this? 08:13:47 ./world.c:stopf("chunk update decompression: inflateInit: %s", zError(err)); 08:13:47 ./world.c:stopf("chunk update decompression: inflate: %s", zError(err)); 08:13:47 ./world.c:stopf("broken decompressed chunk length: %d != %d and < %d", 08:13:47 ./world.c:stopf("too high chunk update: %d..%d", y0, y0+ys-1); 08:13:53 Basically it happens when chunk updates are fucked 08:14:02 Deewiant: Well, it already does 08:14:09 elliott: haven't Mojang fixed them? 08:14:18 Deewiant: It works fine without even world_running, it just leaks memory 08:14:33 Sgeo: um... I guess. 08:14:37 Deewiant: I'd rather remove stop entirely or make it not leak memory and not use a volatile global 08:14:40 but.. I don't know why you're doing that. 08:14:42 I don't know how to achieve the latter 08:14:47 kallisti_, BECAUSE I CAN 08:14:48 elliott: What exactly works fine, what does the world thread do :-P 08:14:57 (Also: Note: Practical usages still to be determined) 08:15:01 Deewiant: Processes incoming world-relevant packets 08:15:08 Deewiant: Map chunk updates, entity position updates, chat messages 08:15:19 Sgeo: DUDE EITHER ENCODES LIKE..... LINKED LISTS 08:15:21 elliott: Right, so, what exactly is still happening without the world thread 08:15:23 Deewiant: Basically the world thread handles everything that isn't part of mcmap's fun ol' proxying/console regime 08:15:25 Deewiant: Proxying 08:15:28 Proxying and the console 08:15:34 Deewiant: iirc it handles tracking of the world, for map display purposes and so on. Basically everything that isn't just "pass on to client/server" 08:15:35 The map just freezes 08:15:45 Right, hmh 08:15:50 Sgeo: Either Int (Either Bool (Either (IO Awesome) ())) 08:15:55 duuuuude think of the implications 08:16:04 (The world thread is separate because fizzie thinks processing world packets might be slow; in reality the threading overhead almost certainly dwarfs it, but that's a battle for another day) 08:16:12 -!- nooga has joined. 08:16:23 Deewiant: I get the feeling that a volatile global is The Way to do this, and if I want to avoid them I should use a super-high-level concurrency library 08:16:34 Rather than glib's "here's some thread-starting functions... and a mutex... and a queue". 08:16:39 "Have fun with that." 08:16:43 heh 08:16:50 (Heck, glib even has some operations on volatile pointers to lock bits atomically.) 08:17:09 elliott: so are the glib threads any better than pure pthreads? Apart from portability concerns that is. 08:17:42 Vorpal: Well, they have a bit more than just mutexes; run-once sections, conditions, and the aforementioned queues 08:17:48 Maybe pthreads has queues, I dunno 08:17:50 But portability is nice 08:18:02 Oh, also read-write locks 08:18:04 That's nice too 08:18:08 elliott: I know pthreads have condition variables. No idea about run-once sections. 08:18:25 Also ~RECURSIVE MUTEXES~ 08:18:32 pthreads have that 08:18:45 also pthread_rwlock_init 08:18:56 Deewiant: I'm wondering why I don't just make stopf situations drop the current packet 08:19:01 Deewiant: The network protocol is synchronised at that point anyway 08:19:05 Adjective: 08:19:07 (of words or the person speaking them) Fluent and voluble but insincere and shallow. 08:19:15 So... I'm gonna do that 08:19:22 elliott: hm... won't that fuck up for the client? 08:19:35 Vorpal: This happens after it's forwarded to the client 08:19:38 ah okay 08:19:46 The Notchian client just sort of magically makes sense of any data you throw at it 08:19:57 elliott: might want to rename it from stopf to something else then 08:20:12 elliott: really? I guess you should look at mcp stuff to figure out what you are missing then 08:20:15 Vorpal: I'm not going to modify the macro to insert a return :-P 08:20:21 And no, it mostly just ignores things 08:20:24 heh 08:20:29 I don't think we ever actually get these stopf errors these days 08:20:37 But that's life, or some such 08:20:46 bbl 08:20:51 (university) 08:21:00 More like unicrappity 08:21:31 bbl 08:21:34 (christmas carols) 08:21:59 Deewiant: My delightful new prefix for these "zlib fucked up" errors is [WHAT] 08:29:06 http://www.cracked.com/article_16508_6-terrifying-things-they-dont-tell-you-about-childbirth.html 08:29:11 oh, I'm on this part of the internet again. 08:35:30 Is there any proper name for this? data T a b = T b ((T a b -> a) -> a); What is its meaning? 08:38:53 -!- Phantom_Hoover has joined. 08:39:31 Deewiant: Can you please shoot whoever made gcc too stupid to realise that if (...) { x = y; } else if (...) { x = z; } else call_noreturn_function() cannot leave x uninitialised 08:40:02 lambdabot! 08:40:03 Phantom_Hoover: You have 8 new messages. '/msg lambdabot @messages' to read them. 08:41:04 elliott: Ah, but what if somebody else provides a call_noreturn_function() that actually returns 08:41:17 Deewiant: IT'S __ATTRIBUTE__((NORETURN)) 08:41:18 IN THE HEADER 08:41:33 elliott: Do those __attribute__s actually have to match? 08:41:35 Shoot whoever made you use -Werror 08:41:36 (I'm not sure) 08:41:57 * kallisti_ has just now watched double rainbow. 08:42:02 Deewiant: I don't define it with that attribute in the .c file since it includes the relevant header :-P 08:42:10 Jafet: fizzie 08:42:28 Jafet: But I'm kinda warning-phobic anyway, it only takes about four warnings to make me start ignoring any fifth warning that might pop up 08:42:30 elliott: But anyway, what if you explicitly return thereafter 08:42:32 -!- monqy has quit (Quit: hello). 08:42:57 Deewiant: Doesn't work (thank god) 08:43:07 I'm not sure what it's complaining about 08:43:14 Remember the zero-one-infinity rule. Fix all warnings, or fix the first warning, or ignore all warnings 08:43:15 Is it just complaining because I declare them without initialising them RIGHT THERE... 08:43:31 C is easy anyway, you can initialize almost anything with 0 08:43:36 Be thankful you're not in C++ 08:43:55 http://sprunge.us/bGIN ;; COME ON LET ME APPLY THIS 08:44:03 Jafet: Nope, socket_t must be used abstractly here 08:44:07 Jafet: Could be a struct 08:44:17 Jafet: On Windows it's a "SOCKET", whatever that is 08:44:40 A shout, for one thing 08:45:06 Deewiant: BTW once I get around to pushing this stuff could you test the Windows build, I think it should even be working 08:46:21 When I'm next in Windows after that, sure 09:05:00 * oerjan swats Sgeo for abbreviating Adjudicated Blind Collaborative Design Esolang Factory -----### 09:05:00 oerjan: You have 3 new messages. '/msg lambdabot @messages' to read them. 09:05:57 :t ZipList 09:05:58 forall a. [a] -> ZipList a 09:14:28 > scanl1 (zipWith (flip const)) [[1,2,3],[4,5],[6,7,8,9]] 09:14:30 [[1,2,3],[4,5],[6,7]] 09:14:38 > scanl1 (zipWith (flip const)) [] 09:14:40 [] 09:18:28 \setbox0=\hbox{\write16{\csname zzz\endcsname}}\show\zzz\shipout\box0\show\zzz 09:19:20 oerjan: is that it? 09:19:23 Deewiant: Language lawyer time 09:19:31 Deewiant: Is it OK to define a function in a header and then never talk about it again and then link the program 09:19:33 no, just a small part 09:19:50 elliott: Define, not declare? 09:19:54 Er, declare 09:20:11 Yes, of course 09:21:09 Deewiant: Gross 09:21:12 -!- nooga has quit (Quit: Lost terminal). 09:21:34 > scanr1 ((drop 1 .) . (:)) [[1,2,3],[4,5],[6,7]] 09:21:35 Occurs check: cannot construct the infinite type: a = [a] 09:21:40 elliott: the alternative would be macro hacks. 09:21:41 oops 09:21:45 elliott: math.h can be used without linking libm, you know :-P 09:22:09 > scanr1 ((. drop 1) . (:)) [[1,2,3],[4,5],[6,7]] 09:22:10 Deewiant: BUT STILL 09:22:10 Occurs check: cannot construct the infinite type: a = [a] 09:22:15 wtf 09:22:25 :t scanr1 ((. drop 1) . (:)) 09:22:26 Occurs check: cannot construct the infinite type: a = [a] 09:22:26 Expected type: [a] 09:22:26 Inferred type: [[a]] 09:22:29 ?ty (. drop 1) . (:) 09:22:30 forall a. a -> [a] -> [a] 09:22:35 ?ty scanr1 09:22:36 forall a. (a -> a -> a) -> [a] -> [a] 09:22:44 oh hm 09:23:00 ?ty scanr 09:23:01 forall a b. (a -> b -> b) -> b -> [a] -> [b] 09:23:06 > scanr ((. drop 1) . (:)) [] [[1,2,3],[4,5],[6,7]] 09:23:08 [[[1,2,3]],[[4,5]],[[6,7]],[]] 09:23:20 > scanr ((drop 1 .) . (:)) [] [[1,2,3],[4,5],[6,7]] 09:23:22 [[],[],[],[]] 09:23:30 oh hm 09:23:55 > scanr1 ((. drop 1) . (++)) [[1,2,3],[4,5],[6,7]] 09:23:56 [[1,2,3,5,7],[4,5,7],[6,7]] 09:24:03 > scanr1 ((drop 1 .) . (++)) [[1,2,3],[4,5],[6,7]] 09:24:05 [[2,3,5,6,7],[5,6,7],[6,7]] 09:24:19 * oerjan swats Deewiant for disturbing him 09:24:25 * -----### 09:24:36 What're you trying to do :-P 09:24:46 ZipList join 09:25:40 :t (. ?f) . (:) 09:25:41 forall (f :: * -> *) a. (?f::f [a], Functor f) => a -> f [a] 09:25:41 Once I made a join function for ZipList 09:26:19 :t (Prelude.. ?f) Prelude.. (:) 09:26:20 forall a a1. (?f::a -> [a1]) => a1 -> a -> [a1] 09:26:41 argh 09:26:49 pointless is pointless today 09:27:13 oerjan: complete double rainbow all the way. 09:27:21 :t scanr (\x xs -> x:map (drop 1) xs) [] [[1,2,3],[4,5],[6,7]] 09:27:22 forall a. (Num a) => [[[a]]] 09:27:27 > scanr (\x xs -> x:map (drop 1) xs) [] [[1,2,3],[4,5],[6,7]] 09:27:27 [[[1,2,3],[5],[]],[[4,5],[7]],[[6,7]],[]] 09:27:34 oops 09:27:39 > foldr (\x xs -> x:map (drop 1) xs) [] [[1,2,3],[4,5],[6,7]] 09:27:40 [[1,2,3],[5],[]] 09:29:17 :t let join = ZipList . diag . scanl1 (zipWith (flip const)) . getZipList where diag = concat . takeWhile (not . null) . map (take 1) . foldr (\x xs -> x:map (drop 1) xs) [] in join 09:29:18 forall a. ZipList [a] -> ZipList a 09:29:24 oops 09:29:41 :t let join = ZipList . diag . scanl1 (zipWith (flip const)) . map (getZipList) . getZipList where diag = concat . takeWhile (not . null) . map (take 1) . foldr (\x xs -> x:map (drop 1) xs) [] in join 09:29:42 forall a. ZipList (ZipList a) -> ZipList a 09:30:03 @let zjoin = ZipList . diag . scanl1 (zipWith (flip const)) . map (getZipList) . getZipList where diag = concat . takeWhile (not . null) . map (take 1) . foldr (\x xs -> x:map (drop 1) xs) [] in zjoin 09:30:03 Parse error: in 09:30:09 @let zjoin = ZipList . diag . scanl1 (zipWith (flip const)) . map (getZipList) . getZipList where diag = concat . takeWhile (not . null) . map (take 1) . foldr (\x xs -> x:map (drop 1) xs) [] 09:30:10 Defined. 09:30:17 ze join 09:30:45 > getZipList . zjoin . ZipList . map ZipList $ [[1,2,3],[4,5],[6,7,8,9]] 09:30:47 [1,5] 09:30:57 good, good 09:30:58 oerjan: hm what are the monad laws stated with join... 09:30:59 elliott: ^ 09:31:35 i have a cold so i'm not sure i can get all that 09:31:49 Isn't join (return m) = m one of them? 09:32:00 i was just writing that. 09:32:03 Phantom_Hoover: assuredly 09:32:27 oerjan: and return (join m) = m, presumably? 09:32:43 no that doesn't look reversible 09:33:09 also join (return m) = m needs to be well typed 09:33:34 join (fmap g (join (fmap f m))) = join (fmap (join . fmap g . f) m) 09:33:40 is the long one 09:33:42 translated directly 09:33:44 it's uh 09:33:45 quite ugly 09:33:46 some stuff like that 09:33:50 hm well 09:33:53 join x = join y 09:33:54 can be reduced to 09:33:55 x = y 09:33:56 obviously 09:33:57 elliott: surely there must be some blog that has them 09:34:10 fmap g (join (fmap f m)) = fmap (join . fmap g . f) m 09:34:14 and surely we can lift that join outwards... 09:34:22 oerjan: well ok 09:34:25 elliott: join is not a reversible operation, i said 09:34:37 -- The standard monad laws. 09:34:37 join . return == id 09:34:38 join . fmap return == id 09:34:38 join . join == join . fmap join 09:34:43 those ones, apparently 09:34:52 those seem... strangely short 09:34:57 but i guess associativity is a detail of (>>=) itself 09:35:02 > join [[1]] == join [[],[1]] 09:35:03 True 09:35:10 there are also the laws of fmap itself as a Functor, of course 09:35:19 oerjan: yes but we know those are OK 09:35:22 since we're only introducing Monad 09:35:34 fmap, like batman, has only one rule. 09:35:53 Jafet: two, actually 09:35:54 @src ZipList return 09:35:54 Source not found. That's something I cannot allow to happen. 09:35:58 *grr* 09:36:29 iiro[3[[3452#$[323523[62[45#${^347[2246}$%&4[646}#$%[34]3[4534[3[$)%%_3# 09:37:47 my brain was _just_ too fried to get \x xs -> x:map (drop 1) xs into point-free form, so the monad laws are obviously beyond reach. 09:37:49 I think the ZipList has similar to (Natural ->) monad (that is, assuming a type for any natural numbers!) 09:38:02 Except that ZipList can be finite 09:38:06 oerjan: i'm working on proving these btw 09:38:47 oerjan: hm would you call map getZipList (repeat m) = repeat (getZipList m) a distributive property 09:38:48 oerjan: foldr (.) id . map fmap == fmap . foldr (.) id 09:39:14 zzo38: yes, it's the finiteness that makes it complicated. in particular if the sublists are not sorted by length, monad laws break without the scanl1 (zipWith (flip const)) adjustment. i _hope_ that's enough. 09:39:42 http://www.youtube.com/watch?v=f0P_btTkUgg 09:39:48 Jafet: the problem isn't me understanding it in general, it's understanding it when i have a cold 09:39:56 that shit was off the chain wicked bananas. 09:40:00 Oh wait, my rule doesn't type in Haskell 09:40:34 you might want to include the actual function mapped over 09:41:01 I wanted to make it pointfree 09:41:18 Jafet: oh that's your formulation of the functor laws as one equation? 09:41:31 > scanl1 f (repeat x) 09:41:32 [x,f x x,f (f x x) x,f (f (f x x) x) x,f (f (f (f x x) x) x) x,f (f (f (f (... 09:41:48 o-kay 09:42:02 oerjan: proof of first law is currently at " ZipList . diag . scanl1 (zipWith (flip const)) . repeat $ getZipList m" btw 09:42:09 which is 09:42:09 Do you know what this is? data T a b = T b ((T a b -> a) -> a); I don't know what this is? 09:42:10 not very far :P 09:42:22 It's one law that says a functor is a group homeomorphism or something 09:42:35 oerjan: btw what would you call \x xs -> x : map (drop 1) xs 09:42:36 elliott: you might want to understand join on a more intuitive level first? 09:42:40 Sadly in Haskell they must be written as two laws 09:42:51 i put it in its own definition to keep my columns sane :P 09:42:56 zzo38: cobarrier monads 09:43:05 barrier comonads? 09:43:08 cobarrier comonads? 09:43:08 oerjan: ha! as if I could apply _intuition_ to a problem like this 09:43:42 oerjan: isn't zipWith (flip const) = flip (zipWith const) 09:43:43 oerjan: I understand join on an intuitive level. does that mean I can prove everything? 09:44:06 > zipWith (flip const) x x 09:44:07 Couldn't match expected type `[a]' 09:44:07 against inferred type `SimpleRef... 09:44:13 @check \xs -> zipWith (flip const) xs xs == xs 09:44:14 "OK, passed 500 tests." 09:44:18 elliott: hoo hoo hoo 09:44:22 kallisti_: Actually I don't know what it is. 09:44:58 oerjan: btw what would you call \x xs -> x : map (drop 1) xs 09:45:03 -!- augur has quit (Read error: Connection reset by peer). 09:45:12 zzo38: it's a cobarrier monad.. 09:45:12 elliott: the intuition is to take the diagonal of a matrix, but with the restriction that not just the diagonal elements but all elements above and to the left must also exist 09:45:25 zzo38: (it's probabky not) 09:45:39 elliott: shear? 09:45:43 oerjan: ok 09:46:01 > foldr f z (repeat x) 09:46:02 f x (f x (f x (f x (f x (f x (f x (f x (f x (f x (f x (f x (f x (f x (f x (... 09:46:35 elliott: astonishing 09:46:42 quite 09:46:50 kallisti_: I think it isn't, but I don't know. But I think it is a functor fmap f (T x y) = T (f x) $ \z -> y (z . fmap f); 09:46:56 oerjan: now at the point ZipList . concat . takeWhile (not . null) . map (take 1) . fix . shear $ getZipList m :P 09:47:03 kallisti_: well you also have to understand _proofs_, i guess 09:47:17 oerjan: sure I get proofs. 09:47:25 good, then there's hope. 09:47:31 you start with X, you do shit until it's Y. QED 09:47:58 ZipList . concat . takeWhile (not . null) . map (take 1) . fix $ \xs -> getZipList m : map (drop 1) xs 09:48:02 kallisti_: i assume you're being sarcastic 09:48:07 oerjan: looks like we're getting somewhere 09:48:13 oerjan: well that's one way to write proofs isn't it? 09:48:35 kallisti_: yes, but it's so vague it would apply to the work of most crackpots. 09:48:52 of course it doesn't really describe proof by contradiction or induction very well. 09:49:33 I bet there are proof techniques I've never even /heard/ of!! 09:49:44 Proof by crackpots 09:50:01 oerjan: hm is map f $ fix (\xs -> x : map g xs) ==> fix (\xs -> f x : map g xs) valid 09:50:03 i think so 09:50:20 oh wait no 09:50:31 I am not very good at proofs in general but I could prove some things by myself, including Pythagorean theorem, and that the sequence of repeated run length encoding starting with 1 (1, 11, 21, 1211, 111221, etc) has only 1,2,3 and has no "333" in it 09:50:33 map f $ fix (\xs -> x : map g xs) ==> fix (\xs -> f x : map (f . g) xs) 09:50:34 is, though, I think 09:50:39 (validate me oerjan? is this correct) 09:50:56 i have a cold, i say. 09:51:00 > map f (fix (\xs -> x : map g xs)) :: [Expr] 09:51:01 elliott: that doesn't look right to me. 09:51:01 [f x,f (g x),f (g (g x)),f (g (g (g x))),f (g (g (g (g x)))),f (g (g (g (g ... 09:51:10 > fix (\xs -> f x : map (f . g) xs) :: [Expr] 09:51:11 Ambiguous type variable `a' in the constraints: 09:51:11 `SimpleReflect.FromExpr ... 09:51:20 elliott: oh wait 09:51:20 > fix (\xs -> f x : map (\x -> f (g x)) xs) :: [Expr] 09:51:21 nevermind 09:51:21 Ambiguous type variable `t' in the constraints: 09:51:21 `GHC.Show.Show t' 09:51:21 a... 09:51:24 argh! 09:51:29 that looks right to me. 09:51:32 I misreaed. 09:51:37 kallisti_: shut up and let me get lambdabot to take it :) 09:51:50 > fix $ ([0,1]++) . map succ . concatMap ((:) <$> length <*> pure.head). group 09:51:51 i think it is _not_ valid actually. 09:51:52 [0,1,2,1,2,2,2,3,2,2,4,3,2,4,3,3,2,5,2,4,2,3,2,5,3,4,2,3,2,6,2,3,2,5,2,3,2,... 09:51:59 :t fix (\xs -> f x : map (\x -> f (g x)) xs) :: [Expr] 09:52:00 Ambiguous type variable `t' in the constraints: 09:52:00 `Show t' arising from a use of `f' at :1:29-35 09:52:00 `SimpleReflect.FromExpr t' 09:52:00 oh wait 09:52:01 yeah 09:52:02 nevermind 09:52:03 :t fix (\xs -> f x : map (\x -> f (g x)) xs) 09:52:04 forall a t. (SimpleReflect.FromExpr a, SimpleReflect.FromExpr (a -> t), SimpleReflect.FromExpr (t -> a)) => [a] 09:52:04 it's not. 09:52:10 sigh 09:53:09 > let m = [1,2,3,4] in fix (\xs -> m : map (drop 1) xs) 09:53:09 [[1,2,3,4],[2,3,4],[3,4],[4],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[... 09:53:13 Equatorial coordinates have right ascension and declination, or hour angle and declination, but is it sense to have local declination too? 09:53:18 > inits [1,2,3,4] 09:53:19 [[],[1],[1,2],[1,2,3],[1,2,3,4]] 09:53:23 > tails [1,2,3,4] 09:53:24 [[1,2,3,4],[2,3,4],[3,4],[4],[]] 09:53:27 > tails [1,2,3,4] ++ repeat [] 09:53:28 [[1,2,3,4],[2,3,4],[3,4],[4],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[... 09:53:45 elliott: with map f on the outside f only gets applied once to each element 09:53:49 yes, I nkow 09:53:50 know 09:53:56 on the inside it gets applied... um, a lot. 09:53:59 sh 09:54:00 hh 09:54:36 > map (take 1) (tails [1,2,3,4] ++ repeat []) 09:54:38 [[1],[2],[3],[4],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[... 09:54:54 > map pure [1,2,3,4] ++ repeat [] 09:54:55 [[1],[2],[3],[4],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[... 09:55:07 > join . map $ (take 1) (tails [1,2,3,4] ++ repeat []) 09:55:08 Couldn't match expected type `[a1] -> a' 09:55:08 against inferred type `[a]' 09:55:18 > join . map (take 1) $ (tails [1,2,3,4] ++ repeat []) 09:55:22 mueval-core: Time limit exceeded 09:55:37 can someone submit a bug report for me. 09:55:55 titled "halting problem not solved" 09:56:03 oerjan: ZipList . concat . takeWhile (not . null) $ map (:[]) (getZipList m) 09:56:12 oerjan: looks like it's working 09:56:14 It is solved 09:56:20 See NonTerminationException 09:56:33 (oerjan is sceptical that there are any Haskell ADTs that can be made applicative functors that can't be made monads (with the two instances agreeing)) 09:56:36 i didn't say that. 09:56:41 oerjan: i clarified later, but ok 09:57:32 elliott: hmmm, I've run out of fractals. perhaps I need a new updoot theme? 09:57:42 kallisti_: CANTFIX 09:57:54 oerjan: behold the most handwavey thing _ever_ written: http://sprunge.us/hfGR 09:58:02 at least my steps are trivial enough to justify, I'm just too lazy to 09:58:16 Define a type of function, that if you have this function and pure and <*> then you can make join. Is there such a thing? 09:58:23 zzo38: join 09:58:27 it's called join. 09:58:56 I know that, but it isn't what I meant 09:59:26 elliott: pick a theme for me 10:00:08 hmm I'll try to find more fractals I guess. 10:00:12 elliott: pure m is what i call a "rectangular" element, so zjoin really cannot break on it - it essentially doesn't go outside the _Applicative_ part. 10:00:21 oerjan: right 10:00:54 oerjan: the join . fmap return one is going well: ZipList . diag . scanl1 (zipWith (flip const)) . map repeat $ getZipList m 10:01:12 that is, on a rectangular element, join is determined entirely by the Applicative functions. 10:01:20 Sgeo: upoundary of the tame deetdragon 10:01:24 elliott: that one is also rectangular. 10:01:44 oerjan: yes, I am sure that zjoin works fine in the theory you have used to create it :P 10:01:53 heh 10:02:15 > scanl1 (zipWith (flip const)) $ map repeat [a,b,c] 10:02:17 [[a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a... 10:02:19 elliott: for rectangular elements, the scanl1 (zipWith (flip const)) part does nothing. 10:02:22 > tail . scanl1 (zipWith (flip const)) $ map repeat [a,b,c] 10:02:23 [[b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b,b... 10:02:27 right. 10:03:06 -!- Ngevd has joined. 10:03:11 > foldr f z (map repeat [a,b,c,d]) 10:03:12 f [a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,... 10:03:20 > foldr f z (map pure [a,b,c,d]) 10:03:21 No instance for (GHC.Show.Show (f SimpleReflect.Expr)) 10:03:21 arising from a us... 10:03:23 Hello! 10:03:27 > foldr f z (map (:[]) [a,b,c,d]) 10:03:27 f [a] (f [b] (f [c] (f [d] z))) 10:03:32 ok not immensely surprising :P 10:04:05 oh duh 10:04:11 foldr f z . map g = foldr (f . g) z 10:04:12 that'll help 10:04:30 hahahaha broccoli has a measure Hausdorff dimension of 2.66 10:04:31 awesome. 10:04:41 *measured 10:06:19 that's also a measure dimension, sort of. 10:06:45 as it's the dimension of sets that may have nontrivial hausdorff measure of that degree 10:07:00 (degree may not be actual term) 10:07:51 oerjan: join . fmap return = id proved 10:07:57 join . join = join . fmap join -- this seems like the hard one 10:08:15 elliott: oerjan: Norway is more Hausdorffy than Great Britain. Fight. 10:09:08 (apparently dimension is the term used) 10:09:26 oerjan: indeed 10:09:31 kallisti_: why should i fight, it's obviously true 10:10:12 elliott: yeah that's the one where you have to test non-"rectangular" sets, so the scanl1 (zipWith (flip const)) part becomes important 10:10:21 ZipList . diag . scanl1 (zipWith (flip const)) . map getZipList . diag . scanl1 (zipWith (flip const)) . map getZipList . getZipList $ m 10:10:22 ZipList . diag . scanl1 (zipWith (flip const)) . map (getZipList . join) $ getZipList m 10:10:26 oerjan: i have to prove these two lines equal 10:10:27 oerjan: because you guys should take mathematics /personally/ 10:10:28 fml :P 10:10:36 hmm 10:10:44 ZipList . diag . scanl1 (zipWith (flip const)) . map getZipList . diag . scanl1 (zipWith (flip const)) . map getZipList . getZipList $ m 10:10:47 ZipList . diag . scanl1 (zipWith (flip const)) . map getZipList . map join $ getZipList m 10:10:59 so actually 10:11:00 i just need to prove 10:11:01 diag . scanl1 (zipWith (flip const)) . map getZipList 10:11:02 = map join 10:11:04 no? 10:11:13 oerjan: also, maybe elliott secretly thinks having a lower Hausdorff dimensions is better for a high quality nation. 10:11:38 oh and on ZipLists "rectangular" elements obviously are what you intuitively call rectangles, it's just that it applies more generally to any attempt to extend Applicatives to Monads, i believe. 10:12:21 oerjan: so what is it you actually believe about Applicative then 10:12:42 * kallisti_ believes Applicative created the world and made it flat. 10:13:04 http://sprunge.us/XfUi; too lazy to do the last proof for now 10:13:06 aka 10:13:09 the one involving any kind of thought at all 10:13:31 oerjan: have you checked whether this monad's ap and liftM agree? 10:14:44 that would be rather astounding, since they don't have the same type ;P 10:15:54 kallisti_: well lower hausdorff dimension probably gives easier industrial packaging. 10:16:00 oerjan: har har har 10:16:03 with the Applicative instance I mean of course 10:17:03 The Peano curve packs pretty well 10:17:03 elliott: well the zjoin is _designed_ to be correct on rectangular elements automatically, and all elements that are actually joined when constructing ap and liftM stuff are rectangular. 10:18:18 oerjan: i meant tested empirically :P 10:18:26 probably not :P 10:19:48 fmap (\x -> fmap (f x) m) n is the general form of a rectangular element in an arbitrary Functor. 10:21:43 Deewiant: I don't suppose you know how to get backtraces for individual threads in gdb after they all exit 10:21:43 empiricism in math? zah1 10:21:45 applying join to that should give liftM2 f n m, so it's determined by the Applicative part. 10:22:00 elliott: Nope, printf all the way 10:22:15 Deewiant: :( 10:23:44 elliott: basically, you might want to prove zjoin (fmap (\x -> fmap (f x) m) n) = liftA2f n m as a lemma to use. 10:23:54 *liftA2 f n m 10:24:02 oerjan: yes. when i get back to it :P 10:24:41 in a sense it is the initial definition of zjoin, which is then extended in some hopefully consistent way to all elements. 10:25:25 and from it should follow that everything Applicative behaves correctly with it. 10:27:30 and also the first and second monad laws. it's just the third one which can still break. 10:27:33 afair. 10:29:41 -!- Ngevd has quit (Ping timeout: 245 seconds). 10:31:26 elliott: btw my intuitive but maybe not sufficiently checked reason for why the scanl1 (zipWith (flip const)) adjustment should fix the join . join == join . fmap join third law formulation is that it forces the necessary _cubic_ parts of the m (m (m x)) element to exist. 10:31:34 heh 10:31:43 you should publish this >:) 10:31:50 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAa 10:32:30 Functional Pearl: Categorical Gardening: Applicative Functors to Monads with Shears and Cubes 10:33:37 that is, an element is included in join (join m) iff its entire ancestor "cube" is included, which should be the same as the requirement for an element in join (fmap join m) to be included. 10:34:37 elliott: Gregor has a paper called "The Eval that Men Do" 10:34:44 which makes me cringe 10:34:47 everytime I read it. 10:35:16 (the "cube" being the elements that are above and to the left of it in any of the containing sublists, seen as a 3-dimensional grid) 10:36:00 kallisti_: we named that 10:36:28 elliott: that "shear" was a bit of a joke, it just looks like a geometric shear transformation in how it moves list elements. 10:37:04 elliott: who's "we"? 10:37:36 kallisti_: #esoteric 10:37:55 elliott: Gregor has a paper called "The Eval that Men Do" <-- i recall that, i vaguely think he asked us for more eval suggestions :P 10:39:57 The Root of All Eval is an obvious one. 10:40:11 Phantom_Hoover: Yes, we covered all the bases. 10:40:16 i'm sure it was m... right 10:40:28 Oh dear god this paper is amazing. 10:40:29 all your eval bases are belong to us 10:40:45 "The Eval that Men Do" is better because it's still a horrible pun while also being relevant to the paper. 10:41:03 whereas "The Root of All Eval" is less relevant 10:41:09 *-s 10:41:09 unless you're talking about like.... trees or something. 10:50:52 -!- variable has quit (Excess Flood). 10:52:07 -!- variable has joined. 11:01:29 "Encapsulate world queue into an abstract interface" 11:01:36 Gotta think of a way to make this commit subject less terrible 11:05:37 elliott: Inact the principle of information hiding on world queue by means of implementing an abstract protocol." 11:05:45 s/^/"/ 11:05:47 -!- Phantom_Hoover has quit (Ping timeout: 248 seconds). 11:19:11 -!- Phantom_Hoover has joined. 11:28:00 -!- zzo38 has quit (Remote host closed the connection). 11:36:26 -!- oerjan has quit (Quit: leaving). 11:40:02 -!- sebbu2 has joined. 11:40:54 -!- sebbu has quit (Ping timeout: 244 seconds). 12:15:39 -!- elliott_ has joined. 12:15:39 -!- elliott has quit (Read error: Connection reset by peer). 12:32:28 -!- sebbu2 has quit (Ping timeout: 260 seconds). 12:35:00 -!- sebbu2 has joined. 12:35:00 -!- sebbu2 has quit (Changing host). 12:35:00 -!- sebbu2 has joined. 12:37:24 -!- Phantom_Hoover has left ("Leaving"). 12:37:42 -!- Phantom_Hoover has joined. 12:39:26 -!- sebbu3 has joined. 12:41:35 -!- augur has joined. 12:43:23 -!- sebbu2 has quit (Ping timeout: 248 seconds). 12:53:27 -!- sebbu3 has changed nick to sebbu. 13:00:48 elliott_: you could try dumbing it down 13:01:55 "I maed an abstract interface out of teh world queue." 13:05:00 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 , Skype: patashu0 .). 13:16:12 -!- Ngevd has joined. 13:20:28 Hello! 13:36:48 -!- sebbu2 has joined. 13:37:47 -!- sebbu has quit (Ping timeout: 248 seconds). 13:45:41 > 2 + 2 13:45:42 4 13:47:24 > tau 13:47:25 Not in scope: `tau' 13:48:46 > (0/0) == (0/0) 13:48:47 False 13:52:24 I think it's time 13:52:28 for two monitors once again. 14:16:07 -!- elliott_ has quit (Read error: Connection reset by peer). 14:16:49 -!- elliott_ has joined. 14:18:17 elliott_: hi 14:18:23 hi 14:25:59 I wonder if Coke and coffee mixed together is good 14:29:44 > pi :: Expr 14:29:45 pi 14:29:50 > deriv sin pi 14:29:51 -1.0 14:29:57 > deriv sin (pi :: Expr) 14:29:59 1 * cos pi 14:30:42 elliott_: using Expr with deriv is actually very cool. 14:30:49 Yes, when it works :P 14:31:00 what breaks, in particular? 14:32:00 I forget, sorry. 14:32:48 elliott_: noooooo, how could you. 14:33:13 I have abstracted you from "human being" to "limitless and impatient well of information" 14:33:25 you're breaking my encapsulation! 14:36:47 > deriv (\a -> a * sin a * ln a * a^2 + 1) (x :: Expr) 14:36:48 Not in scope: `ln' 14:36:52 > deriv (\a -> a * sin a * log a * a^2 + 1) (x :: Expr) 14:36:54 ((1 * sin x + x * (1 * cos x)) * log x + x * sin x * (1 * recip x)) * (x * ... 14:37:42 why must it have 1 * everywhere? 14:37:46 what a waste! 14:38:22 I guess Expr could special case 1 so that it's omitted, however, I think it's left in for demonstration of function implementations. 14:38:56 it would be nice to have different Expr "styles", one that attempts to reduce expressions and one that's verbatim 14:40:47 hmmm, also 14:41:23 you could probably also extend Expr to generate ASTs? 14:44:03 "I can (well, almost) hear you asking yourselves "why?". Hurd will be 14:44:03 out in a year (or two, or next month, who knows), and I've already got 14:44:05 minix." 14:44:19 -- Linux Torvalds, 1991 14:44:25 ... 14:44:27 yes Linux 14:44:30 I refuse to correct it. 14:46:23 I guess Expr could special case 1 so that it's omitted, however, I think it's left in for demonstration of function implementations. 14:46:29 > reduce $ deriv sin (pi :: Expr) 14:46:30 1 * (-1.0) 14:46:35 heh 14:46:44 > exprValue $ deriv sin (pi :: Expr) 14:46:44 Not in scope: `exprValue' 14:46:47 oh interesting 14:47:18 :t reduce 14:47:19 Expr -> Expr 14:47:22 @hoogle Expr -> a 14:47:23 Warning: Unknown type Expr 14:47:23 Unsafe.Coerce unsafeCoerce :: a -> b 14:47:23 Prelude id :: a -> a 14:47:27 bleh 14:47:29 stupid hoogle 14:47:30 > intExpr $ deriv sin (pi :: Expr) 14:47:31 Not in scope: `intExpr' 14:47:33 > doubleExpr $ deriv sin (pi :: Expr) 14:47:34 Not in scope: `doubleExpr' 14:47:36 lame 14:48:09 or wait, does Num make any assumptions about whether or not it's a field? 14:48:31 :t fromIntegral 14:48:32 forall a b. (Integral a, Num b) => a -> b 14:48:44 in other words, is it required that fromIntegral 1 * x == x ? 14:49:28 Num has no laws 14:49:33 oh, okay. 14:49:43 @quote without laws 14:49:44 No quotes for this person. There are some things that I just don't know. 14:49:47 @quote elliott laws 14:49:48 No quotes match. Take a stress pill and think things over. 14:49:50 @quote elliott_ laws 14:49:51 No quotes for this person. Take a stress pill and think things over. 14:49:53 @quote elliott type 14:49:53 elliott says: a typeclass is nothing without semantics 14:49:55 @quote fuck 14:49:55 Oh. 14:49:56 medfly says: THIS IS SPARTA! go fuck yourself 14:50:00 I misremrembered myself'e'. :'( 14:50:16 Wow, Google just understood "ahaskel wekly naws". 14:50:49 indeed it does. 14:51:00 IT'S LIKE THEY DO SOME KIND OF LEVENWEEJRIJSJW DISTANCE 14:51:09 http://www.google.co.uk/search?gcx=w&sourceid=chrome&ie=UTF-8&q=LEVENWEEJRIJSJW+DISTANCE 14:51:21 alas 14:51:44 LEVENstEW DISTANCE 14:51:45 works 14:52:02 leven stew 14:52:41 help sleep deprivation and weird blood pressure drops. 14:56:26 elliott_: help me find ways to break deriv 14:56:41 :t logBase 14:56:42 forall a. (Floating a) => a -> a -> a 14:58:12 elliott_: how is differentiation implemented in mathematica? 14:58:21 symbolically and badly 14:58:37 -!- copumpkin has joined. 14:58:49 > deriv (\x -> fromEnum . isInfinity $ x) 3 14:58:50 Not in scope: `isInfinity' 14:58:59 > deriv (\x -> fromEnum . isNegativeZero $ x) 3 14:59:00 Couldn't match expected type `Data.Number.Dif.Dif b' 14:59:01 against inferr... 14:59:10 > deriv (\x -> fromEnum . x == 2) 3 14:59:11 Couldn't match expected type `Data.Number.Dif.Dif b' 14:59:12 against inferr... 14:59:12 lol 14:59:18 > deriv (\x -> fromEnum (x == 2)) 3 14:59:19 Couldn't match expected type `Data.Number.Dif.Dif b' 14:59:20 against inferr... 14:59:22 orjeiojwrrijweroijhweroihwetoihwer 14:59:26 :t fromEnum 14:59:27 forall a. (Enum a) => a -> Int 14:59:28 oh 14:59:45 > deriv (\x -> fromIntegral (fromEnum (x == 2))) 3 14:59:46 0 15:41:58 kallisti_: PUNPUNPUN 15:41:58 Gregor: You have 1 new message. '/msg lambdabot @messages' to read it. 15:44:26 Gregor: FUNFUNFUN 15:44:42 > 1 `mappend` 2 15:44:43 Ambiguous type variable `a' in the constraints: 15:44:43 `Data.Monoid.Monoid a' 15:44:43 ... 15:44:59 :t Add 15:45:00 Not in scope: data constructor `Add' 15:45:38 > Sum 1 `mappend` Sum 2 15:45:39 Sum {getSum = 3} 15:45:46 amazing. 15:47:24 -!- copumpkin has quit (Remote host closed the connection). 15:47:42 > const (Sum 3) `mappend` const (Sum 4) $ 6 15:47:44 Sum {getSum = 7} 15:47:48 -!- copumpkin has joined. 15:48:46 > tail `mappend` (++"dongs") $ " lol" 15:48:48 "lol loldongs" 15:50:14 sometimes I feel the number of instances you can make with a -> b is just out of hand. 15:50:38 most of the time, however 15:50:41 I don't think that. 16:00:11 -!- kallisti_ has quit (Ping timeout: 252 seconds). 16:05:33 -!- kallisti has joined. 16:05:33 -!- kallisti has quit (Changing host). 16:05:34 -!- kallisti has joined. 16:12:14 -!- ais523 has joined. 16:13:09 well, I completed Braid, anyway (any%; 100%ing it takes years without spoilers, apparently, and the game disguises the fact that there is a better ending than the obvious one) 16:20:19 ais523: apparently you have to wait on one level for like two hours or some other dumb shit like that 16:21:12 yep 16:21:19 around an hour and a half 16:21:30 why did he think that was a good idea 16:23:14 well, the mere existence of the stars is hidden 16:23:18 incidentally, does anyone know a better way of deleting a function definition in vim than d/^}/? 16:23:32 and putting things behind very long waits is a good way to hide them 16:23:37 ddd% works, but is gross 16:23:44 (it's how most of the instances of Totaka's Song are hidden, for instance) 16:24:20 oh, d]} might do it 16:24:32 oh! d} 16:24:37 nice 16:26:40 the other issue with Braid is that you don't get to hear the music much 16:26:49 as half the time it's playing backwards or at a crazy speed or whatever 16:27:59 hmm, fun thing I just noticed by accident: the MediaWiki keyboard shortcut for "delete" (alt-shift-d) means "undelete" on a nonexistent page 16:29:30 (diff) (hist) . . m Excela‎; 12:24 . . (+1,570) . . Oerjan (Talk | contribs) (Fnord) 16:29:30 (diff) (hist) . . Excela‎; 10:35 . . (-1,570) . . Theodorex1Jf (Talk | contribs) 16:29:35 ais523: _please_ protect Excela already... 16:29:42 oh wait 16:29:47 you said they moved to another page if they did that 16:29:49 yep 16:29:52 have we had google translate bots before? 16:29:57 I don't recall any but I may be wrong 16:30:06 I don't think so 16:30:14 ais523: just protect every page except [[Snack]] for a few days 16:30:17 but it may be the same framework finding anew way to get around filters 16:30:19 then we don't have to bother reverting 16:30:34 also, protecting an entire namespace needs dev powers 16:30:43 I meant manually :) 16:30:44 or a huge amount of very very spammy protection by hand 16:31:03 ais523: ooh, now I want to not revert the spam for long enough to see if the bots will ever re-mangle a mangled page 16:31:21 maybe if left to their own devices they'll turn any page into completely unintelligible mush 16:31:26 s/maybe if/maybe/ 16:33:11 -!- aloril has quit (Ping timeout: 252 seconds). 16:34:41 -!- Ngevd has quit (Ping timeout: 245 seconds). 16:38:08 -!- Ngevd has joined. 16:38:27 -!- Ngevd has quit (Client Quit). 16:41:14 as half the time it's playing backwards or at a crazy speed or whatever <-- that annoyed me too 16:41:25 anyway how did you end up playing Braid? 16:41:57 ais523: apparently you have to wait on one level for like two hours or some other dumb shit like that <-- just let it run in the background while you eat lunch 16:42:28 Vorpal: I watched a speedrun, and it inspired me to play the game 16:42:32 heh 16:42:39 I had it already, but it had a dependency on nvidia-something so I thought it wouldn't work 16:42:42 ah 16:42:46 but I installed the nvidia package anyway and it did work 16:42:54 hm 16:43:04 ais523: I played it on ati/amd so yeah 16:43:32 I use Intel graphics; I deliberately aim for laptops which have them 16:43:43 works better on Linux than the alternatives, typically 16:43:49 hybrid graphics is a nice alternative there 16:43:56 ais523: Better modulo their being terrible 16:44:02 Good drivers only get you so far :P 16:44:03 you can use intel unless you want good 3D performance 16:44:04 elliott_: they're good /enough/ 16:44:07 for what I want to do 16:44:22 what's important for me are good drivers and good enough 3D performance 16:44:25 and Intel hits both requirements 16:44:50 you have very low 3D expectations then 16:45:54 it's good enough to play Neverwinter Nights 16:46:00 which admittedly is a pretty old game 16:46:12 -!- aloril has joined. 16:46:46 ais523: come on, I had some third-party stuff fail on intel graphics in NWN due to texture compression formats that weren't supported 16:46:56 and you can't really drag the graphical quality settings to max 16:47:10 which is ridiculous for such an old game. 16:47:35 anything that isn't intel graphics have been able to run nwn on max graphical settings for several years 16:47:57 so OSX is estimated at 86,000,000 lines of code.. windows xp at 45,000,000 lines of code.. do you think a haskell OS would end up down at 1,000,000? 16:49:07 os x is larger than windows xp? 16:49:08 heh 16:49:11 which version of os x 16:49:23 i said estimated anyway 16:49:26 ah okay 16:49:29 10.4 16:49:46 wiki reference says 16:49:50 "Jobs, Steve (August 2006). "Live from WWDC 2006: Steve Jobs Keynote". Retrieved 2007-02-16. "86 million lines of source code that was ported to run on an entirely new architecture with zero hiccups."" 16:52:40 Windows XP, released in 2001, has 35 million lines of code 16:52:57 . Windows XP was compiled of 45 million lines of code. 16:53:16 whats 10 million lines of code between friends 16:55:15 Several thousand engineers have labored to build and test Windows Vista, a sprawling, complex software construction project with 50 million lines of code, or more than 40 percent larger than Windows XP. 16:55:43 clearly theres a bit of bullshitting going on somewhere 16:56:59 the new york times says "35 million lines of code." 16:57:10 wiki sourcing the windows facebook page says 45 16:57:33 seems these numbers are fairly meaningless 16:58:04 jeff atwood says 40 million 16:58:30 apparently quoting wikipedia 17:12:07 -!- copumpkin has quit (Remote host closed the connection). 17:17:45 -!- copumpkin has joined. 17:25:14 -!- monqy has joined. 17:25:45 in 2008 Linux had approx. 6 million lines of actual code. 17:25:56 over 10 million includes whitespace and comments. 17:26:52 note this is just the kernel itself. 17:29:36 9793 Torvalds, an asteroid named after Linus Torvalds 17:29:36 9882 Stallman, an asteroid named after Richard Matthew Stallman, American hacker, founder of the free software movement and the GNU project 17:29:39 9965 GNU, an asteroid named after the GNU project 17:29:53 9885 Linux is an asteroid discovered on October 12, 1994 by Spacewatch. The asteroid is named after the Linux operating system kernel 17:30:18 I love asteroid names. 17:31:59 wow there are 18,269 Main Belt asteroid articles. 17:33:27 probably mostly autogenerated 17:33:38 kallisti: 1994? 17:33:46 named after Linux only 3 years after it began... 17:34:00 Discovered 17:34:06 Named, possibly later 17:34:14 Ah 17:34:28 Or not, but I think that's possible 17:35:04 I suppose Linux would have been fairly popular in that kind of environment by 1994 17:36:01 14070060 total lines in Linux 3.1.1, according to ohcount; 10011948 excluding comments and whitespace 17:36:30 Deewiant: How much excluding drivers? 17:36:40 (This includes xml, xslt, scheme, and other languages) 17:36:51 I bet a lot of that is documentation 17:37:00 Probably not *that* much though :P 17:37:16 As of January 4, 2011, using current LOC and wage numbers with David A. Wheeler's calculations it would cost approximately 3 billion USD (about 2.2 billion EUR) to redevelop the Linux kernel. 17:37:24 If you want just the C and assembler files, 13233055+459402 and 9396007+362268 17:37:38 kallisti: David A. Wheeler's calculations = sloccount's bullshit estimates :P 17:37:50 Ohloh and sloccount and all these things always estimate like a million times what things would actually cost to develop 17:37:53 There's also 247515+149638 of "cpp", which I guess is headers 17:38:01 I think they claimed cfunge would cost like $80k or something 17:38:20 Deewiant: I'm more interested in how much of that is driver code 17:38:39 elliott_: I'm running your not-drivers calculation, it'll take a while 17:38:41 elliott_: hey programmers are expensive. and lazy. 17:38:47 Adding a driver doesn't really increase the overall complexity of a system, so in some sense drivers are free from the perspective of the rest of the system 17:39:00 Whereas adding code within the core system does increase complexity 17:42:13 elliott_: http://sprunge.us/TXcC 17:42:50 Wow, so only 56% of Linux is drivers 17:43:01 That's an awfully big core 17:44:11 elliott_: so assuming an average yearly salary of $63k (current average in the US), they're saying it would take.... 17:44:44 > (63/80)*12 17:44:46 9.45 17:44:55 one person 9.45 months to code cfunge? 17:45:30 (granted they probably used a different estimation technique) 17:45:39 (or at least a different average salary) 17:46:03 kallisti: I believe the method is literally "take statistic for lines/day a programmer writes, scale by salary" 17:46:26 http://hg.openjdk.java.net/hsx/hotspot-rt/hotspot/rev/763f01599ff4 Ha ha ha oh boy 17:46:59 oh, well that's kind of reasonable I guess. 17:48:50 assuming it's non-whitespace lines. 17:49:04 well... 17:49:13 no I guess those kind of count too? comments do anyway 17:49:29 as that represents documentation effort. 17:53:45 "Of course 5 years from now that will be different, but 5 years from now everyone will be running free GNU on their 200 MIPS, 64M SPARCstation-5." 17:53:52 linus v. tanenbaum is so fun 17:54:05 it's like they're pretending to be oblivious people in 1992 17:54:09 badly 17:54:53 -!- oerjan has joined. 17:54:53 * kallisti is like he's pretending to be an oblivious person in 2011 17:55:59 interestingly enough it takes about as much time for a person to produce cfunge as it does to create a baby. 17:56:06 based on that probably horrible estimate. 17:56:24 -!- Ngevd has joined. 17:56:26 Hello! 17:57:02 hi 17:57:52 next: produce a funge98 interpreter through genetically engineering a baby 17:58:39 !hey 17:58:39 it would be horrible if compilers attempted to detect typos and simply corrected them under the hood... 17:58:58 I've heard of a compiler that did that 17:59:05 Apparently it was awful 17:59:31 interestingly enough it takes about as much time for a person to produce cfunge as it does to create a baby. <-- it takes 2 people to create a baby 17:59:34 well perl supposedly resolves ambiguities automatically 17:59:48 ais523: I just saw an interesting way to upload a *.patch to a mediawiki installation that didn't accept that type: "File:Makefile.patch.png" 18:00:11 ais523: do people ever try that sort of stuff on wikipedia? 18:00:13 Vorpal: just write a piet program that performs the patch 18:00:22 nobody can delete that for not being a valid image 18:00:23 hah 18:00:28 `addquote interestingly enough it takes about as much time for a person to produce cfunge as it does to create a baby. 18:00:34 elliott_: it is on the defcon dev wiki 18:00:37 741) interestingly enough it takes about as much time for a person to produce cfunge as it does to create a baby. 18:00:47 Vorpal: people attempted it occasionally; on Wikipeida such files can be speedied 18:00:49 *Wikipedia 18:00:50 ah 18:00:56 -!- derrik has joined. 18:01:33 elliott_: you know you get dev access to uplink/darwinia/defcon/multiwinia with the humble bundle now 18:01:36 which is great 18:01:51 No, I completely missed getting an email about it and it being near the top of /r/programming. 18:01:56 I think normally they sell that for a higher price 18:02:03 See, what I usually do is ignore my email and not read reddit, because hey, Vorpal will let me know. 18:02:06 elliott_: ah good thing I told you then :P 18:02:16 happy australian mailman mailing list reminders day! 18:02:22 Vorpal: DEFCON and Multiwinia source are new, I believe. 18:02:27 hm really 18:02:29 okay 18:02:33 No, just DEFCON. 18:02:35 elliott_: it's even on Slashdot 18:02:37 elliott_: anyway my statement was correct then. I forgot the question mark above 18:02:37 ais523: It's the most - wonderful tiiiiime of the year! 18:02:47 so yes you knew it. Which was all I stated :P 18:02:53 ais523: happy ammlr day! 18:03:00 hmm, abbreviation ruins it 18:03:09 yep, you have to write it out 18:03:14 speaking of which. Tomorrow is my birthday 18:03:25 ais523: happy australian mailman mailing list reminders day, then 18:03:39 Vorpal: sorry, I only wish people happies on australian mailman mailing list reminders day. 18:03:42 Vorpal, how old will that make you? 18:03:47 the day we worship the ancient sumerian god Amm Lr 18:03:52 Vorpal: try getting a better birthday 18:04:05 ais523: haha, I just noticed how many players blognomic has now 18:04:06 Ngevd: err, I'm old enough to not think much about my age. Lets see... *gets calculator* 18:04:23 Vorpal is old as dirt 18:04:24 22 18:04:24 elliott_: it's going back to normal 18:04:39 oerjan: have you had a birthday recently, i kinda lose track 18:04:44 oerjan: but seriously, you stop thinking about exact age once you get past 20 or so. 18:04:48 wow, I'm older than Vorpal? 18:04:56 of course you are 18:04:57 ais523: aren't you like 24? 18:05:00 yes 18:05:14 does ais523 not remember when Vorpal was 18 18:05:17 anyway of course, I thought it was well established 18:05:19 or was it 19 18:05:28 elliott_: if by "recently" you mean in the last 6 months, then yes. 18:05:32 elliott_: err I was in this channel before I turned 18 I'm pretty sure 18:05:43 Vorpal: no 18:05:46 oerjan: happy belated australian mailman mailing list reminders day! 18:05:49 elliott_: yes. 18:05:53 Vorpal: 2008 18:05:59 Vorpal: only until you start reaching round numbers again :P 18:06:07 hm 18:06:12 oerjan: :/ 18:06:15 oh, hmm, 2007 18:06:21 Vorpal: 2007-10-30 18:06:27 elliott_: so 17 then 18:06:31 is the day I made my worst mistake 18:06:35 lol 18:06:35 elliott_, how old were you when you came here? 18:06:46 11 or 12 iirc? 18:06:48 Ngevd: umm, 11 or 12 18:06:50 I forget exactly 18:07:12 When I was 11 or 12, that was about when I started in the Murderous Maths forum 18:07:13 I think 18:07:20 Which I have since sadly abandoned 18:08:05 Ngevd: well it's good you left before you were murdered 18:08:07 arvid=> select * from irc.logs_na where nick = 'elliott' order by serial ASC limit 1; 18:08:07 serial | tstamp | nick | target | uhost | type | body 18:08:07 --------+---------------------+---------+--------+--------------------------------------------+------+------ 18:08:07 208001 | 2006-12-29 21:42:41 | elliott | | n=ehird@user-5440e204.wfd80a.dsl.pol.co.uk | 3 | 18:08:12 elliott_: you can count it from that 18:08:17 Yep, I was 12 18:08:29 The 16th of October 2007 18:08:29 (note, normalised nick, that is why it says elliott) 18:08:32 Vorpal: that one doesn't count, i joined, was too intimidated to say anything, then left 18:08:37 the next time i joined was in 2007 18:08:44 elliott_: wait is it normalised or normalized in UK English? 18:08:55 Vorpal: depends on dialect 18:08:58 Depends whether en-gb or en-gb-OED 18:08:59 OED uses -zed 18:09:13 Ngevd: *en-GB, *en-GB-oed 18:09:14 208001 | 2006-12-29 21:42:41 | elliott | | n=ehird@user-5440e204.wfd80a.dsl.pol.co.uk | 3 | 18:09:14 208002 | 2006-12-29 21:43:09 | elliott | | | 4 | 18:09:14 271393 | 2007-05-14 17:48:38 | elliott | | n=ehird@user-54457988.lns6-c11.dsl.pol.co.uk | 3 | 18:09:22 elliott_: too intimidated by what? 18:09:25 I joined the UMMF 17 days before my 13th birthday 18:09:30 Vorpal: lots of people and silence!!!! 18:09:34 elliott_: heh 18:09:45 you could have all been nasty. I don't talk until I'm sure I'm the nastiest one present 18:09:56 hah 18:10:18 anyway 11 then, assuming i can do arithmetic 18:10:22 wait OED isn't the default for en-gb? sacrilege! 18:10:23 which i'm not sure of 18:10:30 1995-08 --> 2006-12 18:10:36 or --> 2007-05, the same either way 18:10:55 oerjan: -zed is the only common case where -oed disagrees from common british english usage iirc 18:11:03 aha 18:11:26 oerjan: and they list -ise too 18:11:29 just not as the preferred spelling 18:11:36 "The use of -ize instead of -ise does not affect the spelling of words ending in -yse, such as analyse, paralyse and catalyse" 18:11:38 didn't know that 18:12:11 an excellent analyzis 18:14:12 oerjan: oh, looks like OED has a few other idiosyncrasies too, like preferring "co-operate" 18:14:29 coöperäte 18:14:33 oerjan: confusing matters further, it seems like "cooperate" is what appears in their "consumer" dictionaries 18:14:42 as opposed to the unusable-as-a-dictionary OED text itself :P 18:14:44 As opposed to English cooperate, or Esoterian coperate. 18:15:11 Read as "Estonian". 18:15:12 or volapük köüperät 18:15:23 Was confusing, 'cuz they do use os and diaereses a lot. 18:15:24 (note: possibly not actual volapük) 18:15:57 lojban c'ou,. zrxrope 18:16:20 c'ou,. tvtrope 18:16:29 -!- Slereah_ has joined. 18:16:59 http://oxforddictionaries.com/definition/cooperate?view=uk or is it..... 18:17:06 i don't care enough to try and dig deeper 18:17:22 Coöperate. 18:17:28 cöpærüt 18:17:35 http://en.wiktionary.org/wiki/cooperate#Alternative_forms 18:17:47 oerjan: pretty 18:17:47 -!- Slereah has quit (Ping timeout: 248 seconds). 18:17:54 Phantom_Hoover: As opposed to English cooperate, or Esoterian coöperate. 18:18:05 Phantom_Hoover: Anyway I will stop being annoyed by your diaeresing if you apply it properly. 18:18:07 Ah, of course. 18:18:18 elliott_, excuse me how else do you apply it. 18:18:23 Phantom_Hoover: I.e., to all diaereses, not just diaereses on adjacent vowels. 18:18:35 I once talked like that for an /entire minute/; I'm sure you can manage. 18:18:42 Yes fine I will do it. 18:18:42 Erm 18:18:46 s/adjacent vowels/repeated vowels/ 18:19:59 This is quite easy. 18:20:15 ('ea' isn't a diaeresis.) 18:20:20 (Nor is that one.) 18:20:37 Phantom_Hoover: Talk about poetry. 18:20:46 *poëtry. 18:21:14 Phantom_Hoover: Also shouldn't it be di(ae with " on top)resis because of the i, or am I wrong. 18:21:23 In phonology, hiatus (English: /haɪˈeɪtəs/; Latin: [hɪˈaːtʊs] "gaping")[1] or diaeresis (/daɪˈɛrɨsɨs/ or /daɪˈɪərɨsɨs/,[2] from Ancient Greek διαίρεσις diaíresis "division")[3] refers to two vowel sounds occurring in adjacent syllables, with no intervening consonant. When two adjacent vowel sounds occur in the same syllable, the result is instead described as a diphthong. 18:21:23 The English words hiatus and diaeresis themselves contain a hiatus between the first and second syllables. 18:21:59 Yeah, you need "diæ̈resis". 18:22:13 How far does this rabbit hole go? 18:22:31 SO FAR. 18:22:37 I would have gone for potry 18:22:48 Phantom_Hoover: Will you cooperate on your hiatus to produce poetry with diaereses? 18:22:50 Yes, that is because you are an idiöt. 18:23:13 16:29:35: ais523: _please_ protect Excela already... 18:23:14 16:29:42: oh wait 18:23:14 16:29:47: you said they moved to another page if they did that 18:23:31 what we need is some way to protect the page so the bots don't actually realize it is protected 18:23:33 is excela a brainfuck derivative 18:23:41 oerjan: ghostprotecting? 18:23:54 ...i guess 18:24:01 Ghostecting. 18:24:07 oerjan: ("ghostbanning" is a common term for the forum equivalent of that) 18:24:13 (only the ghostbanned user can see their own posts) 18:24:28 elliott_: well it sounds like what reddit does with voting 18:24:28 that would require an extension that probably doesn't even _exist_ yet though, so good luck with that :P 18:24:37 oerjan: yeah 18:24:53 Wow, diȧėreses (look, I don't have a compose binding for it) are remarkably uncommon. 18:25:11 Phantom_Hoover: æ̈ here you go. 18:25:24 -!- elliott_ has left ("Leaving"). 18:25:26 -!- elliott_ has joined. 18:25:27 elliott_, better, get me a decent .XCompose. 18:25:38 Phantom_Hoover: I think if you get an ae, and then do what you do for a diaeresis and then press space, it'll work. 18:26:07 Nope. 18:26:32 *shruggot* 18:26:33 elliott_: it's rather ridiculous with a page that has a plethora of recent edits but hasn't really been changed since 2006 :P 18:26:36 I wish I knew of a decent .XCompose. 18:26:48 oerjan: we should start improving it to confuse the spambots 18:26:52 heh 18:27:19 die, reses! 18:27:29 elliött_, I distinctly recall someöne linking me to one on reddit, but I didn't keep track of it. 18:28:44 http://forums.introversion.co.uk/introversion/viewtopic.php?t=3003 18:28:49 *snigger* 18:30:19 Phantom_Hoover: hehehehehe 18:30:21 headclot 18:30:46 "Who said I was joking - I bought the Humble Introversion bundle and I was quite impressed at what I saw." 18:30:52 9882 Stallman, an asteroid named after Richard Matthew Stallman, American hacker, founder of the free software movement and the GNU project 18:30:53 Email: Technology_rocks@hotmail.com 18:31:02 if that ever gets close to earth, we're fucked 18:31:52 "We do not exist on the internet yet at least. :/" 18:31:54 Humble INTP bundle 18:31:55 heheheheehehehehehehe 18:32:42 hm i haven't seen myers-briggs mentioned much in a while 18:46:03 -!- Phantom_Hoover has quit (Ping timeout: 248 seconds). 18:47:58 oerjan: where? 18:48:44 elliott_: um, i didn't mean to imply that i'd seen it, i just thought of the fact i hadn't after making that pun 18:49:12 ok 18:49:34 -!- derrik has quit (Quit: restart). 18:52:40 boredom -> Special:Random -> Kit Osbourne -> Combat Zone Wrestling -> Philadelphia -> Gentrification -> Property tax -> Mill (currency) -> Latin -> Ancient Greek which we've hit before 18:54:15 we got a strong acceptance to STACS 2012! 18:54:16 oklopol: You have 1 new message. '/msg lambdabot @messages' to read it. 18:54:45 -!- derrik has joined. 18:54:58 elliott_: about that message, didn't i then prove the theorem? 18:55:18 Ancient Greek still leads roundabout to Greek language :P 18:55:42 also, other reviewers may or may not have given us equally great reviews. 18:56:08 and some of them may or may not have pointed out a full page listing of typos and thinkos 18:56:29 oklopol: can you prove a lil' theorem oerjan needs 18:56:50 which one 18:57:23 hm this was one of the really long ones, still passing through Human (after Ngevd's very temporary cycle i feel like rechecking where this one goes; no change so far i think) 18:57:44 oklopol: oh it's just a simple one, proving the equivalence of two really simple functions 18:57:46 isn't that right oerjan 18:57:53 Did we ever come to a conclusion on differentiation chains? 18:58:00 oerjan's just not smart enough to do it you see 18:58:00 yeah oerjan solved it 18:58:12 The answer was? 18:58:18 Ngevd: answer to what 18:58:22 just look at e^(ax) 18:58:31 elliott_: are you talking about the ZipList stuff? i think it's pretty clear in principle. 18:58:41 and choose a fittingly 18:58:49 but oerjan: did you get uniqueness from that? 18:59:12 i think you then get that from taylor series with little trouble for analytic functions 18:59:16 oklopol: i didn't actually _give_ the proof, i just recalled what i remembered as the answer 18:59:53 i consider e^(ax) a proof of existence, but okay so you know it's unique 19:01:41 oklopol: i'm pretty sure, although i don't recall how it goes, it's probably some linear operator proof 19:02:36 -!- Phantom_Hoover has joined. 19:02:43 also i think you need only something like C^n functions to make it so 19:03:08 ...well, it's obviously C^infty once something _is_ a solution. 19:08:29 oklopol: oh it may involve one of the basic extension theorems for differential equations - if the values of a solution function and its n-1 first derivatives at a point are given, then its extension to some neighborhood is unique and by some linear algebra some linear combination of the e^(ax) things obviously fits. 19:09:19 iirc 19:13:01 ah the Human article after a while actually reaches Ngevd's Valuation (finance) 19:14:41 so basically this path is ridiculously long 19:15:01 -!- GreaseMonkey has joined. 19:15:18 I think I first encountered that loop via Human Population...? 19:15:22 I started at "chess" 19:15:51 oh wait sorry it wasn't one of Ngevd's anyway, he had Valuation of options -> Option (finance) at one point 19:15:57 Oh, did they remove the philosophy loop? 19:15:59 which is similar but not the same 19:16:08 Phantom_Hoover: we are not doing the same game 19:16:15 Ah. 19:17:16 we are looking at the last link of the introduction section, which tends to give _rather_ longer paths 19:17:30 but still has some commonly occuring end cycles 19:17:46 -!- kmc has joined. 19:18:23 oerjan: hm i wonder what the longest cycle on wikipedia in _general_ is 19:18:33 i.e. picking which link to follow by a magic oracle that picks the one that leads to the longest cycle :P 19:19:11 ah now reaching President of the United States. i don't believe anything has changed on this path since last time 19:20:10 elliott_: hm i wonder what would be an algorithm for that. in fact isn't that hamiltonian-cycle like, so likely NP-complete 19:20:16 -!- derrik has quit (Ping timeout: 240 seconds). 19:20:59 oerjan: http://en.wikipedia.org/wiki/Longest_path_problem ? 19:21:06 NP-complete, apparently 19:21:07 that is, solving it requires at a minimum finding out whether there is a hamiltonian cycle 19:21:07 :( 19:21:08 could even be harder, but certainly at least as hard as hamiltonian. 19:21:18 oklopol: hamiltonian hard, it seems 19:21:23 godo term that 19:21:25 hamiltonian hard 19:21:49 well it's the usual meaning of "hard" in complexity theory 19:22:05 that's just hardness / completeness of the decision problem. but wait, that's enough. 19:22:16 then just do a binary search 19:22:26 that's the way it usually goes 19:22:34 err 19:22:41 assuming the decision problem has a suitable parameter to search by 19:23:08 except nono, a nondeterministic tm cannot necessarily show that something is not doable 19:23:27 or that some length cannot be done 19:24:27 oklopol: well of course. you end up with the oracle class P^NP 19:24:46 so we agree that it's probably not np-complete 19:24:56 np-hard, is the term :P 19:25:16 obviously i know that, since i just used it 19:25:24 which is obvious from hamiltonian-hard + hamiltonian being NP-complete 19:26:12 basically we'd need to show it's in co-np i guess 19:26:55 erm 19:27:14 i mean 19:27:22 it's likely to be hard for _both_ NP and co-NP, i'd think 19:27:48 but if the decision problem is in both np and co-np, then isn't the problem of actually finding the longest path in np 19:28:20 since you can then do binary search within np 19:28:30 NFP 19:28:40 well sure 19:28:56 or wait 19:29:11 please stop arguing about terminology and start agreeing with everything i say 19:29:11 ais523: there? 19:29:35 yes 19:29:37 FNP, was it 19:29:40 ais523: know anything about Dungeons of Dreadmor? All I know it is a rouge like, and was added to the last humble bundle. 19:29:45 I don't 19:29:47 So I figure you might know if it is any good 19:29:47 -!- MDude has quit (Ping timeout: 248 seconds). 19:29:48 ah okay 19:29:50 fnp 19:29:57 well I'll give it a try 19:30:35 functions calculabilated in nondeterministic polynomial time 19:30:35 well, maybe. it looks a little tricky. 19:30:45 heh, difficulty setting: elves (easy), dwarves (normal), going rouge (hard). Plus a permadeath option 19:30:53 hm what to chose 19:31:03 I'm tempted to go for the nethack way of doing it 19:31:31 Going rouge ... SO RED ... SO RED IT HURTS MY EYES 19:31:43 typoed that :P 19:31:54 rogue of course 19:31:58 get an upper bound for biggest value, then do binary search, starting both the np algo and the np algo for the complement at the same time, one of them returns true in polynomial time, continue for linearly many steps to reach value 19:32:10 hm we're on to South Korea, i vaguely recall we may be on the way to the Petronas Towers cycle 19:32:16 no? 19:32:22 okay no class selection. Instead you select 5 skills from a set of... ~40 19:32:56 actually 7 out of 34. I fail at counting today 19:33:01 and there is a random button 19:33:03 running the algos at the same time is a polynomial increase, and there's a linear bound on the length of the upper bound 19:33:27 oklopol: well i'm just not quite sure that's what they meant by FNP in wikipedia 19:33:42 oerjan: hmph now i really want to know the longest cycle in wikipedia :P 19:33:47 oerjan: how many years do i gotta wait to bruteforce it 19:34:09 oerjan: that's the definition of NP imo :D 19:34:43 oklopol: er NP is decision problems. you are trying to calculate a function problem, which obviously has a different name. 19:34:51 no race selection 19:35:09 i'm just not sure wikipedia's FNP is precisely the class you are using. 19:35:24 it had this strange relation definition 19:35:51 oerjan: HOW MANY YEAAAAAAARS 19:35:57 oh it has its own article too, i just looked at FP 19:36:15 oerjan: yeah but i mean fnp has nothing to do with the class fnp in complexity theory imo 19:36:25 elliott_: get to the singularity first, and we can start estimating 19:36:28 that's just the language of witnesses 19:36:35 oerjan: cries 19:36:35 or whatever they like to call it 19:36:40 oklopol: how many years !!!! 19:36:52 elliott_: 14 19:37:06 elliott_: there is of course a possibility that wikipedia's graph allows for some greatly simplifying optimizations 19:37:24 i just checked the definition of fnp in my book and it's definitely the relations computable by a nondeterministic turing machine. 19:37:33 oerjan: well paths are very short in general 19:37:47 in the sense that you get nondeterministic output from your tm 19:37:59 but let me check again, actually... 19:38:03 ais523: so far it seems like a good rougelike. Good game music too. It doesn't take itself seriously though. 19:38:17 that's also often good in roguelikes 19:38:20 oerjan: "If you follow the best route in all cases, it takes an average of 4.573 clicks to get from any Wikipedia article to any other." 19:38:51 "Bellare and Goldwasser showed in 1994 using some standard assumptions that there exist problems in NP such that their FNP versions are not self-reducible, implying that they are harder than their corresponding decision problem. 19:38:55 elliott_: I wonder what the value is not counting orphan and linkless? 19:38:55 " 19:39:16 so. 19:39:31 ais523: "Wikipedia has 2301486 articles with 55550003 links between them (at least in my dataset, those numbers have definitely changed by now). The largest "strongly-connected-component" of wikipedia has 2111480 articles. That is, there are 2111480 articles with the property that from any of them, it is possible to get to any other one. The rest are mostly pages that no-one has linked to or disambiguation pages. For the graph-theory nerds, there is no 19:39:31 other disjoint strongly connected component of more than about 3 articles. For everyone else, the remaining 190006 articles are pretty boring, linkwise." 19:39:34 ais523: so i doubt it'd change much 19:39:46 ah, interesting 19:39:52 Screw this, I'm getting the latest humble indie bundle 19:39:56 fnp, in my book, is not even anything, they use the terms NPMV and NPSV for multi- and single-valued functions calculated by a tm 19:40:02 elliott_: um i was assuming you wanted to always take the _worst_ route 19:40:05 oerjan: well yes 19:40:08 fp is what it should be 19:40:09 wow, someone's probably been looking carefully for walled gardens 19:40:12 oerjan: i was just telling you the only thing i knew about wikipedia's graph :P 19:40:15 (articles linking to each other but not to articles in general) 19:40:16 ais523: that was in 2008 19:40:32 ais523: well yeah, it is graphical of course. What else would one expect from a modern game. Oblique graphics (I think the term is, like isometric but aligned with one axis) 19:40:33 ais523: I think it's more infoboxes 19:40:37 and obsessive linking of dates 19:40:38 and thinks like that 19:40:39 *things 19:40:41 and countries 19:40:43 elliott_: those only go one way 19:40:47 well, OK 19:40:48 that doesn't lead to a strongly connected component 19:40:51 unless it goes both ways 19:41:24 "In the complexities below, I just use "n" to denote either number of nodes or number of edges. Since the graph is so sparse, they're mostly interchangeable." 19:42:05 Graphs? Complexity? This is Eodermdrome, right? 19:42:26 I had an idea for another graph-based esolang 19:42:41 But then I remembered I still need to finish Salesman 19:42:43 Petronas Towers it was. 19:42:57 Phantom_Hoover: wikipedia 19:43:19 elliott_: wikipedia as an eodermdrome program. discuss. 19:43:20 Wikidermdrome. 19:43:25 ais523: the game has some interesting name for your basic stats. I think "burliness" is it's name for "strength" and so on 19:43:33 heh 19:43:34 sagacity is probably int I guess? 19:43:42 Vorpal, stat names are always a sign of quality! 19:43:42 caddishness I don't know 19:43:49 well i suppose eodermdrome state fits better. 19:43:52 Caddishness, I assume, would be charisma. 19:44:01 Phantom_Hoover: no but in this case a sign that the game is not taking itself seriously at all. 19:44:32 there is nimbleness (dex I presume), savvy (wis?) and stubbornness (?) 19:45:53 help how do I install .rpm 19:45:58 a traffic cone as a helmet... heh 19:46:21 Ngevd, is this a Humble Bundle thing? 19:46:24 Yes 19:46:28 DEFCON 19:46:46 Ooh, there's a .deb 19:46:47 Ngevd: just use the .tar.gz? 19:46:49 or that 19:46:49 .debs are easy 19:46:49 I'd just download the .gz, TbH. 19:47:25 Much less fuss, and it's not like adding a launcher (the only serious advantage of a .deb in this context) isn't much work. 19:49:39 * Phantom_Hoover purges SpaceChem, uses APT again. 19:49:42 Um. 19:49:45 The .deb is not much less fuss. 19:49:51 You can literally double click them to install. 19:49:58 *more fuss 19:50:01 Ngevd: Use the .debs. 19:50:23 I was only not using the .debs because of momentary selective blindness 19:51:06 wand of laser 19:51:43 Is it bad that so far my favourite roguelike is Pokmon Mystery Dungeon Red Rescue Team? 19:52:18 ais523: the description of wand of laser is funny: "Aside from tangential properties, this wand's primary magical power involves distracting cats" 19:52:41 pretty effective still 19:53:09 stats are "entropy: 27, burn rate: 15" whatever that means 19:53:30 Perhaps it's describing the standard entropy value. 19:53:58 oh okay the tutorial just told me, it has a chance of burnout when used based on entropy and entropy increases with every use 19:54:10 not sure about burn rate though 20:02:11 Ngevd: no, it's a pretty good roguelike 20:02:33 Explorers of Time/Darkness/Sky is better, though; Sky removed a lot of rough edges but added a couple of silly mechanics, but it's probably still the best of the three 20:02:39 the problem is that it starts out far too easy 20:02:44 (all three, that is) 20:07:07 -!- Phantom_Hoover has quit (Ping timeout: 248 seconds). 20:08:12 -!- zzo38 has joined. 20:09:21 -!- Phantom_Hoover has joined. 20:11:49 oerjan: thanks for reminding me of that six degrees of wikipedia thing, followed some links and the guy has an interesting series of haskell posts on his blog :P 20:12:27 -!- BeholdMyGlory has quit (Ping timeout: 248 seconds). 20:12:47 yw 20:13:39 unfortunately it involves arrows so i don't understand it :'( 20:15:19 Can Applicative be defined in terms of fmap and pure and (liftA2 (,)) instead of (<*>) and pure? 20:15:42 zzo38: yes, i said. 20:16:55 fm <*> x = uncurry ($) `fmap` liftA2 (,) fm x 20:18:52 also i mentioned that a blog comment called it lax monoidal category or something like that 20:33:34 Please describe in glowing terms the inventor of IRP. 20:33:34 I have no idea who invented IRP 20:33:34 :( 20:33:45 (In #irp ) 20:34:12 SIC TRANSIT GLORIA MVNDI 20:36:55 Gregor: Can you go back in time and not invent IRP? 20:37:23 elliott_: If I hadn't invented IRP, you couldn't have even just requested that in IRP#esoteric NOW COULD YOU 20:40:31 IRP, is that the internet relay programming or whatchamacallit? 20:40:48 No. 20:40:54 IRP is Ignorant Rabbi Preachers. 20:40:58 Gregor is one. 20:41:16 why am i suddenly having this deja vu feeling 20:41:40 `log [i]gnorant rabbi preachers 20:42:08 2011-11-30.txt:20:40:54: IRP is Ignorant Rabbi Preachers. 20:43:36 i guess i must have loaded from a saved game, or something. 20:43:49 oerjan: you know how temperamenatl `log is :P 20:43:57 or does synchronicity guarantee that it would have given the right result 20:43:59 `log [i]gnorant rabbi preachers 20:44:06 2011-11-30.txt:20:42:08: 2011-11-30.txt:20:40:54: IRP is Ignorant Rabbi Preachers. 20:44:40 elliott_: it doesn't look _overly_. 20:44:56 there would be another word if my brain were working. 20:47:41 "were"? how many brains do you have? 20:48:02 in which we learn that olsner doesn't know about the subjunctive. 20:49:36 i'm starting to worry about my increasing snarkiness. slightly. 20:49:38 *sigh* this troll on reddit hasn't replied to the second-last phase of my argument 20:51:51 oerjan: hmm, is that the subjunctive? can you combine subjunctive with if? 20:52:02 pretty sure 20:52:59 in fact i suspect that's the _majority_ of uses 20:55:32 -!- augur has quit (Read error: Connection reset by peer). 20:57:48 oh well.. I'm not the authority on moods anyway, not even the subjunctive one 20:59:36 oerjan: your original line was slightly awkward-seeming btw 20:59:46 which one? 20:59:47 but not wrong at all 20:59:51 there would be another word if my brain were working. 20:59:58 "there would be another word were my brain working" seems better to me 21:00:06 aha 21:00:47 which of course looks more awkward to _me_, but... :P 21:01:00 aha! told ya the if was wonky 21:01:55 oerjan: well the whole thing is kind of awkward, it doesn't feel like the way someone would talk without trying to 21:02:42 Quiet, Thou 21:03:09 talking without trying to is also awkward 21:03:22 nah is fohel askgaøla gloher 21:03:26 ... were it to happen 21:24:15 -!- augur has joined. 21:32:47 oerjan: heh i just realised that arrow notation having banana brackets is funny 21:33:03 O KAY 21:33:12 oerjan: do you 21:33:13 get it 21:33:19 no. 21:33:26 oerjan: time flies like a 21:33:32 *n 21:33:39 * oerjan swats elliott_ -----### 21:33:45 :'( 21:33:49 crying 21:33:56 there was a banana fly on your head 21:34:52 oerjan: (do you (understand arow,)es) 21:35:04 no one does 21:35:29 even oleg just pretends they're applicatives + category 21:35:56 oerjan: i have not found that to help, seeing as I failed to derive arr from Applicative + Category without looking it up :P 21:36:01 ((<$> id)) 21:36:09 funny that 21:36:25 are you implyig im stupid :( 21:37:25 nah just retired 21:37:36 * elliott_ cry 21:37:55 lack of oxygen. 21:38:33 elliott_: you know about weird C++ stuff right? 21:38:42 Phantom_Hoover: kill oerjan , to die for, insult with old meme 21:38:53 Vorpal: i AM weird C++ stuff --leonardo de vinci 21:38:57 *da 21:38:58 wha 21:39:05 oh wai 21:39:06 t 21:39:10 obnoxious meme is obnoxious 21:39:10 da is actually rihght 21:39:11 elliott_: any idea why foo might not work (due to "'foo' was not declared in this scope") while this->foo works perfectly? 21:39:13 that was meant to be a funny joke 21:39:15 oops. 21:39:19 elliott_: templates are involved 21:39:29 Vorpal: is this a puzzle or can i see code 21:39:57 elliott_: it is from darwinia source, trying to get it to compile. Adding this-> worked. I don't think I'm legally allowed to paste it just like that. 21:40:09 Vorpal: i own the bundle. 21:40:19 elliott_: well I need to paste it to you in private then, sec 21:41:55 * oerjan wonders if internet memes will be like fashion, and recycle in a few decades 21:42:17 xkcd did a comic on that, although I can't remember if it was pre- or post-decay. 21:42:26 oerjan: http://xkcd.com/286/ 21:42:31 Phantom_Hoover: WAY AHEAD OF YOU 21:42:47 Pre-decay, then. 21:42:57 all your memes are belong to us 21:43:16 Retroturn. 21:43:32 hmm, when was aybabtu? 21:44:24 "-- became an Internet phenomenon or meme in 2000–2002." 21:44:25 fizzie: You have 1 new message. '/msg lambdabot @messages' to read it. 21:44:31 elliott_: see /msg 21:44:32 Why ask a random channel when you can ask Wikipedia? 21:44:53 I asked first, then I went to wikipedia and waited for someone to repeat the information I just read there 21:44:56 WHAT IF WE WANT A RANDOM ANSWER 21:45:05 or a funnier answer 21:45:14 fizzie: YOUR MISTAKE WAS SPEAKING 21:45:33 Most of what I speak is like that. 21:48:33 fizzie: Oh, you're cheating. 21:48:37 You can't speak and then chat like that. 21:48:41 *cheat 21:49:38 -!- Patashu has joined. 21:59:08 -!- Taneb has joined. 22:02:11 -!- Ngevd has quit (Ping timeout: 245 seconds). 22:02:22 -!- MDude has joined. 22:04:22 -!- oerjan has quit (Quit: Good night). 22:07:04 -!- lambdabot has quit (Quit: #lesswrong). 22:18:17 -!- Jafet has quit (Quit: Leaving.). 22:20:16 Deewiant: Test the Windows build already 22:20:26 elliott_: help 22:22:05 Just noticed my email in my account settings was 0.034064395384923 I asume that was the issue. 22:22:09 hahaha 22:22:20 (it seems to be back to normal now…) 22:23:01 -!- elliott_ has quit (Read error: Operation timed out). 22:26:29 http://www.youtube.com/watch?v=rzXOVbYUamc 22:26:36 Conclusion: quintopia should live in IKEA. 22:30:37 -!- ais523 has quit (Remote host closed the connection). 22:50:22 http://www.youtube.com/watch?v=rzXOVbYUamc <-- cool 23:20:02 * Phantom_Hoover → sleep 23:20:04 -!- Phantom_Hoover has quit (Quit: Leaving). 23:20:12 Good idea 23:42:12 -!- Taneb has quit (Ping timeout: 260 seconds). 23:57:17 -!- Klisz has joined.