00:00:00 -!- BeholdMyBot has joined. 00:00:19 Mwahaha 00:00:31 [00:59:58] <@FireFly> ^bf +++++++++++++.-----[->++++++++>++++>++++++++++++<<<]>++++++++++.+++++.------.+++++.>.+++.>+++++.++++++++++++++.----.+++++.---------------.+++++++++++++.---------.------. 00:00:41 = [CR]JOIN #esoteric 00:00:45 -!- BeholdMyBot has left (?). 00:03:32 ehird: I just released Coadjute, in case you're interested. 00:03:37 link 00:03:42 And with that, I'm off to sleep -> 00:03:54 iki.fi/matti.niemenmaa/coadjute 00:04:12 thx 00:04:12 :) 00:08:56 www.iki.fi/matti.niemenmaa/coadjute 00:09:32 oklopol: wut? 00:09:38 oh, for clickability? 00:13:33 ^bf ,[.,]!Hello World! 00:13:33 Hello World! 00:13:41 ^bf +++++++++++++.---[>++++++<-]>+++++<+++++[>+++<-]>.<+++++[>---<-]>.<+++++[>+++<-]>++.++.>+++++++[>+++++<-]>---.+++.<+++[<+++++>-]<++.++++++++++++++.----.+++++.---------------.+++++++++++++.---------.------. 00:13:41 .PART #esoteric 00:13:54 damn :P 00:13:58 ehird: yes. 00:15:51 -!- moozilla has joined. 00:28:21 Holy shit kottke.org redesigned and it looks so ugly 00:30:40 well, ok, only the STUPID BLUE BORDER looks ugly 00:43:21 yea 00:43:25 it started looking all fine 00:43:32 until loading the images finished 00:44:02 * ehird sees if he can block that image ;-) 00:55:10 -!- BeholdMyGlory has quit ("bye"). 00:57:51 -!- FireFly has quit ("Later"). 01:59:38 o 01:59:39 o 02:07:26 Great, I have a functioning Lispoid. It has only one primitive: lambda. 02:07:56 I don't want to figure out how it works, so you guys tell me what expressions to evaluate. 02:08:41 -!- GregorR has joined. 02:09:01 Hi, GregorR. I'm a LISP bot now. 02:09:44 -!- GregorR has quit (Remote closed the connection). 02:09:58 I guess I was too scary. 02:11:05 WHO HIGHLIGHTED BSMNT_BOT 02:11:13 *Lisp> evaluate . read $ "((lambda a (a a)) (3 4))" 02:11:13 ((3 4) (3 4)) 02:11:47 Hey, I got it to go into an actual infinite loop. 02:11:55 As opposed to those fake infinite loops you see on TV. 02:12:33 ...not suprising 02:15:25 *Lisp> evaluate . read $ "((lambda s ((lambda k s) (lambda x (lambda y x)))) (la 02:15:29 mbda x (lambda y (lambda z ((x z) (y z))))))" 02:15:31 [lambda x (lambda y (lambda z ((x z) (y z))))] 02:15:36 Phear. 02:16:13 Replacing that inner thing with (s k) gives this: [lambda y (lambda z (((lambda x (lambda y x)) z) (y z)))] 02:18:05 ((s k) a) gives this: [lambda z (((lambda x (lambda a x)) z) (a z))] 02:18:16 (((s k) a) b), surprisingly, gives this: b 02:18:46 Wait, no, that's actually correct. 02:20:13 I'd be surprised if this could actually handle big expressions correctly. 02:30:36 * kerlo makes s, k and i built-ins 02:32:47 Now the only things we need are foldr and equality testing. 02:38:46 And both have now been implemented. 02:42:31 All we need to do now is make it an IRC bot! 02:47:18 Lambda is just one greek character. Why need 6 characters to encode it? 02:47:38 It would be shorter to just use L. 02:48:22 or some non-alphanumeric one, such as \, which resembles lambda 02:48:49 ((\s ((\k s) (\x (\y x)))) (\x (\y (\z ((x z) (y z)))))) 02:54:47 Yi actually has a built-in feature (in haskell mode) that translates '\' directly to the unicode-character 'lambda' in the right context. 02:55:10 tremendously useful for my sore eyes :-) 02:57:59 ((λs ((λk s) (λx λy x))) (λx λy λz x z (y z))) 03:02:04 I think my Lispy IRC bot is ready. 03:02:19 There's a small problem, though, in that any parse error in your expression will cause it to disconnect. 03:02:22 Oh well. 03:02:26 -!- kerlobot has joined. 03:02:36 #eval s 03:02:49 Oh, darn. 03:03:43 CREAMPUFF! 03:03:44 -!- kerlobot has quit (Remote closed the connection). 03:03:51 Cool, that made it quit. 03:10:08 So, I'm stealing someone else's IRC code. 03:18:18 -!- kerlobot has joined. 03:18:25 #eval s 03:18:25 [l x (l y (l z ((x z) (y z))))] 03:18:29 Woot! 03:18:39 #eval This is a syntax error: ]]]]] 03:18:40 -!- kerlobot has quit (Remote closed the connection). 03:18:47 Wow. 03:21:39 -!- kerlobot has joined. 03:21:44 #eval s 03:21:44 [l x (l y (l z ((x z) (y z))))] 03:21:50 #eval This is a syntax error: ]]]]] 03:21:51 Syntax error 03:22:06 Lovely. 03:22:53 #eval (((s i) i) ((s i) i)) 03:23:03 #eval I'm waiting... 03:23:19 Yeah, that's never going to finish. 03:23:22 -!- kerlobot has quit (Read error: 104 (Connection reset by peer)). 03:29:43 -!- puzzlet_ has quit (Read error: 104 (Connection reset by peer)). 03:29:49 -!- puzzlet has joined. 03:34:16 -!- kerlobot has joined. 03:34:20 #eval 3 03:34:20 3 03:34:30 #eval This is probably a syntax error. 03:34:31 Syntax error 03:34:42 #eval "test" 03:34:43 "test" 03:34:48 #eval "test" + "test" 03:34:49 Syntax error 03:34:49 #temp This is probably a syntax error. 03:34:50 Syntax error 03:34:59 #temp muahaha 03:35:02 #eval "test" 03:35:02 muahaha 03:35:05 #eval s 03:35:05 muahaha 03:35:10 #temp input 03:35:14 #eval "test" 03:35:15 "test" 03:35:41 #eval (+ "a" "b") 03:35:42 (+ "a" "b") 03:35:46 Built-in functions: s, k, i, l, f, e 03:36:03 So one thing it can do is evaluate SKI calculus. 03:36:32 #eval ["a" "b"] 03:36:33 Syntax error 03:36:50 no way to concatenate strings? 03:36:55 Nope. 03:37:07 You might be able to figure out a way to concatenate lists, though. 03:37:24 #eval (+ [1 2] [3 4]) 03:37:24 Syntax error 03:37:27 f is the foldr function. 03:37:45 -!- puzzlet has quit (Remote closed the connection). 03:37:46 #eval [1, 2] 03:37:47 Syntax error 03:37:49 -!- puzzlet has joined. 03:38:16 #eval (((l x (l y (list x y))) 1) 2) 03:38:16 (list 1 2) 03:38:48 Obvious improvement: make l take a list of arguments, not just one. 03:39:45 #eval ((l list (list x)) y) 03:39:46 (y x) 03:39:58 so how is list different from any other value? 03:40:03 It isn't. 03:40:16 numbers, strings and tuples 03:40:38 My lisp has three types: atom, list, and lambda function. 03:41:00 #eval "xy 03:41:00 "xy 03:41:02 oh 03:41:04 "foo" is an atom. "(blah blah blah)" is a list. "[l x y]" is a lambda function. 03:41:37 If you don't have any parentheses or brackets, you won't have any lists or lambda functions. 03:42:08 I know. Since you didn't mention strings, I had to test the function of " 03:42:15 * kerlo nods 03:42:40 " is not a special character in any way; only parentheses, brackets and whitespace are different from letters. 03:42:56 CREAMPUFF! 03:42:56 -!- kerlobot has quit (Read error: 104 (Connection reset by peer)). 03:43:07 :P 03:43:29 -!- kerlobot has joined. 03:43:33 Now it's better. 03:43:52 #temp (the answer is input) 03:43:55 #eval (s k) 03:43:56 (the answer is (s k)) 03:44:05 Oh, that's not the answer at all. 03:44:07 #reset 03:44:10 #eval (s k) 03:44:10 [l y (l z ((k z) (y z)))] 03:44:42 #temp (x y) 03:44:46 #eval (x y) 03:44:46 (x y) 03:44:56 Now everything will evaluate to (x y). 03:45:02 #eval (x y input) 03:45:03 (x y) 03:45:06 #temp (x y input) 03:45:08 #eval (x y) 03:45:08 (x y) 03:45:24 The bot stores a template, which is by default "input". 03:45:49 The #temp and #eval commands substitute their input for the word "input" in the template, then do something with the results. 03:46:04 #reset 03:46:06 #temp sets the the template to it; #eval evaluates it and outputs the result. 03:46:06 Syntax error 03:46:14 Now the template is "input" again. 03:47:11 #eval s 03:47:11 [l x (l y (l z ((x z) (y z))))] 03:47:13 #eval k 03:47:14 [l x (l y x)] 03:47:15 #eval i 03:47:15 [l x x] 03:47:28 #eval (e 3 3) 03:47:28 (e 3 3) 03:47:32 Oops. 03:47:38 #eval (e 3 3 yes no) 03:47:38 yes 03:47:40 #eval (e 3 4 yes no) 03:47:41 no 03:47:59 #eval (f one two (1 2 3)) 03:48:00 (one 1 (f one two (2 3))) 03:48:08 #eval (f one two ()) 03:48:08 two 03:48:49 #temp ((l foo (How useful!)) input) 03:49:00 #eval (one fish two fish red fish foo fish) 03:49:00 (How useful!) 03:49:08 Oops, wrong way around. 03:49:09 #reset 03:49:21 #temp ((l foo input) (How useful!)) 03:49:23 #eval (one fish two fish red fish foo fish) 03:49:24 (one fish two fish red fish (How useful!) fish) 03:49:43 #temp ((l red input) (Not.)) 03:49:45 #eval (one fish two fish red fish foo fish) 03:49:45 (one fish two fish (Not.) fish (How useful!) fish) 03:50:03 #temp ((l fish input) (Look, they stack! foo foo foo)) 03:50:07 #eval (one fish two fish red fish foo fish) 03:50:07 (one (Look, they stack! (How useful!) (How useful!) (How useful!)) two (Look, they stack! (How useful!) (How useful!) (How useful!)) (Not.) (Look, they stack! (How useful!) (How useful!) (How useful!)) (How useful!) (Look, they stack! (How useful!) (How useful!) (How useful!))) 03:50:19 #reset 03:50:22 And that's how you set things. 03:56:30 CREAMPUFF! 03:56:30 -!- kerlobot has quit (Read error: 104 (Connection reset by peer)). 03:56:36 -!- kerlobot has joined. 03:56:48 Now it should behave intelligently if you apply a function to too many arguments. 03:57:00 #eval (s x y z) 03:57:00 ([l x (l y (l z ((x z) (y z))))] x y z) 03:57:12 Nope. 03:57:53 Did I do something silly, like forget to reload? 03:57:57 CREAMPUFF! 03:57:58 -!- kerlobot has quit (Read error: 104 (Connection reset by peer)). 03:58:10 -!- kerlobot has joined. 03:58:14 #eval (s x y z) 03:58:15 ((x z) (y z)) 03:58:19 Much better. 03:58:32 #eval (one fish two fish red fish blue fish) 03:58:32 (((((((one fish) two) fish) red) fish) blue) fish) 03:58:42 Look how intelligent that is! 04:00:11 -!- CakeProphet has joined. 04:02:07 Now to figure out how to concatenate two lists using this thing. 04:03:41 Okay, here are the guts of this bot: http://pastebin.ca/1311359 04:04:00 If I figure out how to access the wiki, I might write a little spec for this language and put it there. 04:05:17 what are you kids doing 04:05:21 kerlo whats this kerlobot thing 04:05:37 It's an esolang bot, I guess. 04:06:16 what lang 04:06:26 It's something resembling Lisp. 04:06:33 i see 04:06:37 and written ins haskell! 04:06:41 Yep. 04:07:07 only 53 lines for the whole bot? 04:07:31 The whole bot is 152 lines. The guts of the interpreter are just 53, though, I guess. 04:07:52 ah ok. 04:07:58 i was wondering why i didnt see io stuff there :p 04:09:11 CREAMPUFF! 04:09:11 -!- kerlobot has quit (Read error: 104 (Connection reset by peer)). 04:09:19 -!- kerlobot has joined. 04:09:26 #eval (cons 1 (2 3)) 04:09:27 ((cons 1) (2 3)) 04:09:34 #eval (c 1 (2 3)) 04:09:34 (1 2 3) 04:09:38 There we go. 04:09:56 That's wrong, though. :-P 04:10:27 CREAMPUFF! 04:10:27 -!- kerlobot has quit (Read error: 104 (Connection reset by peer)). 04:10:35 -!- kerlobot has joined. 04:10:40 #eval (a 1 (2 3)) 04:10:40 ((1 2) 3) 04:10:49 CREAMPUFF! 04:10:54 ahh very smart 04:10:55 :) 04:10:57 CREAMPUFF! doesn't actually do anything. 04:11:01 oh 04:11:03 darn 04:11:11 and here i thought it was your special restart command 04:11:11 I mean, it doesn't do anything that, say, "There we go." wouldn't. 04:11:12 haha 04:11:40 I assure you that this is all part of my evil plan. 04:11:48 #eval (list (1 2 3)) 04:11:48 (list (1 2 3)) 04:11:49 :P 04:12:20 oh, ski 04:12:22 i like ski 04:12:37 Do some ski, bsmntbombdood! 04:14:55 #eval f 04:14:56 f 04:15:31 #eval (l x (l y (x y)) a b 04:15:36 -!- kerlobot has quit (Remote closed the connection). 04:15:38 :P 04:15:43 Wow. 04:16:50 Let me fix the parser, then... 04:17:01 heh 04:17:24 -!- kerlobot has joined. 04:17:28 #eval (l x (l y (x y)) a b 04:17:29 #eval (l x (l y (x y)) a b 04:17:29 Syntax error 04:17:29 Syntax error 04:17:33 Jinx. 04:17:40 #eval ((l x (l y (x y)) a b) 04:17:40 Syntax error 04:17:54 Match your parentheses, my friend. 04:17:57 lambdas can only take one argument? 04:17:59 kerlo: that was quick 04:18:08 Lambdas can only take one argument, inded. 04:18:13 That was quick, indeed. 04:18:14 shouldn't it take longer than 3 seconds to make that change? 04:18:22 Well, I just added the line readsPrecLisp' n [] = [] 04:18:39 #eval (l (x y) (z (x y))) (1 2) 04:18:39 Syntax error 04:18:45 #eval ((l (x y) (z (x y))) (1 2)) 04:18:45 (((l (x y)) (z (x y))) (1 2)) 04:18:47 stupid haskell 04:18:59 Meaning "if you're waiting for a close bracket and there's nothing there, there are no parses." 04:19:21 #eval ((l x (l y (x y))) a b) 04:19:21 (a b) 04:19:44 #eval (this is the input) 04:19:44 (((this is) the) input) 04:19:54 Boring. 04:20:01 #temp (input input input) 04:20:01 #temp (input input input) 04:20:02 #temp (input input input) 04:20:04 #eval 3 04:20:05 ((((((3 3) 3) (3 3 3)) (3 3 3)) ((3 3 3) (3 3 3) (3 3 3))) ((3 3 3) (3 3 3) (3 3 3))) 04:20:10 #reset 04:20:46 #eval (l x (e x 3)) 4 04:20:47 Syntax error 04:21:10 Lists must be enclosed in parentheses. 04:21:17 #eval ((l x (e x 3)) 4) 04:21:17 ((e 4) 3) 04:21:50 wasn't e = equals? 04:21:59 Yes, but it takes four arguments. 04:22:12 #eval (l x (e 0 1 x 3)) 4 04:22:12 Syntax error 04:22:16 #eval ((l x (e 0 1 x 3)) 4) 04:22:16 Returns the third if the first and second are equal, the fourth otherwise. 04:22:17 3 04:22:28 #eval ((l x (e x 3 0 1)) 4) 04:22:28 1 04:22:41 #eval ((l x (e x 3 1 0)) 3) 04:22:41 1 04:23:03 I'm still waiting for someone to figure out a function for concatenating two lists. :-) 04:23:08 Might not be possible; I dunno. 04:23:53 nothing I could think of. foldr works for breaking up a list, but not putting it back together 04:24:23 you need car and cdr :P 04:24:29 and cons 04:24:44 #eval (a (does this look like) (cons to you?)) 04:24:45 ((((does this look like) cons) to) you?) 04:25:01 What we need is... 04:25:37 ...CREAMPUFF! 04:25:37 -!- kerlobot has quit (Read error: 104 (Connection reset by peer)). 04:26:01 -!- kerlobot has joined. 04:26:06 What we need is v! 04:26:20 #eval (v test (a (does this look like) (cons to you?))) 04:26:20 (test ((((does this look like) cons) to) you?)) 04:26:29 I think that's wrong. 04:26:36 what's v? 04:26:38 #eval (v (1 2 3) (4 5 6)) 04:26:38 (((1 2) 3) ((4 5) 6)) 04:26:42 apply (Atom "v") (x:xs) = evaluate (List (x : map evaluate xs)) 04:27:07 what's the point of that? 04:27:13 Good question! 04:27:40 It was intended to circumvent this: apply f (x1:x2:xs) = apply (apply f [x1]) (x2:xs) 04:27:55 #eval (a x (1 2 3)) 04:27:55 -!- GregorR has joined. 04:27:55 (((x 1) 2) 3) 04:28:00 But that line sucks, so I've removed both. Creampuff. 04:28:01 -!- kerlobot has quit (Read error: 104 (Connection reset by peer)). 04:28:13 -!- kerlobot has joined. 04:28:18 #eval (1 2 3) 04:28:18 (1 2 3) 04:28:23 ugh, haskell 04:28:26 #eval (a x (1 2 3)) 04:28:26 (x 1 2 3) 04:28:30 tryin to be all elegant 'n shit 04:28:35 Now it's starting to look like cons, eh? 04:29:00 #eval (a (1 2 3) (4 5 6)) 04:29:01 ((1 2 3) 4 5 6) 04:30:14 #eval (f a () ((1 2 3) (4 5 6))) 04:30:15 ((1 2 3) f a () ((4 5 6))) 04:30:44 I'm sure something looked like a good idea at the time. 04:31:05 #eval (f a x ((1 2 3) (4 5 6))) 04:31:05 ((1 2 3) f a x ((4 5 6))) 04:31:07 Let me make it better. 04:31:32 #eval (f one two (1 2 3)) 04:31:32 (one 1 (f one two (2 3))) 04:31:59 Cream. 04:32:00 -!- kerlobot has quit (Read error: 104 (Connection reset by peer)). 04:32:06 -!- kerlobot has joined. 04:32:10 #eval (f one two (1 2 3)) 04:32:11 (one 1 (one 2 (one 3 two))) 04:32:17 #eval (f a x ((1 2 3) (4 5 6))) 04:32:18 ((1 2 3) a (4 5 6) x) 04:32:21 ... 04:32:27 Strange. 04:32:35 #eval (f a () ((1 2 3) (4 5 6))) 04:32:36 ((1 2 3) (4 5 6)) 04:32:41 Less strange. 04:32:57 #eval (f one two ((1 2 3) (4 5 6))) 04:32:57 (one (1 2 3) (one (4 5 6) two)) 04:33:22 #eval (f (a x) () ((1 2 3) (4 5 6))) 04:33:22 ((a x) (1 2 3) ((a x) (4 5 6) ())) 04:33:45 #eval (f (a x ()) () ((1 2 3) (4 5 6))) 04:33:45 ((a x ()) (1 2 3) ((a x ()) (4 5 6) ())) 04:34:18 it should re-evaluate it until it can't any more 04:34:32 #eval ((a x ()) (1 2 3) ((a x ()) (4 5 6) ())) 04:34:32 ((x) (1 2 3) ((a x ()) (4 5 6) ())) 04:34:38 Yeah, that's broken. 04:35:16 Puff. 04:35:16 -!- kerlobot has quit (Read error: 104 (Connection reset by peer)). 04:35:22 -!- kerlobot has joined. 04:35:29 #eval (f (a x) () ((1 2 3) (4 5 6))) 04:35:30 ((a x) (1 2 3) ((a x) (4 5 6) ())) 04:35:39 #eval (f (a x ()) () ((1 2 3) (4 5 6))) 04:35:39 ((x) (1 2 3) ((x) (4 5 6) ())) 04:35:57 doesn't seem to recognize (a x) as a partial application of a 04:36:07 Nope. 04:38:37 #eval (f (l z (a x z)) () ((1 2 3) (4 5 6))) 04:38:38 ([l z (a x z)] (1 2 3) ([l z (a x z)] (4 5 6) ())) 04:39:01 * kerlo ponders how a head or tail function might be made 04:39:47 A variable-argument lambda would be very nice. 04:40:02 #eval (f (l a (l b a)) (1 2 3) (4 5 6)) 04:40:03 ([l a (l b a)] 4 ([l a (l b a)] 5 ([l a (l b a)] 6 (1 2 3)))) 04:40:10 A bit difficult, though. 04:40:28 #eval (f (l x (l y (a x y))) (1 2 3) (4 5 6)) 04:40:29 ([l x (l y (a x y))] 4 ([l x (l y (a x y))] 5 ([l x (l y (a x y))] 6 (1 2 3)))) 04:40:55 #eval (1 2 3] 04:40:55 (1 2 3) 04:41:09 Closing brackets don't seem to matter. 04:41:10 why doesn't that work? --^ 04:41:26 #eval ([l x (l y (a x y))] 4 ([l x (l y (a x y))] 5 ([l x (l y (a x y))] 6 (1 2 3)))) 04:41:26 ([l x (l y (a x y))] 4 ([l x (l y (a x y))] 5 ([l x (l y (a x y))] 6 (1 2 3)))) 04:41:39 Wait a bit, let me write the new lambdas. 04:41:41 #eval ((l x (l y (a x y))) 4 ((l x (l y (a x y))) 5 ((l x (l y (a x y))) 6 (1 2 3)))) 04:41:41 ([l x (l y (a x y))] 4 ((l x (l y (a x y))) 5 ((l x (l y (a x y))) 6 (1 2 3)))) 04:44:26 #eval ((l x 1) 3) 04:44:26 1 04:44:42 #eval ((l x (l y x)) 3 4) 04:44:43 ([l x (l y x)] 3 4) 04:44:50 #eval (((l x (l y x)) 3) 4) 04:44:50 -!- kerlobot has quit (Read error: 104 (Connection reset by peer)). 04:45:09 :P 04:51:01 -!- kerlobot has joined. 04:51:13 #eval (((l x (l y x)) 3) 4) 04:51:13 (((l x (l y x)) 3) 4) 04:51:22 #eval ((l x (l y x)) 3 4) 04:51:23 ((l x (l y x)) 3 4) 04:51:25 ... 04:51:32 #eval ((l (x y z) (they are x y z z y)) 1 2 3) 04:51:33 (they are 1 2 3 3 2) 04:52:40 #eval ((l (x) (l (y) x)) 3 4) 04:52:41 ([l (x) (l (y) x)] 3 4) 04:52:50 #eval (((l (x) (l (y) x)) 3) 4) 04:52:50 3 04:52:54 -!- puzzlet has quit (Remote closed the connection). 04:53:02 -!- puzzlet has joined. 04:53:27 #eval (((l (x) (l (x) x)) 3) 4) 04:53:28 4 04:54:52 #eval ((l (left right) (f a right left)) (1 2 3) (4 5 6)) 04:54:53 (1 2 3 4 5 6) 04:54:56 woot 04:55:53 #eval (e 1 2 3 4) 04:55:53 4 04:56:02 #eval (e 1 2 3 4 5) 04:56:02 (e 1 2 3 4 5) 04:57:34 #eval (f (l (x y) x) (1 2 3)) 04:57:35 (f (l (x y) x) (1 2 3)) 04:57:42 #eval (f (l (x y) x) r (1 2 3)) 04:57:42 1 04:57:51 #eval (f (l (x y) x) x (1 2 3)) 04:57:52 1 04:58:04 #eval (f (l (x y) x) x (this is a list)) 04:58:05 this 04:58:15 Congratulations, you've implemented head. 04:59:02 #temp ((lambda (l) input) (f (l (x y) x) (error: empty list) l)) 04:59:06 #eval (head (1 2 3)) 04:59:06 ((lambda (l) (head (1 2 3))) (f (l (x y) x) (error: empty list) l)) 04:59:10 Darn. 04:59:21 #reset 05:00:47 #temp ((lambda (head) input) (f (l (x y) x) (error: empty list) l)) 05:00:51 #eval (head (1 2 3)) 05:00:51 ((lambda (head) (head (1 2 3))) (f (l (x y) x) (error: empty list) l)) 05:01:02 :P 05:01:10 Why isn't that evaluating... 05:01:25 lambda? 05:01:30 D'oh. 05:01:34 #reset 05:01:43 #temp ((l (head) input) (f (l (x y) x) (error: empty list) l)) 05:01:47 #eval (head (1 2 3)) 05:01:47 ((f (l (x y) x) (error: empty list) l) (1 2 3)) 05:02:10 a little better 05:02:15 True. 05:02:42 #reset 05:03:14 #temp ((l (head) input) (lambda (list) (f (l (x y) x) (error: empty list) list))) 05:03:21 #eval (head (1 2 3)) 05:03:21 ((lambda (list) (f (l (x y) x) (error: empty list) list)) (1 2 3)) 05:03:48 #reset 05:03:55 #temp ((l (head) input) (l (list) (f (l (x y) x) (error: empty list) list))) 05:03:57 #eval (head (1 2 3)) 05:03:58 1 05:04:00 Finally. 05:04:08 #eval (head ()) 05:04:09 (error: empty ()) 05:04:21 Oh, that's silly. 05:04:27 #reset 05:04:40 #temp ((l (head) input) (l (ls) (f (l (x y) x) (error: empty list) ls))) 05:04:44 #eval (head ()) 05:04:45 (error: empty list) 05:04:57 #eval input 05:04:57 input 05:05:30 #eval (error: empty head) 05:05:30 (error: empty (l (ls) (f (l (x y) x) (error: empty list) ls))) 05:06:42 #eval s 05:06:42 -!- kerlobot has quit (Remote closed the connection). 05:06:48 ... 05:07:10 Hum. 05:07:16 -!- kerlobot has joined. 05:07:19 #eval s 05:07:20 -!- kerlobot has quit (Remote closed the connection). 05:07:32 Right, the definition of s is now broken. 05:07:57 -!- kerlobot has joined. 05:08:00 #eval 05:08:05 #eval s 05:08:06 [l (x) (l (y) (l (z) ((x z) (y z))))] 05:08:13 That's the new definition of s. 05:08:37 #eval (s x y z) 05:08:37 ([l (x) (l (y) (l (z) ((x z) (y z))))] x y z) 05:08:55 #eval (((s x) y) z) 05:08:55 ((x z) (y z)) 05:09:31 #temp ((l (s) input) lol) 05:09:36 #eval (((s x) y) z) 05:09:36 (((lol x) y) z) 05:09:41 #reset 05:09:47 #eval k 05:09:48 [l (x) (l (y) x)] 05:10:26 #eval (((l (x y) x) 1) 2) 05:10:26 (([l (x y) x] 1) 2) 05:10:33 #eval ((l (x y) x) 1 2) 05:10:33 1 05:10:45 no partial application 05:11:00 Correct. 05:11:00 of multi-var lambdas 05:11:27 #eval i 05:11:28 [l (x) x] 05:11:28 It's like Haskell, I guess. You have to explicitly uncurry them. 05:11:45 Explicitly curry them, rather. 05:12:02 It's just that Haskell pretty much uses curry by default. 05:13:18 #eval (a i (1 2 3)) 05:13:19 ([l (x) x] 1 2 3) 05:14:31 Fun fact: a evaluates its first argument. 05:15:51 I should sleep... 05:17:17 yesterday: «07:43:59» {MizardX} shower and breakfast 05:17:30 now: «06:17:16» 06:07:17 -!- metazilla has joined. 06:30:08 -!- moozilla has quit (Connection timed out). 06:41:08 -!- moozilla has joined. 06:54:16 -!- metazilla has quit (Connection timed out). 07:43:16 -!- moozilla has quit (K-lined). 07:56:01 -!- Corun has quit ("This computer has gone to sleep"). 07:59:59 -!- clog has quit (ended). 08:00:00 -!- clog has joined. 08:56:58 -!- puzzlet_ has joined. 08:57:46 -!- puzzlet has quit (Remote closed the connection). 09:29:03 huh, not a single spam message since yesterday? How strange, usually there are around 10-20 new spams after a night. 09:51:30 -!- oklopol has quit (Read error: 104 (Connection reset by peer)). 10:21:01 -!- FireFly has joined. 10:35:32 -!- MigoMipo has joined. 10:41:27 -!- FireFly has quit ("Later"). 10:52:58 -!- oklopol has joined. 10:53:34 -!- BeholdMyGlory has joined. 11:16:38 -!- Judofyr has joined. 11:21:56 -!- BeholdMyGlory has quit (Read error: 104 (Connection reset by peer)). 11:32:08 -!- KingOfKarlsruhe has joined. 12:14:11 -!- Mony has joined. 12:15:45 -!- Judofyr has quit (Read error: 110 (Connection timed out)). 12:49:30 -!- sebbu2 has quit (No route to host). 13:04:56 -!- sebbu has joined. 13:16:21 -!- Judofyr has joined. 13:44:22 -!- ehird has left (?). 13:44:24 -!- ehird has joined. 13:46:52 -!- MigoMipo has quit (Read error: 110 (Connection timed out)). 13:47:57 -!- MigoMipo has joined. 13:49:23 -!- Corun has joined. 14:11:49 -!- BeholdMyGlory has joined. 14:12:32 optimising scheme is hard, you can't even constant-fold (+ 1 1) because you can redefine + at any point 14:12:44 including e.g. EVAL on user input 14:15:06 you can constant-fold it, and have a global trigger system, attaching a lambda to unfold the constant when + is changed 14:15:28 essentially just a hack to get over the theoretical possibility of being fucked in the ass by a smart-ass user. 14:15:33 oklopol: that's not much of an optimization :-P 14:15:50 ehird: why not? you get the same speed as with just constant folding 14:15:57 oklopol: 14:16:00 you just need to do a few more lookups when defining functions 14:16:02 (define old+ +) 14:16:07 (set! + (lambda (a b) 0)) 14:16:11 [stuff] 14:16:11 (set! + old+) 14:16:26 then it does exactly the same as constant-folded, but slowly 14:16:29 and that's not very consistent 14:17:22 err. 14:18:35 i'm not sure what you mean 14:18:48 :D 14:18:56 http://www.schemers.org/Documents/Standards/R5RS/HTML/r5rs-Z-H-9.html#%_sec_6.4 <-- god, scroll down to dynamic-wind 14:18:59 that shit is crazy 14:21:14 there isn't a subchapter on it, i would have to read the surrounding of the term 14:21:27 i've read that, so err what's its point? 14:21:53 * oklopol is too lazy to read more than absolutely necessary :< 14:22:03 maybe because i read about 10 hours yesterday 14:22:31 oklopol: it lets you detect call/cc, pretty much 14:22:40 i.e., if we call/cc out of the thunk thing, we call the after thing first 14:22:46 kind of 14:24:09 oh i remember. weird ordering shit and thunk stuff. 14:24:26 my brain is kinda mush atm :< 14:24:44 oklopol: basically i'm thinking about writing a super-mega-fast scheme implementation 14:25:01 and things like dynamic-wind piss me off because they throw my whole model around :< 14:25:57 ehird: well, the gist of compiling uncompilable things is to make the frequent case fast, that is, assume things happen the normal way and do somekinda hack around the fact they might not. this is a trivial idea of course, just that you might not want to do that because it's not fun to implement. 14:26:12 oklopol: not schemey though is it 14:26:25 ehird: well it's more schemey than say befungey. 14:26:29 schemey would be finding a fast way to implement everything without any special cases 14:26:41 in scheme you rarely, for instance, swap the meaning of + all the time for no reason. 14:26:42 -!- MigoMipo has quit ("QuitIRCException: MigoMipo out of IRC"). 14:26:50 ehird: well i'm not talking about dynamic-wind 14:26:53 i know 14:26:53 you should make that fast 14:27:04 i'm talking about the weirder stuff. 14:27:04 just, i mean, i don't like the idea of having your program being slower or whatever just because you used one particular featur 14:27:05 e 14:27:22 it feels like someone saying, you know, "don't do this", but it's part of scheme, and you should be able to do it and stay as fast 14:27:51 well of course not, i just don't think redefining on the fly is really a feature; dynamic-wind i have a hard time commenting, because i'd have to think about it first :P 14:27:55 oklopol: you have to understand that i'm going for crazy-ass speed 14:28:12 like, first interpreter, I'm gonna aim for like 5-6x slower than c, or so 14:28:16 i mean, that's really fast for an interpreter 14:28:27 then I think I'll make it a compiler/jit and write it totally in scheme and stuff 14:28:34 and I want to eventually get it ~2x slower than c 14:28:42 which will be awesome because I'll never have to write c again. 14:28:49 ehird: i'll assume you're compiling a recursive fibonacci definition into a closed-form expression. 14:29:04 and something equally awesome for everything else too. 14:29:34 oh you're just going for c speed 14:29:35 oklopol: a goal for the compiler is to get the generated asm be as compact as hand-written :DD 14:29:46 well, c is pretty fast :D 14:29:47 i was thinking like faster than assembly. 14:29:53 faster than theoretically possible 14:29:58 lol 14:30:01 i don't want to underestimate you see. 14:30:12 well it could be faster than c 14:30:22 because, I mean, it's compiling to machine code, pretty much 14:30:33 so you could probably write a program faster than the equivalent in c 14:30:49 so have you read computer architecture - a quantitative approach? 14:31:05 i'll just assume you have 14:31:14 so what's the first chapter's idea 14:31:15 i mean 14:31:26 50 pages of fucking random charts about speeds of random processors and shit 14:31:48 oklopol: i haven't, but 14:31:48 before getting to scheduling algorithms and other *content* 14:31:49 that sounds awesome 14:32:13 I'll have you guys know 14:32:20 That I just copied a bit of your conversation 14:32:23 In to another conversation 14:32:25 i mean i understand they want to include statistics and history and shit so people feel like they're reading about something that has practical significance. 14:32:32 To show an example usage of the word lol 14:32:37 Congratulations 14:32:40 You're THE INTERNET. 14:32:59 but what about us weirdos who can't skip the reading of the useless parts :| 14:33:18 Corun: ooh, which part 14:34:28 The bit with the lol in... 14:34:33 i was thinking like faster than assembly. 14:34:33 faster than theoretically possible 14:34:33 lol 14:34:33 i don't want to underestimate you see. 14:34:46 :D 14:35:13 -!- ais523 has joined. 14:35:21 hi ais523 14:35:31 hi oklopol 14:35:36 i had something to say to you at some point. just fyi, i already forgot what :P 14:35:39 wow, I'm so busy in RL 14:35:45 that explains why I'm here on Sunday 14:35:45 me too. kinda. 14:35:52 lol 14:36:06 ehird: me in #esoteric = me online 14:36:18 maybe I could optimize scheme by requiring a Proof of Fastness, which is the same program written in assembly 14:36:21 and it just uses that assembly 14:36:30 so there's more chance of me being here when busy, than there is of me being here when not busy 14:36:41 ehird: it would have to prove the two programs were equivalent, or there's be no point 14:36:55 -!- Corun has quit ("This computer has gone to sleep"). 14:36:58 no 14:37:05 if you want to mislead people, that's OK 14:37:14 it won't try and force its philosophy on you. 14:37:19 undefined behaviour if the two programs are different? 14:37:28 that way, it is in fact implementing the Scheme 14:38:06 -!- Judofyr has quit (Read error: 110 (Connection timed out)). 14:38:16 hello ais523 14:38:21 hi 14:38:51 ais523: yes, exactly! 14:39:19 this is annoying, my mouse wheel seems confused 14:39:19 ...hey 14:39:25 so have you read computer architecture - a quantitative approach? 14:39:27 when I turn it downwards, it sometimes scrolls upwards, and vice versa 14:39:28 oklopol: no 14:39:29 ehird, that means you end up having to write asm instead of C 14:39:34 that is like, even worse 14:39:37 ais523: oh. you could have, maybe. 14:39:45 AnMaster: meh, just write C that's the same as the Scheme, and compile it into asm 14:39:52 when I turn it downwards, it sometimes scrolls upwards, and vice versa <-- that happened to be once 14:39:55 or, fwiw, write INTERCAL that's the same as the Scheme, and compile /that/ into asm 14:40:04 IRC client extension idea: detects when you make a joke and ignores AnMaster for 5 minutes so you don't have to hear it flying over his head. 14:40:09 ais523, what worked was taking the several old mouse apart, and cleaning it 14:40:16 Wouldn't that be great? 14:40:20 this one seems to be impossible to take apart 14:40:32 I agree it probably needs cleaning, but there's no obvious method for it 14:40:40 ais523, look under any stickers or such 14:41:06 there's one screw on the bottom of the mouse 14:41:24 but it has a big feel of "THIS IS AN OPTICAL MOUSE SO YOU DON'T NEED TO CLEAN IT SO WE AREN'T EVEN GOING TO LET YOU CLEAN IT, OK?" 14:41:50 ais523, if it has some kind of "pads" in the corners the screws are probably hidden under them 14:41:56 note that they can be hard to reattach 14:42:31 * ehird has a mouse that's like an optical mouse, except it doesn't suck and works on just about every surface. Also, no light on the bottom. 14:42:40 the corner pads fell off on my mouse before this one, and there wasn't anything underneath them 14:42:40 ais523, MS dumbm^Wintellimouse? 14:42:40 (The comedy option you're about to pick isn't correct.) 14:42:46 AnMaster: no, this one's by Toshiba 14:42:50 hm ok 14:43:05 I have an intellitrackball at home, I think 14:43:11 ais523, on ms mice they tend to be hidden under those corner pads 14:43:16 we got it for the desktop computer when mice kept falling off the table 14:43:22 but that one is cleanable, and I have to clean it lots 14:43:37 oh? 14:43:45 well I want a simple to clean mouse 14:43:49 preferably washable 14:44:07 same for keyboard 14:44:25 it's pretty hard to get decent mice nowadays 14:44:36 the retailer I bought this one from has since gone bankrupt 14:44:38 ais523, well yes, and hard to get large enough ones 14:44:54 that's not so much of a problem for me, I'm OK with small mice 14:45:03 ms mice actually tend to be the only ones that work for me when it comes to size 14:45:08 and even then only barely 14:45:31 things are too big for me. 14:45:45 i don't use certain features of programs because hte keyboard shortcuts are too hard for me to hit. 14:45:47 bbl food 14:45:47 because i have tiny hands. 14:45:54 ehird: so you mean it's *not* a bit clown nose? 14:46:07 also, it's hard to hold a mouse correctly when it's bigger than your hand 14:46:12 ehird: get a smaller keyboard? 14:46:14 oklopol: haha 14:46:17 ais523: this one _is_ small 14:46:39 oh dear. that joke was so oerjan. 14:46:50 ehird: you can always get a smaller one 14:46:53 i seriously think i'm slowly oerjanizing. 14:46:58 there must be some way to use an Eee PC as a keyboard, for instance 14:47:04 ais523: unlikely, in this case 14:47:13 and no way am I paying that much for a keyboard 14:47:14 also 14:47:19 the eee pc keyboard isn't much smaller than this i think 14:48:19 can't find any measurements of this kb on the internetwebs unfortunately 14:49:36 ehird: you can measure it with a ruler easily enough 14:49:42 if it's physically there in front of you 14:49:46 and if it isn't, how are you typing? 14:49:48 well, yeah, but that's _cheating_ 14:51:10 * ehird compiles an in-head list of things R5RS Scheme is missing to be able to write programs in 14:51:18 (it's surprisingly short, 5-6 or so elements) 14:51:47 could you add them to it easily? 14:52:31 Quite easily. Some are easier than others. 14:52:42 I don't think any of them break backwards compatibility, either. 14:53:05 (i.e., they don't change the semantics of any R5RS-correct programs, just define some R5RS-incorrect programs to be extended-R5RS-correct) 14:53:43 ais523: i'm going to write a Scheme implementation you see 14:53:50 in what? 14:53:55 to start with, C 14:54:01 Scheme's good for writing Scheme impls, but you have a chicken-and-egg problem there 14:54:03 then, for the next version, Scheme 14:54:07 ais523: what I 14:54:12 'm going to do is: 14:54:15 first version - interpreter 14:54:23 second version - compiler & JIT 14:54:31 one of my main goals for both is to be stinking fast 14:54:39 the first version I'm aiming for something like 5x slower than c 14:54:47 second version? hopefully, competitive with C 14:54:56 5x slower, in an /interpreter/? 14:54:58 good luck 14:55:03 ais523: ok, that was an exaggeration :-) 14:55:12 i meant like 10x, I was just being hopeful 14:55:22 i'm pretty sure 10x would be possible. 14:55:53 ais523: but indeed, chicken and the egg for version 2 14:56:02 one solution is to keep maintaining version 1 alongside it 14:56:05 so you can run version 2 14:56:13 but that kind of defeats the point of rewriting it in scheme 14:56:43 i don't like ghc's solution of "compile with the previous version, then just hold on tight to that binary" 14:56:46 it's fragile 14:56:47 -!- ais523 has quit (Client Quit). 14:56:55 bye. 14:56:57 -!- ais523 has joined. 14:56:59 wb. 14:57:03 ehird, hm when version 2 can bootstrap itself... 14:57:04 what did you miss? 14:57:10 AnMaster: how? 14:57:16 You need to run it initially. 14:57:22 ehird: how should I know what I missed? 14:57:26 one solution is to keep maintaining version 1 alongside it 14:57:30 ehird, you said compiler/jit? 14:57:30 is the last thing I didn't miss 14:57:34 14:56 so you can run version 2 14:57:34 14:56 but that kind of defeats the point of rewriting it in scheme 14:57:35 14:56 i don't like ghc's solution of "compile with the previous version, then just hold on tight to that binary" 14:57:38 14:56 it's fragile 14:57:40 AnMaster: yes, written in Scheme. 14:57:40 ehird, true 14:57:50 and it will likely use its own extensions. 14:57:53 so you need it to compile it. 14:57:55 ehird: it isn't fragile if you hang on to past binaries 14:58:01 yeah, it is 14:58:04 you shouldn't rely on a binary like that 14:58:07 it's too closed up 14:58:13 ehird: CLC-INTERCAL works like that 14:58:14 ehird, so well what about "statically compile if the code uses this subset" or something 14:58:21 ais523: it's CLC-INTERCAL. 14:58:22 instead of jit 14:58:24 and besides, it isn't closed up, you have the source and can regenerate it from the binary 14:58:31 AnMaster: sorry, I can only answer coherent questions 14:58:46 ehird, fair point 14:59:01 if you rephrase that coherently I'll answer :p 14:59:06 ehird, basically: will it jit or be able to compile stand alone binaries? 14:59:10 both 14:59:17 right 14:59:32 ehird, what about compiling to C as a different backend? 14:59:42 chicken and the egg 14:59:42 that would solve the issue 14:59:45 how do you run it to compile it to C? 15:00:04 ehird, well you boot strap it, in the future you can use the C source to compile it 15:00:07 AnMaster: that is the ghc solution for porting 15:00:22 but the resulting C program is more or less illegible, despite being portable 15:00:35 AnMaster: I dislike that solution 15:00:38 ais523, interesting, but wouldn't you need more for porting ghc, like adding asm output backend 15:00:44 because you don't have a way to get it going just from itself 15:00:49 you need to hang on to the one compilation 15:00:53 ghc compiles via C--, IIRC 15:01:04 so yes, you'd need a new C-- to asm backend 15:01:08 ehird, wasn't the original lisp hand compiled? 15:01:08 so 15:01:17 AnMaster: Yes. The original lisp was also trivially useless. 15:01:44 ehird, so maintain an interpreter that is portable 15:01:46 like gcc does 15:01:49 multiple stages 15:01:56 AnMaster: 15:01:57 14:56 one solution is to keep maintaining version 1 alongside it 15:01:58 14:56 so you can run version 2 15:02:00 14:56 but that kind of defeats the point of rewriting it in scheme 15:02:06 I love it when I can just copy and paste past messages to answer people. 15:02:16 actually, compiling gcc on a really old compiler needs a multi-stage bootstrap nowadays 15:02:18 ehird, well not exactly. Since version 1 could be written in portable scheme? 15:02:20 via older versions of gcc 15:02:35 AnMaster: now ehird will tell you there's no such thing as portable scheme 15:02:36 ais523, I'm pretty sure you can use a non-gcc for stage1? 15:02:43 AnMaster: no, it couldn't, because that's like raping myself. 15:02:43 -!- kerlobot has quit (Read error: 104 (Connection reset by peer)). 15:02:44 AnMaster: you can, but only if it's relatively modern 15:03:04 ais523, well C89 is ok to expect of course 15:03:07 -!- kerlobot has joined. 15:03:08 for instance, there are no compilers for DOS that can bootstrap DJGPP 15:03:18 ais523, you could cross compile it 15:03:21 #what 15:03:22 the only way to get a workign DJGPP impl starting from something else is to cross-compile 15:03:22 input 15:04:32 ais523, shouldn't a standard following C89 compiler be enough for gcc stage1? 15:04:44 I don't think so 15:04:45 well yes you need make, sh and so on 15:04:50 for instance, I'm pretty sure it also needs a 32-bit int 15:05:02 which is not a requirement of a C89 compiler 15:05:08 interesting 15:08:39 #eval ((l (x y) (f a y x)) (1 2 3) (4 5 6)) 15:08:39 (1 2 3 4 5 6) 15:08:47 #help 15:08:54 kerlo: what does your bot do? 15:09:03 It evaluates this Lisp-like language. 15:09:23 The most important command is #eval, obviously. 15:09:28 lisp with different primitives 15:09:30 ? 15:09:34 I guess. 15:09:38 kerlo, specs for this lisp-like language? 15:09:51 -!- Mony has quit ("Quit"). 15:10:06 Let me pastebin the source code and also demonstrate a bit. 15:10:34 since when is specs == source code 15:10:37 http://pastebin.ca/1311618 15:10:41 Since forever! 15:11:04 brb phone 15:11:35 The primitives are l (lambda), f (foldr), e (equality testing), and a (cons or apply); the familiar s, k and i are also implemented, but are not primitives. 15:11:43 #eval ((s i) i) 15:11:43 [l (z) ((i z) (i z))] 15:12:14 #eval ((l (x y) (blah y x)) (2 3)) 15:12:15 ([l (x y) (blah y x)] (2 3)) 15:12:29 * kerlo blinks 15:12:46 #eval ((l (x y) (blah y x)) 2 3) 15:12:46 (blah 3 2) 15:12:59 #eval *Y&DSY*&%&5ˆ‹̄›†¢ˆ¢§ˆ¯ßˆ•þ‡̂†̄ ̑›†‡·°_‚·̀ 15:13:00 Syntax error 15:13:04 BREAK DAMN YOU 15:13:07 #eval (f raa ree (1 2 3)) 15:13:08 (raa 1 (raa 2 (raa 3 ree))) 15:13:14 since when is specs == source code 15:13:23 Since nobody cares about your need of specs to survive. 15:13:35 #eval (e 1 2 yes no) 15:13:36 And since we people started using expressive languages. 15:13:36 no 15:13:39 #eval (e 1 1 yes no) 15:13:39 yes 15:13:53 #eval (a 1 (2 3 4)) 15:13:53 (1 2 3 4) 15:14:00 And that's it. 15:14:19 Well, there are also the #temp, #reset, and #what commands. 15:16:47 Dear DYNAMIC-WIND, 15:16:51 Please remove yourself from R5RS. 15:16:52 Love, 15:16:53 Elliott. 15:17:27 #eval (((s i) i) ((s i) i)) 15:17:37 ais523: it doesn't guard that. 15:17:39 ah, ok 15:17:40 now kerlo will have to restart it 15:17:48 #eval INFINITE LOOPED 15:17:57 shouldn't be too hard to put an anti-infiniloop protection on... 15:17:57 -!- kerlobot has quit (Read error: 104 (Connection reset by peer)). 15:18:21 ais523: not at all. I'll send you the full source code so that you can do that. :-P 15:18:25 -!- kerlobot has joined. 15:18:43 kerlo: just; 15:18:50 have an extra argument to the reduce-stepper 15:18:57 put it at 1000 initially, and decrement it every time you recurse 15:19:02 when it gets to 0, return a special atom like 15:19:05 Oh, that does sound easy. 15:19:10 !looped! 15:19:36 what about output length? 15:19:44 they're symbols. 15:19:50 you can't concatenate them. 15:19:58 it can evaluate to a list, yes. 15:19:58 ehird, I mean, could you cause excess flood 15:20:05 since it outputs on one line, no,. 15:20:09 hm ok 15:20:30 you could still cause filled buffer I believe before it is split in lines 15:20:33 #eval (f (lambda (x y) (f a (y) x)) () (one two three)) 15:20:33 ((lambda (x y) (f a (y) x)) one ((lambda (x y) (f a (y) x)) two ((lambda (x y) (f a (y) x)) three ()))) 15:20:36 not sure about that 15:20:39 it isn't split into lines 15:20:42 also, nobody cares 15:20:43 #eval ((l (x) (f a x x)) (y)) 15:20:43 (y y) 15:21:04 ehird, yes but if you send 1 MB in one line the server is going to quit you anyway I think 15:21:10 at least some ircds do that 15:21:12 nobody caresnobody caresnobody caresnobody caresnobody caresnobody caresnobody caresnobody caresnobody caresnobody caresnobody caresnobody caresnobody caresnobody cares 15:21:39 #eval ((l (y z) (y (y (y (y (y z))))) (l (x) (f a x x)) (y)) 15:21:39 Syntax error 15:21:42 #eval (l (f) ((l (x) (f (x x))) (l (x) (f (x x))))) 15:21:42 [l (f) ((l (x) (f (x x))) (l (x) (f (x x))))] 15:21:48 ^ y 15:21:53 #eval (f (l (x y) (f a (y) x)) () (one two three)) 15:21:53 (f a ((f a ((f a (()) three)) two)) one) 15:21:56 #eval ((l (y z) (y (y (y (y (y z)))))) (l (x) (f a x x)) (y)) 15:21:57 ([l (x) (f a x x)] ([l (x) (f a x x)] (f a [l (x) (f a x x)] [l (x) (f a x x)]) [l (x) (f a x x)] ([l (x) (f a x x)]) f a [l (x) (f a x x)] [l (x) (f a x x)]) [l (x) (f a x x)] ([l (x) (f a x x)] ([l (x) (f a x x)]) f a [l (x) (f a x x)] [l (x) (f a x x)]) [l (x) (f a x x)] (f a [l (x) (f a x x)] [l (x) (f a x x)]) [l (x) (f a x x)] ([l (x) (f a x x)]) f a [l (x) (f a x x)] [l (x) (f a x x)]) 15:22:14 ais523: oi, use my y 15:22:21 -!- Judofyr has joined. 15:22:36 #eval ((l (y z) (y (y (y (y (y z)))))) (l (x) (f a x x)) (l (f) ((l (x) (f (x x))) (l (x) (f (x x)))))) 15:22:36 ([l (x) (f a x x)] ([l (x) (f a x x)] (l (f) a ((l (x) (f (x x))) (l (x) (f (x x)))) [l (f) ((l (x) (f (x x))) (l (x) (f (x x))))]) [l (x) (f a x x)] [l (f) ((l (x) (f (x x))) (l (x) (f (x x))))] l (f) a ((l (x) (f (x x))) (l (x) (f (x x)))) [l (f) ((l (x) (f (x x))) (l (x) (f (x x))))]) [l (x) (f a x x)] ([l (x) (f a x x)] [l (f) ((l (x) (f (x x))) (l (x) (f (x x))))] l (f) a ((l (x) (f (x x))) (l (x) (f (x x)))) [l (f) ((l (x) 15:22:39 hm 15:22:42 #eval ((l (y z) (y (y (y (y (y z)))))) (l (x) (f a x x)) (q)) 15:22:43 ([l (x) (f a x x)] ([l (x) (f a x x)] (q q) [l (x) (f a x x)] (q) q q) [l (x) (f a x x)] ([l (x) (f a x x)] (q) q q) [l (x) (f a x x)] (q q) [l (x) (f a x x)] (q) q q) 15:22:50 ok, that seems to be a bug 15:22:53 #eval (l (f) ((l (x) (f (x x))) (l (x) (f (x x))))) 15:22:54 [l (f) ((l (x) (f (x x))) (l (x) (f (x x))))] 15:22:55 lambdas don't seem to be scoping properly 15:22:57 ais523333333333333333333333333333333333333333333 15:23:08 ais523: it doesn't do renaming 15:23:09 iirc 15:23:10 #eval (f (l (x y) (f a (x) y)) () (one two three)) 15:23:10 (three two one) 15:23:24 then how can I do recursion properly? 15:23:30 ais523: congratulations, you've discovered the lambda bug. 15:23:43 -!- MigoMipo has joined. 15:23:51 well, if it's a known bug, that's OK 15:23:51 too many bloody (non-indented) parentheses for me to read 15:24:05 makes it pretty hard to program in, though 15:24:08 ais523, would this bug make the language sub-tc? 15:24:24 no idea 15:24:24 Translate your program into SKI and see if it works. 15:24:28 probably not, if SKI works 15:24:31 ah 15:25:24 You might be able to circumvent it by using [l ...] instead of (l ...). 15:25:58 what do the square brackets mean? 15:27:03 The problem with writing a program in Scheme is that you have to write the implementation first. 15:27:19 ehird, or use an existing implementation 15:27:24 No. 15:27:28 That does not work correctly. 15:27:33 why not? 15:27:49 ais523: it's special syntax for a Lambda instead of a List evaluating to a Lambda. 15:28:03 AnMaster: I'd tell you, but that would take hours because it's you 15:28:10 AnMaster: ehird seems to think that various langs, like Scheme and Smalltalk, are inherently incapable of being portable 15:28:12 The insert function, which lambdas use for substitution, doesn't affect Lambdas as badly as Lists. 15:28:16 ais523: no, I don't. 15:28:26 ais523, well good thing there is R6RS then :D 15:28:28 * AnMaster ducks 15:29:13 and FWIW I'm incredibly tired of the "AnMaster says something stupid, ais523 replies saying something untrue in the format 'oh ehird thinks this and that' in a condescending manner" pattern that happens near-daily in here 15:29:15 ais523, and well, if you want non-basic stuff then R5RS is a pain. 15:30:55 at least C has a large enough standard library to make it possible to write kind of portable apps that are still quite useful 15:31:21 -!- ais523 has quit (Read error: 104 (Connection reset by peer)). 15:31:26 -!- ais523 has joined. 15:31:43 ais523, and well, if you want non-basic stuff then R5RS is a pain. 15:32:00 someone should invent a PSOX but for non-esoteric langs 15:32:06 hah 15:32:07 ais523: No. They shouldn't. 15:32:23 ehird: I had to use the equivalent of C's system() a couple of times when programming in Prolog 15:32:37 in order to do things that weren't included in its stdlib 15:32:42 What does system() do? 15:32:52 man system 15:32:56 kerlo: causes the implementation to behave in an implementation-defined manner 15:33:00 but in practice, normally runs shell commands 15:33:11 Ah, right. 15:33:47 system() probably has my favourite definition of any of C's standard library functions 15:33:58 actulaly, system(NULL) is defined 15:34:08 its return value tells you whether system() does anything or nt 15:34:09 *not 15:34:15 it doesn't tell you what, though, in the case where it doesn't 15:34:23 *the case where it does 15:34:26 s/n't$// 15:34:27 heh 15:34:28 s/n't$// 15:34:33 fail 15:34:40 ehird, argh you were half a second faster 15:34:47 no, multiple seconds 15:34:51 ehird, not here 15:34:52 ehird: lag 15:34:57 lag is for squares 15:35:04 it was more like about 1 second from where I was watching 15:35:07 from 15:35:34 I wonder if bitshifting pointers is allowed by C89. 15:35:44 you have to cast them to ints first 15:35:47 ehird, is it in C99? 15:35:53 AnMaster: I don't care. 15:35:56 it works better in C99 because you have uintptr_t to cast them to 15:35:57 ais523, that is undefined isn't it? casting them to int? 15:35:58 ais523: Can you cast those ints back? 15:36:03 AnMaster: no, implementation-defined 15:36:13 ehird: yes in C99, no in C89 because there might not be an integer type big enough 15:36:19 ais523, also uintptr_t makes no sense if function pointers have a different size 15:36:23 well, in C99 there might not be one either, but it at least gives you a compile-time error 15:36:30 AnMaster: yes, it's designed for data pointers 15:36:32 ais523: I don't care about stupid languages where sizeof(int) != sizeof(void *). 15:36:40 ehird, like amd64? 15:36:41 ehird: umm... 15:36:45 er 15:36:48 s/languages/architechtures/ 15:36:50 lots of C implementations have sizeof(int) != sizeof(void *) 15:36:53 AnMaster: amd64 is for squares. 15:36:58 ais523: those implementations are for squares. 15:37:04 unsigned long has the best chance of being the same size as void* 15:37:08 ais523, indeed 15:37:13 although it differs on DOS in certain memory models 15:37:32 * ais523 remembers the days of things like farmalloc 15:37:40 farmalloc!? 15:37:45 It allocates a farm. 15:37:54 A farm is an old DOS concept. 15:38:01 Basically, you can store N objects in there, where N is the size of the farm. 15:38:05 AnMaster: it allocates memory in a different segment 15:38:07 ehird, isn't it related to struct cow? 15:38:08 It's efficient because they're grouped together in memory. 15:38:10 ais523: Right, a farm. 15:38:16 which means you need a special type of pointer, called a far pointer 15:38:25 ais523, I see. I used mac back then 15:38:29 :/ 15:38:39 there are lots of memory models 15:38:47 basically, 4 of them allow for near/far pointers for data/code 15:39:01 and a 5th has far pointers for data and for code, but also makes the data segment and stack segment differ 15:39:10 ais523, so pointers come in several sizes? and some of these are relative current area? 15:39:15 AnMaster: yes 15:39:22 char __near * is 16 bits 15:39:25 char __far * is 32 bits 15:39:37 interesting 15:39:42 and if you don't put the unportable qualifier on, it uses implementation defaults 15:39:56 (which is legal C89, but with different sizeof() returns, in all 5 memory models) 15:40:11 malloc gave you a data pointer 15:40:16 wtf is the "unportable qualifier"? 15:40:21 AnMaster: __near or __far 15:40:23 ah 15:40:27 are qualifiers, but obviously not portable ones 15:40:34 ais523, I thought there was something like __unportable 15:40:36 that you meant 15:40:40 no, that would be ridiculous 15:40:44 agreed 15:40:49 haha 15:40:53 that would be awesome 15:41:08 17:40… WolfMn22: are you there 15:41:08 17:40… WolfMn22: are you there 15:41:08 17:40… WolfMn22: young beautiful woman 15:41:14 * oklopol has a fan 15:41:15 there should be __portable too of course 15:41:18 IIRC, most DOS compilers worked without the double-underscore, except in strict ANSI mode 15:41:21 a GCC extension 15:41:30 that forbids other GCC extensions :D 15:41:43 (yes -ansi already does it...) 15:41:49 AnMaster: well, nowadays in C99 we have _Pragma 15:42:03 which is basically __attribute__ with a more official name 15:42:06 ais523, well GCC actually have __extension__ iirc, for use in system headers 15:42:15 IMO, gcc should accept it as a synonym for __attribute__ 15:42:16 and yes 15:42:17 ais523, also doesn't C89 have plain #pragma? 15:42:20 AnMaster: yes 15:42:30 _Pragma is just for using in macros iirc 15:42:31 but the gcc folks didn't like it because it couldn't be generated using macros 15:42:39 indeed 15:43:31 it's interesting to see what pragmas are used for, actually 15:43:47 ais523, oh also x86_64 has several memory models, I don't know what the point is of that though 15:43:50 my first C implementation was Borland C++, which I normally used in C++ mode because I didn't know better 15:44:01 it had pragmas to turn compiler warnings on and off 15:44:09 -mcmodel 15:44:14 and to run things before the program started, like atexit in reverse 15:44:32 it had pragmas to turn compiler warnings on and off <-- very recent GCC has pragmas, and attributes, for that too 15:44:39 and other compiler options 15:44:48 oh, and a pragma to change its command-line options dynamically, which was fun 15:44:49 like changing to -O3 for just a single function 15:44:54 yes 15:45:09 you should be able to change -Wl dynamically 15:45:16 so you can have different linker options for different functions 15:45:18 that would be hard 15:45:26 then watch the poor linker try to figure out wtf you're doing 15:45:44 um would require changing the object file format I think 15:45:54 I suppose so 15:45:56 "What's this? a JOKE?" 15:46:10 ehird: #esoteric is where we make jokes possible 15:46:11 -mcmodel=small, -mcmodel=kernel, -mcmodel=medium, -mcmodel=large 15:46:19 ais523: and kill them seconds later.. 15:46:22 even if something is clearly absurd, it's still fun to figure out how to do it 15:46:23 . 15:46:31 * AnMaster agrees with ais523 15:46:37 don't let not explaining a joke get in the way of a great esoprogramming idea 15:47:37 I'd like to think that [ um would require changing the object file format I think] was written with that intention, 15:47:41 grr... this VHDL IDE has frozen 15:47:42 but I find it incredibly difficult. 15:48:00 ehird: well, I was thinking about it as an actual serious idea 15:48:00 ehird, I was thinking about how to implement it yes 15:48:13 not really in terms of implementation, but about what could be done with such a feature if it existed 15:48:15 not all linker options could be changed that way 15:48:23 but some yes 15:48:24 in gcc-bf, for instance, you could run-length-encode certain functions 15:48:30 or cause only certain functions to show a progress bar 15:48:38 (more useful would be adding debug info only to certain functions) 15:48:55 ais523, there are already some __attribute__s that affect linking, like the visibility one 15:49:08 yes, so it isn't utterly implausible 15:49:30 --emit-relocs sounds like it could be done per-func too 15:49:32 * ais523 gets annoyed at DRM and licence managers 15:50:01 you've never been annoyed at DRM before? 15:50:05 back on my laptop, I just use ghdl, it doesn't need to contact a licence server to verify I'm allowed to use it 15:50:11 ehird: rarely, I don't normally use DRMed prorgams 15:50:16 ais523, ghdl? 15:50:20 drm is retarded, yep 15:50:28 AnMaster: a gcc-based VHDL simulator 15:50:36 it compiles VHDL into executables, which is crazy enough in the first place 15:50:43 haha 15:50:57 and the executables can be run as executables, but they have a huge number of debug options and switches 15:51:00 which is what you normally end up using 15:51:04 also what is wrong with the Direct Rendering Manager? 15:51:18 possibly VHDL is the only lang more often run under a debugger than not 15:52:01 I mean, DRM allows open source opengl drivers on linux 15:52:07 and possibly other *nix 15:52:10 AnMaster: I think you're taking a joke too far now 15:52:11 (not sure about that) 15:52:21 especially when it wasn't that funny in the first place 15:52:47 ais523, I believe the DRM in the meaning I used existed before the copy protection crap 15:52:58 what ais523 said 15:52:59 possibly 15:53:07 but TLAs are oversubscribed nowadays 15:53:09 why not just call it copy protection, that is the original name 15:53:16 and normally which one is meant is obvious from context 15:53:17 because people call it drm 15:53:25 language changes, it's only useful if we use the same one everyone else does 15:53:26 AnMaster: also, DRM goes further than copy prevention mechanisms 15:53:29 crazy, I kno. 15:53:32 also, what ais523 said. again. 15:53:39 ais523, well I have no personal experience of it 15:53:44 so: possible 15:53:48 DRMd stuff can normally be copied just fine, it's just that the resulting copies don't run 15:53:52 15:53 are there good implementations of .NET for python? does it require mono? 15:53:56 i implement .NET in python for breakfast 15:54:05 ais523, interesting. 15:54:07 but .NET is a bytecode and API, not a language 15:54:22 ais523: congratulationsyougotthejoke.com 15:54:25 (Someone register that) 15:54:37 ais523, also there is only one copy protection that actually works. Make it all in hardware. Software can *always* be copied 15:54:45 arguably, he might just want the API 15:54:46 hardware is harder 15:54:56 if you think hardware makes copy protection work you're deluded 15:54:56 AnMaster: hardware can often be copied too 15:54:58 ais523: yes, that's the idea 15:55:09 ais523, yes but you need like millions to do it, you said so yourself 15:55:19 fail 15:55:20 digitally, if it can be consumed, it can be cloned instead 15:55:22 AnMaster: to manufacture it, yes 15:55:28 ais523, yes exactlu 15:55:30 exactly* 15:55:36 on the other hand, working out the internals and running on a simulator is a lot cheaper 15:55:38 and often good enough 15:55:47 #quit 15:55:47 -!- kerlobot has quit ("Exiting"). 15:55:54 -!- kerlobot has joined. 15:56:01 kerlo: using # as a bot prefix is really confusing 15:56:06 True. 15:56:09 all your kerlobot commands come out in blue and hyperlinked 15:56:10 ais523, well depends on what thing you want to simulate, I mean you can simulate a SNES easily enough. But a Wii? Probably not on modern computers 15:56:12 #esoteric 15:56:26 umm, simulating a Wii wouldn't exactly be hard... 15:56:27 you would probably end up with an expensive cluster or such to do it 15:56:28 It's not a supercomputer... 15:56:44 It's less powerful than home computers. 15:56:45 ehird: you'd still have to do cross-processor virtualisation 15:56:47 ehird, ok what about a Sony Playstation thingy, those used for MD5 15:56:50 what sort of processor does the Wii have? 15:56:55 ais523: PPC 15:57:05 ehird, I believe it would be kind of slow to simulate that on most desktops 15:57:11 http://en.wikipedia.org/wiki/Broadway_(microprocessor) 15:57:20 AnMaster: that's just a gpu. 15:57:23 computers can have gpus. 15:57:23 -!- Judofyr_ has joined. 15:58:04 -!- Judofyr has quit (Read error: 104 (Connection reset by peer)). 15:58:39 -!- Corun has joined. 15:58:57 Whoa, it's 4 15:59:06 what is? 15:59:10 the time in the UK 15:59:11 The time. 15:59:15 not quite, actually 15:59:17 ais523: the UTC time, too. 15:59:19 still 3:59 by my clock 15:59:23 Yes, mine too. 15:59:28 Well, 15:59. 15:59:31 16:59 here so 15:59 there 16:00:11 And now it is 16:00 according to normish.org. 16:00:19 yes 16:00:32 according to my NTP-synchronized clock, too 16:00:57 + a few seconds when you said it kerlo 16:01:03 11 seconds late then in fact 16:01:08 This little clock doesn't display seconds. 16:01:09 hmm... may as well have a look at Normish while I'm waiting for this stupid IDE to figure out what it's doing 16:01:49 ais523, what IDE? 16:01:54 that expensive one? 16:02:11 -!- Corun has quit (Client Quit). 16:02:30 -!- Corun has joined. 16:03:26 btw, what is the difference between PPC and Cell? 16:03:33 I haven't really managed to understand that 16:06:35 Creampuff! 16:06:36 -!- kerlobot has quit (Read error: 54 (Connection reset by peer)). 16:07:34 -!- kerlobot has joined. 16:07:40 %eval t 16:07:40 (Just (-1000)) 16:07:55 %eval (((s i) i) ((s i) i)) 16:08:02 ((loop i) (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i (i 16:08:14 %eval (2 + 2) 16:08:14 (2 + 2) 16:08:18 Wow. 16:08:22 Damn, I was hoping for haskelleramation. 16:08:26 kerlobot: epic fail thar 16:09:05 haskelleramation? 16:09:16 yes I *did* try google 16:09:23 and no I can't figure out what it means 16:09:41 apart from being related to haskell 16:09:45 -!- ais523_ has joined. 16:09:54 Being interpreted as Haskell, or something. 16:09:54 hello ais523_ 16:10:00 kerlo, aha 16:10:02 -!- ais523 has quit (Nick collision from services.). 16:10:10 -!- ais523_ has changed nick to ais523. 16:10:21 ais523, this IDE needs to run at uni? you can't run it at home? 16:10:25 yes 16:10:34 expensive closed-source stuff 16:10:35 hm, oh that is the DRM stuff? 16:10:49 I'm not sure 16:10:59 it seems to go wrong only when opening a project, not when loading hte IDE itself 16:11:18 ais523, is it on your laptop or only on school computers? 16:11:29 Okay, let's see, boolean pair symbol number char string vector port procedure continuation table. 16:11:39 it's only on the university computers 16:11:39 or s/school/uni/ 16:11:44 What else, I wonder? 16:11:44 I'm typing this on my laptop 16:11:46 well uni is a type of school 16:11:48 which is next to the Uni computer atm 16:11:49 ais523, aha 16:11:53 That's it I think. 16:11:55 keyboard, keyboard, mouse, mouse 16:12:11 ehird, data types for your scheme? 16:12:18 No. Fluffy bunnies. 16:13:34 ehird, well if you are doing this insanely speed optimised you might want to optimise lists in some special way, to make them into arrays in some contexts, might not need a different data type 16:13:55 Suggesting such a thing shows a severe lack of understanding of the general usage case of cons lists. 16:14:20 ehird, well, true they are meant to be accessed from head to tail 16:14:34 ooooo 16:14:36 you could have an array type as well as a cons list type 16:14:45 you could even go all OCaml and have imperative types as well as functional types 16:14:48 but sometimes real arrays are useful indeed 16:14:52 which drives me mad, but is good for speed 16:14:53 ais523: Vector. 16:15:00 read R5RS. 16:15:09 oh, I didn't know about that either... 16:15:17 * AnMaster looks 16:16:09 I wonder how i should implement bignums. 16:16:17 Maybe as an array of fixnums. 16:16:24 In base MAX_FIXNUM. 16:16:45 ehird, well I don't know what is fastest, but isn't gmp quite fast? 16:17:00 I will not use gmp/ 16:17:05 s/\/$/./ 16:17:16 oh? what is wrong with it? 16:17:46 I now believe it impossible to get kerlobot to quit. 16:17:57 #quit 16:18:00 hm nope 16:18:18 /kill kerlobot would work if I was a server op, but I'm not 16:18:33 if I had a botnet, which I do not, a DDoS would work 16:18:45 And that is a dare. 16:18:45 but that is rather crude 16:19:18 hm 16:19:45 we could physically go round to kerlo's computer and disconnect the network cable 16:19:52 but that would be too expensive in plane fares, I think 16:20:02 ais523, or we could fake an abuse@ to his isp? 16:20:10 hmm... kerlo's in the same timezone as me, maybe not 16:20:26 oh, wait 16:20:30 ais523, the bot says comcast 16:20:30 kerlo's bouncing off Normish 16:20:34 which iirc is US? 16:20:35 which runs at UTC 16:20:42 no wonder ctcp time told me UTC 16:21:04 GeoIP Country Edition: US, United States 16:21:05 hm 16:21:49 I'm bouncing off Normish, but kerlobot is connected directly from here. 16:22:38 ais523, another idea, which I admit would also be expensive: contact any local maffia, asks for the "special offer" 16:22:43 mafia* 16:23:23 -!- Judofyr_ has quit (Remote closed the connection). 16:23:46 ok, that one's insane 16:23:59 not just expensive, you have to worry about repercussions on yourself too 16:24:04 yes 16:24:15 umm 16:24:17 another option: bribe a Freenode staffer 16:24:24 although we're into the realms of insanity here 16:24:25 you know, killing kerlo doesnt kill kerlobot 16:24:26 ais523, I believe social engineering on freenode staff would work better 16:24:26 neccessarily 16:24:42 ehird: I'm bouncing off Normish, but kerlobot is connected directly from here. 16:24:49 And? 16:24:53 Killing kerlo != killing his net. 16:25:01 ehird, when isp doesn't get paid they will cut his connection 16:25:04 yes it may take a few weeks 16:25:14 I imagine his parents pay for the connection. 16:25:17 As he's a teen. 16:25:26 ah, didn't know that 16:25:46 kerlo, anyway, does it handle connection timeout and such properly? 16:33:31 hmm... it seems that this IDE is just very very slow today for some reason 16:33:39 half an hour later, it shows signs of activity 16:33:49 ais523, windows? 16:33:54 yes 16:34:09 it might be the domain timeout bug, I suppose, but I don't think so 16:34:13 if yes, all the spyware installed are busy calling home, please show some consideration and wait for them to finish 16:34:21 I doubt it's spyware 16:34:29 mostly because these computers are reimaged every night 16:34:45 idea: install a spyware on the master image 16:35:05 there are legitimate reasons to knock and dislike Windows; please don't improve its reputation with baseless trolling that makes the legitimate complaints seem bad 16:35:21 ais523, I was trying to joke 16:36:01 protip: jokes are meant to be funny 16:36:21 ehird, in that case I would ask oerjan, not you 16:37:31 -!- MigoMipo has quit (Read error: 60 (Operation timed out)). 16:37:40 s9.c:27: error: ‘NULL’ undeclared here (not in a function) 16:37:42 wat 16:37:51 ehird, stdlib.h 16:38:06 NULL isn't a keyword 16:38:06 not stddef.h? 16:38:11 stdlib IIRC 16:38:12 flexo, oh maybe that too 16:38:20 I don't think I've used stddef for years 16:38:26 stdlib is included. 16:38:27 (hmm... maybe it's included from stdlib, that would explain it) 16:38:31 and it is not my program. 16:38:49 ais523, lots of headers include it 16:39:59 this is really annoying, this program's running massively slowly and I'm not even allowed to use a top-alike to see what's happening 16:40:13 'allowed'? 16:40:17 ah yes, task manager is allowed here 16:40:21 ehird: yep, locked-down system 16:41:48 [[I've always hated the idea of a garbage collector. I understand why it's useful for most people, but I prefer being in control]] 16:41:59 OK, this is insane 16:42:00 I wonder if there's a study on the link between programmers and sadists. 16:42:04 when I try to run the program, it waits for a whiel 16:42:07 er, masochists 16:42:09 * ehird brainfart 16:42:17 er, wait. both. 16:42:25 then prints the message Process "Synthesize - Synpifly Pro" failed 16:42:30 no error messages or warnings, but that 16:42:30 ehird : Do you like clothepins on your nipple 16:42:31 s 16:42:44 no other output at all apart from that and a "Started" message 16:42:50 IOW, this program is failing and won't tell me why 16:48:14 Hm. 16:48:42 I am becoming more and more convinced that the plain machine stack is the best way to handle function calls. 16:48:53 It seems that copying the c stack isn't actually very hard 16:48:58 and it is fast 16:49:45 One issue with using the machine stack is, how do you return multiple values in C, like scheme requires? You can't 16:50:18 it's entirely possible to return multiple values on the stack, just C doesn't provide a syntax for it 16:50:21 people do that all the time in asm 16:50:35 Right, but is it _possible_ to do it portably in C? No. 16:50:40 yes: you can do the same thing by returning a struct that contains all the data you want to return 16:50:50 DING! Wrong. That is not the "same thing". 16:50:56 that ends up compiling to the same asm that returning multiple elements is 16:51:02 or would be 16:51:15 so that very is the same thing 16:51:24 (unless you have a perverse ABI) 16:51:45 17:50 < ais523> it's entirely possible to return multiple values on the stack, just C doesn't provide a syntax for it 16:51:50 as in.. returning a struct? 16:51:54 well, yes 16:52:01 returning a struct, in this case, is not an option 16:52:01 returning a struct is technically speaking only returning one value 16:52:04 but it comes to the same thing 16:52:22 (returning a /pointer/ to a struct is different, returning the struct itself by-value isn't) 16:55:52 -!- BeholdMyGlory has quit (Excess Flood). 16:56:27 -!- BeholdMyGlory has joined. 17:00:39 -!- FireFly has joined. 17:01:57 setjmp/longjmp are meant to be cheap, right? 17:03:04 sure 17:03:17 getcontext/setcontext presumably aren't :P 17:03:31 depends on what you mean by cheap i suppose 17:03:38 efficient 17:03:41 ... 17:04:00 they all work in O(1) 17:04:05 that's efficient. 17:04:08 no duh 17:05:17 but setjmp/longjmp don't have to do context switching 17:05:21 just stack unwinding 17:05:28 ehird: setjmp/longjmp are relatively expensive, at least compared to goto 17:05:29 so they are more cheap, yea 17:05:36 there was an article on thedailywtf about them 17:05:41 and lots of people went and did lots of benchmarking 17:05:53 ais523: Craziness context: I'm considering writing my own :x 17:05:58 and as for cheapness/expense, it depends on the processor 17:06:04 most will have to save all the registers 17:06:16 which is relatively cheap on an 8086 and expensive on something which has loads of registers 17:06:48 ais523, wait, register starved is better? 17:06:55 not normally 17:06:58 true 17:06:59 but it's faster at longjmps 17:07:20 if you think about it, if you had no registers but the stack pointer a longjmp would just be assignment to the stack pointer 17:07:29 you guys think you're so tough at playing baseball. 17:07:31 and the return at the end of longjmp would return to the setjmp not to where it had been called 17:07:40 ais523, heh 17:07:48 i've having serious trouble deciding for a couch 17:07:49 i need help 17:07:50 well let me tell you something: a professional baseball player would beat the crap out of each and everyone of you. 17:07:51 :( 17:07:57 probably even in scrabble 17:08:01 ais523: well, yeah I'm pretty much going to do that since who cares about registers 17:08:01 oklopol, um? I don't play baseball 17:08:02 :D 17:08:08 and i hate scrabble 17:08:15 I fail at it all the time 17:08:38 oklopol, I suck slightly less at chess, but I'm far from good at it 17:08:49 :D 17:08:51 Whoosh. 17:08:56 i think i kinda like BEDDINGE 17:09:05 but it has no.. the... stuff.. at the sides 17:09:12 eh 17:09:13 let me make sure i understood, you suck slightly at it, but you are far from good at it? 17:09:24 flexo, an esolang? 17:09:27 no 17:09:28 a couch 17:09:30 17:07 i've having serious trouble deciding for a couch 17:09:37 beddinge? sounds like a 2D language 17:09:37 BEDDINGE 17:09:38 *i'm 17:09:39 oklopol: AnMaster sucks slightly less at chess than at scrabble, but is far from good at both 17:09:40 BEDDINGE BEDDINGE BEDDINGE BEDDINGE BEDDINGE BEDDINGE BEDDINGE BEDDINGE BEDDINGE BEDDINGE BEDDINGE BEDDINGE BEDDINGE 17:09:43 sorry I like that word 17:09:46 some sort of fungoid 17:09:51 ehird, oh BADGER? 17:09:53 http://www.ikea.com/us/en/catalog/products/S49839894 17:09:53 http://www.ikea.com/de/de/catalog/products/S29830007 17:09:54 ... 17:09:55 Neddomge 17:09:57 ... 17:09:58 lol 17:10:10 no arms :< 17:10:11 ais523: lol okay i failed :P 17:10:13 exactly 17:10:21 gotta have arms. 17:10:26 yea, i think so too 17:10:27 like, to shoot things with 17:10:33 it's in the constitution don't you know 17:10:41 ais523, indeed. How was it ambiguous? 17:10:44 not my constitution 17:11:08 nor mine :P 17:11:12 oh right 17:11:17 then it makes perfect sense that name 17:11:24 once you read it in Swedish 17:11:33 well not perfect sense, but much more sense that in English 17:11:35 BED BINGE 17:11:39 AnMaster: I don't think it was, I was explaining for oklopol 17:11:47 ah right ais 17:12:05 but the other sofa beds suck 17:12:16 no arms either 17:12:16 i dropped a crucial word 17:12:44 I want a desksofachairtablebed 17:12:46 all in one 17:13:23 before anyone asks: no, I can't imagine how it would look 17:13:25 AnMaster: I don't think that's impossible 17:13:38 you should be able to lie in bed and use the desktable at the same time, though 17:13:42 yea, just some huge tank with some fluid in it 17:13:46 likewise, use the desktable at the same time as the sofa 17:14:07 like the navigators in dune 17:14:54 *sigh* 17:16:08 choosing a couch online sucks 17:16:09 ais523: thought on bignums being array-of-ints-in-base-max-int? 17:16:21 but running around in ikea sucks even more 17:16:24 ehird: use an existing bignum library, it can almost certainly beat you by a lot 17:16:32 ais523: no fun 17:16:39 that seems like a plausible implementation, though 17:16:52 and it's the one that asm uses, if you're mad enough to do bignums in asm 17:17:48 really? 17:18:32 heh, one thing I can't do is track how many segments there are, since that needs to be a bignum too :) 17:18:37 so it'll have to be NULL-terminated 17:18:52 ais523: what about sign bits, do you think? 17:18:53 -A,B? 17:18:55 -A,-B? 17:19:00 NEGATIVE + {A,B}? 17:19:34 ehird, in an actual implementation it would be limited by sizeof(void*) 17:19:48 AnMaster: I think I'll make it a linked list 17:19:56 ehird: 2's complemetn 17:19:58 *complement 17:19:59 ehird, sounds slow, a vector would be better 17:20:12 ais523: that's for binray 17:20:14 binary 17:20:53 ehird: same trick works for any power-of-2 base 17:21:08 is the max of an unsigned long always a power of 2? 17:21:09 -!- KingOfKarlsruhe has quit (Remote closed the connection). 17:21:11 I guess so, in modern systems. 17:21:29 it's a power of 2 minus 1 on all C systems, I think 17:22:12 hmm 17:22:17 MAX_ULONG, MAX_UNSIGNED_LONG aren't defined 17:22:19 wonder what it is 17:22:23 ULONG_MAX 17:22:25 IIRC 17:22:27 o, right 17:22:31 probably should make it unsigned long long where that's supported 17:22:34 AnMaster will know even if I get it wrong 17:22:44 (2147483647L * 2UL + 1UL) 17:22:47 what about gcc? it has a type longer than long long as an extension 17:22:49 they couldn't just give a constant... 17:22:58 ehird: it has to be done like that, I think 17:23:16 due to handling buggy compilers which get confused by 'negative' numbers 17:23:20 lol 17:23:33 so, i'm working in base 4294967295 :D 17:23:39 except 17:23:42 wonder what unsigned long long max is 17:23:44 ULONGLONG_MAX? 17:23:48 ULL_MAX 17:23:53 and you should be working in base 4294967296 17:23:55 ULONG_LONG_MAX also 17:24:02 also, er, yeah 17:24:03 because 4294967295 is the maximum possible value 17:24:09 not ULL_MAX 17:24:09 -!- kerlobot has quit (Read error: 104 (Connection reset by peer)). 17:24:13 ULL_MAX is undefined 17:24:23 ULLONG_MAX is actually plausible 17:24:24 -!- kerlobot has joined. 17:24:33 %eval (c W H A R R G A R B L) 17:24:34 WHARRGARBL 17:24:38 Yay. 17:24:48 ais523: ok, on this machine I'm working in base 18446744073709551614 17:24:54 what's the gcc thing you mentioned? 17:24:59 __uint128_t, IIRC 17:25:08 ah. I won't bother touching it 17:25:21 although if you don't have native 128-bit operators, it'll probably be slower 17:25:27 fwiw, probably using unsigned longs is best 17:25:34 why not unsigned long longs? 17:25:36 for very big numbers 17:25:39 ehird: because they'd have to be emulateed 17:25:46 err, why? 17:25:53 i'm on a 64 bit machine 17:26:13 oh 17:26:20 well unsigned long is 64 bits on a 64 bit machine 17:26:21 or ought to be 17:26:34 yea, ought to be. 17:26:36 OS X compiles things as 32-bit by default, though. 17:26:38 unfortunatly people suck 17:26:41 For god knows what reason. 17:26:51 actually 17:26:52 ehird: then 64-bit operations will have to be emulated 17:26:58 because they aren't available when compiling as 32 bit 17:27:00 long should more be like 128 bit on a 64 bit machine 17:27:13 int should be the native register size 17:27:20 ais523: what constant is defined for 64-bit/32-bit again? 17:27:23 i forgot.. 17:27:24 . 17:27:43 I don't think there's a standard one 17:27:44 -!- kerlobot has quit (Read error: 131 (Connection reset by peer)). 17:27:59 sizeof(unsigned long) is normally an easy way to check, though 17:28:00 -!- kerlobot has joined. 17:28:02 flexo: int is 32-bit on gcc mostly even when you do -m64 though, isn't it? 17:28:06 %eval (h WHARRGARBL) 17:28:06 (W HARRGARBL) 17:28:08 and sizeof(int), likewise, tells you if you're on 16-bit or 32-bit 17:28:08 ais523: doesn't work on win32 though 17:28:16 ehird: yep 17:28:25 So, now you can cut symbols apart and put them together. 17:28:46 ehird: but that's only because people suck 17:28:51 ais523: why doesn't #error sizeof(...) work :-P 17:28:52 and fail to write portable software 17:28:55 it shoooooooooould 17:29:01 ehird: because sizeof is compile-time, not preprocess-time 17:29:09 >:::( 17:29:16 you can mess about with limits.h, though, if you prefer 17:29:20 or else use a static assertion 17:29:39 i had some flaming with zhivago about that one 17:29:47 huh ... sizeof(unsigned long) = sizeof(int) here 17:30:02 well 17:30:11 in 32 bit, sizeof(ul)=sizeof(int)=4 17:30:15 sizeof(int) really should be the native register size. 17:30:15 in 64 bit, sizeof(ul)=8; sizeof(int)=4 17:30:21 wtfomobil 17:30:21 e 17:30:28 and long should preferrably larger, emulated by software if necessary 17:30:31 i think what I can draw from this, is: 17:30:35 use unsigned long :-P 17:30:36 and "long long" is just silly 17:30:47 we need a long^N specifier 17:30:53 unsigned long^4 x; 17:30:54 no we don't. 17:30:56 :DDD 17:31:14 ehird: algol actually had long long long long long int as a valid data type 17:31:16 with any number of longs 17:31:23 :D 17:31:30 it had a constant, max lengths, which told you how many longs had an effect 17:31:33 likewise, max shorths 17:31:47 (identifiers could contain spaces in algol, which was a great way to cause confusion) 17:32:40 [ehird:~/Code/bignum] % cc -m64 bignum.c; ./a.out 17:32:40 18446744073709551614 17:32:41 [ehird:~/Code/bignum] % cc bignum.c; ./a.out 17:32:43 4294967294 17:32:46 that 64-bit output is lollerific 17:32:48 i mean 17:32:54 how many numbers do you deal with bigger than that? 17:33:03 typedef unsigned long bignum; 17:33:03 :P 17:33:29 ehird: my brother convinced me to teach him Perl, just so he could do really bignum calculations 17:33:32 he's looking for big primes 17:33:34 short short short short short short int: if int is 32-bits wide and can hold any of 4294967296 values, this is half a bit wide and can hold any of sqrt(2) values. 17:33:42 ofc, Perl isn't an ideal lang for doing that quickly, but it keeps him happy 17:33:44 ehird: like addressing modern harddrives? 17:33:51 ais523: lol, how old is he? 17:33:55 younger than me 17:33:58 I can't remember exactly how old 17:34:01 flexo: except im using this in an implementation of Scheme :-P 17:34:09 although theoretically you could do that 17:34:36 hm.. i used a certain lisp-subset a lot when i was a kid 17:34:44 anyone knows ADVSYS? :) 17:35:16 * ehird writes void bui_mod_succ(biguint n) , without knowing anything about how to actually implement stuff like this. 17:35:17 Woohoo! 17:35:34 ehird: how are you marking the length of the integer? 17:35:44 ais523: {blah,blah,blah,NULL} 17:35:54 dunno whether it'll be big endian or little endian 17:36:04 I'm thinking little endian, so that it's easier to do things like succ 17:36:07 without reading to the end 17:36:12 ugh, that's a really bad way to do it 17:36:18 is it :< 17:36:19 IMO, it should be length-prefixed 17:36:23 you don't want a special value 17:36:29 umm, fail :D 17:36:30 because then you can't use the entire range of your int, or whatever 17:36:34 how can you do that length prefixed 17:36:38 the length would have to be a bignum 17:36:40 ehird: well, yes 17:36:44 recursive bignums ftw 17:36:53 i don't think that would work. 17:36:54 but your method is much less efficient 17:37:18 "that is inefficient, use this impossible method instead" 17:37:35 ehird: you're going for speed, aren't you? 17:37:38 ais523: not atm 17:37:41 if I wanted efficient I'd use gmp 17:37:44 my advice is to make length-prefixed possible 17:37:50 I bet that's what gmp does 17:37:55 i don't care 17:38:00 it's simpler to implement this 17:38:04 and it's more conceptually pure 17:38:17 no, it isn't more pure, it's conceptually a lot dirtier 17:38:24 i don't care :) 17:38:30 there's nothing purer than going add/add-with-carry/add-with-carry all the way along a bignum 17:38:43 i don't caaaaaaaaaaare :) 17:38:48 (besides, you can just length-prefix it with a long long, the computer would run out of memory before it ran out of length prefixes) 17:39:05 or, if you prefer, prefix with a pointer to the last element 17:39:14 it's clearly in memory, therefore it can be pointed at 17:39:15 problem solved 17:39:21 i prefer to live in a world of infinite memory 17:39:34 ehird: then you have infinite pointers 17:39:37 problem still solve 17:39:40 *solved 17:39:45 meh, fine 17:40:08 ais523: but then I have to use VLAs. 17:40:22 v 17:40:23 typedef struct { 17:40:23 BLOCK_TYPE *last; 17:40:25 BLOCK_TYPE data[]; 17:40:27 } *biguint; 17:40:45 that's not a VLA 17:40:50 that's the legalised struct hack 17:40:58 oh, right 17:41:05 ais523: that's c99 only isn't it 17:41:06 :( 17:41:07 and you can just put a 1 in the square brackets on C89, there's no known system on which the original struct hack doesn't work 17:41:12 ah 17:41:16 despite it being technically illegal 17:41:21 I've mostly seen it as data[0] 17:41:27 ehird: that's a gcc-ism 17:41:27 to emphasise the hack 17:41:31 ais523: is it? ok 17:41:39 -!- oerjan has joined. 17:41:56 hmm 17:42:03 wouldn't an infinite-pointer system have infinite unsigned longs too? 17:42:09 and thus no need for bignums... 17:42:11 probably 17:42:26 incidentally, C fails at handling sizeof infinite data types 17:42:35 ais523: my aversion of length counting's justification: http://jwz.livejournal.com/854482.html :P 17:42:37 I'm really annoyed that the definition of C excludes bignums 17:42:48 ehird: I don't like length counting for strings, normally 17:42:52 for bignums, though, it works a lot better 17:42:52 not for strings 17:42:54 read the post 17:43:43 c is a fucking macro assembler. no bigints there. 17:43:55 ehird: classic 17:44:09 that's just a flaw in their bignum implementation, though 17:44:13 ais523: why? 17:44:18 they didn't have a big enough length ehader 17:44:24 define big enough 17:45:17 The fifth season will commence on January 21, 2009 with a three-hour premiere consisting of a clip-show and two back-to-back new episodes. 17:45:20 woohoo 17:45:26 that's 3 days 17:45:45 -!- ais523 has quit (Read error: 104 (Connection reset by peer)). 17:45:46 wut 17:45:49 lost! 17:45:52 o 17:45:56 -!- ais523 has joined. 17:46:05 i didn't think i'd make it 17:46:12 3 more days 17:46:26 lol wut 17:46:28 and my life will have meaning again 17:46:52 lost? you know? as in tv? 17:47:39 yes. 17:47:40 i know. 17:47:43 I just had a crazy idea for how to implement an AI that would actually work, it is technically unfeasible though 17:47:50 AnMaster: no, it wouldn't work 17:48:11 ehird, simulate life exactly, I mean simulate evolution, from the start 17:48:18 in all details 17:48:26 that's not so much artitical 17:48:26 would require huge resources though 17:48:32 you couldn't do that 17:48:35 because you don't know the details 17:48:36 AnMaster: how do you know that intelligence would evolve before the extinction of life? 17:48:40 and you don't have nature's random number generator 17:48:51 ais523, you would have to do several runs of course 17:48:53 AnMaster: what you're saying is, 17:49:01 ais523, but given enough time it should work 17:49:06 the odds against intelligence may be incredibly high 17:49:08 "Here's an easy way to simulate intelligence: simulate everything!" 17:49:18 ais523, I said "technically unfeasible" 17:49:19 the fact that intelligence evolved here may have been a huge fluke 17:49:22 simulating intelligence is almost certainly easier than simulating everything 17:49:29 thus your solution is a non-solution, even with an infinitely powerful computer 17:49:42 but anywhere where the point will be brought up, there must be intelligences to ask the question 17:49:53 ais523, indeed. I said "technically unfeasible" and "given enough time" 17:50:05 Indeed, I'd rather just use genetic algorithms. 17:50:05 AnMaster: you could also brute-force intelligence. 17:50:14 that's both way easier to implement and about as efficient. 17:50:18 ehird: how would you detect it once you had it? 17:50:20 agreed 17:50:25 you could probably stack the dice a bit by ensuring there was something resembling earth geologically... 17:50:32 ais523: clone an infinite amount of people and have them talk with the iterations simultaneously 17:50:34 forever 17:50:45 (No harder than simulating the entire universe.) 17:50:49 ehird: being able to clone an infinite number of people would probably mean you could just outsource your intelligence 17:50:50 to them 17:50:57 That would not be artificial. 17:51:15 plate tectonics, the right elements and the right temperature is a good start i think 17:51:34 (recent Slashdot story: it seems some companies have been using Mechanical Turk to astroturf Amazon reviews of their products) 17:51:56 oerjan, well yes, but all written in rules of basic physics 17:52:17 I mean, quantum mechanics level or so, or you couldn't simulate all effects 17:52:44 of course that would require as near infinite resources as it makes no practical difference that it would in fact only be finite resources 17:53:07 you may not need to simulate more than the biosphere to full precision 17:53:26 oerjan, true, but probably not all of space 17:53:55 d'aww, while (printf("%lu\n", *n++)); wouldn't work 17:53:58 need to return *n 17:54:02 oerjan, I mean, relativity limits speed of information 17:54:05 while (printf("%lu\n", *n++), *n); 17:54:06 good enough 17:54:14 so only the visible universe at the end of the simulation 17:54:37 oh you could probably fake it, no one would notice if the stars were made of paper ;) 17:55:50 anyone, anyone up for the task of calculating much computer resources this would need? 17:56:20 AnMaster: er i said "you may _not_ need". did you read me backwards? 17:56:43 oerjan, oh indeed I must have done 17:57:15 also, you could stack the dice even more, you could probably get a simple cell in there 17:57:35 "stack the dice" I never heard that idiom before 17:57:53 oerjan: stack the deck, surely? 17:57:59 oh 17:58:00 anyway, going for a while, I need to get dinner 17:58:00 right 17:58:02 i suppose it would be less effort to build a new biosphere than simulating one 17:58:05 -!- ais523 has quit. 17:58:11 and what does "stack the deck" mean? 17:58:28 "to arrange something in a way that is not fair in order to achieve what you want" 17:58:38 also, what a shock they would get when they realise that they are simulated 17:58:44 as the universe is kinda efficient in "emulating" stuff in itself. 17:59:02 AnMaster: well maybe. _we_ could be simulated. 17:59:11 oerjan, yes I was thinking about that too 17:59:23 actually it's more likely that it's just me being simulated :) 17:59:27 it could be simulations all the way up :D 17:59:33 and you all consist of paper 17:59:48 AnMaster: they wouldn't realise they were simulated. 17:59:49 oerjan, augh! 17:59:55 you'd get religions, and atheists. 18:00:10 and some fringe ones arguing they're all simulated, dismissed as kooks. 18:00:13 ehird, what if we planted a message, like that that book, Strata 18:00:20 by T. Pratchett 18:00:21 you mean like the bible 18:00:35 ehird, I mean like in Strata by T. Pratchett 18:00:45 I have not read it./ 18:00:47 ah ok 18:00:57 well 18:01:09 since it is Pratchett, it is kind of hard to make a short plot summary 18:01:13 as you surely can imagine 18:01:37 i'm sure there's one on wikipedia :D 18:01:45 anyway, it'd almost certainly go on exactly as the religious situation in this world goes on. 18:01:58 if you were extremely blatant, probably they'd die of shock, or rebel against you. 18:02:27 ehird: well that is assuming there _is_ no actual divine input to the world's religions. 18:02:36 (this world's) 18:02:53 as is my belief :-) 18:03:09 yes. but that is not the same as "almost certainly". 18:03:18 naturally. 18:03:33 but christianity could well be truly divinely influenced, doesn't mean people take it any more seriously 18:04:32 * ehird *CONTRAVARSY* 18:05:13 aight, I'll length count. 18:05:15 Humans in the book have advanced to terraforming other planets and so on, to increase biodiversity. After some thousand generations before getting to space flight the emigrants tend to forget that they came from elsewhere. Something like that. However, sometimes the machine operators leave some (unauthorised) clues when terraforming. Like a fossile of a dinosaur holding a sign saying "Stop nu 18:05:15 clear war".... And well in the end the protagonists find out that the universe they live in was constructed. Thanks to a clue left in it. 18:05:16 now to incrementerament 18:05:28 that clue was a flat world. This work iirc pre-dates disc world 18:05:33 18:05:39 * ehird shrug 18:05:43 It's fiction. 18:05:48 ehird, yes of course 18:06:01 but it would be so cool if it wasn't ;P 18:09:31 ugh, there should be a realloc that forces in-placeness 18:12:51 :( my bui_mod_incr doesn't work 18:14:02 Algorithm: replace all vowels except I and Y with A. 18:14:30 Eh, leave silent E as well. 18:14:55 Actually, leave all E's. 18:15:49 ^bf ++++++++++>++++++++[->++++++++<]>++++++>++++++[[->+>+<<]>>[-<<+>>]<[-<<.>>]<-<<<.>>>] 18:15:50 FFFFFF.FFFFF.FFFF.FFF.FF.F. 18:16:19 I assure you that this is all part of my evil plan. 18:16:25 how assuring. 18:17:02 GEARGE W. BASH WILL STAP BARACK ABAMA FRAM DESTRAYING AAR CAANTRY! 18:17:17 Proto: Eliminate consonants. 18:17:58 eoe u i o aa aa o eroyi ou ouny! 18:18:38 WHAT IS THE PAINT AF THIS? 18:18:52 ugh, there should be a realloc that forces in-placeness <-- that is not possible in practise since there could be other stuff allocated after 18:18:58 who cares 18:19:00 write over it 18:19:01 :D 18:19:22 ehird, why not just check the return value? 18:19:47 because your face 18:20:12 that made no sense, not even grammatically 18:20:29 neither does your face 18:20:35 what he said 18:20:40 oerjan, that made sense grammatically 18:20:43 because *you're* face 18:20:44 so wrong 18:20:47 I sint re soud dsust retrace arr tonsonants ris arzeorar tonsonants. 18:20:49 that's a common mistake 18:21:04 oklopol, heh... 18:21:13 arzeorar? 18:21:14 that make no sense either 18:21:32 Alveolar. 18:21:44 oklopol: ssh, it's a secret that AnMaster is Mr. Potato Head 18:21:49 kerlo, what is the substitution? c->t I see 18:22:01 sometimes? 18:22:11 oerjan, who? 18:22:29 but good thing it isn't telnet at least 18:22:31 AnMaster: a famous face 18:22:37 kerlo: scarily, that worked 18:22:49 * AnMaster hopes someone gets that bad pun 18:23:01 AnMaster: nope 18:23:06 i did. 18:23:08 oh 18:23:22 * oerjan swats AnMaster -----### 18:23:29 * AnMaster dodges 18:23:44 ehird: what worked? 18:23:51 kerlo: consonant replacing 18:24:54 isn't l alveolar? 18:24:55 ehird, anyway there might be a way to handle the realloc() issue 18:24:59 if you tell me why you need it 18:25:14 i dont 18:25:14 :P 18:25:21 but my increment doesnt work :((((((( 18:25:24 ehird, well it seems to be linux specific anyway 18:26:26 Glibc specific? :-> 18:27:01 Ilari, linux kernel specific I think 18:27:08 at least that is what the man page says 18:27:27 AFAIK, the memory allocation functions Linux kernel implements are brk() and mmap(). 18:27:43 basically: mmap with MAP_FIXED (and possibly MAP_GROWSDOWN), then mremap (possibly using MREMAP_FIXED, not 100% sure about that) 18:27:43 And also mremap(). 18:28:06 P becomes T, B becomes D, T remains T, D remains D, CH becomes TS, J becomes DZ, K becomes T, hard G becomes D, F becomes S, V becomes Z, soft TH becomes S, hard TH becomes Z, S remains S, Z remains Z, SH becomes S, "zh" becomes Z, H becomes S, M becomes N, N remains N, NG becomes N, L remains L, R remains R, W becomes R, Y becomes R. 18:28:24 So yeah, "alveolar" becomes "alzeolar", not "arzeolar". 18:28:34 kerlo, that isn't loseless, also how did you decide on this scheme? 18:28:48 All consonants become alveolar. 18:28:59 * AnMaster googles alveolar 18:29:25 Unvoiced glottal fricative becomes unvoiced alveolar fricative, voiced bilabial stop becomes voiced alveolar stop, etc. 18:29:38 AnMaster: Process memory maps are available, so one can check if there's gap after current allocation... 18:29:44 Whap aboup mapim ip wabiw imfpeab? 18:29:53 *wabiaw 18:30:07 That sounds really fun. 18:30:14 kerlo, huh. I might understand that better if translated to Swedish 18:31:07 Unvoiced glottal fricative becomes unvoiced alveolar fricative, voiced bilabial stop becomes voiced alveolar stop, etc. <- I understood the words "(un)?voiced", "stop", "becomes" and "etc" in that 18:31:20 Well, they're all phonetic terms. 18:31:28 ^bf <. 18:31:31 kerlo, well I don't know much about that 18:31:35 FireFly, it wraps 18:31:37 Ustemda glottala frikativer bliver ustemda alveolära frikativer ;D 18:31:38 Ah 18:31:48 oerjan, no less understandable :P 18:32:04 FireFly, 1000 or 10000 cells iirc 18:32:09 read the source for details 18:34:28 http://boinkor.net/misc/terrible-xml-error.png 18:34:59 technomadic? NOMADS? 18:35:03 ehird, and funny 18:35:11 *ostämda, i think 18:35:26 oerjan, that is why I use an electrical piano :P 18:35:42 *facepalm* 18:36:10 oerjan, so not so bad it is good this time? :( 18:37:22 it's surreal 18:37:34 oerjan, oh? 18:37:41 how do you mean 18:38:49 my brain cannot grasp how that comment leads from mine, even as a pun :D 18:38:59 *follows 18:39:23 oerjan, you know an instrument needs to be tuned? 18:39:28 well that is stämma in Swedish 18:39:38 and, ostämda, would be non-tuned 18:39:42 or in need of tuning 18:39:55 you don't need to tune an electrical piano :P 18:40:04 * ehird evacuates the building -> 18:40:09 oerjan, maybe it doesn't work in Norwegian? 18:40:10 come on, get away from the dangerous AnMaster, everyone 18:40:16 terrible pun situation, let's get this under control 18:40:19 everyone out in an orderly fashion -> 18:40:21 * AnMaster joins ehird 18:40:27 lets get out of here 18:40:29 oh it works all right. it just doesn't make sense. 18:40:30 * ehird squirts AnMaster with funny juicde 18:40:33 *juice 18:40:37 come on everyone -> 18:40:39 tastes nice! 18:40:43 * AnMaster follows 18:40:48 * ehird bats AnMaster with a cluebat 18:40:49 -> 18:41:02 ehird, Always were a hard hat on irc 18:41:05 that is what I always say 18:41:07 want one too? 18:41:12 * AnMaster hands ehird a nice hard hat 18:41:16 * ehird puts AnMaster in a cage 18:41:17 -> 18:41:40 ehird, hey good thing I was Houdini in a previous life! 18:41:48 (and good thing I believe in reincarnation) 18:41:55 * ehird kills AnMaster 18:41:59 How? 18:42:01 now we don't need to evacuate! 18:42:08 ehird, how would you kill? 18:42:13 some sort of weapon or such 18:42:13 AnMaster: funny-clue-giving-machine 18:42:17 you're allergic to it 18:42:30 ehird, ah good thing I took the medicine this morning then 18:42:31 :) 18:42:36 no, there is no cure 18:42:39 * AnMaster walks out of the exit 18:42:43 source: channel logs 18:42:47 yay out of the building 18:42:52 crap 18:42:56 * ehird turns on the lhc, targets at AnMaster 18:43:02 now what was it that was so dangerous in there? 18:43:05 * AnMaster dodges 18:43:16 ehird: but you're already a black hole, remember? 18:43:18 [black hole expands to be as big as anmaster and everywhere at once] 18:43:27 * ehird turns off LHC just as AnMaster is sunk in. 18:43:31 only a few million casualties. 18:43:32 oerjan, no I dodged fast enough 18:43:43 also that was debunked, see snopes or something 18:43:57 or maybe busted, in that case see mythbusters 18:44:03 snopes is clearly one of the men in black 18:44:14 don't believe everything he debunks 18:44:16 oerjan, then mythbusters clearly 18:44:33 yes, they too 18:44:47 sure about not believe, but no they aren't MIB 18:44:55 the SNMP protocol would simply reject them 18:44:59 -!- sebbu2 has joined. 18:45:16 * AnMaster certainly hopes no one find that funny 18:45:26 -!- Slereah has quit (Read error: 110 (Connection timed out)). 18:45:46 i might be hurting you now if i knew the acronyms without looking them up 18:46:05 oerjan, first hit on google is "Management information base", used in the SNMP protocol 18:46:32 clearly anmasterful joke 18:46:46 oerjan, and yes I like making bad puns, it is like you know, the counter weight continent 18:46:56 someone need to balance your good puns 18:47:06 or the channel will tip over 18:47:16 you mean some day the bad puns will create that black hole out of sheer weight? 18:48:07 oerjan, no, I mean without me you would be a white hole just throwing out more and more puns until everyone in here died of laughing, as it is I'm kind of balancing this 18:48:45 O_o 18:49:11 everyone walk away from the crazy man -> 18:49:24 :D 18:49:38 which one? the channel is full of them 18:49:52 oerjan, exactly 18:49:53 AnMaster: 18:50:05 ehird, well you are worse, you talked a lot about TIME CUBE 18:50:13 shut up, stupid academic 18:50:46 oh you are a bit untrained, you forgot upper case 18:51:31 time cube is not all uppercase. 18:52:15 ok true 18:52:19 but it is very large font 18:53:21 hm seems he updated it? 18:56:24 time to beat AnMaster at this joking game 18:56:25 "ehird: come on everyone ->" 18:56:28 OKAY 18:56:32 * oklopol comes on everyone 18:56:40 bravo 18:56:42 oklopol, :D 18:57:03 wait, AnMaster going :D at a sex joke? 18:57:06 what is the world comingt o 18:57:08 ehird, sure 18:57:10 coming to 18:57:11 HURF HURF HURF 18:57:18 aha 18:57:19 yes 18:57:21 ahah* 18:58:02 by the way, this is the pinnacle achivement of mankind today: http://music.metafilter.com/2943/Runnin-With-The-Songsmith 18:58:45 -!- kar8nga has joined. 19:00:48 ehird, where is the actual music on that link? 19:00:55 enable flash :\ 19:01:00 wait 19:01:04 an mp3 link might be in the html source 19:01:05 let me look 19:01:12 AnMaster: also, 'music' is a bit rich 19:01:24 AnMaster: http://music.metafilter.com/music/DevilAudio.mp3 19:01:36 ehird, well I did enable all scripts, and I don't see any such "missing plugin box" 19:01:36 aha 19:01:37 thanks 19:01:42 cover your ears 19:02:02 ehird, ouch 19:02:31 the song sounds like it should fit some sort of rock or possibly metal music 19:02:36 and that music doesn't fit 19:02:40 eww 19:02:44 read the post 19:02:46 yes 19:02:50 it's this: 19:02:56 http://uk.youtube.com/watch?v=tpX3NhpRGdE&feature=related 19:02:57 -!- sebbu has quit (No route to host). 19:02:58 -!- sebbu2 has changed nick to sebbu. 19:03:02 's vocal track, put into: 19:03:10 http://uk.youtube.com/watch?v=3oGFogwcx-E 19:03:18 which is a hideous abominatory microsoft creation 19:03:25 ARGH! 19:03:30 AnMaster: it makes music 19:03:31 from vocals 19:03:40 the advert is linked to is simply hilarious 19:03:41 no it doesn't 19:03:47 it makes *sound* from music 19:03:47 AnMaster: it _attempts_ to 19:03:48 err 19:03:50 :D 19:03:51 sound from singing 19:03:53 yes 19:03:58 ehird, but I say it doesn't make music 19:04:19 well, it arguably improves van halen. 19:04:39 I haven't listened to original yet 19:04:43 will do shortly 19:05:00 i don't think anyone can listen to such an abomination all the way through 19:06:03 ehird, the original is about as horrible in fact 19:06:05 but in a differen 19:06:08 different way 19:06:15 okay, now watch the songsmith advert :-D 19:06:19 unless you've already seen it 19:06:27 is it same as http://music.metafilter.com/music/DevilAudio.mp3 ? 19:06:41 no... 19:06:44 :-P 19:06:49 http://uk.youtube.com/watch?v=3oGFogwcx-E 19:06:53 the official from-microsoft advert 19:06:55 also how come youtube didn't remove audio from the original? 19:06:58 surely that is copyrighted 19:07:12 AnMaster: they tried to, but everyone they sent to do it died of hearing it before they could mute it 19:08:06 AUGH!!!!!!!!!!!!!!!!!! 19:08:32 don't give up! 19:08:34 ehird, I can't watch more than 30 seconds of it 19:08:35 it gets better as it goes 19:08:39 where better means worse 19:09:37 will anyone actually buy it? 19:09:42 I don't think so 19:10:02 i checked their forums, people were actually asking when it could be bought in non-US places 19:10:03 x_x 19:10:16 oh no 19:10:29 ehird, I mean compared to this even rap is good 19:10:32 in the future, all music will be made with songsmith. 19:10:37 musicians will be obsolete. 19:10:47 then, the vocalists for it will be replaced with Microsoft Sam text-to-speech. 19:10:53 The lyricwriters? markov chains. 19:11:03 ehird, good thing I have some good old style gramophone records with classical music on them then 19:11:12 AnMaster: they will be outlawed. 19:11:23 ehird, actually, feeding Ms Sam into that would be interesting 19:11:25 -!- ais523 has joined. 19:11:30 I wonder what the result would be 19:11:32 hi ais523 19:11:34 hi AnMaster 19:11:37 and wb me 19:11:41 AnMaster: well, microsoft sam doesn't exactly do any intonation 19:11:53 ehird, yes so what will songsmith do with it I wonder 19:12:08 play the same chord over and over again? 19:12:14 possibly 19:12:49 anyway this product won't lower the overall music quality of the world. Because it doesn't count as music 19:13:00 oh no, SongSmith? 19:13:09 ais523: we're talking about feeding microsoft sam into songsmith. 19:13:26 with text from markov chains. 19:13:36 ehird, also how the heck does it handle when the person singing don't know how to sing properly, I mean can't "find the notes" or whatever you say in English 19:13:40 actually, that could count as good piece of art-music, possibly. like, sarcastically. 19:13:40 oh dear 19:13:44 will it retune to a different freq on demand? 19:13:53 AnMaster: probably it tries to correct it when making the chords 19:13:54 most likely, 19:13:59 it'll produce more awful crap 19:13:59 ehird, oh yes modernistic music, sure it would work as that 19:14:09 AnMaster: it just produces bad music, it does that even with people who can sing I expect 19:14:20 SongSmith may turn out to be an even worse idea than Microsoft Bob 19:14:25 ais523: have you seen 19:14:28 ais523, someone fed some rock vocalist into it 19:14:30 music.metafilter.com/music/DevilAudio.mp3 19:14:34 yeah, what AnMaster said :-P 19:14:34 it produced something totally different 19:14:39 yeah that link 19:14:40 van halen vocals + songsmith = http://music.metafilter.com/music/DevilAudio.mp3 19:15:01 they didn't even set the bpm correctly, they just set the "happy" slider at full 19:15:02 :D 19:15:19 ehird, well, it arguably improves van halen. <-- no... equally bad before and after 19:15:41 AnMaster: i can listen to the songsmithed version all the way through, not the original 19:16:09 that is because the original has video too 19:16:14 ah. good point. 19:16:23 -!- join has joined. 19:16:24 if you hide that it isn't so bad 19:16:30 hi join 19:16:35 where's part? 19:16:38 someone who has it should pipe a few Fugue programs into it 19:16:41 hi Slereah 19:16:49 ais523, none of us has it 19:16:56 and htf did Slereah hit on an obvious non-registered nickname? 19:16:59 there's a 6-hour demo, AnMaster 19:17:00 ais523, also what is Fugue? 19:17:09 AnMaster: http://esolangs.org/wiki/Fugue 19:17:24 ehird, of songsmith? 19:17:27 AnMaster: yes 19:17:32 i could boot up windows and download it, I guess. 19:17:51 ehird: as in, you only get to use it for 6 hours? 19:17:51 ehird, well not an issue since you could take a snapshot before and reset it after 19:17:55 ais523: yes 19:18:00 AnMaster: yes 19:18:02 that's a ridiculously short free trial 19:18:07 they're normally 30 days 19:18:13 ais523, enough to decide "I hate this" 19:18:17 ais523: yeah but it's songsmiht 19:18:20 all you do is sing then listen. 19:18:41 AnMaster: I told you about the free trial GPL program a while back, didn't I 19:18:43 if it was any good, 3 hours of listening to it (3 hours of singing in...) would be enough to decide, probably 19:18:44 that was really silly 19:18:52 ais523, what one was it? 19:18:55 AnMaster: a compiler 19:18:57 based on gcc 19:19:05 ais523, well sounds familiar 19:19:07 I just looked at the source, then replaced the licence manager with hello world 19:19:11 AnMaster: http://esoteric.voxelperfect.net/files/fugue/src/hworld.mid 19:19:19 I wrote that 19:19:22 and I like it 19:19:22 well 19:19:26 I like it too 19:19:28 that is music, not song? 19:19:32 if you can't play mids, I have an ogg version lying around somewhere over here 19:19:34 so it wouldn't work in songsmith 19:19:40 AnMaster: no, you can put instruments in it too 19:19:40 ais523, I can, I have hardware midi 19:19:43 and it tries to match it up 19:19:54 AnMaster: I have software midi, it's pretty good apart from taking up 40% of my CPU 19:20:11 someone should put a fast & complex electric guitar solo in there and see what it does t o it 19:20:11 ehird, oh, I wonder what will happen if you use, say "Spring" of Vivaldi as input 19:20:21 AnMaster: i think it kills the program. 19:20:26 like, in an actual 19:20:26 life 19:20:27 killing 19:20:30 way 19:20:36 ehird, I think the result will kill anyone listening 19:20:39 -!- MigoMipo has joined. 19:20:53 ais523, well I lack a good soundfont 19:21:06 ais523, a340 is ok-ish as a soundfont 19:21:11 but the piano really sucks 19:22:26 ais523, um? D-minor? 19:22:31 nah none existing one I think 19:22:45 but I quite like it, some atonality there too 19:22:50 AnMaster: it isn't in any particular key 19:23:00 it was in fact automatically generated by a BF->Fugue compiler 19:23:09 which was sufficiently nonportable that I believe it only runs on one computer 19:23:12 ok for auto generated it isn't too bad 19:23:20 ais523, oh? 19:23:32 AnMaster: it's a crazy story, actually 19:23:59 the compiler involved lots of different langs, including C, Prelude, Visual Basic, and a couple I invented specifically for the purpose 19:24:08 ais523, hm Fugue is massively concurrent isn't it? 19:24:18 the actual music entry was done by customizing the keyboard shortcuts of a proprietary MIDI editor 19:24:27 then sending it keyboard events using VB's SendKeys 19:24:41 and no, it isn't, it has a fixed number of threads which have to run in step 19:24:53 it's more like having a lang where each command always does a large number of finite things 19:25:11 ais523, was the compiler gc? (Goldberg Compiler) 19:25:29 I wrote everything in the chain myself, except the proprietary midi editor 19:25:44 ais523, why so complex 19:25:47 I actually used to be pretty good at VB once, surprisingly 19:25:51 but I rarely use it nowadays 19:26:02 and why so complex? because I didn't know how to generate MIDI by hand 19:26:16 um. specs? 19:26:27 ais523 my bignum kind of doesnt work :(((((((((((((((((((((((( 19:26:29 or maybe this was long ago? 19:26:50 AnMaster: post-2005 19:26:52 it was ages ago 19:26:53 since fugue is 2005 19:26:54 and specs of what? 19:26:59 ais523, of midi format 19:27:03 or some library for it 19:27:11 I don't know if there are any 19:27:15 ais523, also how comes it isn't very concurrent? just play a chord? 19:27:15 ais523: http://pastie.org/364042.txt?key=u3cqc6nuw91cp0cehfm5fg <-- the bui_mod_incr function doesn't work and I can't figure out why 19:27:24 and this is back when I didn't do any programming on Internet-connected computers 19:27:29 and you have a few threads, one per tone? 19:27:31 or not? 19:27:43 because I had only public terminals for that 19:27:48 and no, it isn't exactly a thread per tone 19:28:01 because multithreaded programs can have threads running at different rates, and doing control flow 19:28:11 when one line of music loops, every line loops, in Fugue 19:28:18 I don't know what that's called, but it isn't multithreading 19:28:23 um 19:28:35 ok 19:28:51 :\ 19:29:08 ais523, anyway there are no loops in midi afaik 19:29:13 no 19:29:17 every time i export a loop it ends up being expanded 19:29:21 there are loops in Fugue, though, because it's a programming language 19:29:28 that's like saying there are no loops in ASCII, so C can't have loops 19:29:38 ais523, right, but how would you encode it in midi 19:29:48 oh a special note? 19:29:50 AnMaster: by using the loop-start and loop-end instructions 19:30:01 just like you encode loops in C by using while or for or goto 19:30:05 ais523, did you ever do something like "play as it runs"? 19:30:12 AnMaster: no, that wouldn't be particularly interesting 19:30:24 :s 19:30:29 ais523, oh? it would include listening to the loops 19:30:31 you would just get the bits inside the loops again and again 19:30:36 which are only a few notes long 19:30:39 oh right 19:30:52 and besides, due to the BF-like arithmetic the loops are going to be running around hundreds of times 19:30:57 so it's going to get on your nerves 19:31:21 oh idea: "Variations of hello world", which should keep the same output (printing hello world a few times) but sound a little different each time 19:31:35 AnMaster: there were random numbers involved in the compiler 19:31:43 I actually have a second hello world in Fugue, but it isn't as good 19:32:09 ais523, also midi doesn't actually encode tempo? Just the length in ms or something 19:32:20 so how can the interpreter know what a fifth is or such 19:32:32 AnMaster: tempo has nothing to do with intervals 19:33:10 actually, MIDI itself isn't a file format, but a communications format 19:33:13 ais523, well, quater note = 180 or quater note = 120 would end up different in midi, and iirc midi doesn't store any "metronome values" 19:33:24 AnMaster: quarter notes have nothing to do with fifths, the interval 19:33:36 a fifth goes up from C to G, or C# to G#, or D to A, and so on 19:33:39 hm? then I mentally mistranslate 19:33:42 oh right 19:33:44 ais523: you should look at my bignum :-D 19:33:49 and MIDI does store some metadata, such as the time signature 19:33:51 ais523, yes that would make more sense 19:34:12 ehird: why are you using goto? 19:34:22 eh, why no 19:34:22 t 19:34:23 :D 19:34:33 i thought about the algorithm in terms of a goto, so that's how I wrote it 19:35:00 the algorithm looks correct 19:35:07 in what way does it fail? 19:35:18 % cc -Wall -m64 -ansi bignum.c; ./a.out 19:35:18 1 19:35:19 18446744073709551615 19:35:21 1 19:35:24 that's the full output 19:35:25 :\ 19:35:32 chops off everything after the length and then does nothing more o_O 19:36:41 there's something seriously wrong with that 19:36:47 unless the IRC server clipped a newline 19:36:52 was there a double-newline in the actual output? 19:38:33 oh, ys 19:38:34 yes 19:38:37 it was my client stripping that 19:38:40 where? 19:38:46 before the last 1 :_) 19:38:48 :-) 19:39:01 that's easy enough to explain 19:39:04 *m was 0 19:39:07 so you broke out of the loop 19:39:12 your print routine is incapable of printing a zero 19:39:12 oh, duh 19:39:21 sorry, I forgot to make it account for the length-change 19:39:25 instead of the null-termination 19:40:27 -!- kar8nga has quit (Connection timed out). 19:41:06 ehird, how comes you are using a length instead of a zero terminated one? 19:41:17 AnMaster: I persuaded him to 19:41:18 because ais523 argued with me about it and told me to. 19:41:23 heh. 19:41:23 ah 19:41:24 it's a lot faster for bignums 19:41:29 because it fits what the architecture is doing 19:41:30 yes I can imagine 19:41:45 you can add two numbers just with add/add-with-carry/add-with-carry, etc 19:41:55 ais523, in a simple for loop 19:42:06 unfortunately, C doesn't have a portable add-with-carry instruction, but given that ehird's going for speed I'm sure he won't mind rewriting that bit in asm 19:42:17 I am not going for speed 19:42:20 i've told you this 5000 times 19:42:20 ehird, oh btw ehird, for is usually faster than while with GCC, since it can optimise it better 19:42:22 this is just for fun 19:42:28 err you said you were before 19:42:33 yes, for the scheme impl 19:42:34 I'm 100% sure you said so 19:42:36 i'm just writing a bignum library for fun 19:42:38 AnMaster: no, where does that rumour come from? 19:42:46 ais523, oh the scheme one? 19:42:46 for and while translate to the same thing at the RTL level 19:42:50 as does goto, for that matter 19:42:53 AnMaster: no, the for faster than while thing 19:43:04 ais523, as in I observed it myself, profiling. 19:43:08 rewriting a loop can make it a lot faster 19:43:11 but not for that reason 19:43:15 ais523, for example it managed to vectorise a for loop 19:43:27 while not the equivalent while loop 19:43:51 ais523, and it managed to unroll some for loops but not the while loops 19:43:52 AnMaster: there is no difference apart from scoping between for(a=0; a<64; a++) {foo; } and a=0; while(a<64) {foo; a++} 19:44:08 as long as you have no continue statements inside the loop 19:44:12 ssh, let him have his placebo! 19:44:14 ais523, I belive the loop I tried on were a bit more complex, one was CRC for example 19:44:16 and I'm pretty sure gcc unrolls while loops 19:44:51 1 19:44:52 18446744073709551615 19:44:52 2 19:44:54 18446744073709551615 19:44:56 1 19:44:58 ok, that's an odd result... 19:45:00 should be 2, 0, 1 19:45:32 oh 19:45:43 ais523, well why they does gcc not vectorise any while loops in my experiments 19:45:47 but a lot of for loops 19:45:49 -!- kar8nga has joined. 19:45:49 -!- kar8nga has quit (Read error: 104 (Connection reset by peer)). 19:45:52 I'm using gcc 4.1.2 btw 19:45:55 yay, it works 19:46:09 int main(void) 19:46:11 { 19:46:11 -!- kar8nga has joined. 19:46:11 -!- kar8nga has quit (Read error: 54 (Connection reset by peer)). 19:46:12 int getchar(void); 19:46:14 int i=getchar(); 19:46:15 int c=0; 19:46:17 while(c<16) {i*=i; ++c;} 19:46:18 return i; 19:46:20 } 19:46:21 that loop was unrolled at -O3 19:46:24 into 16 multiply instructions 19:46:29 http://pastie.org/364057.txt?key=zpbkykzrv0q9xax847rpbw 19:46:40 ais523, and vectorised with -ftree-vectorize or whatever it is called? 19:46:47 -!- kar8nga has joined. 19:46:47 -!- kar8nga has quit (Read error: 131 (Connection reset by peer)). 19:46:51 maybe -fvectorize-tree 19:46:53 don't remember 19:46:53 AnMaster: just with -O3 19:47:00 -!- kar8nga has joined. 19:47:00 -!- kar8nga has quit (Read error: 104 (Connection reset by peer)). 19:47:05 I don't think this computer does vectorisation 19:47:10 -!- kar8nga has joined. 19:47:10 but I'll try and see what happens 19:47:10 -!- kar8nga has quit (Read error: 54 (Connection reset by peer)). 19:47:21 ais523, gcc doesn't vectorize without -ftree-vectorize 19:47:27 besides, that loop won't vectorise for obvious reasons 19:47:30 -!- kar8nga has joined. 19:47:30 -!- kar8nga has quit (Read error: 104 (Connection reset by peer)). 19:47:31 let me rewrite it as one that will 19:47:38 ais523, see also -ftree-vectorizer-verbose 19:47:40 -!- kar8nga has joined. 19:47:40 -!- kar8nga has quit (Read error: 104 (Connection reset by peer)). 19:47:50 it will tell you why it can/can't vectorise 19:47:53 -ftree-vectorizer-verbose=7 19:47:54 or so 19:48:17 some gcc versions segfault on that flag if too high, trying to print a null pointer 19:48:18 -!- kar8nga has joined. 19:48:18 -!- kar8nga has quit (Read error: 131 (Connection reset by peer)). 19:48:32 fixed in trunk 19:48:37 affects gcc 4.3 at least 19:48:43 cc1: error: unrecognized command line option "-ftree-vectorise" 19:48:49 ais523, how old? 19:48:55 gcc 3.x or what? 19:48:57 gcc (Ubuntu 4.3.2-1ubuntu11) 4.3.2 19:49:01 -!- kar8nga has joined. 19:49:01 -!- kar8nga has quit (Read error: 104 (Connection reset by peer)). 19:49:04 ais523, spell it amercian 19:49:06 it will help 19:49:09 -!- kar8nga has joined. 19:49:09 -!- kar8nga has quit (Read error: 54 (Connection reset by peer)). 19:49:15 american* 19:49:40 -!- kar8nga has joined. 19:49:40 -!- kar8nga has quit (Read error: 104 (Connection reset by peer)). 19:49:42 ais523, it helped right? 19:49:53 yes 19:49:56 wtf is up with kar8nga's connection, this is getting irritating 19:50:24 no it's not... 19:50:27 I haven't even noticed it 19:50:33 nowhere near moozilla levels yet 19:50:39 well, it didn't vectorise either the while or the for when I tested 19:50:40 -!- kar8nga has joined. 19:50:40 -!- kar8nga has quit (Read error: 104 (Connection reset by peer)). 19:50:40 ehird, a lot more often 19:50:43 as you see 19:50:49 AnMaster: no, my brain just filters it out 19:50:50 a.c:8: note: not vectorized: no vectype for stmt: D.1209_21 = i[c_44] scalar_type: int 19:50:53 why not ignore join/parts 19:51:01 "I'm irritated." "No you're not." 19:51:02 ais523, yes they depend on each other I believe 19:51:05 ais523, also try -march 19:51:07 to correct 19:51:11 like something with sse 19:51:19 or at least mmx 19:51:28 * kerlo tries to find ais523's lambda scoping example 19:51:29 -!- kar8nga has joined. 19:51:29 -!- kar8nga has quit (Read error: 104 (Connection reset by peer)). 19:51:32 AnMaster: what do you recommend? 19:51:43 ais523, well what cpu is it? 19:51:53 I don't care, I'm not actually planning to run the program 19:51:57 just compile to asm and read the asm 19:52:12 ais523, -march=core2 then? 19:52:13 -!- kar8nga has joined. 19:52:13 -!- kar8nga has quit (Read error: 54 (Connection reset by peer)). 19:52:36 AnMaster: ah, it vectorised both of them 19:52:43 ais523, anyway you can't vectorise that since all modify i 19:52:48 yes, I rewrote the program 19:52:58 ais523, it did? doesn't with older gcc 19:53:02 4.1.2 that is 19:53:20 int main(void) { 19:53:22 int getchar(void), i[16], c; 19:53:23 c=0; while(c<16) {c[i]=getchar(); ++c;} 19:53:24 c=0; while(c<16) {c[i]*=c[i]; ++c;} 19:53:26 for(c=0; c<16; ++c) {c[i]*=c[i];} 19:53:28 return i[getchar()]; 19:53:29 } 19:53:34 I'm not at all surprised, because the while and the for loop are completely synonymous 19:53:44 -!- Judofyr has joined. 19:53:55 how the heck could that for loop be vectorised? it includes a function call 19:54:01 not the first one 19:54:07 loops 2 and 3 are vectorised 19:54:08 oh wait 19:54:10 which are equivalent 19:54:10 misread it 19:54:25 loop 1 is just there to prevent gcc constant-folding 19:54:27 by using user input 19:54:35 also, I apologise for the declarations line 19:54:42 that's legal C, and good for brevity, but very confusing 19:54:48 C-INTERCAL used it a lot before I fixed that sort of thing 19:55:05 "fix"? 19:55:06 you mean break 19:55:12 ehird: no, not really 19:55:20 writing int getchar(void); inside a function is legal 19:55:21 int getchar(void), i[16], c; <-- function prototype and variables in one? 19:55:22 but confusing 19:55:24 AnMaster: yep 19:55:27 ouch 19:55:32 Well, having written this silly lisp-bot, I think I'll try writing a serious one. 19:55:45 I bet you didn't even know that you can declare library function prototypes inside a lexical scope 19:55:49 because it's an insane thing to do 19:55:49 ais523, anyway using a volatile variable would have worked too 19:56:01 it is what I usually do 19:56:01 AnMaster: I doubt it, that would prevent the compiler vectorising 19:56:04 surely? 19:56:04 Is a volatile variable a variable that is capable of varying? 19:56:09 ais523, depends on where 19:56:13 yes for the first loop 19:56:16 but not for the rest? 19:56:19 if 19:56:21 kerlo: it tells the compiler that the variable might change unpredictably without it knowing 19:56:28 volatile int src; 19:56:31 normally, because you've given a pointer to it to an interrupt handler or to some other program 19:56:33 Interesting. 19:56:34 c=0; while(c<16) {c[i]=src; ++c;} 19:56:44 ais523, how would it affect the other loops? 19:56:54 kerlo: for instance, if you write volatile int i; i=1; i=2; 19:57:02 then the compiler will store both 1 and 2 in memory where i is 19:57:13 because volatile tells it not to get rid of redundant reads and writes 19:57:23 yes could be DMA or whatever 19:57:33 like a memory mapped char output 19:57:36 or a memory-mapped hardware register, I've used volatile for those before 19:57:43 ais523, yes exactly 19:57:57 the other thing volatile does is to tell the compiler to definitely not store the variable in a register 19:58:01 ais523, you wrote kernel stuff? 19:58:02 which is useful when messing around with longjmp 19:58:08 AnMaster: embedded stuff 19:58:11 aha 19:58:11 with no OS 19:58:20 right 19:58:33 volatile int eax __asm__("%eax"); 19:58:38 (actually works :-)) 19:59:00 ais523, actually it may still have to put it in a register, but it need to load/store it before/after 19:59:12 some arches may not be able to operate on stuff not loaded in registers 19:59:19 AnMaster: it may need to do things via registers, yes 19:59:28 but volatile tells it to reread the value whenever it's needed 19:59:33 ehird: yes, I know that works 19:59:38 I've written such before, for another architecture 19:59:42 i was talking to AnMaster before 19:59:45 errr 19:59:46 s/before/too/ 19:59:49 -!- kar8nga has joined. 19:59:50 -!- kar8nga has quit (Read error: 104 (Connection reset by peer)). 19:59:52 ais523, though I think add on x86 may take memory operands? 20:00:01 also 20:00:06 ais523: also 20:00:07 what does volatile int eax __asm__("%eax"); do? 20:00:08 if you're doing that 20:00:11 why not just write it as __asm__ 20:00:12 -!- kar8nga has joined. 20:00:12 -!- kar8nga has quit (Read error: 54 (Connection reset by peer)). 20:00:17 AnMaster: err that syntax is wrong 20:00:20 should be 20:00:26 volatile int *eax __asm__("%eax"); 20:00:31 AnMaster: then *eax reads the eax register 20:00:37 and *eax=...; sets it 20:00:42 (on x86) 20:00:45 :-D 20:00:47 ehird, ok, but what does volatile for it mean? that it may not be stored in a register? 20:00:59 AnMaster: well, %eax changes all the freaking time 20:01:05 yes true 20:01:05 it's just telling gcc to not try and be clever with it... 20:01:11 ah 20:01:24 ehird, the "must not store in a register" bit is confusing though 20:01:26 AnMaster: it's telling gcc that %eax might change when it does something that doesn't obviously change the variable 20:01:35 right 20:02:17 ais523, it obviously ignore the bit about the "not store in a register", I bet that it won't work with longjmp 20:02:33 also, could you pass this pointer around? 20:02:43 yes 20:02:45 or cast the pointer to an int? 20:02:45 also, no 20:02:47 AnMaster: it isn't a pointer 20:02:50 ais523: yes it is 20:02:55 int *eax means that eax stores an int* 20:02:55 it looks like that though 20:02:55 volatile int *eax __asm__("%eax"); 20:03:08 not that you can do &eax and get a sensible value 20:03:15 the variable has a pointer type, but it can't be pointed to 20:03:18 ah 20:03:19 well, yes 20:03:30 yes of course it can't work like that in the machine code 20:03:35 but 20:03:44 memory mapped CPU registers would be fun 20:03:53 My GCC info pages say "5.40.2 Specifying Registers for Local Variables -- You can define a local register variable with a specified register like this: register int *foo asm ("a5");". 20:04:04 I have heard of register mapped memory before 20:04:11 isn't that an overloading of "register", fizzie? 20:04:14 but the other way around, no 20:04:46 Well, wouldn't using "volatile int *eax __asm__("foo")" be an overloading of volatile? 20:04:54 fizzie, err I think that means that the register will be reserved for that variable 20:05:05 fizzie: no? 20:05:16 fizzie, which isn't same as "lets see what is in this register anyway" 20:05:55 Well, that's the only sort of "explicit register names for variables" I could find in GCC docs with a quick glance. 20:06:19 fizzie, but as far as I know the meaning is quite different 20:07:07 Well, it doesn't reserve the register for that value except for where it's live, but I guess it is a bit different. 20:07:56 -!- KingOfKarlsruhe has joined. 20:08:22 I just can't find in the docs any references to "here's how you declare a variable which will read whatever eax is, but not reserve eax if you store something in it". 20:08:48 Puff of cream. 20:08:49 -!- kerlobot has quit (Read error: 104 (Connection reset by peer)). 20:09:00 fizzie: that's not done via a variable, I think 20:09:13 you want to give an asm command with a constraint to read eax without reserving it 20:09:33 OTOH, if you do that, there's quite a chance that the compiler will put the variable you're trying to copy to in eax, to save a command 20:10:35 Yes, well, if that's the case, I don't see how that "volatile int *eax" thing is different. It sounds like it would just tell GCC to explicitly use the eax register for storing values stored in that variable. 20:10:56 ais523, if you didn't do that then volatile makes no sense since it wouldn't change 20:11:14 fizzie: the question is, really, what exactly are you trying to do? 20:11:35 I'm trying to understand what you are speaking of. :p 20:12:01 And what that "volatile int *eax" was all about, since the only similar form I'm aware of is the "register int *eax asm("eax");" thing. 20:12:19 actually, doing it with register is more common IIRC 20:12:23 and I think that's the form I saw 20:12:25 hm. ok 20:12:55 that would make a lot more sense 20:29:47 -!- kar8nga has joined. 20:29:47 -!- kar8nga has quit (Read error: 104 (Connection reset by peer)). 20:30:10 -!- kar8nga has joined. 20:30:10 -!- kar8nga has quit (Read error: 54 (Connection reset by peer)). 20:31:09 -!- kar8nga has joined. 20:31:09 -!- kar8nga has quit (Read error: 104 (Connection reset by peer)). 20:31:26 -!- kar8nga has joined. 20:31:26 -!- kar8nga has quit (Read error: 54 (Connection reset by peer)). 20:31:44 -!- kar8nga has joined. 20:31:44 -!- kar8nga has quit (Read error: 131 (Connection reset by peer)). 20:32:23 -!- kar8nga has joined. 20:32:23 -!- kar8nga has quit (Read error: 104 (Connection reset by peer)). 20:33:20 -!- kar8nga has joined. 20:33:20 -!- kar8nga has quit (Read error: 104 (Connection reset by peer)). 20:33:59 -!- kar8nga has joined. 20:33:59 -!- kar8nga has quit (Read error: 104 (Connection reset by peer)). 20:34:18 -!- kar8nga has joined. 20:34:18 -!- kar8nga has quit (Read error: 54 (Connection reset by peer)). 20:34:59 -!- kar8nga has joined. 20:34:59 -!- kar8nga has quit (Read error: 54 (Connection reset by peer)). 20:35:16 -!- kar8nga has joined. 20:35:16 -!- kar8nga has quit (Read error: 131 (Connection reset by peer)). 20:36:04 -!- kar8nga has joined. 20:36:04 -!- kar8nga has quit (Read error: 104 (Connection reset by peer)). 20:36:21 -!- kar8nga has joined. 20:36:21 -!- kar8nga has quit (Read error: 54 (Connection reset by peer)). 20:36:49 -!- kar8nga has joined. 20:36:49 -!- kar8nga has quit (Read error: 104 (Connection reset by peer)). 20:37:24 -!- kar8nga has joined. 20:37:24 -!- kar8nga has quit (Read error: 104 (Connection reset by peer)). 20:38:02 hmm. 20:38:10 well, that's about 2/3 of a screenful of quitjoin spam 20:38:22 -!- kar8nga has joined. 20:38:22 -!- kar8nga has quit (Read error: 54 (Connection reset by peer)). 20:38:28 i suppose it depends on your screensize 20:39:00 -!- kar8nga has joined. 20:39:01 -!- kar8nga has quit (Read error: 104 (Connection reset by peer)). 20:39:06 1/1, says i 20:39:15 -!- kar8nga has joined. 20:39:15 -!- kar8nga has quit (Read error: 54 (Connection reset by peer)). 20:39:49 -!- kar8nga has joined. 20:39:49 -!- kar8nga has quit (Read error: 131 (Connection reset by peer)). 20:40:07 a screenful now, with only 4 lines interrupting it 20:40:22 now, banning someone for unintentional quitjoin spam is too much, I think 20:40:29 could we reverse-ban kar8nga? 20:40:33 to stop them parting? 20:40:35 that would also stop the spam 20:41:11 it's not part, it's quit 20:41:17 well, stop them quitting too 20:41:36 -!- kar8nga has joined. 20:41:36 -!- kar8nga has quit (Read error: 54 (Connection reset by peer)). 20:41:37 * oerjan swats ais523 -----### 20:41:45 ow 20:41:54 -!- kar8nga has joined. 20:41:54 -!- kar8nga has quit (Read error: 54 (Connection reset by peer)). 20:42:08 -!- kar8nga has joined. 20:42:08 -!- kar8nga has quit (Read error: 131 (Connection reset by peer)). 20:42:17 i would swat kar8nga, but he isn't here long enough at a time 20:42:27 Reminds me of that Hotel California song. "You can /quit any time you like / but you can never leave." 20:42:33 The reverse-banning, that is. 20:42:50 -!- kar8nga has joined. 20:42:50 -!- kar8nga has quit (Read error: 104 (Connection reset by peer)). 20:43:55 -!- kar8nga has joined. 20:43:55 -!- kar8nga has quit (Read error: 104 (Connection reset by peer)). 20:44:34 Maybe if I do a five-minute ban, his/her client will not try to rejoin after failing once. 20:44:37 -!- kar8nga has joined. 20:44:37 -!- kar8nga has quit (Read error: 54 (Connection reset by peer)). 20:44:45 -!- ChanServ has set channel mode: +o fizzie. 20:45:03 -!- fizzie has set channel mode: +b kar8nga!*@*. 20:45:26 fizzie: shock! 20:45:28 actual op powers! 20:45:32 never do this again :-P 20:45:50 He is all powerful 20:45:54 Bow to him! 20:45:55 Also 20:45:59 * ais523 is op-striken 20:45:59 -!- join has changed nick to Slereah. 20:46:01 *stricken 20:46:08 *chicken 20:46:09 Slereah: how did you end up with the nick "join", anyway? 20:46:09 hey fizzie 20:46:11 op me! 20:46:21 ehird: you know how badly that went last time... 20:46:22 *thicken 20:46:31 ais523: yes, I wrote a bot to keep me an op :D 20:46:34 ais523 : You know when your nick is registered and you connect the server? 20:46:37 and lament de-opped it :'( 20:46:44 It puts "/nick" as your default line 20:46:49 oh 20:46:56 And I entered /join #esoteric 20:46:59 well, in that case I'm doubly-shocked that nobody has taken join yet 20:47:01 besides, mine doesn't 20:47:03 it just tries ais523_ 20:47:05 then ais523__ 20:47:11 then prompts, I think, in a dialog box 20:47:13 -!- fizzie has set channel mode: -b kar8nga!*@*. 20:47:15 It's different, ais523 20:47:22 Because I actually stay Slereah 20:47:35 Because Freenode doesn't actually enforce registered nickls 20:47:39 oh, just joining with a nick registered by someone else 20:47:45 and Freenode does, but only on request from the nick's owner 20:47:56 you can tell NickServ to enforce your nick, but hardly anyone ever does 20:48:09 -!- fizzie has set channel mode: -o fizzie. 20:48:13 -!- Slereah has changed nick to moot. 20:48:16 :D 20:48:18 Bow! 20:48:29 go away, little girl 20:48:30 Hell, moot is actually registered! 20:48:36 fizzie: you deopped fizzie? What did they do wrong? 20:48:40 that was a moot question 20:48:47 -!- moot has changed nick to Slereah. 20:48:56 ais523: /me recalls deopping AnMaster in #ESO because he opped me without first asking for permission from an op 20:49:04 ais523: Senseless banning of poor, defenseless kar8nga. 21:03:44 It puts "/nick" as your default line <-- what client? 21:03:47 mine never does that 21:04:18 mIRC 21:04:19 probably 21:04:23 hm ok 21:04:28 mIRC, yeah 21:04:31 (mIRC is actually a good IRC client, despite being Windows software) 21:05:00 Or use Insurgent Sysreset, if you're an /i/nsurgent :D 21:05:34 21:05 Error(404): #twitter Your message is 142 characters long. Your message was not sent. 21:05:41 Stupid artificial restrictions 21:05:52 * AnMaster registers the nick join btw 21:05:59 hey 21:06:01 Oh you 21:06:01 that's not very nice 21:06:04 it's Slereah's 21:06:11 Slereah, he forgot to register it 21:06:15 so? 21:06:17 still jackassy 21:06:24 someone needed to register it 21:06:31 let Slereah, then 21:06:34 ehird, I waited several hours 21:06:40 and he didn't register it 21:06:40 and it isn't Slereah's nick really, Slereah made it clear that it was by accident 21:06:42 without telling him you were going to. 21:06:44 so his own fault 21:06:47 ... 21:06:50 you're an ass. 21:06:51 ehird, and? 21:06:55 no I'm not you are 21:07:00 you took otpbot 21:07:03 without telling me 21:07:09 ...otpbot was my name. 21:07:15 ehird, no it was mine, I wanted it 21:07:20 I didn't even realise there was an otpbot 21:07:21 same logic sorry 21:07:26 ais523, there isn't 21:07:27 I came up with otpbot _before_ you did. 21:07:30 he used optbot 21:07:31 in the end 21:07:35 So only "same logic" if you're an idiot. 21:07:38 Wait a second. 21:07:42 but I wanted it for otpbot as in Erlang/OTP 21:08:16 22:05 -NickServ(NickServ@services.)- 1 failed login since Jan 18 21:05:10 2009. 21:08:16 22:05 -NickServ(NickServ@services.)- Last failed attempt from: Cats!n=92825d6c@Pantheon.Kanotix.com on Jan 13 18:10:37 2009. 21:08:18 interesting 21:08:25 * ais523 notes that tusho and ehird are different people according to NickServ 21:08:31 21:07 but I wanted it for otpbot as in Erlang/OTP 21:08:35 you wanted it _afterwards_ 21:08:35 (oh yes I own that nick, used it for a AYB joke) 21:08:44 whereas you only regisered join because you saw Slereah using it 21:08:45 ehird, I had plans long before 21:08:52 uh-huh. 21:09:05 that's about as verifiable as when i claimed I came up with the name cfunge first, AnMaster 21:09:06 -!- BeholdMyGlory has quit (Connection timed out). 21:09:19 ehird, oh you admit then? 21:09:23 great 21:09:25 afk 21:09:36 bye, jackass 21:10:53 Thank goodness, VIP is here to guide you in these troubled times : 21:10:54 http://membres.lycos.fr/bewulf/Divers7/Take%20it%20easy.jpg 21:11:17 i'm not angry when I call people asses. 21:11:28 getting angry over assholes would be counterproductive 21:12:03 ehird, tell me, why are you so fond of donkeys? 21:12:15 Because of their huge penises 21:12:16 :DDDDDDDDDDDDDDDDD 21:12:19 congratulations. you are the 1 billionth person to make that joke, AnMaster. 21:12:26 you win £-100. pay up. 21:12:33 ehird, alas no 21:12:48 ehird, I'm the 1 billionth + 1 person 21:13:01 x'DDDDD 21:13:03 you missed that one over there >> 21:13:09 GregorR? 21:13:17 Slereah, no, in the other room 21:13:17 * ais523 wonders about making a map of UseNet 21:13:19 *Usenet 21:13:21 Owait, now it points at fizzie 21:13:23 -!- MigoMipo has changed nick to QwertUiop. 21:13:32 Slereah: indecisive asses are the worst. 21:13:34 after all, we know that comp.lang.c++ is two rooms down the corridor on the left from comp.lang.c 21:13:36 -!- QwertUiop has changed nick to MigoMipo2. 21:13:43 there may be enough of those references to draw a map of the whole thing 21:13:55 ais523: wut? 21:14:02 ais523, what like alt.porn alt.porn.makes.no.sense (I forgot the details, it was something like alt.bin.whatever.sex-something.clinton iirc) 21:14:04 -!- MigoMipo2 has changed nick to MigoMipo. 21:14:09 * oklopol wonders what this usenet is everyone keeps referring to :P 21:14:12 or wait no 21:14:23 oklopol: you've never heard of usenet? 21:14:24 Usenet is where you use the internet 21:14:32 ais523: yes, tons of times. 21:14:37 ais523, alt.bin.pic.sex.parachute or such 21:14:42 I used to go to usenet, because the first French furry group was thar :o 21:14:43 because people keep referring to it 21:14:51 Usenet is pretty much shit, though 21:14:51 ais523, make whatever sense you want of that 21:14:53 oklopol: do you know how to access it? 21:14:56 I didn't check what it was 21:14:59 ais523: no 21:15:03 AnMaster: alt.binaries., surely? 21:15:05 How come most /b/tards are furries? 21:15:07 ais523, yes maybe 21:15:08 Hypocrites :-P 21:15:12 ais523, I don't use usenet a lot 21:15:16 oklopol: you can view it via groups.google.com 21:15:21 have a look at alt.lang.intercal some time 21:15:23 ais523, not the binaries 21:15:25 iirc 21:15:27 it's the esolang group, but it isn't very active 21:15:27 however 21:15:29 ehird : Remember the credo! 21:15:41 http://membres.lycos.fr/bewulf/Divers/1167175439619.gif 21:16:03 Usenet is the last bastion of the True Spirit of the Internet 21:16:13 even if there was that terrible accident where it got stuck in September 2003 21:16:19 *1993 21:16:22 What is the true spirit of the internet, ais523? 21:16:31 Slereah: being able to talk to other people about anything you want 21:16:35 without problems 21:16:40 Define "problems" 21:16:54 problems != flamewars 21:16:56 :P 21:17:02 well, you get flamewars on Usenet too 21:17:07 Yeah. 21:17:10 but nobody can be blocked from it, pretty much 21:17:32 the main tool for debate de-escalation there is the equivalent of /ignore 21:17:37 if you don't like what someone's saying, ignore them 21:17:40 ais523, btw, if you have ipv6, xs4all provides a good usenet read only server, very fast and very complete. Doesn't filter binary channels either. And it is at least available to users of the SixXS tunnel 21:17:41 and talk to the people you do like 21:17:43 not sure about other ipv6 21:17:54 http://encyclopediadramatica.com/Alt.tasteless 21:17:55 AnMaster: I don't, the computer's fine but the network here can't handle it 21:18:02 ais523, tunnel? 21:18:03 Why hello there, I am internet of the past. 21:18:10 that is what I use... 21:19:14 "In 1993, alt.tasteless members orchestrated one of the first forum invasions, in which rec.pets.cats (a newsgroup for cat-lovers) was mercilessly trolled." 21:19:29 before or after september/ 21:19:35 End of august :D 21:20:23 -!- MigoMipo has left (?). 21:20:40 Slereah, where does it say that? 21:21:24 There's a link to the thread : http://groups.google.com/group/alt.tasteless/browse_thread/thread/3f265cf9ef49d3e1 21:21:45 Slereah, doesn't work for me, it refuses even when I click the 'yes i'm sure' button 21:21:55 That's because you are underaged 21:21:57 Noti boy 21:22:02 Google have been doing a lot of archiving of Usenet 21:22:02 Slereah, I'm not. 21:22:13 they even bought up all the Usenet archives from before they started 21:22:16 although I'm not entirely sure why 21:22:21 -!- FireFly has quit ("Later"). 21:22:26 -!- KingOfKarlsruhe has quit (Remote closed the connection). 21:22:33 hmm... deja.com still redirects to groups.google.com, after all this time 21:22:46 deja.com? 21:22:50 wtf would that be 21:22:53 AnMaster: Usenet archivers 21:22:56 heh 21:22:59 they got bought out by Google 21:23:12 ais523, well how much would the domain cost google? relatively speaking 21:23:19 it isn't like they would notice 21:23:25 they got the domain free with the company 21:23:30 so they may as well maintain it, I suppose 21:23:34 ais523, well they have to renew it 21:23:38 in case anyone still wants to visit Deja's archives for some reason 21:23:57 or in case someone also got stuck in September 1993 and has only just come out of their coma 21:23:57 ais523, also I hope links still work 21:24:02 permanent url you know 21:25:11 http://encyclopediadramatica.com/Meow_Wars 21:25:12 :D 21:26:58 why are you linking to that horrible site all the time 21:27:18 You must face your demons, AnMaster 21:27:26 Slereah, ? 21:27:32 that sounds like a quote from something 21:28:04 -!- oerjan has quit ("Good night"). 21:28:40 It's a stock movie quote, AnMaster 21:28:48 It is not a quote of anything in particular 21:29:16 hm ok 21:29:19 that 21:29:25 *that reminds me 21:29:38 * AnMaster checks if there has been a new beta of that open source game yet 21:29:54 yes!, no activity for several months before, finally a new beta 21:30:39 Wait.... 21:30:43 That is no beta... 21:30:52 that is a 1.0 release! 21:30:52 :D 21:31:32 It is sad that the first association for any sentence of "that is no X" is the "that is no moon" thing. 21:31:45 fizzie, that was intentional 21:31:57 -!- FireFly has joined. 21:31:59 AnMaster: which game? 21:32:11 ais523, blob wars: blob and conquer 21:32:16 needs 3D acceleration 21:32:21 that's a pretty ridiculous name... 21:32:29 ais523, yes, but quite playable IMO 21:32:36 what genre? 21:32:59 ais523, well previous one was jump and run with guns. This one is third person shooter 3D 21:33:11 hmm... I don't generally play shooter games 21:33:20 ais523, and well if I played table top RPGs I would play Toons 21:33:21 I used to play platform games a bit, but rarely do nowadays 21:33:34 Saving to: `download.php?proj=blobAndConquer&file=blobAndConquer-1.05-1.tar.gz&type=zip' 21:33:36 -_- 21:33:43 that's quite a filename 21:33:53 yes 21:34:14 it reminds me of the dontcountme=s that used to be at the end of URLs on Wikipedia 21:34:24 ais523, what? I never seen that 21:34:27 also what was it for 21:34:27 to avoid triggering the page counters, which ignored URLs ending in s because they thought it was js or css 21:34:40 it wasn't on the actual pages, but on things that were XHRed via scripts 21:34:41 ais523, err 21:34:53 they have better counters now 21:34:57 based on sampling the HTTP logs 21:35:16 and JS which loads images a small percentage of the time, to avoid Wikipedia DDOSing its own servers 21:35:24 ais523, oh that reminds me... the main.css is included as main.css?164 21:35:25 when I look 21:35:28 on a wiki I run 21:35:31 any idea why? 21:35:35 that's an anti-cache-problems tool 21:35:37 since main.css is a static file 21:35:48 ais523, err I like clients to cache it 21:35:50 it may be static, but it can be changed by upgrades 21:35:52 since it is using a lot of my bw 21:35:56 clients are told to cache it aggressively 21:36:04 but if it changes across an upgrade, the 164 changes to 165 21:36:05 aha 21:36:07 so clients will get a new copy 21:36:11 right 21:36:18 the caching information is hidden in the URL 21:36:21 effectively 21:36:26 ais523, also where are they told to cache it aggressively? 21:36:33 in the HTTP headers, I think 21:36:36 since it is a static file 21:36:41 it would depend on server setup 21:36:49 yes, it dose 21:36:51 *does 21:36:54 and since it is shared hosting I have no control over that 21:36:59 but remember that MediaWiki was invented for Wikimedia, who do have control over that 21:37:02 nor did I see anything in mediawiki manual 21:37:12 ais523, I think it can be done in .htaccess 21:38:03 ais523, also ehird was surprised the supertux site had around 15k hits on images *per day* 21:38:10 if you know of that game 21:38:26 I've vaguely heard of it, but no more than that 21:38:30 don't even know what it's about 21:38:33 but the name strongly suggests Linux 21:38:38 ais523, super mario style 21:39:50 ais523, and I'm a developer on it. I talked to him about image hits because I was implementing anti-hotlinking since that was using quite some bw 21:40:14 based on referrer? 21:40:53 ais523, yes, and no blocking if empty referrer of course 21:40:58 and allowing google image search and so on 21:42:03 ais523, some people were linking screen shots, full size and then scaling it down to thumbnail in tag 21:42:21 AnMaster: and wasting their reader's bandwidth as well as yours 21:42:29 what's your anti-hotlink image? 21:42:52 ais523, a gif animation :D 21:42:54 let me link it 21:43:07 AnMaster: oh dear 21:43:12 I'm not sure if I want to look at it 21:43:12 ais523, http://supertux.lethargik.org/errors/img/nohot.gif 21:43:15 can you describe it? 21:43:26 ais523, too slow to cause epilepsy 21:43:28 haha awesome 21:43:30 ais523, only text 21:43:35 what does it say? 21:43:48 "Please don't hotlink\nimages from this site" 21:43:53 simple enough 21:43:59 so why the animation? 21:44:04 ais523, check it out 21:44:16 it is not shock pic 21:44:17 or such 21:44:26 and it won't cause epilepsy, it is too slow for that 21:44:52 ais523, well? 21:45:04 AnMaster: it's just such a pain for me to load images from IRC 21:45:15 ais523, ... 21:45:17 besides, I don't see the animation 21:45:18 I tried 21:45:21 ais523, just copy and paste to the browser 21:45:23 but my photo viewer prorgams don't show it 21:45:24 ais523, it inverts 21:45:38 I don't really like the colour scheme either, but I suppose that's the point 21:45:40 ais523, as in text and bg colors change place 21:45:46 every 5000 ms or something 21:45:57 err 500* 21:45:57 more like every second 21:45:59 probably 21:46:07 yeah 500 21:46:11 oklopol, I remember it was 5 and some zero 21:46:13 zeros* 21:46:49 ais523, also gimp will show both as layers 21:46:51 -!- BeholdMyGlory has joined. 21:47:39 Lovely: "This game contains scenes of gore"* (* which can be switched off) 21:48:18 unreal tournament allows you to turn off the gore 21:48:23 like, in case you're a kid playing it or something :| 21:49:17 why are you linking to that horrible site all the time 21:49:22 ED is useful for internet culture. 21:50:02 wish it wasn't written in it 21:50:24 Why are you writing in that horrible language all the time? 21:50:32 FireFly, ? 21:50:39 AnMaster: What? FireFly: lol 21:50:57 Well, for others esolangs are pretty horrible.. I guess it's the same with ED 21:50:59 FireFly: which lang are you thinking of? 21:51:07 ah, I see 21:51:21 wish it wasn't written in it 21:51:24 can I have this in coherent form 21:51:26 ehird, basically ED is written in /b/tard style a lot of the time. I mean compare the language used if wikipedia would discuss "lol" and if ED would. 21:51:36 I haven't looked at the articles 21:51:48 "I WISH AN INTERNET CULTURE COMPENDIUM DIDN'T TALK IN AN INTERNET CULTURE-RELATED STYLE" 21:52:01 ED is useful for internet culture. wish it {ed} wasn't written in it {the style of that} 21:52:10 ehird, correct. 21:52:13 which is the most ridiculous complaint I've ever heard. 21:52:23 ehird, also all the shock pics 21:52:35 yeah. all the vast expanses of them. 21:52:46 * ais523 wonders if Wikipedia has an article on lol 21:52:48 I'd guess yes 21:52:54 ais523: it redirects to internet slang 21:52:59 makes sense 21:53:06 although teh gets its own article, IIRC 21:53:09 anyway, most non-nsfw-related ED articlse are sfw. Well, not safe for owrk but not offensive. 21:53:18 ais523, that should redirect to "the" 21:53:22 AnMaster: no, it doesn't 21:53:28 although there's a disambig header 21:53:29 ais523, I didn't say it did 21:53:32 http://en.wikipedia.org/wiki/Special:Search?go=Go&search=teh 21:53:35 I said it *should* 21:53:36 the typo has enough of its life to deserve an article, AnMaster 21:53:40 the word has too much of its own culture 21:53:50 ehird, Not notable! 21:53:52 your own view of the way Things Should Be does not mean wikipedia shouldn't reflect reality 21:53:57 AnMaster: no, very notable 21:54:00 what you mean to say is, "I dislike it" 21:54:00 oh no, it has an image now 21:54:19 ehird, Missing reliable sources! Reads as advertisement! Is missing references! 21:54:26 "A typo on a poster." 21:54:38 ehird, also no 21:54:49 I was just imitating the style of wp 21:55:06 I'm not entirely convinced the image adds to the article 21:55:16 ais523, or that it is true 21:55:27 but then, it's reasonably common to drop a random vaguely-relevant image into an article in the hope of meeting GA criteria 21:55:50 "This image is of a poster, and the copyright for it is most likely owned by either the publisher or the creator of the work depicted. It is believed that the use of scaled-down, low-resolution images of posters " <-- um, so you can't take a pic of a cityscape containing any posters? 21:55:54 that would be fscked 21:56:19 I mean, it is public space 21:56:46 AnMaster: it depends on what it's a picture of 21:56:52 and which jurisdiction, and all sorts of things 21:57:00 ais523, like how much of the image it covers? 21:57:03 but you can't, say, take a photo of an advert and crop out the logo of the advertiser 21:57:16 copyright law is really complex and confusing 21:57:42 anyway, the general reasoning is to, on Wikipedia, avoid images which contain even a small amount of copyvio stuff, unless it's covered by fair use 21:57:52 because purely free-licensed images are fine 21:57:56 Heh, "purpose of use" field in the fair use rationale blob: "The spelling error in the image is unique and it depictures the Teh article's subject." 21:58:03 Yes, it is an unique spelling error. 21:58:16 a free-licensed image which depends on fair use for a few pixels is more debatable 21:58:25 because there are ways in which it can't be modified 21:58:36 fizzie: what's your opinion on "a unique" vs. "an unique"? 21:58:45 it's a unique... 21:58:53 I normally use "a unique", because the pronunciation of "unique" starts with a consonant, even though the word itself doesn't 21:59:06 an unique is incorrect, i've never heard anyone say that 21:59:14 I hear it quite a bit 21:59:49 My opinon is that I shouldn't have an opinion, being so very non-native speaker. And I would write it as "a unique", it's just that I caught myself only after the newline. 21:59:57 -!- GreaseMonkey has joined. 22:01:30 "a unique" 22:02:32 oklopol: i want oklotalk - - bot ;-) 22:02:35 in here ;-) 22:02:37 tonight ;-) 22:02:38 now ;-) 22:02:47 I blame the Finnish pronunciation where 'u' always sounds the same, and is always a vowel. 22:02:48 preferably written in something stupid 22:02:52 no 22:02:55 it already exists 22:02:55 :3 22:03:11 fizzie: most languages are more logical than English 22:03:13 -!- ehird has set topic: IRC IRC IRC. 22:03:14 -!- bsmnt_bot has set topic: IRC IRC IRC | http://tunes.org/~nef/logs/esoteric. 22:03:18 maybe that's why English does so well... 22:03:21 ais523: do you like our auto-topic-setting? 22:03:27 yes, very much 22:03:38 it's the work of mizardx and I :D 22:03:43 -!- ais523 has set topic: IRC IRC IRC | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric. 22:03:53 * ais523 wonders if bsmnt_bot will add another 22:03:55 it doesn't do anything if the logs are already in the topic 22:03:57 apparantly not, though 22:04:03 that would have made for a really amusing botloop 22:04:03 wut 22:04:05 -!- ehird has set topic: http://tunes.org/~nef/logs/esoteric ** so you can do arty things like this. 22:04:12 bsmntbombdood: we taught bsmnt_bot to do this: 22:04:13 -!- ehird has set topic: aaaaaaa. 22:04:14 -!- bsmnt_bot has set topic: aaaaaaa | http://tunes.org/~nef/logs/esoteric. 22:04:21 oh 22:04:22 bsmntbombdood: your bot has found itself a new usefulness 22:04:27 ^bf ,[.,]!Test 22:04:27 Test 22:04:28 -!- GreaseMonkey has set topic: aaaaaaa | http://tunes.org/~nef/logs/esoteric/penis. 22:04:46 hmm... we'll have to dig the BF-in-bsmnt_bot out of the logs 22:04:46 so much for useful 22:04:53 ^ aren't you glad you don't use a tinyurl one? 22:05:03 GreaseMonkey: ? 22:05:08 I have a copy, but all the whitespace got corrupted 22:05:16 and I don't think there's a way to automatically reconstruct it 22:05:17 because someone could always append to it and hijack it 22:05:28 this, incidentally, is what caused my hatred of Python 22:05:29 GreaseMonkey: ... what? 22:05:48 -!- ais523 has set topic: (a(:^)*S):^. 22:05:48 -!- bsmnt_bot has set topic: (a(:^)*S):^ | http://tunes.org/~nef/logs/esoteric. 22:05:50 ais523: unsurprisingly, Python is not optimized for entering code over IRC. 22:05:54 e.g if you had tinyurl.com/esolog and someone managed to take /esologs for something then yeah 22:05:58 crazy I know. 22:06:03 GreaseMonkey: how about they could just change the topic... 22:06:22 ^ul (a(:^)*S):^ 22:06:23 (a(:^)*S):^ 22:06:24 what if there were a bot? 22:06:30 GreaseMonkey: what? 22:06:37 ~bf ,[.,]!Test 22:06:50 like, a bot to autoappend some crap? 22:07:02 then we kick it. 22:07:38 ^bf >,[>,.]<[<]+++++++++++++++++++++++++++++++++.>[.>]!>,[>,.]<[<]+++++++++++++++++++++++++++++++++.>[.>] 22:07:38 ,[>,.]<[<]+++++++++++++++++++++++++++++++++.>[.>] 22:07:44 hmm... 22:08:02 ^bf >,[.>,]<[<]+++++++++++++++++++++++++++++++++.>[.>]!>,[>,.]<[<]+++++++++++++++++++++++++++++++++.>[.>] 22:08:03 >,[>,.]<[<]+++++++++++++++++++++++++++++++++.>[.>]!>,[>,.]<[<]+++++++++++++++++++++++++++++++++.>[.>] 22:08:09 ^bf >,[.>,]<[<]+++++++++++++++++++++++++++++++++.>[.>]!>,[.>,]<[<]+++++++++++++++++++++++++++++++++.>[.>] 22:08:09 >,[.>,]<[<]+++++++++++++++++++++++++++++++++.>[.>]!>,[.>,]<[<]+++++++++++++++++++++++++++++++++.>[.>] 22:08:12 that's better 22:08:20 even though it's cheating, really 22:10:31 that would have made for a really amusing botloop3 <-- happened yesterday 22:10:37 before they had it working 22:10:51 ehird: I think the point here was that since you can add any suffix to the log URL, if the bot it set to keep "tinyurl/foo" in the topic always it fails if someone gets "tinyurl/foobar" and sets that as the topic, without the bot adding the real URL. If you "just change the topic" you won't get rid of the real log URL. 22:11:08 oh. 22:11:14 well who cares, it's just for setting the topic easily 22:12:20 ChanServ could have a auto-append/prepend channel variables for that; there are 'topicappend' and 'topicprepend' commands, after all. 22:12:51 -!- MizardX has set topic: (a(:^)*S):^ | http://tunes.org/~nef/logs/esoteric/foo. 22:12:52 -!- bsmnt_bot has set topic: (a(:^)*S):^ | http://tunes.org/~nef/logs/esoteric/foo | http://tunes.org/~nef/logs/esoteric. 22:12:54 -!- bsmnt_bot has set topic: (a(:^)*S):^ | http://tunes.org/~nef/logs/esoteric/foo | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric. 22:12:58 -!- bsmnt_bot has set topic: (a(:^)*S):^ | http://tunes.org/~nef/logs/esoteric/foo | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric. 22:12:59 geh... again 22:13:01 ... 22:13:02 -!- bsmnt_bot has set topic: (a(:^)*S):^ | http://tunes.org/~nef/logs/esoteric/foo | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric. 22:13:06 sigh 22:13:06 -!- bsmnt_bot has set topic: (a(:^)*S):^ | http://tunes.org/~nef/logs/esoteric/foo | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric. 22:13:07 MizardX 22:13:09 why did you eff with it :P 22:13:11 -!- bsmnt_bot has set topic: (a(:^)*S):^ | http://tunes.org/~nef/logs/esoteric/foo | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric. 22:13:13 ~raw QUIT 22:13:16 -!- bsmnt_bot has set topic: (a(:^)*S):^ | http://tunes.org/~nef/logs/esoteric/foo | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric. 22:13:16 ~exec self.raw("QUIT") 22:13:20 ~exec self.raw("QUIT") 22:13:21 -!- bsmnt_bot has set topic: (a(:^)*S):^ | http://tunes.org/~nef/logs/esoteric/foo | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.org/~nef/logs/esoteric | http://tunes.. 22:13:22 -!- ChanServ has set channel mode: +o fizzie. 22:13:23 -!- fizzie has set channel mode: +t. 22:13:24 -!- ChanServ has set channel mode: -t. 22:13:27 -!- bsmnt_bot has quit. 22:13:29 fizzie: it'll stop 22:13:30 -!- bsmnt_bot has joined. 22:13:30 there we go 22:13:47 Well, +t would've been quicker, maybe. Except that chanserv removed it since it's in the mlock. 22:13:55 -!- bsmnt_bot has quit (Client Quit). 22:13:59 it's intereseting to have a channel mlocked at -t 22:14:02 *interesting 22:14:07 ... come back, bsmnt_bot 22:14:09 ... 22:14:20 ... shit 22:14:42 fizzie: can i call you overlord while you're op? 22:14:59 oklopol: You can call me overlord whenever you want, I don't mind. 22:15:01 -!- fizzie has set topic: (a(:^)*S):^. 22:15:13 fizzie: i'll keep that in mind. 22:15:23 I just have to test that chanserv topicprepend thing, I want to see if it adds a separator or something. 22:15:41 -!- ChanServ has set topic: fancy! | (a(:^)*S):^. 22:15:43 bots are always the correct solution 22:15:48 -!- ehird has set topic: aa. 22:15:52 Failure 22:15:53 Heh, yes, it added that | there. 22:16:39 It's not an auto-append, though. I'm not sure what it is for, really. 22:17:43 fizzie: changing the topic when you aren't opped and the channel is +t 22:17:59 Right, I guess there's that. 22:18:14 hey, who wants to fix bsmnt_bot 22:18:18 not i 22:18:27 :< 22:18:30 i'm writing a irc bot wrapper in awk 22:18:32 :P 22:18:35 ouch 22:20:11 -!- GreaseMonkey has quit ("Client Excited"). 22:21:48 Heh, interesting typo: "/frop gizzie" 22:21:51 -!- fizzie has set channel mode: -o fizzie. 22:22:10 -!- AnMaster has set topic: http://tunes.org/~nef/logs/esoteric. 22:22:19 fizzie: your hand was too far to the right 22:22:30 also 22:22:34 why this 22:22:45 I mean how hard could it be 22:22:54 ? 22:23:04 ais523: Maybe my keyboard was just too far to the left. It's not always my fault! 22:23:05 if (!substr(topic, "http://tunes.org/~nef/logs/esoteric") topic += "| http://tunes.org/~nef/logs/esoteric" 22:23:06 basically 22:23:08 well a space too 22:23:15 AnMaster: because we have to write it one line in python 22:23:21 ehird: that's easy enough 22:23:22 also, MizardX effed up the disconnection logic 22:23:27 right 22:23:27 so it's sitting there using up cycles 22:23:30 instead of reconnecting 22:23:41 ehird, kill it and restart it clean? 22:23:49 well k 22:23:55 -!- bsmntbombdood__ has joined. 22:24:00 just use the exec("""if !substr(topic, "http://tunes.org/~nef/logs/esoteric"):\n topic += "| http://tunes.org/~nef/logs/esoteric"\n""") trick 22:24:11 dc is the best irc client EVAR 22:24:14 that's how I wrote the BF interp in the first place 22:24:25 bsmntbombdood: dc the reverse-polish-notation calculator? 22:24:33 lol 22:24:47 i mean to say nc 22:24:52 hey bsmntbombdood__ 22:24:56 how do you start bsmnt_bot again 22:25:01 run start.sh 22:25:02 lol 22:25:08 does that start the chroot 22:25:15 iirc 22:25:30 ah, yep 22:25:47 -!- bsmnt_bot has joined. 22:27:17 I have in my logs a whitespace-fixed version of that bsmnt_bot brainfuck. Will test. 22:27:33 ~exec self.bf3="def bfarg(x,y):\n p=y.group(2)\n a=y.group(3)+unichr(0)\n o=''\n p=p+'!'\n t=[0]*30000\n i=0\n l=0\n while p[i]!='!':\n if p[i]=='[' and t[l]==0:\n c=1\n while c>0:\n i=i+1\n if p[i]=='[': c=c+1\n if p[i]==']': c=c-1\n if p[i]==']' and t[l]!=0:\n c=1\n while c>0:\n i=i-1\n if p[i]==']': c=c+1\n if p[i]=='[': c=c-1\n" 22:27:46 ~exec self.bf4=" if p[i]=='+': t[l]=t[l]+1\n if p[i]=='-': t[l]=t[l]-1\n if p[i]=='<': l=l-1\n if p[i]=='>': l=l+1\n if p[i]=='.': o=o+unichr(t[l])\n if p[i]==',':\n t[l]=ord(a[0])\n a=a[1:]\n i=i+1\n sys.stdout(o)\nself.register_raw(r'\S+ PRIVMSG (\S+) :~bf ([^!]*)!?(.*)',bfarg)" 22:27:53 ~exec exec(self.bf3+self.bf4) 22:27:54 where is bf1-2 22:27:59 ~bf ++++++[->++++++<]>. 22:27:59 $ 22:28:06 ~bf ++++++++++++++++++++++++++++++++++++++++++++++. 22:28:06 . 22:28:12 ~bf +++++++++++++++++++. 22:28:12 22:28:21 ok, who wants to make it \nQUIT? :P 22:28:27 although you can easily do that with ~exec 22:28:28 ~bf ,[.,]!Hello, world! 22:28:29 Hello, world! 22:28:32 hey, someone make the callbacks persist 22:28:35 its irritating having them not 22:29:03 wow, one-line non-lambda based Python is really weird to read 22:29:06 even when I wrote it... 22:29:12 all those varying amounts of spaces 22:29:24 * ais523 thinks this is the only legitimate use-case they've ever seen for one-space indentation 22:30:45 what bsmnt_bot needs is bracism 22:30:57 def bfarg(x,y): { p = y.group(2); ... } 22:32:00 * ais523 wonders what a Python purist would say if they were watching this discussion 22:32:10 couldn't you just start with from __future__ import braces; ? 22:32:19 if it worked quickly enough, you wouldn't even need the newline after it 22:32:25 just a semicolon 22:32:42 :D 22:32:50 ais523: Pythoners are generally an assholish lot. 22:32:55 So are Schemers. 22:33:04 And Lispers in general; #lisp is awful. 22:33:38 use ACME::Pythonic; requires the one last semicolon after the statement, unfortunately 22:33:43 but you don't need any semicolons from then on 22:34:03 anyway, bracism is a nice little hack. I think I will now reimplement it. 22:34:07 ais523: Pythoners are generally an assholish lot. So are Schemers. And Lispers in general; #lisp is awful. <-- what about perlers? 22:34:21 I noticed the less sane the language is the nicer the people are in the support channels 22:34:23 AnMaster: Perlers are bathshit insane, but very friendly, apart from in #perl, where they keep the assholes. 22:34:37 AnMaster: and the INTERCAL support channel is very friendl 22:34:39 *y 22:34:42 even though it's mostly just me 22:34:42 ehird, we are all insane in here 22:34:49 and very friendly 99% of the time 22:34:59 Yeah, #esoteric is the nicest channel on IRC. 22:35:06 #haskell is about equal, though. 22:35:11 ais523, also you missed some awful puns I made today 22:35:13 I think that says something about Haskell. 22:35:21 ehird, haha 22:35:36 ehird: yep, I think Haskell is pretty insane too by common-language standards 22:35:41 but insane in a "wow, that's so elegant" way 22:35:54 Scheme is pretty esoteric, too. 22:35:54 ais523, yes, but lisp is kind of like that too IMO 22:35:55 :/ 22:35:59 Well. 22:36:03 * ais523 joins #vhdl, to see what they're like 22:36:04 Common Lisp is kind of unelegant. 22:36:08 ais523, tell us 22:36:10 *inelegant 22:36:12 however, it seems to be a mostly idle channel 22:36:13 ehird, that is true 22:36:19 ehird, elisp vs. clisp 22:36:21 which is worst? 22:36:22 I'm going to ask a question to see how they react 22:36:25 AnMaster: elisp 22:36:27 ais523: "Verilog questions possibly answered but only if we get a cookie (Remillard will answer Verilog questions for a Chipotle burrito.) " 22:36:29 sounds friendly 22:36:30 hm ok 22:36:43 ergh i can't figure out what i'm doing wrong 22:37:25 AnMaster: elisp is _dynamically scoped_ 22:37:28 that's hard to beat. 22:37:37 ehird, ok, but isn't bf too= 22:37:37 ? 22:37:40 I've asked a question which is "I'm doing insane thing X, what should I do instead?" 22:37:43 of course it got no scope 22:38:03 ais523, what is this insane thing? 22:38:14 AnMaster: using a for loop with one iteration to define a temporary variable 22:38:21 ais523, oh 22:39:16 A colon followed by whitespace followed by { opens a new block, unless we're in a {} block that wasn't a bracism block 22:39:20 (to allow {'foo': {...}}) 22:39:33 } ends a block if we're in a block and not a {} that isn't a block. 22:39:38 ; is newline-and-indent. 22:39:41 Hokay. 22:39:44 ehird, in what language? 22:39:50 Python. 22:39:53 It's for writing one-line python. 22:39:56 oh the source filter 22:39:58 no 22:40:00 just a library 22:40:02 no? 22:40:03 a bot in here used to have it 22:40:05 one I wrote 22:40:06 oh ok 22:40:11 it was great for irc 22:40:28 the basic rule is { is newline and increase indentation, } is newline and decrease indentation, ; is newline and maintain indentation 22:40:29 or should be 22:40:34 ais523: yes 22:40:36 but you have to detect when those characters are used for other things 22:40:38 but you have to deal with dictionaries 22:40:40 which are {...} 22:40:46 and semicolons inside strings? 22:40:50 yes 22:40:51 luckily, Python is easy to parse 22:40:52 thus my above rules 22:40:53 nc irc.freenode.net 6667 < /tmp/fifo | command > /tmp/fifo 22:40:56 why isn't that working? 22:40:56 ais523: you don't have to parse it much 22:41:01 bsmntbombdood: dunno :-D 22:41:12 bsmntbombdood, simple 22:41:19 bsmntbombdood, ETOOLITTLEINFO 22:41:22 :) 22:41:31 unfortunately, bracism parsing is more complex than a regex. 22:41:35 bsmntbombdood: there's an option to nc to do that automatically 22:41:49 ais523, I would recommend socat 22:41:49 nc irc.freenode.net 6667 -e 'command', IIRC 22:41:58 ais523, doesn't that listen? 22:42:07 AnMaster: yes, you would recommend socat. 22:42:13 this is a reason why you are unhelpful 22:42:15 ehird, what is wrong with socat!? 22:42:19 tell me 22:42:23 AnMaster: I may have used the wrong option 22:42:28 "How can I do X with this tool?" 22:42:30 "Use another tool" 22:42:36 => very unhelpful unless all other situations have been covered. 22:43:21 well, I'm going to declare #vhdl Helpful and Not At All Snarky 22:43:42 So it gets the coveted HNAAS award. 22:43:42 ais523: is VHDL, I mean, good? 22:43:49 or is it sucky 22:43:54 ehird: it's a language which is good for what it's designed for 22:43:56 whoa, kragen sitaker 22:43:59 that guy gets everywhere 22:44:07 if inspired slightly (well, far) too much by ADA 22:44:23 you need to get used to writing lots of boilerplate to write VHDL 22:44:28 but luckily Emacs has it all memorised 22:44:44 anyway, I'd better go home now, or I'll never get any work done 22:44:47 bye 22:44:51 bye everyone 22:44:53 -!- ais523 has quit (Client Quit). 22:45:37 it still doesn't work 22:45:38 grrr 22:48:47 http://pastebin.ca/1312016 22:49:06 that does work when it is run with nc -e 22:49:22 s/does/does not/ 22:49:26 err 22:49:29 hm 22:50:17 -!- bsmntbombdood__ has quit. 22:51:28 -!- seabot has joined. 22:51:34 here's the bracism bot 22:51:35 @help 22:51:35 cdecl: cdecl 22:51:35 help: help 22:51:35 karma: karma karma+ karma- 22:51:35 meta: load reload unload 22:51:35 python: python 22:51:40 @help karma 22:51:41 karma: karma karma+ karma- 22:51:44 @help karma+ 22:51:44 No plugin called karma+. 22:51:44 UnboundLocalError: local variable 'plugin' referenced before assignment 22:51:48 fail :D 22:51:51 @karma ehird 22:51:51 You have a karma of 0 22:51:53 @karma+ ehird 22:51:53 You can't change your own karma, silly. 22:51:56 @karma+ seabot 22:51:57 seabot's karma raised to 2. 22:51:58 @karma seabot 22:51:59 seabot has a karma of 2 22:52:02 @python 2+2 22:52:03 4 22:52:08 @python if 1 == 2: { print "nooo" } 22:52:13 @python if 1 == 1: { print "nooo" } 22:52:13 nooo 22:52:20 hey AnMaster, or whoever 22:52:24 issmyoldbot :D 22:52:33 @cdecl int (*)(int *) 22:52:34 syntax error 22:52:36 wut 22:52:39 @cdecl int 22:52:39 syntax error 22:52:42 wut 22:52:43 @cdecl int a; 22:52:44 declare a as int 22:52:49 @cdecl int (*a)(int *); 22:52:50 declare a as pointer to function (pointer to int) returning int 22:53:31 issnitsocute:D 22:54:17 @python a= 2 22:54:19 @python a 22:54:20 2 22:54:25 @python users.ehird 22:54:25 22:54:29 @python users.ehird['a'] 22:54:29 2 22:54:32 @python users.ehird['a'] = 2 22:54:41 ... wait wat 22:54:52 @python users.foo 22:54:52 KeyError: 'foo' 22:54:55 @python users.seabot 22:54:55 KeyError: 'seabot' 22:55:00 hey AnMaster, do @python a= 2 22:55:16 ooooooooooooooooooooooooooooooooo 22:55:20 @python a= 2 22:55:21 oklopol: you do it 22:55:23 :DD 22:55:26 @python users.oklopol 22:55:26 on it 22:55:26 22:55:28 @python users.oklopol['a'] 22:55:28 2 22:55:30 @python users.oklopol['a'] = 7 22:55:33 @python users.oklopol['a'] 22:55:33 7 22:55:34 ... 22:55:35 D::::::: 22:55:38 that isn't meant to wokrk 22:55:51 I CAN HAS MY OWN LIST HUH 22:55:57 seabot? 22:55:59 wtf is that one 22:56:02 also 22:56:09 AnMaster: seabot is my old bot, it has bracism 22:56:10 how many bots do we hacve 22:56:12 have* 22:56:18 a={users.oklopol["a"]} 22:56:21 @python a={users.oklopol["a"]} 22:56:22 SyntaxError: unexpected EOF while parsing (, line 1) 22:56:30 @python def hello(a): { print "yo"; return a }; print hello("aa") 22:56:30 SyntaxError: invalid syntax (, line 5) 22:56:33 ... 22:56:33 WUT 22:56:34 ...... 22:56:43 @python a=[users.oklopol["a"]] 22:56:45 ... a bug in bracism?????? 22:56:46 i think that's what i meant 22:56:50 @python def hello(a):{ print "yo"; return a }; print hello("aa") 22:56:50 SyntaxError: invalid syntax (, line 5) 22:56:52 D::::::::::::: 22:56:59 but in my fingers i think. 22:57:04 err oh 22:59:26 why doesn't it work :( 23:01:09 bsmntbombdood: because butt 23:01:10 s 23:04:28 bsmntbombdood: also, bsmnt_bot has dc 23:04:35 ~exec bot.run('ls','usr/bin') 23:04:35 ['dc', 'nice', 'python2.4', 'wget'] 23:04:45 not my dc 23:04:46 lol 23:05:12 lol 23:06:47 it's better cuz i wrote it 23:07:00 -!- olsner has quit ("Leaving"). 23:12:40 About that awk thing, my guess is there's some sort of buffering nastiness going on. When I run "awk -f test.awk < from-irc.fifo > to-irc.fifo" here, then start a "cat > from-irc.fifo" and a "cat to-irc.fifo", nothing appears no matter what I write into the "cat > from-irc.fifo" terminal, except when I ^d it, at which point the nick/user/join lines finally appear in "cat to-irc.fifo". 23:14:03 fizzie, sound probably 23:14:04 so 23:14:09 attach gdb to awk 23:14:12 Also if I feed enough (a couple of rather large screenfuls) of stuff into the "cat > from-irc.fifo" terminal, awk replies in "cat to-irc.fifo". So I guess awk is reading the fifo with the usual few-kilobyte buffer. 23:14:16 add calls to set non-buffered mode 23:14:25 I'm not sure I want to; it's not my bot. 23:14:28 i'll pepper in some fflush()es 23:14:37 bsmntbombdood, in awk!? 23:14:49 well, gawk 23:15:07 bsmntbombdood, does awk have a flush() or fflush()? 23:15:18 modifying the gawk source is cheating 23:15:32 gawk has a fflush() call. 23:15:48 I'm not sure it'll help, though, if the problem is that awk's still waiting for input before actually executing any BEGIN { } blocks or anything. 23:15:53 fflush([file]) Flush any buffers associated with the open output file or pipe file. If 23:16:09 if? 23:17:06 file is missing, then standard output is flushed. If file is the null string, then all open output files and pipes have their buffers flushed. 23:17:40 well that did it 23:17:42 heh 23:17:55 -!- FireFly has quit ("Later"). 23:18:09 -!- dc-bot has joined. 23:18:22 ~say foobar 23:18:23 foobar 23:18:32 ~dc 123p 23:18:40 phail 23:18:44 .... 23:19:13 -!- dc-bot has quit (Remote closed the connection). 23:19:25 -!- dc-bot has joined. 23:19:36 guise 23:19:38 ~dc 123p 23:19:43 wtf 23:19:50 oh i know 23:20:03 i know how to design parsers that recognize a language 23:20:08 congratulations. 23:20:15 -!- dc-bot has quit (Remote closed the connection). 23:20:17 but how the hell do i use the parser output to build an abstract syntax tree? 23:20:17 you're not functionally retarded. 23:20:18 >.< 23:20:26 -!- dc-bot has joined. 23:20:27 I retract my previous statement. 23:20:36 ~dc 123p 23:20:36 123 23:20:39 yay 23:20:51 ~dc [loop forever] 23:20:58 the only parser book i have is incredibly complete, except in that it doesnt explain how to use a parser's output :| 23:22:59 err what parser's output? i figured parsing out by thinking, and afaik i'm the retard from us two. 23:23:25 I'd really have to guess that depends on what sort of parser you have, and what its output is. If your parser outputs "accept" or "reject" depending on whether the input is in the language, you'd have to be Really Clever to build a syntax tree out of that. 23:23:45 -!- botbot has joined. 23:23:49 Even more bots! 23:23:52 loopPONG :leguin.freenode.net 23:24:08 dc-bot: Thank you, that was appropriately bizarre. 23:24:13 * botbot prods ehird 23:24:23 fizzie: you could find nested stuff by doing dynamic programming on all substrings of the code 23:24:26 what i mean is, parsers can produce things like stacks of symbols and so on. what im not sure about is how to reverse those symbols and get a tree 23:24:44 only nested expressions wouldn't fail, you could recurse on them 23:24:48 i suppose i could kind of run the parser in reverse, in a sense 23:24:50 * oklopol is Really Clever 23:24:52 ~dc 0sa1[la1+salad1+n10>b]dsbx 23:25:04 ... 23:25:08 -!- dc-bot has quit (Remote closed the connection). 23:25:11 -!- BeholdMyGlory has quit ("Konversation terminated!"). 23:25:16 * botbot prods fizzie then :/ 23:25:19 and instead of pushing it out to a string, i'd push it out to the tree itself, but im not entire sure how to do that. atleast not in any way thats well established 23:26:39 psygnisfive: you're an idiot :D 23:26:42 can you be like recognize_addition = [+, read_expression, read_expression] 23:26:49 and that builds up a tree 23:26:49 thank you for your constructive advice, ehird. 23:26:51 my suggestion is writing your own parser 23:27:13 oklopol, i can WRITE a parser, im just not sure about how to get anything useful out of it 23:27:28 psygnisfive: oh. i thought you wanted to use an existing parser or something. 23:27:29 the parsing is trivial. its the conversion to an AST that im confused about. 23:27:39 ... 23:27:42 parses PRODUCE ASTS 23:27:47 that's the whole POINT of them 23:27:48 ehird, no they dont. 23:27:48 ehird: no 23:27:56 psygnisfive: yes they do. bsmntbombdood: yes they do. 23:28:00 parsing can just be a boolean 23:28:03 ehird: no. they dont. 23:28:04 bsmnt_bot, the bot is written in dc? 23:28:06 well, you can build the ast as you go, consider recursion descending in the ast. 23:28:13 bsmntbombdood: that's a technicality :-) 23:28:15 psygnisfive: yes. they do. 23:28:32 when you call a nested thingie recursively, you're parsing a child, just append result in list. 23:28:33 "Hey guys, I don't get this topic. Can you explain it?" "Foobar" "No, not foobar." 23:28:42 * botbot prods ehird again 23:28:46 botbot: WHAT DAMMIT 23:28:49 -!- botbot has left (?). 23:28:54 -!- botbot has joined. 23:28:56 !! 23:29:01 -!- botbot has quit ("..."). 23:29:02 oklopol: im not entirely sure what you mean. 23:29:21 psygnisfive: have you tried parsing brainfuck? 23:29:36 If the parser is a recursive-descent one, building an AST is really simple, sure. Just have a "foo" function, for a non-terminal foo, return an AST node foo(x, y, z), with x, y, z given from whatever foo() recursive-descends into. 23:29:38 brainfuck is trivial... 23:29:53 bsmntbombdood: yes, and it contains the basic idea 23:30:16 ehird: then i suppose i should rephrase it since you're a bit too dense. when building a parser, after i've gotten to the stage where each token in the string is recognized, and the production path has been determined, as a sequence of terminals and non-terminals, how does that get read off into an AST. 23:30:17 a way to parse a bf loop body is to make a list, and start appending instructions, and for [...]'s, call recursively, append result 23:30:24 oklopol: no. i havent touched bf. :P 23:30:28 $ ps aux|grep xterm|wc -l 23:30:30 253 23:30:35 THIS IS TOO MANY XTERMS 23:30:39 psygnisfive: Protip: Calling someone dense is not a way to get help. 23:30:49 you're not helping anyway ehird 23:30:50 you never help 23:30:52 psygnisfive: the paths are paths in the tree btw 23:30:59 I never help :'( 23:31:03 I suggest cutting yourself 23:31:06 you're just a whiney little twat who never has anything useful to say. 23:31:26 yes. Because if I'm not here to help you do trivial stuff all the time, what am I here for?! 23:31:50 if you're not here to help, you might want to stop replying to my requests for help 23:32:11 oklopol: i know that they're paths in the tree. but that doesnt help much. 23:32:13 or I might not, seeing as there isn't a channel rule that I can't reply to requests for help how I want. 23:32:14 oh lawd 23:32:16 bsmntbombdood, try a tabbed terminal 23:32:22 psygnisfive: if not, read my actual help. 23:32:28 like konsole, or whatever gnome have 23:32:30 AnMaster: i have a tabbed window manager, same thing 23:32:31 it may help a lot 23:32:33 i suggest you try to see how brainfuck is parsed recursively 23:32:37 bsmntbombdood, hm ok 23:32:41 I'm not sure 253 terminal tabs would be very helpful either. 23:32:45 it's very simple, and you should see the general idea 23:32:58 oklopol, parsing bf recursive? yeah dead easy 23:33:00 *sigh* nevermind. ill read this book on parsers more carefully and see if it has any explanation that i missed. 23:33:02 I have done it several times 23:33:04 psygnisfive: maybe do it in a real language, not haskell 23:33:13 what? lol 23:33:31 AnMaster: i've done it about 50 times. i do it every time i want to write something in brainfuck. 23:33:43 oklopol, err 23:33:46 that makes no sense 23:33:48 because it's faster than finding a brainfuck.py. 23:33:53 I save my project 23:33:56 Building the syntax tree in a hand-crafted "bottom-up"-style LR parser might not be quite as easy, but really, if your parser is a recursive-descent stylish, I would think it'd be hard to not to get a syntax tree out of it. 23:34:03 oklopol, are you on *nix? I don't remember 23:34:06 if yes use 23:34:08 AnMaster: what's the difference really? both take <1min 23:34:12 locate brainfuck.py 23:34:20 it will take a few seconds 23:34:23 AnMaster: could have a different name. 23:34:33 oklopol, idea: store it in ~/bin ? 23:34:36 with that name 23:34:41 1. hes on windows 23:34:45 2. shut up, stop trying to make oklopol logical 23:34:46 ah right 23:34:46 anyway, i don't take very kindly to people suggesting me to do stuff unless i actually ask. 23:34:47 you're ruining him 23:35:05 oklopol, sorry then 23:36:01 i'm perfectly logical. i just have different axioms. 23:36:14 fizzie: im sure thats the case, but i dont do much recursive descent stuff, so i cant really conceptualize why :) 23:36:21 nice oklopol 23:36:25 oklopol, what axioms? 23:36:35 (and a few psychological bugs) 23:36:38 err. 23:36:43 i haven't actually listed them. 23:36:50 i have yet to write a real parser 23:36:53 oklopol, indeed, that is why I asked 23:36:56 have you listed yours? 23:37:05 oklopol, not yet on irc 23:37:13 oklopol, and I need to consider them 23:37:24 seeing your as examples would help me define them clearer 23:37:24 bsmntbombdood i have a copy of a really good intro to parsers book 23:37:37 well, its more of a somewhat comprehensive parsing techniques book actually 23:37:43 but it goes through a lot of intro stuff too 23:37:48 if you want i'll send it to you 23:37:55 parsing is a solved problem 23:38:01 it is rather. 23:38:12 not that there aren't new and better techniques to be found 23:38:12 reading a book on a monitor isn't pleasent 23:38:14 BECAUSE THAT DOESN'T GET SAID ENOUGH 23:38:18 print it out then :p 23:38:53 reading on a monitor is pleasant, the only problem is irl books are prettier. 23:39:06 i knowwwwwwww 23:39:08 books are so awesome 23:39:09 painfully true 23:39:13 psygnisfive, what is the name/ISBN of this book? 23:39:16 printing is expensive and slow 23:39:19 just wondering 23:39:48 Parsing Techniques - A Practical Guide 23:39:55 you can actually get it online i just forget where 23:39:59 psygnisfive, and ISBN? 23:40:01 you can probably find it by googling that. 23:40:05 no idea, anmaster. no idea. 23:40:06 woo 23:40:06 print to_python("{'a':{'b':lambda a: a}}; def a(b={'a':2}): { pass }") 23:40:08 works properly 23:40:20 http://www.cs.vu.nl/~dick/PTAPG.html 23:40:31 ISBN 0 13 651431 6 23:40:39 tho you can download it there 23:42:53 ugh my local library sucks so hard 23:43:16 oklopol: can you writerate a program for me :P 23:47:24 whee, it also handles def a(): { return {'a':2} } 23:47:28 that's quite enough testing. 23:47:57 guh 23:48:01 i am looking on amazon for books 23:48:06 that shit's expensive 23:49:28 a used copy of introduction to algorithms for $70?!?! 23:50:14 That's strange, I get a "whoa, that stuff's so cheap" feeling, thanks to the book prices here. Most of my course books (if bought new from a local retailer) have had prices around $100. 23:50:53 Amazon seems to be clever enough to find Introduction to Algorithms if I write "clrs" in the search-box. 23:52:04 $100, yikes :D 23:52:13 books are crazy expensive : D 23:53:01 I'm not sure what's up with that $70-used version of CLRS. Even though it's printed in 2003, it's still the same old 2nd edition, for which Amazon is selling new copies (hardcover, even) for $60. 23:54:17 Even the page count is higher (1184 pages vs. 1056 pages) in the old one, so it's not like they'd have added any stuff. 23:55:42 they could add and remove. 23:56:03 FWIW, in the two largest local book stores here in Finland, the hardcover edition of CLRS sells for $130. 23:56:38 Of course it's a big book. I think I've used that thing to stand on when I couldn't quite reach something. 23:56:47 i should probably buy it 23:58:09 uh-oh, a bug 23:58:37 ("Full disclosure" note: as a cheap student, I got the non-hardcover edition.)