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