←2012-01-05 2012-01-06 2012-01-07→ ↑2012 ↑all
00:06:55 -!- Phantom_Hoover has joined.
00:07:33 <Phantom_Hoover> AUGH I DON'T WANT TO BE SEVENTEEN ARGH
00:07:35 -!- Phantom_Hoover has quit (Client Quit).
00:18:06 -!- NihilistDandy has quit (Quit: Linkinus - http://linkinus.com).
00:22:36 -!- jix has quit (Remote host closed the connection).
00:24:59 -!- kallisti has quit (Quit: leaving).
00:25:33 -!- augur has joined.
00:29:08 -!- kallisti has joined.
00:29:08 -!- kallisti has quit (Changing host).
00:29:09 -!- kallisti has joined.
00:29:41 -!- jix has joined.
00:36:38 -!- Patashu has joined.
01:17:41 <nooga> haha
01:21:00 <oerjan> i'm sorry, you cannot just laugh like that out of the blue. this is a serious channel.
01:21:56 -!- oerjan has set topic: Official revolting channel of the frequent stupid topic change plurality: the Sequel Prequel, part Three | http://codu.org/logs/_esoteric/.
01:22:13 <DCliche> >:/
01:24:19 -!- DCliche has changed nick to Klisz.
01:25:19 -!- pikhq has joined.
01:25:26 -!- pikhq_ has quit (Read error: Operation timed out).
01:29:32 -!- DCliche has joined.
01:32:25 -!- Klisz has quit (Ping timeout: 260 seconds).
01:32:55 -!- qfr has joined.
01:52:38 <kallisti> "The fully qualified name of the original subroutine magically appears in the global $AUTOLOAD variable of the same package as the AUTOLOAD routine. The name is not passed as an ordinary argument because, er, well, just because, that's why."
02:11:00 -!- myndzi\ has changed nick to myndzi.
02:11:27 -!- derdon has quit (Remote host closed the connection).
02:14:05 -!- Darth_Cliche has joined.
02:17:42 -!- DCliche has quit (Ping timeout: 244 seconds).
02:25:59 -!- Darth_Cliche has changed nick to Klisz.
02:35:56 -!- Jafet has quit (Quit: Leaving.).
02:38:00 -!- oerjan has quit (Quit: Good night).
03:00:31 -!- nooga has quit (Ping timeout: 260 seconds).
03:20:15 -!- Jafet has joined.
03:20:36 <ais523> bleh, I've been neglecting my IOCCC submission and there are only 6 days left for me to rememebr how it works
03:43:22 -!- Jafet has quit (Quit: Leaving.).
03:44:16 -!- Jafet has joined.
04:17:22 -!- myndzi\ has joined.
04:18:33 -!- myndzi has quit (Ping timeout: 252 seconds).
04:28:49 -!- MDude has changed nick to MSleep.
04:32:11 -!- olsner has joined.
04:46:56 -!- zzo38 has joined.
04:48:47 <quintopia> oh
05:03:01 -!- yorick has quit (Ping timeout: 260 seconds).
05:05:43 -!- yorick has joined.
05:22:29 -!- Frooxius has quit (Quit: ChatZilla 0.9.88-rdmsoft [XULRunner]).
05:23:01 -!- Frooxius has joined.
05:29:03 -!- Jafet has quit (Ping timeout: 240 seconds).
05:41:40 -!- Jafet has joined.
06:15:42 -!- DCliche has joined.
06:19:16 -!- Klisz has quit (Ping timeout: 248 seconds).
06:34:56 -!- Klisz has joined.
06:36:00 -!- DCliche has quit (Ping timeout: 252 seconds).
06:40:41 -!- DCliche has joined.
06:41:08 -!- DCliche has quit (Read error: Connection reset by peer).
06:41:27 -!- Klisz has quit (Ping timeout: 252 seconds).
06:49:38 -!- myndzi\ has changed nick to myndzi.
08:27:01 -!- zzo38 has quit (Remote host closed the connection).
08:29:33 -!- shachaf has quit (Read error: Operation timed out).
08:32:29 -!- shachaf has joined.
09:35:01 <fizzie> @tell Phantom_Hoover Factoids need not be factually accurate; anyway, there's a dude in the "developer room" ending saying it's programmatically generated, and I think also implying it's rule-based, though I'm not entirely certain about that.
09:35:01 <lambdabot> Consider it noted.
10:04:12 <ais523> `? wisdom
10:04:23 <HackEgo> wisdom? ¯\(°_o)/¯
10:04:54 <ais523> `ls bin
10:04:58 <HackEgo> ​? \ @ \ No \ addquote \ allquotes \ calc \ define \ delquote \ etymology \ forget \ fortune \ frink \ google \ hatesgeo \ json \ k \ karma \ karma+ \ karma- \ learn \ log \ logurl \ macro \ marco \ paste \ pastekarma \ pastelog \ pastelogs \ pastenquotes \ pastequotes \ pastewisdom \ pastlog \ ping \ prefixes \ qc \ quote \ quotes \ roll \ toutf8 \ translate \ translatefromto \ translateto \ units \ url \ welcome \ wl \ word \ words \ wtf
10:05:44 <ais523> `define wisdom is always factually accurate, except for this entry
10:05:50 <HackEgo> No output.
10:05:56 <ais523> `? wisdom
10:06:00 <HackEgo> wisdom? ¯\(°_o)/¯
10:06:03 <ais523> hmm
10:06:11 <ais523> ah, it's learn
10:06:18 <ais523> `learn wisdom is always factually accurate, except for this entry
10:06:23 <HackEgo> I knew that.
10:06:26 <ais523> `? wisdom
10:06:30 <HackEgo> wisdom is always factually accurate, except for this entry
10:10:20 <fizzie> `define wisdom
10:10:23 <HackEgo> ​\ Looking up \ Making HTTP connection to \ Sending HTTP request. \ HTTP request sent; waiting for response. \ Alert!: Unexpected network read error; connection aborted. \ Can't Access `http://google.com/search?q=define:%77%69%73%64%6f%6d' \ Alert!: Unable to access document. \ \ lynx: Can't access startfile
10:10:31 <fizzie> Very good.
10:17:21 -!- zzo38 has joined.
10:17:23 <kallisti> awww yeah my bot is officially better than lambdabot
10:17:32 <kallisti> because it checks identification on bot admins.
10:18:58 <zzo38> I know a chess variant called "Pole chess", where there is one extra piece it is a pole. Pole starts off-board, it cannot capture or be captured, but it can go to any vacant cell.
10:19:38 <zzo38> I played this game once, and I won; neither of us have used the poles but their existence still affected our strategies even though the poles never entered the board.
10:24:15 <zzo38> So, even the rule of the game that are never used can sometimes affect the strategy.
10:29:19 -!- elliott has joined.
10:48:40 <shachaf> Reborn elliott. Rebelliott.
10:49:36 <Jafet> Rebelliorn
10:50:15 <monqy> ellebott
10:50:15 <lambdabot> monqy: You have 1 new message. '/msg lambdabot @messages' to read it.
10:50:27 <monqy> kallisti: hi
10:50:49 <Vorpal> elliott, hi there. I wanted you for something yesterday but I can't remember what it was :/
10:54:43 -!- GreaseMonkey has quit (Quit: The Other Game).
10:55:01 <elliott> Vorpal: great
10:55:04 <elliott> I don't remember either
10:55:24 <Vorpal> elliott, that is pretty easy to explain: you weren't in the channel at the time
10:56:28 <ais523> whew, IOCCC submission in
10:56:42 <ais523> I should really test it on more compilers, but I know I won't
10:56:46 <ais523> so gcc and clang will have to do
10:56:47 <Vorpal> ais523, oh you are competing in IOCCC? Sounds fun :)
10:56:56 <ais523> yes, I think I said as much earlier
10:57:02 <shachaf> IOCCC is going on?
10:57:07 <ais523> shachaf: yep, only 6 days left
10:57:10 <Vorpal> ais523, I don't read /everything/ in this channel.
10:57:11 <ais523> and a few hours
10:57:18 <shachaf> Is augustss competing?
10:57:18 <ais523> so you'd better hurry if you want to get an entry in
10:57:29 <ais523> Gregor has submitted a portable JIT
10:57:31 <Vorpal> ais523, do you think you might be able to win?
10:57:43 <Vorpal> and what sort of submission did you make?
10:57:51 <shachaf> ais523: "JIT"? More like "at least 6 days in advance"
10:57:52 <ais523> short program
10:58:09 <ais523> and I wouldn't enter it if I weren't trying to win
10:58:13 <ais523> but I guess I'll get serious competition
10:58:16 <Vorpal> well okay
10:58:27 <Vorpal> ais523, so what does your program do?
10:58:27 <ais523> hopefully what I'm doing is unique enough to get through
10:58:34 <zzo38> I know another chess variant, set up the board with sixteen dices of your color, 1=Pawn, 2=Knight, 3=Bishop, 4=Rook, 5=Queen, 6=King. After move, you *must* change the moved piece but is not allowed to change it to the opposite number so that it add to 7. Any player with no 6 is loser.
10:58:39 <ais523> that's the part that people have to try to figure out, isn't it?
10:59:04 <Vorpal> ais523, well you said Gregor made a portable JIT for example. I'm just asking for a description on that level of detail
10:59:06 <ais523> but it was more concerned with the way it does things, rather than what it does
10:59:27 <zzo38> It means, the king cannot escape... but you can appoint a new king, or protected by blocking or capturing the attacker.
10:59:29 <Vorpal> though a portable JIT is quite impressive.
10:59:30 <ais523> it involves stack-smashing, portably of course, and not using a language feature that's been used in every submission so far (apart from a couple of cheats)
10:59:49 <Vorpal> you can stack-smash portably?
10:59:51 <Vorpal> that is news to me
10:59:52 <zzo38> It also means bare king loses since you will be forced to move it and therefore to change it.
10:59:54 <ais523> sure
10:59:57 <ais523> just like you can JIT portably
11:00:02 <ais523> ofc, it's just smashing values, not code
11:00:08 <Vorpal> ais523, /pretty/ sure it is undefined behaviour to stack smash
11:00:23 <ais523> it does a whole load of undefined behaviour deliberately
11:00:30 <Vorpal> then it isn't portable
11:00:32 <Jafet> A large majority of ioccc winners have involved undefined behaviour
11:00:32 <ais523> because I started, and then I just kept on going
11:00:34 <zzo38> There is no castling, en-passan, promotion.
11:00:40 <ais523> Vorpal: it's portable if it runs on most machines, isn't it?
11:00:47 <ais523> it's not strictly conforming, but that's something entirely different
11:00:59 <Vorpal> ais523, I would say portable to mean strictly conforming in the context of IOCCC yeah
11:01:07 <ais523> I wouldn't
11:01:09 <Vorpal> hm
11:01:11 <ais523> based on what they've accepted in the past
11:01:12 <Jafet> Vorpal: anything more portable than mullender is given serious consideration
11:01:15 <Vorpal> well okay
11:01:21 <Vorpal> Jafet, mullender?
11:01:29 <Jafet> Or perhaps that later flight simulator using motif
11:01:35 <Vorpal> ah right
11:01:38 <Vorpal> yeah
11:01:45 <Vorpal> well true, I forgot about that
11:01:48 <Jafet> You don't know mullender?
11:01:51 <Vorpal> it wasn't exactly portable
11:01:54 <Vorpal> (the flight sim)
11:02:03 <Vorpal> Jafet, if I do I don't remember the name of it
11:02:06 <Vorpal> tell me what it is
11:02:19 <Vorpal> (I'm terrible at remembering names)
11:02:21 <Jafet> http://www.ioccc.org/1984/mullender.c
11:02:45 <Vorpal> right
11:02:56 <Vorpal> Jafet, which machine?
11:03:15 <Jafet> mullender? vax/pdp polyglot.
11:03:18 <Vorpal> heh
11:03:40 <Vorpal> Jafet, how did they respond to that one? reject it?
11:03:56 <Jafet> Every file on their site is a winner.
11:04:09 <monqy> winner for rules abuse or whatnot?
11:04:09 <Vorpal> oh okay, thought they published all
11:04:11 <Vorpal> hm
11:04:53 <Vorpal> Jafet, hm I wonder if gcc would accept that sort of stuff...
11:05:01 <Jafet> Sure
11:05:08 <Vorpal> really? hm
11:05:24 <Jafet> Someone ported it to geordi/linux/i686
11:05:29 <Vorpal> Jafet, I would expect it to end up in .data rather than .text
11:05:41 <Vorpal> which means it would be marked NX and thus not be executable
11:05:52 <Vorpal> at least on x86-64
11:06:17 <Jafet> It might not work on amd64 then
11:06:54 <Vorpal> nor on modern CPUs at all. You can do NX on anything that supports x86-64 even in 32-bit mode (though you need to turn on PAE for that)
11:07:03 <Vorpal> it depends on where gcc places it I guess
11:07:15 <Jafet> Only if the system decides to use NX
11:07:28 <Vorpal> well linux does. Don't think you can turn it off
11:07:32 <Jafet> I believe Windows, for example, allows turning it off
11:07:48 <Vorpal> well you can force it off for a given program
11:07:55 <Vorpal> some compatibility personality thingy
11:08:09 <Vorpal> iirc
11:08:11 <elliott> <Vorpal> ais523, I would say portable to mean strictly conforming in the context of IOCCC yeah
11:08:16 <elliott> Vorpal: Thus outlawing about 50% of IOCCC winners
11:08:22 <Vorpal> elliott, I realised I was wrong a few lines below :P
11:08:29 <Jafet> More like 90%
11:08:33 <elliott> <Vorpal> Jafet, how did they respond to that one? reject it?
11:08:33 <elliott> <Jafet> Every file on their site is a winner.
11:08:37 <elliott> Vorpal: Changing the rules.
11:08:42 <Vorpal> elliott, right
11:08:49 <ais523> elliott: one thing I find really ironic is that they updated the abuse of the standards category to allow abuse of C99
11:08:52 <ais523> it's ironic because C11 is out now
11:08:59 <elliott> ha
11:09:06 <Jafet> gcc compiles C11 now?
11:09:20 <ais523> I don't think so
11:09:30 <ais523> C11 is really new, it was released right near the end of 2011
11:09:40 <ais523> and it's right near the start of 2012 right now
11:09:56 <Vorpal> Jafet, that would surprise me. It might support a few of the new things if they happened to be available as gcc extensions
11:09:57 <Jafet> Well, they tend to use gcc as the standard
11:10:10 <ais523> Vorpal: a few of the new things happen to be gcc extensions already
11:10:14 <ais523> as usual
11:10:16 <Jafet> And I believe gnu99 is the current default
11:10:23 <ais523> things tend to get standardised if every existing compiler does them already
11:10:25 <Vorpal> ais523, right, I haven't really checked in detail what is new.
11:10:39 <elliott> 17:11:27: <Ngevd> What time zone is he pretending to be in?
11:10:39 <elliott> 17:49:47: <fizzie> Ngevd: Elliott time, I'd think.
11:10:39 <elliott> Bingo.
11:10:43 <elliott> ais523: gcc 4.6 does -std=c1x
11:10:44 <elliott> IIRC.
11:10:51 <Vorpal> heh
11:11:02 <ais523> elliott: option introduced before they knew what the standard would be called?
11:11:04 <Vorpal> well I can't check, I'm on an old system atm
11:11:15 <elliott> 18:03:09: <lifthrasiir> the history of my ~/tmp directory is intriguing. the most visible thing is how i have named all those "tmp"-ish directories.
11:11:15 <elliott> 18:04:53: <lifthrasiir> some of the form tmp/YYYYMMDD/ (e.g. 20080801, 20090616, etc.), some of the form _/N/ (ranging from 0 to 5), some of the form old/, old2/, old3/ (i'm glad that i don't have old4/ yet), etc.
11:11:15 <elliott> 18:05:34: <lifthrasiir> some of them contain (mutually incompatible) a.out files.
11:11:20 <elliott> lifthrasiir: At least your mess is confined to ~/tmp.
11:11:24 <elliott> (Well, okay, it might not be.)
11:11:32 <elliott> ais523: release released before they knew that, I think
11:11:34 <Vorpal> ais523, well, gcc 4.6 is quite recent, and they probably figured it would be between 2011 and 2019
11:11:38 <elliott> it's probably not very complete yet
11:11:42 <Vorpal> so I guess they felt safe about the name
11:11:53 <Vorpal> (iirc gcc 4.6 was released 2011)
11:11:54 <elliott> I wouldn't call it -std=c11 even if the gods told me it would be released under that name.
11:12:03 <elliott> Because you're still implementing a draft standard, not C11 itself.
11:12:04 <Vorpal> (I almost wrote "this year" before I remembered it is 2012)
11:12:45 <Vorpal> <elliott> lifthrasiir: At least your mess is confined to ~/tmp. <-- I have a similar situation, though ~ itself gets a bit messy too sometimes
11:12:50 <Vorpal> I try to avoid that though
11:13:01 <elliott> Vorpal: This is why you use the elliott-standard organisation system.
11:13:13 <Vorpal> elliott, subdirs other than ~/tmp and ~/Desktop are in perfect order though :P
11:13:15 <elliott> Admittedly, the main mess-avoider there is that shells start in ~/tmp :p
11:13:38 <Vorpal> elliott, hah
11:13:57 <ais523> hmm, I use actual /tmp for temporaries
11:14:04 <ais523> it's amusing to look in /var/tmp sometimes
11:14:09 <Vorpal> ais523, my ~/tmp is more like /var/tmp
11:14:11 <ais523> I store files there which are temporary but need to survive reboots
11:14:18 -!- zzo38 has quit (Remote host closed the connection).
11:14:19 <ais523> one of them, was left there for over a year
11:14:23 <Vorpal> heh
11:14:28 <ais523> and I finally did what I wanted to do with it a few days ago
11:14:45 <ais523> -rw-r--r-- 1 ais523 ais523 32956 2010-10-31 14:24 Königsberg_bridges.png
11:14:53 <Vorpal> hm I have test.c test2.c ... test7.c in ~
11:14:58 <Vorpal> I need to check what they are for
11:15:17 <elliott> Oh nooo, not more Ngevd code debugging in the logs.
11:15:21 <Vorpal> char (*(*f)(int,int))[7];
11:15:22 <Vorpal> wut?
11:15:26 <elliott> It would be acceptable if he actually integrated the suggestions that didn't directly fix his bug from last time.
11:15:27 <Vorpal> is that even valid?
11:15:37 <ais523> let me try to decode it
11:15:43 <elliott> So instead you have to mentally patch(1) the code with your previous fixes to understand wtf he's done to it this time.
11:15:52 <Vorpal> ais523, how do you define an array of function pointers in C without using a typedef?
11:15:59 <Vorpal> I think that is what I tried to do and failed
11:16:08 <elliott> char (*f[7])(int,int);
11:16:09 <elliott> methinks
11:16:15 <Vorpal> heh
11:16:16 <elliott> declaration follows use
11:16:18 <Vorpal> possibly
11:16:19 <elliott> (*f[7])(42,42)
11:16:22 <ais523> pointer to function that takes two integer arguments and returns a pointer to an array of 7 chars
11:16:24 <ais523> is Vorpal's line
11:16:30 <elliott> ais523: right, so not valid
11:16:34 <Vorpal> indeed
11:16:41 <ais523> declaration follows use is actually a really simple rule to apply
11:16:45 <Vorpal> so the [7] goes after the function name
11:16:46 <Vorpal> right
11:17:00 <ais523> char (*(f[7]))(int,int); is what I make it
11:17:07 <Vorpal> lets try that
11:17:09 -!- nooga has joined.
11:17:15 <ais523> which is probably equivalent to elliott's, because of operator precedence
11:17:35 <Vorpal> well that compiles
11:18:24 <ais523> cdecl.org translates elliott's suggestion to "declare f as array 7 of pointer to function (int, int) returning char"
11:18:32 <ais523> and mine to the same thing
11:18:45 <Vorpal> hm
11:21:11 <elliott> DEAR PEOPLE PROPOSING EDITS ON SO: You're not meant to *fix* the grammar of "thanks" lines, you're meant to *remove* them!
11:21:48 <monqy> thanks
11:23:12 <elliott> monqy: wouldn't it be great if you had like data Expr = Lit Integer | ... and then could say
11:23:14 <elliott> eval :: Expr -> Integer
11:23:17 <elliott> eval . Lit = id
11:23:22 <elliott> as one of the clauses
11:23:35 <elliott> that would be great, i refuse to believe being able to use compositions on the LHS wouldn't be graet
11:23:38 <elliott> great
11:23:44 <monqy> grate
11:25:28 <monqy> something like that is a thing i really want a lot
11:26:41 <elliott> data Expr = Lit Integer | Add Expr Expr
11:26:43 <elliott> eval . Lit = id
11:26:48 <elliott> (eval .) . Add = liftA2 (+) eval eval
11:26:52 <elliott> the most beautifulest
11:26:52 -!- Phantom_Hoover has joined.
11:27:01 <elliott> is Phantom_Hoover 17 now
11:27:07 <monqy> yikes / yikes
11:27:08 <Phantom_Hoover> Yes.
11:27:08 <lambdabot> Phantom_Hoover: You have 1 new message. '/msg lambdabot @messages' to read it.
11:27:28 <elliott> Phantom_Hoover: ok nice knowing you /ignored forever
11:27:38 <Phantom_Hoover> fizzie said 1h 52m 11s ago: Factoids need not be factually accurate;
11:28:02 <Phantom_Hoover> The definition is that they're not factual at all, IIRC?
11:28:20 <elliott> Phantom_Hoover: I think that definition appeared about ~30 seconds before it started meaning "small fact" instead.
11:28:33 <elliott> Prescriptivists talk about the Great 30 Seconds of Peace and Meaning.
11:29:06 <monqy> what a Great 30 Seconds they were
11:29:18 <monqy> so much PEaace, and MEaning too
11:39:53 -!- oklofok has joined.
11:51:04 -!- oklofok has quit (Ping timeout: 240 seconds).
12:11:00 -!- azaq23 has joined.
12:32:58 -!- azaq23 has quit (Quit: Leaving.).
12:42:08 -!- oerjan has joined.
12:48:52 -!- derdon has joined.
12:50:01 -!- oerjan has set topic: Official revolting channel of the frequent stupid topic change plurality, the Prequel: The Birthday Menace | http://codu.org/logs/_esoteric/.
12:57:10 <elliott> hey oerjan, given two distinct types A and B that you are allowed to choose yourself, can you implement foo :: (A ~ B) => Void
12:57:21 <elliott> hmm, it's easy with A = (), B = Void
12:57:29 <elliott> but choosing Void as one of them is cheating :)
12:58:25 <monqy> foo = unsafeCoerce
12:58:30 <oerjan> i dunno, won't ghc complain if i choose two concrete types which are obviously not ~ ?
12:59:13 * oerjan has never used a ~ in his own program, so may not be the right person to ask anyway
13:00:20 <oerjan> i don't know what A ~ B really allows you to do, especially if it's false.
13:01:13 <kallisti> hmmm you know what I want.
13:01:22 <kallisti> a Perl 5 JIT compiler.
13:04:20 <kallisti> the question is....
13:04:24 <kallisti> uh, how do you parse Perl?
13:04:44 <elliott> You can't.
13:04:48 <elliott> You can execute Perl.
13:04:55 <kallisti> well, obviously.
13:05:03 <kallisti> I write perl code because it's aesthetically beautiful
13:05:05 <kallisti> not because it /runs/.
13:05:10 <elliott> You can execute Perl.
13:05:13 <elliott> You can't parse Perl.
13:05:20 <elliott> Unless you're a Turing Machine.
13:05:28 <elliott> If you are Turing Machine, the process looks exactly like executing Perl.
13:05:28 <elliott> *are a
13:05:32 <kallisti> .....
13:05:33 <kallisti> what.
13:05:43 <kallisti> oh
13:05:44 <kallisti> yes.
13:05:52 <Vorpal> kallisti, he means that parsing perl without executing it can't be done
13:05:54 <elliott> Also, Perl 6 largely originated from the fact that nobody else has ever successfully written a Perl 5 interpreter, as it is defined entirely by its mammoth implementation.
13:05:54 <kallisti> right.
13:05:59 <Vorpal> well, not with a UTM
13:06:08 <kallisti> still imagine...
13:06:10 <elliott> So: Tough.
13:06:10 <kallisti> perl 5 JIT
13:06:29 <Vorpal> why on earth
13:06:42 <kallisti> because I like perl 5 but don't like that it's slow.
13:07:23 <Vorpal> well, it might be possible to JIT it in some limited fashion I guess. Probably rather tricky and also not worth the work
13:07:37 <elliott> If my experience with kallisti's code is any indicator, Perl isn't slow. kallisti's algorithms are slow.
13:07:52 <Vorpal> ah
13:08:08 <Vorpal> well perl is slow as well
13:08:27 <kallisti> elliott: what experience? what algorithms? :P
13:09:02 <elliott> kallisti: words, that factoring thing.
13:09:23 <kallisti> words is pretty reasonably fast. how would you make it faster?
13:09:56 <elliott> It was the generation script. I don't remember what was stupid, but something was stupid.
13:09:59 <oerjan> `words --portuguese 50
13:10:07 <HackEgo> gazedorarifíciar fosfomeçais afarem coralizareis apolar deprimente lantine desencada mimento deslizares quariarás estregá acharpedras arrotado reológica enlaçarei atono imbranslapsulti susaracara crimina evas velmejas ensionariá apanhá dista bambeltancasseis descorrebera pelarias abrido expecerem balação acenço aviamos cilizará navassem fortarem cachegar desenjoa opelão ananejei desproxaria frescorar
13:10:10 <kallisti> you disliked the regex
13:10:13 <kallisti> which was... kind of essential.
13:10:30 <kallisti> but yes I shouldn't have written that in perl.
13:10:59 <kallisti> you mainly didn't like that it was perl.
13:11:31 <Vorpal> kallisti, is the generation script slow?
13:12:01 <kallisti> yes, but I don't think it's because of the algorithm.
13:12:03 <Vorpal> anyway regular expressions is not essential to anything, it is just convenient
13:12:16 <elliott> kallisti: I am dead sure it is.
13:12:17 <Vorpal> kallisti, what is the complexity of the algorithm?
13:12:24 <elliott> The problem is not your language, the problem is almost never your language.
13:12:36 <kallisti> in Perl regex is essential. it's also faster than handrolling the equivalent code that doesn't exist in perl libraries.
13:12:45 <elliott> Unless the best algorithm for the job has an exponentiation in a bad place, or the data set is over ~10 gigabytes, the problem is never your language.
13:12:53 <Vorpal> kallisti, sure, but that is perl
13:12:56 <kallisti> the problem is a) file IO b) perl
13:12:57 <Vorpal> who said it had to be perl?
13:13:05 <kallisti> Vorpal: it doesn't
13:13:14 <kallisti> but
13:13:19 <Vorpal> yes?
13:13:19 <kallisti> if you look I above I say
13:13:23 <kallisti> "in Perl regex is essential"
13:13:26 <kallisti> and then go on to explain why that is
13:13:31 <kallisti> thus the relevance...
13:13:34 <Vorpal> I see
13:13:56 <Vorpal> kallisti, anyway, what is the complexity of your algorithm?
13:13:57 <kallisti> anyway I don't know what the complexity is because I'm bad at that.
13:14:04 <Vorpal> I see
13:14:36 <elliott> I'm suuure it isn't the algorithm.
13:14:54 <Vorpal> elliott, well, why don't you calculate the complexity of the algorithm?
13:15:10 <Vorpal> also: why not just profile it and see where it spends time.
13:15:20 <Vorpal> (if such tools are available for perl)
13:15:41 <kallisti> ...really, how am I going to make "loop through file by line, take first word, split into grams and store in a table" faster (in perl)?
13:15:42 <elliott> Vorpal: ...Because it's not my code?
13:16:14 <Vorpal> fair enough
13:16:34 <Vorpal> kallisti, well, which bit was slow?
13:16:34 <elliott> kallisti: http://prog21.dadgum.com/52.html
13:16:49 <elliott> kallisti: Before complaining that it's a different language starting with P, consider how gigantic a constant factor you would need for that to matter.
13:17:02 <elliott> The problem is not the language.
13:17:07 <elliott> (by which I mean implementation.)
13:17:30 <kallisti> elliott: before you preemptively say snide things, consider maybe waiting for a reason to say them.
13:17:58 <elliott> Nah.
13:18:07 <Vorpal> hah
13:18:34 <elliott> Maybe if it was just snide, rather than snide and factual.
13:19:16 <elliott> Anyway, Perl's internals are pretty well-optimised, to my knowledge.
13:19:17 <kallisti> http://sprunge.us/fFYM analyze the "algorithm"
13:19:28 <Vorpal> kallisti, I would but I can't read perl
13:19:29 <kallisti> if you so desire
13:19:54 <kallisti> oh, then I doubt you can read my perl. :P
13:20:04 <Vorpal> kallisti, why not just profile it?
13:20:16 <kallisti> because that doesn't say anything about the complexity.
13:20:24 <kallisti> the profile will tell you that it "takes a while"
13:20:33 <elliott> kallisti has no idea how profiling works.
13:20:38 <Vorpal> indeed
13:20:40 <elliott> Also, he thinks that algorithm = big-O complexity.
13:20:48 <kallisti> ?
13:20:56 <kallisti> no
13:20:59 <kallisti> that algorithm is not
13:21:01 <kallisti> big-O complexity
13:21:04 <elliott> I say "your algorithm is the problem", you say "profiling my algorithm wouldn't tell me its ocmplexity".
13:21:05 <kallisti> it is a seperate entity.
13:21:11 <elliott> *complexity
13:21:29 <elliott> Anyway, the repeated substrs look suspicious.
13:21:48 <elliott> And a hash table is probably not ideal there; I believe the dictionaries you are using are sorted, and so you could use a trie.
13:22:05 <Vorpal> elliott, wait, is substr "is string in other string"?
13:22:07 <elliott> That would be much better, since you could keep a pointer.
13:22:10 <elliott> Vorpal: No, it's slicing.
13:22:14 <Vorpal> ah
13:22:53 <Vorpal> perl really looks ugly
13:23:34 <Vorpal> I think it is due to the abundance of $ in front of words.
13:23:45 <Vorpal> (mostly)
13:24:30 <Vorpal> elliott, when slicing in perl does it copy the slice or just give you a pointer to a section of the same string?
13:24:38 <Vorpal> as in, is it copy on write (or immutable even)
13:24:47 <kallisti> I'm pretty sure it would need to copy.
13:24:51 <elliott> I don't know.
13:24:59 <kallisti> because perl strings are not completely immutable.
13:25:04 <kallisti> but... who knows.
13:25:15 <elliott> http://www.perlmonks.org/?node_id=4688 OK, substr should be the fastest way.
13:25:19 <Vorpal> kallisti, how large are your data sets and how much time do they take?
13:26:06 <kallisti> gigabytes. hours.
13:26:22 <Vorpal> kallisti, 1 gb? 10 gb? 100 gb?
13:26:37 <elliott> Anyway, complaining about your language implementation before either (a) analysing the algorithm or (b) profiling should be punishable by firing squad.
13:26:45 <elliott> Unless it's PHP.
13:26:57 <itidus21> can i just run into a perl room and show the code and say fix this for some anonymous individual?
13:27:05 <elliott> No.
13:27:08 <itidus21> ok
13:27:20 <kallisti> I can't think of what an inefficient trie implementation would like in Perl
13:27:25 <kallisti> considering that there are 2 data structures.
13:27:32 <kallisti> and references.
13:27:43 <Vorpal> kallisti, do you have a really really really slow disk?
13:27:53 <kallisti> I don't really know actually.
13:27:56 <Vorpal> (I very much doubt it would be IO-bound)
13:28:11 <kallisti> based on resource meters it would appear to be CPU bound as the disk usage meter never hit max
13:28:15 <elliott> @hoogle many
13:28:16 <lambdabot> Text.ParserCombinators.ReadP many :: ReadP a -> ReadP [a]
13:28:16 <lambdabot> Control.Applicative many :: Alternative f => f a -> f [a]
13:28:16 <lambdabot> Text.ParserCombinators.ReadP many1 :: ReadP a -> ReadP [a]
13:28:18 <elliott> @hoogle choice
13:28:18 <lambdabot> Text.ParserCombinators.ReadP choice :: [ReadP a] -> ReadP a
13:28:19 <lambdabot> Text.ParserCombinators.ReadPrec choice :: [ReadPrec a] -> ReadPrec a
13:28:19 <lambdabot> Text.Parsec.Combinator choice :: Stream s m t => [ParsecT s u m a] -> ParsecT s u m a
13:28:38 <kallisti> my hard drive 480 Mbps
13:28:45 <kallisti> according to its description online
13:28:47 <Vorpal> I have a rather old disk here, it takes 30 minutes to copy 10 GB of data from it, and that is in the form of multiple files, so some seeking would be involved.
13:28:59 <Vorpal> so hm, very doubtful you have a worse disk than that
13:29:52 <Vorpal> kallisti, well that number doesn't mean much if it isn't from a source independent of the manufacture.
13:29:59 <Vorpal> manufacturer*
13:30:01 <kallisti> indeed
13:30:05 -!- derdon has quit (Remote host closed the connection).
13:30:17 <elliott> @hoogle [(Int,a)] -> [a]
13:30:17 <lambdabot> Prelude snd :: (a, b) -> b
13:30:17 <lambdabot> Data.Tuple snd :: (a, b) -> b
13:30:17 <lambdabot> System.Random randomRs :: (Random a, RandomGen g) => (a, a) -> g -> [a]
13:30:20 <elliott> oerjan: halp
13:30:37 <Vorpal> kallisti, anyway I recommend you profile the code, it might help
13:30:44 <Deewiant> elliott: What're you after?
13:30:50 <Vorpal> kallisti, and also see elliott's suggestions above
13:31:12 <kallisti> Vorpal: it's not even an issue I'm concerned with now, since I already have all the data.
13:31:17 <Vorpal> hm
13:31:24 <Phantom_Hoover> <elliott> oerjan: halp
13:31:28 <Phantom_Hoover> What are you looking for?
13:31:39 <monqy> elliott: unsafeCoerce . return . head . reverse . map snd
13:31:45 <kallisti> this entire discussion was brought about by elliott complaining about my algorithms.
13:32:04 <Phantom_Hoover> :t unsafeCoerce
13:32:05 <lambdabot> Not in scope: `unsafeCoerce'
13:32:06 <Vorpal> elliott, one advantage with C code is that it is usually easy to figure out why it is slow.
13:32:43 <Vorpal> due to the few layers of abstraction you can pretty much figure out what is going on, when stuff is copied and so on.
13:32:57 <monqy> :t sortBy
13:32:57 <Phantom_Hoover> Hmm, what happens if you unsafeCoerce to Void?
13:32:58 <lambdabot> forall a. (a -> a -> Ordering) -> [a] -> [a]
13:33:06 <Vorpal> (of course C has a lot of disadvantages as well)
13:33:32 <Vorpal> :t Void
13:33:32 <lambdabot> Not in scope: data constructor `Void'
13:33:37 <monqy> elliott: are you looking for something like map snd . sortBy (comparing fst)
13:33:38 <Vorpal> eh,
13:33:40 <Vorpal> :i Void
13:33:40 <Phantom_Hoover> I suppose you'd just get some garbage which called itself a Void.
13:33:43 <monqy> or what
13:33:48 <Vorpal> hm guess it doesn't have that
13:34:01 <kallisti> Vorpal: here's the file sizes since you were curious. http://sprunge.us/aOEW
13:34:02 <Phantom_Hoover> Vorpal, it's not implemented in the standard library IIRC, but you can define it.
13:34:09 <Vorpal> Phantom_Hoover, ah right
13:34:22 <Phantom_Hoover> newtype Void = Void Void
13:34:49 <Vorpal> Phantom_Hoover, well, since it doesn't expose anything that might inspect the values of it I would guess it doesn't do much harm=
13:34:50 -!- sebbu2 has joined.
13:34:50 -!- sebbu2 has quit (Changing host).
13:34:50 -!- sebbu2 has joined.
13:34:51 <Vorpal> s/=/?/
13:36:21 <kallisti> Vorpal: so, 49 GBs I believe
13:36:38 <Vorpal> kallisti, and in total it took a few hours?
13:36:52 <oerjan> <elliott> oerjan: halp <-- what is that supposed to do?
13:36:55 <kallisti> I generally let it run while sleeping. :P
13:37:04 <itidus21> ahhh.. so this is the random word generating project :D
13:37:08 <kallisti> but yes a few hours. maybe 3-4
13:37:26 <kallisti> itidus21: that's part of it, yes.
13:37:32 <itidus21> you some crazy motherfuckers
13:37:36 <Vorpal> meh, not worth dealing with that issue, it should be IO-bound though.
13:37:53 -!- sebbu has quit (Ping timeout: 240 seconds).
13:38:15 <Vorpal> unless you have >49 GB RAM and load it all into RAM before
13:39:01 <Vorpal> which I doubt
13:39:15 <kallisti> no
13:39:16 <oerjan> elliott: i cannot help you when you're not even asking a question
13:39:25 <kallisti> Vorpal: I don't load the individual files into RAM either.
13:39:32 <Vorpal> right
13:39:44 <Vorpal> kallisti, I know someone who has 32 GB RAM in her desktop though, not so far to 40 GB from there.
13:39:53 <Vorpal> err, 49*
13:40:03 <oerjan> :t (uncurry replicate =<<)
13:40:04 <lambdabot> forall b. [(Int, b)] -> [b]
13:40:14 <oerjan> elliott: ^ that one fits your type, at least
13:40:19 <kallisti> the difference between for(<$f>) and while(<$f>) is the difference between reading line by line and reading the entire file into memory.
13:40:30 <Vorpal> kallisti, huh?
13:40:32 <kallisti> ....except reverse the order that I said those.
13:40:38 <kallisti> while reads line by line.
13:40:47 <kallisti> Vorpal: perl stuff
13:40:50 <Vorpal> kallisti, really? That is stupid, it doesn't make sense that it has that effect
13:40:52 <Vorpal> fuck perl
13:40:52 <elliott> oerjan: sorry back
13:40:57 <elliott> oerjan: i wanted what monqy said yeah :P
13:41:01 <kallisti> Vorpal: that's because you don't know why it is.
13:41:12 <elliott> <Phantom_Hoover> newtype Void = Void Void
13:41:14 <elliott> *data Void
13:41:40 <Vorpal> kallisti, oh?
13:41:45 <Vorpal> kallisti, why is it then
13:41:47 <elliott> <Vorpal> elliott, one advantage with C code is that it is usually easy to figure out why it is slow.
13:41:47 <elliott> <Vorpal> due to the few layers of abstraction you can pretty much figure out what is going on, when stuff is copied and so on.
13:41:49 <elliott> Vorpal: Not true.
13:41:53 <Phantom_Hoover> True, but that's a Haskell 2010 thing, so the old one is still relevant.
13:41:58 <Vorpal> elliott, oh?
13:42:05 <Phantom_Hoover> Also, this is Vorpal, so making anything implicit is asking for trouble.
13:42:15 <elliott> Vorpal: Cache locality, blah blah blah, all the things that matter to people who really need optimisation.
13:42:19 <kallisti> Vorpal: http://perldoc.perl.org/perldata.html#Context
13:42:22 <elliott> C abstracts memory too much, basically.
13:42:26 <kallisti> oh hey, it even uses <> as the example.
13:42:32 <kallisti> wasn't expecting that.
13:42:34 <elliott> Phantom_Hoover: You realise as soon as you write "import Data.List" you're invalid Haskell 98?
13:42:37 <elliott> It doesn't even have hierarchical modules.
13:42:49 <elliott> Also, the parsing rule in 98 that 2010 changed was the one that every implementation had done from the start.
13:43:07 <elliott> Haskell 2010 is one of the most minor, status-quo language revisions ever.
13:43:12 <Vorpal> elliott, hm, good point. Though I wasn't thinking about it on that level, more about "does the language represent this in some way that is slow for the purpose I'm using it" sort of thing
13:43:16 <Phantom_Hoover> Is there anything /wrong/ with the newtype definition?
13:43:24 <elliott> Phantom_Hoover: Well, no. But it's ugly.
13:44:13 <Vorpal> kallisti, doesn't say anything about for/while there?
13:44:34 <kallisti> Vorpal: oh well... for takes its argument as a list, while as a scalar.
13:44:39 <Vorpal> ah
13:44:58 <kallisti> if and while are "boolean context" which is just a special case of scalar context.
13:45:09 <Vorpal> kallisti, I'm having problems seeing how <$f> can type as BOTH of those though
13:45:12 <kallisti> the argument to for is going to be list context, obviously.
13:45:19 <kallisti> >_> type?
13:45:25 <Vorpal> oh wait
13:45:34 <Vorpal> does perl even have a type system?
13:45:34 -!- ais523 has quit (Read error: Connection reset by peer).
13:45:39 <kallisti> not perl 5, no.
13:45:41 <kallisti> well
13:45:42 <Vorpal> right
13:45:44 <kallisti> kind of.
13:45:47 <Vorpal> dynamic typing?
13:45:56 <Vorpal> and lots of implicit casts?
13:46:05 <kallisti> there's "lists" and "scalars" and "hashes" and "refs" and "filehandles" and.... but it's dynamically typed.
13:46:43 -!- ais523 has joined.
13:46:49 <oerjan> a kind of system
13:47:08 <kallisti> there's some casting but not always. it's entirely possible to write a subroutine that does two completely different things based on its context.
13:47:18 <kallisti> "casting" isn't really the word.
13:48:09 <Vorpal> ouch
13:48:10 <kallisti> you basically have this dynamically scoped variable that every stack frame can access that tells it what its calling context wants.
13:48:20 <kallisti> and then do something different based on this.
13:48:29 <Vorpal> ouch, that is just a mess
13:48:44 <kallisti> -shrug- it's pretty well-documented, at least in the standard libraries.
13:48:50 <kallisti> and most CPAN libraries as far as I've seen.
13:48:56 <Vorpal> yes but it is an ugly mechanism
13:49:16 <Vorpal> and stupid too
13:49:38 <kallisti> it's certainly convenient, if you understand how it works.
13:50:00 <Vorpal> maybe
13:50:13 <Vorpal> kallisti, anyway would for(my $line = <$f>) even work?
13:50:17 <Vorpal> as in, would it run?
13:50:19 <kallisti> yes
13:50:21 <Vorpal> hm
13:50:33 <Vorpal> kallisti, is <$f> considered a generator expression or something then?
13:51:14 <kallisti> hmmm
13:51:27 <kallisti> I think it's just an operator.
13:51:45 <kallisti> in other words I don't think evaluating <$f> as a list is going to do anything lazily.
13:51:57 <kallisti> but as a scalar it's like a getline function.
13:52:25 <Vorpal> this language is crazy
13:52:33 <kallisti> !perl for("test") { print }
13:52:36 <EgoBot> test
13:52:50 <kallisti> so yeah your above code will grab the first line and store it in $line, and the iterate exactly once
13:52:56 <kallisti> s/the/then/
13:53:15 <Vorpal> ah
13:53:22 <Vorpal> well that makes more sense
13:53:36 <Vorpal> kallisti, I though you said it would read the whole file?
13:53:39 <kallisti> because a scalar value in list context is a 1-element list.
13:53:46 <kallisti> it will, if you evaluate it in list context
13:53:49 <kallisti> my $line = <$f>
13:53:51 <kallisti> is not list context
13:53:54 <Vorpal> I see
13:53:58 <kallisti> my @line = <$f>
13:54:01 <kallisti> would be, however.
13:54:28 -!- monqy has quit (Quit: hello).
13:55:29 <kallisti> I promise it all makes surprising amounts of sense.
13:55:33 <Vorpal> kallisti, that is a really ugly way to do typing, because that seems to be what it does. You have to tell every time you use something if it is a list or a scalar, rather than making it have a type
13:55:54 <Vorpal> unless I misunderstood how $ and @ work
13:56:29 <kallisti> $ and @ are like... variable types.
13:56:42 <Vorpal> hm?
13:56:50 <kallisti> but there are more than 2 kinds of values, obviously.
13:56:56 <Vorpal> you mean you can do $foo = ... and then later read @foo?
13:57:01 <kallisti> oh, no.
13:57:04 <Vorpal> are they different namespaces?
13:57:09 <kallisti> @foo and $foo are different variables
13:57:10 <lambdabot> Maybe you meant: do faq ft todo yow
13:57:14 <Vorpal> ah
13:57:58 <kallisti> the context arises from the assignment operator, which bases its context on what kind of variable you're assigning to.
13:58:16 <kallisti> @list = ... is list context, $list[0] = ... is scalar
13:58:16 <lambdabot> No module "= ... is list context, $list[0] = ... is scalar" loaded
13:58:56 <Vorpal> kallisti, and scalar can be anything? integer, floating point, struct, and so on? What about strings?
13:58:57 <kallisti> the sigil tells you the context of the assignment operator, basically. except when you're assigning to a list of variables, then it's always list context.
13:59:04 <kallisti> Vorpal: yes strings are scalar.
13:59:10 <Vorpal> kallisti, and structs?
13:59:17 <kallisti> well, references.
13:59:27 <kallisti> which can reference hash tables and lists. that's the equivalent of "structs" in Perl.
13:59:38 <Vorpal> ouch
14:00:10 <Vorpal> kallisti, so can you store lists in lists?
14:00:27 <kallisti> well, you can store references to lists in lists.
14:00:30 <kallisti> lists can only contain scalars.
14:00:30 <Vorpal> hm
14:00:37 <kallisti> otherwise all sanity would be lost...
14:00:47 <elliott> <Vorpal> you mean you can do $foo = ... and then later read @foo?
14:00:48 <elliott> <kallisti> @foo and $foo are different variables
14:00:53 <elliott> You can do @foo = ... and read $foo, though.
14:01:00 <Vorpal> elliott, what does that do?
14:01:09 <Vorpal> I thought he said they were different namespaces?
14:01:10 <elliott> It's maximum index or something. I forget.
14:01:14 <Vorpal> so $foo and @foo could coexist?
14:01:15 <kallisti> oh you're thinking of $#foo
14:01:21 <elliott> Hmm.
14:01:26 <Vorpal> kallisti, can $foo and @foo coexist?
14:01:26 <elliott> I thought $foo was scalar @foo if @foo existed.
14:01:33 <kallisti> don't believe so.
14:01:46 <Vorpal> kallisti, so they aren't really different variables then as you claimed
14:02:00 <kallisti> !perl use v5.10; my $x = 2; my @x = (1,2); say @x; say $x;
14:02:00 <EgoBot> 12 \ 2
14:02:02 <kallisti> no they are.
14:02:17 <Vorpal> kallisti, so they can coexist then?
14:02:20 <kallisti> yep.
14:02:20 <Vorpal> right
14:03:15 <Vorpal> kallisti, so $x is not actually a scalar variable named x, but a variable named $x?
14:03:33 <kallisti> it's a variable named $x that holds a scalar value
14:03:37 <Vorpal> hm
14:03:44 <kallisti> the sigil does enforce a constraint on its value.
14:03:46 <elliott> ais523 should really step in here, since IIRC kallisti has been wrong about Perl variables at least once.
14:03:56 <kallisti> elliott: I am not wrong here.
14:04:04 <kallisti> (so reassuring)
14:04:15 <kallisti> anyway I just showed that I'm not wrong.
14:04:18 <kallisti> via Perl code.
14:04:32 * elliott was not arguing.
14:04:34 <kallisti> de facto standard, here. come on.
14:04:58 <kallisti> oh you're saying I might mess up maybe or something.
14:05:00 <kallisti> MORE PREEMPTION
14:05:42 <kallisti> Vorpal: the variable *foo contains a symbol table entry with all of the different kinds of foos. that's always fun.
14:05:48 <kallisti> it's not commonly used in perl 5 though, now that there's references.
14:06:15 <Vorpal> ouch
14:06:55 <kallisti> *foo was basically how you did referency back before references existed.
14:08:34 <kallisti> !perl use v5.10; my $x = 2; my @x = (1,2); say *x{ARRAY}; say *x{SCALAR}; #awww yeah ugly mostly-obsolete shit
14:08:34 <EgoBot> ​\ SCALAR(0x7f562d13cb98)
14:08:43 <kallisti> oh hmmm
14:09:08 <Vorpal> kallisti, that wouldn't work like a pointer anyway?
14:09:57 <kallisti> *foo is like a table of references
14:09:57 <elliott> "Russian composer, singer and recently a record producer. Also an actor in one movie.
14:09:58 <elliott> In my free time (when I have no tour or concert-like events) I usually read some technical literature about modern programming languages and trying to write some useless tools. It's just a hobby, nothing more."
14:10:01 <kallisti> references work like pointers.
14:10:02 <elliott> I thought it was a joke but it seems to... not be.
14:10:11 <kallisti> elliott: cool
14:10:24 <elliott> http://en.wikipedia.org/wiki/Dmitry_Malikov
14:10:25 <elliott> https://github.com/dmalikov
14:10:35 <kallisti> Vorpal: references is one of the nice things about perl compared to ruby and perl, I'd say.
14:10:38 <kallisti> elliott: heh, nice.
14:10:39 * elliott can't figure out whether the guy is just dedicated to the fake identity or not.
14:10:55 <kallisti> "USELESS PATHETIC WRONG"
14:10:57 <elliott> "USELESS PATHETIC WRONG" is a really good project description.
14:10:57 <elliott> Yes.
14:10:58 <Vorpal> kallisti, well, I don't like python and I never used ruby
14:11:00 <Vorpal> so *shrug*
14:11:18 <elliott> kallisti: Yeah, Perl is nicer than Ruby and Perl.
14:11:23 <Vorpal> kallisti, perl looks worse than python though. At least python code doesn't look inherently ugly
14:11:31 <kallisti> elliott: is that... oh that wasn't sarcasm was it.
14:11:35 <Vorpal> elliott, perl is nicer than perl?
14:11:42 <Vorpal> elliott, typo or intentional?
14:11:49 <kallisti> oh
14:11:50 <kallisti> lol
14:12:01 * kallisti should proofread more
14:12:03 <kallisti> s/perl/python/
14:12:16 <elliott> "references is one of the nice things about python compared to ruby and perl, I'd say"
14:12:20 <Vorpal> kallisti, oh right you did that typo too, I read it as python though
14:12:21 <elliott> Way to go, you broke it some more
14:12:21 <kallisti> yes
14:12:44 * elliott desperately tries to find evidence that this guy is actually that guy.
14:12:51 <kallisti> elliott: ask him
14:12:54 <kallisti> best evidence
14:13:08 <elliott> kallisti: That would be so awkward.
14:13:21 <kallisti> "hi are you really the guy" "yes" "cool!"
14:13:22 <Vorpal> * elliott can't figure out whether the guy is just dedicated to the fake identity or not. <-- is the guy claiming to be the same one?
14:13:30 <Vorpal> I mean there could be another person with the same name
14:13:46 <Vorpal> also why is github not loading for me today
14:13:57 * kallisti should actually try to power through some Project Euler sometime.
14:14:06 <elliott> Vorpal: http://stackoverflow.com/users/570689/
14:14:16 <Vorpal> well I can't check if he is claiming to be the same guy since the god damn website isn't loading
14:14:43 <Vorpal> elliott, well, that is possible, who knows
14:15:16 <kallisti> Vorpal: honestly I find Python code semantically uglier because of how simplistic the language actually is. Lack of symbols doesn't really imply pretty code to me anymore.
14:15:24 <itidus21> well he is russian
14:15:39 <Vorpal> kallisti, so you don't like Lisp?
14:15:40 <elliott> "WTF?! This is such a joke, I hope:) Dvitry Malikov - a programmer."
14:15:40 <kallisti> Vorpal: this is probably because I've been programming way too much perl.
14:15:50 <kallisti> Vorpal: I like lisp, but I do find it hard to read.
14:15:52 <elliott> (Translating of "WTF?! Это такой прикол, я надеюсь :) Двитрий Маликов - программист.", a Tweet followed by a link to the profile.)
14:15:55 <elliott> *Translation
14:16:03 <elliott> OK, I'm satisfied, it's not him :P
14:16:08 <elliott> Probably some other guy with the same name.
14:16:10 <elliott> Making a joke.
14:16:18 <elliott> But it really should be him.
14:16:29 <kallisti> Vorpal: I'm sure if I spent as much time learning lisp idioms as I have Perl idioms I would find it easy to read as well.
14:16:35 <itidus21> i want to hear dmitry now
14:16:47 <itidus21> to youtube
14:16:56 <Vorpal> kallisti, personally I prefer a language with some amount of syntax that is between lisp and perl
14:17:07 <kallisti> so, Haskell? :>
14:17:13 <Vorpal> well yes that is a nice one
14:17:32 <Vorpal> kallisti, syntax amount between lisp and perl covers quite a few languages though
14:17:39 <kallisti> yes quite a "few"
14:17:50 <Vorpal> kallisti, probably even "most"
14:18:01 <kallisti> yes they're pretty much on opposite ends there.
14:18:06 <Vorpal> indeed
14:18:31 <kallisti> Perl 6 trumphs Perl 5 in syntax though.
14:18:36 <Vorpal> possibly
14:18:38 <kallisti> in terms of "amount"
14:18:42 <kallisti> whatever that means.
14:18:44 <Vorpal> right
14:18:57 <kallisti> I guess grammar rules.
14:18:59 -!- MSleep has changed nick to MDude.
14:19:02 <Vorpal> kallisti, well, it isn't a well defined concept, I can't give you a number
14:19:11 <Vorpal> but arguably you understood what I meant
14:19:15 <kallisti> yes.
14:19:27 <elliott> perl 6 actually has useful syntax though
14:19:33 <kallisti> so does perl 5?
14:19:35 -!- yorick has quit (Quit: No Ping reply in 180 seconds.).
14:20:00 -!- yorick has joined.
14:20:04 <Vorpal> elliott, also is there a system to it? Or does it feel like someone just piled more and more features on the original language resulting in a mess?
14:20:19 <kallisti> there's a system to it and it's also pretty messy.
14:21:14 <elliott> Vorpal: It's much more consistent.
14:21:18 <Vorpal> there is a difference between java and older C# versions (can't say much about the LINQ stuff and so on, never used that): C# feels like a streamlined and more consistent version of java to me.
14:21:29 <itidus21> http://www.youtube.com/watch?v=tiylH4HIb2A this is dmitry singing
14:21:42 <Vorpal> elliott, well that is good
14:22:03 <kallisti> the Perl 6 spec gives me a headache...
14:22:05 <itidus21> the crowd resembles grass swaying in the wind
14:22:13 <Vorpal> kallisti, oh?
14:22:13 <itidus21> which is kind of unusual
14:22:38 <Vorpal> itidus21, yes usually crowds resemble crowds
14:24:06 <Vorpal> hm I just noticed the moon is highly visible and unusually sharp given that it is daytime, usually when it is visible during day it tends to be faint or such, not so today.
14:24:19 <kallisti> "Perl 6 introduces a binary 'default' operator -- // -- that solves this problem. The default operator evaluates to its left operand if that operand is defined, otherwise it evaluates to its right operand."
14:24:23 <kallisti> uh.... this is new?
14:24:32 <kallisti> I guess maybe Perl 5 borrowed it from Perl 6 or something.
14:24:34 <kallisti> not unlikely.
14:24:40 <elliott> It did.
14:24:54 <elliott> A large number of Perl 5 features are.
14:26:00 <Vorpal> when was perl 5 released, as in 5.0
14:26:45 <Vorpal> ais523, there?
14:27:11 <kallisti> elliott: can you explain why $@ iterates over a filehandle
14:27:14 <Vorpal> guess not
14:27:15 <kallisti> as in $@f
14:27:26 <kallisti> er @!f
14:27:30 <kallisti> ...
14:27:33 <kallisti> @$f
14:27:34 <lambdabot> Done.
14:27:38 <kallisti> yes. done.
14:27:41 <Vorpal> what did it do?
14:27:46 <kallisti> no idea.
14:28:00 <kallisti> @help $f
14:28:00 <lambdabot> help <command>. Ask for help for <command>. Try 'list' for all commands
14:28:20 <Vorpal> @$a
14:28:20 <lambdabot> Maybe you meant: . ? @ bf do faq ft id map pl rc v wn
14:28:25 <Vorpal> @$f
14:28:25 <lambdabot> Done.
14:28:27 <Vorpal> huh
14:28:40 <Vorpal> oh it tries to match around typos right?
14:28:47 <Vorpal> @helpp
14:28:47 <lambdabot> help <command>. Ask for help for <command>. Try 'list' for all commands
14:28:50 <Vorpal> yeah
14:28:57 <Vorpal> so it could be anything
14:29:31 <Vorpal> kallisti, it could be anything, you could have launched a nuclear missile
14:29:40 <kallisti> cool
14:31:05 <kallisti> ...this spec is filled with some many [Update: ...] annotations that contradict what was previously said, that I should probably just read the Update annotations first as I scan along.
14:31:13 -!- Jafet has quit (Ping timeout: 260 seconds).
14:32:34 <oerjan> @bf
14:32:35 <lambdabot> Done.
14:32:38 <oerjan> thought so.
14:32:50 <kallisti> @13ijwd
14:32:50 <lambdabot> Unknown command, try @list
14:32:52 <Vorpal> oerjan, phew, the Earth is afe
14:32:53 <kallisti> @ijwd
14:32:53 <Vorpal> safe*
14:32:57 <kallisti> @sld
14:32:57 <lambdabot> Maybe you meant: bid id pl slap src
14:33:02 <kallisti> ah nice.
14:33:04 <ais523> Vorpal: no
14:33:07 <ais523> I wasn't
14:33:08 * kallisti should implement this in his bot.
14:33:17 <ais523> does your questions still stand?
14:33:21 <Vorpal> ais523, well now you are: I have a java question.
14:33:21 <oerjan> Vorpal: the error message when you change one letter too much, (i.e. the @$a) gives a hint what @$f may be interpreted as
14:33:22 <Vorpal> and yes
14:34:22 <ais523> oerjan: @$a is, in C notation, *(array*)scalar_a
14:35:01 <Vorpal> ais523, assume a tcp connection, I get something like a fixed size struct over a connection, containing integers and floats, how would I parse that in java? I would like to get it into a class with the relevant fields.
14:35:20 <Vorpal> I guess I could parse it by hand? But how would you convert a binary blob to a float in java?
14:35:28 <elliott> <kallisti> elliott: can you explain why $@ iterates over a filehandle
14:35:28 <elliott> in what
14:35:31 <Vorpal> (assuming I calculated where it is)
14:35:38 <ais523> Vorpal: I'd guess there's some sort of relevant input stream variant
14:35:40 <kallisti> elliott: perl 6
14:35:42 <ais523> try checking the API
14:35:45 <Vorpal> ais523, a socket atm
14:35:48 <kallisti> also it's @$ actually
14:36:01 <ais523> Vorpal: there's probably a wrapper that you can wrap around arbitrary input streams
14:36:04 <elliott> kallisti: well @foo must be a list and a filehandle is presumably a scalar
14:36:07 <ais523> with operations like readInt and readFloat
14:36:12 <elliott> the sigils mean differnt things in 6
14:36:21 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 , Skype: patashu0 .).
14:36:22 <Vorpal> ais523, I'm just not sure how to do what is basically *((float*)&foo) in java
14:36:29 <elliott> Vorpal: ais523 has answered your question
14:36:31 <Vorpal> right
14:36:35 <kallisti> elliott: @$fh looks to me like a dereference. but I'm guessing it's not.
14:36:45 <Vorpal> elliott, I'm lagging a bit here
14:37:07 <Vorpal> elliott, he answered it just two seconds before I wrote that last line
14:37:21 <Vorpal> I do have 8 seconds lag though accoding to my irc client
14:37:28 <Vorpal> having a bit of problem with my connection today
14:40:43 -!- Jafet has joined.
14:43:02 <ais523> Vorpal: DataInputStream may be what you're looking for; although it uses its own serialisation rules, not necessarily native byte order
14:43:17 <Vorpal> hm
14:43:30 <Vorpal> ais523, and for outputting I assume there is DataOutputStream?
14:43:38 <ais523> I guess so, although I haven't checked
14:43:47 <Vorpal> ais523, thanks :)
14:44:00 <elliott> Vorpal:
14:44:00 <elliott> longBitsToDouble
14:44:00 <elliott> public static double longBitsToDouble(long bits)
14:44:01 <elliott> Returns the double value corresponding to a given bit representation. The argument is considered to be a representation of a floating-point value according to the IEEE 754 floating-point "double format" bit layout.
14:44:01 <elliott> If the argument is 0x7ff0000000000000L, the result is positive infinity.
14:44:02 <elliott> If the argument is 0xfff0000000000000L, the result is negative infinity.
14:44:04 <elliott> If the argument is any value in the range 0x7ff0000000000001L through 0x7fffffffffffffffL or in the range 0xfff0000000000001L through 0xffffffffffffffffL, the result is a NaN. No IEEE 754 floating-point operation provided by Java can distinguish between two NaN values of the same type with different bit patterns. Distinct values of NaN are only distinguishable by use of the Double.doubleToRawLongBits method.
14:44:08 <ais523> there's also ObjectInputStream that also serialises and deserialises primitives, but it uses the same rules
14:44:24 <Vorpal> elliott, need float not double
14:44:25 <Vorpal> but sure
14:44:38 <ais523> elliott: I was just about to mention that; DataStream says that it uses the same rules as longBitsToFloat/bitsToDouble
14:44:47 <ais523> for representation
14:45:03 <elliott> Vorpal: http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Float.html#intBitsToFloat(int)
14:45:06 <elliott> lol, 1.4.2
14:45:10 <elliott> ais523: Oh.
14:45:14 <elliott> Vorpal: Then it's IEEE.
14:45:18 <elliott> So you don't need that.
14:45:20 -!- Jafet has quit (Ping timeout: 244 seconds).
14:45:31 * elliott knows that Java just casts instead of actually converting.
14:45:36 <Vorpal> of course a float or a double is IEEE
14:45:38 <ais523> elliott: apparently, the representation it uses for characters is "modified UTF-8", which sounds a little scary
14:45:40 <elliott> Even mcmap has manual IEEE encoding/decoding code.
14:45:49 <Vorpal> elliott, why?
14:45:53 <elliott> Write once, run anywhere my ass.
14:45:58 <Vorpal> it could just... cast
14:46:02 <elliott> Vorpal: Um, for non-IEEE platforms?
14:46:05 <Vorpal> right
14:46:08 <elliott> It uses the casting method on IEEE platforms.
14:46:14 <elliott> You have to explicitly opt for the portable method.
14:46:17 <elliott> I don't think anybody has.
14:46:24 <Vorpal> someone wrote code for a non-IEEE platform?
14:46:29 <elliott> Yes, fizzie.
14:46:31 <elliott> I told him to.
14:46:32 <Vorpal> why
14:46:34 <elliott> It's in config.h.
14:46:39 <elliott> (The setting, that is.)
14:46:43 <elliott> Vorpal: Because non-IEEE platforms!
14:46:45 <Vorpal> elliott, it isn't as if I can think of any non-IEEE platform at all
14:46:56 <elliott> mcmap is portable, dude. Portable.
14:46:59 <Vorpal> I mean x86 has long double sure, but double and float are IEEE
14:47:04 <elliott> I'm dead sure there is a platform which can do SDL and glib that doesn't have IEEE floats.
14:47:11 <Vorpal> elliott, which one?
14:47:38 -!- Jafet has joined.
14:48:23 <elliott> Vorpal: Well, it might not be implemented.
14:48:30 <elliott> But I can CONCEIVE of such a platform.
14:48:52 <itidus21> its called itidus's platform of DOOM
14:49:07 <Vorpal> elliott, right
14:50:22 <Vorpal> elliott, all modern architectures I know of either have IEEE hardware floats or no hardware floats.
14:50:34 <Vorpal> and software floats tend to be IEEE ones
14:50:38 -!- Jafet has quit (Read error: Connection reset by peer).
14:50:43 <itidus21> name: itidus's platform of DOOM definition: any platform which opts in for the name, and has precisely SDL and glib and no IEEE floats
14:51:07 <Vorpal> itidus21, :D
14:51:08 <elliott> The UNIVAC 1100/2200 series, introduced in 1962, supported two floating-point formats. Single precision used 36 bits, organized into a 1-bit sign, an 8-bit exponent, and a 27-bit significand. Double precision used 72 bits organized as a 1-bit sign, an 11-bit exponent, and a 60-bit significand. The IBM 7094, introduced the same year, also supported single and double precision, with slightly different formats.
14:51:20 <Vorpal> elliott, does it support SDL and glib?
14:51:22 <elliott> Vorpal: See, you might want to mcmap on a UNIVAC.
14:51:26 <elliott> Vorpal: Well, I'm sure it _could_.
14:51:33 <elliott> We're not tied to any particular SDL or glib implementation, just the API.
14:51:41 <Vorpal> elliott, I'm sure it would be terribly slow
14:51:55 <elliott> Vorpal: The IEEE has standardized the computer representation for binary floating-point numbers in IEEE 754. This standard is followed by almost all modern machines. Notable exceptions include IBM mainframes, which support IBM's own format (in addition to the IEEE 754 binary and decimal formats), and Cray vector machines, where the T90 series had an IEEE version, but the SV1 still uses Cray floating-point format.
14:51:59 <elliott> IBM.
14:52:02 <elliott> Gotta support IBM.
14:52:03 -!- Jafet has joined.
14:52:10 <Vorpal> elliott, "in addition to"
14:52:10 <itidus21> the first clause is to ensure that geeks on wikipedia can't go hunting for implementations of itidus's platform of DOOM since it is opt-in
14:52:13 <elliott> Vorpal: OK, http://en.wikipedia.org/wiki/Cray_SV1
14:52:16 <elliott> Vorpal: 1998.
14:52:18 <Vorpal> sure
14:52:25 <elliott> I'm sure it can run mcmap.
14:52:27 <elliott> Networking, maybe not.
14:52:34 <elliott> Also it probably can't run Unix.
14:52:41 <elliott> So you might need to port SDL and glib.
14:53:04 <Vorpal> "The SV1 was backwards compatible with J90 and Y-MP software, and ran the same UNIX-derived UNICOS operating system"
14:53:13 <Vorpal> elliott, unix-derived
14:53:14 <Vorpal> so hm
14:53:30 <elliott> Vorpal: They probably have a really shitty libc; also we need C99.
14:53:37 <elliott> But MAYBE.
14:53:39 <Vorpal> what do you use C99 for?
14:53:48 <elliott> What do you use C89 for?
14:54:02 <Vorpal> elliott, I meant, why do you need C99 rather than just C89
14:54:16 <elliott> Why do you need C89 rather than just K&R?
14:54:33 <itidus21> for S&G
14:54:48 <Vorpal> elliott, because specific features in the program that uses newer features, and I'm trying to find out which ones those are in this case
14:55:06 <elliott> What?
14:55:31 <itidus21> ^shits and giggles
14:55:45 <Vorpal> elliott, because specific parts of the code of the program uses features not found in K&R, that is why you need C89. And the interesting part is what those features are.
14:56:02 <Vorpal> in the case of mcmap that is
14:56:09 <Vorpal> itidus21, and yes this is rather funny
14:56:59 <ais523> elliott: thinking about things, wouldn't a Java library impl be non-conforming if it didn't translate floats IEEE-style?
14:57:15 <elliott> [elliott@dinky mcmap]$ make CFLAGS="-std=c89 -ggdb3 -O3 -Wall -Werror -Winit-self -DPLATFORM_POSIX -pthread -D_GNU_SOURCE=1 -D_REENTRANT -isystem /usr/include/glib-2.0 -isystem /usr/lib/glib-2.0/include -isystem /usr/include/SDL"
14:57:15 <elliott> mkdir build
14:57:15 <elliott> CC posix.c
14:57:15 <elliott> In file included from posix.c:14:0:
14:57:15 <elliott> types.h:67:1: error: expected identifier or ‘(’ before ‘/’ token
14:57:17 <elliott> [failed command: cc -MMD -std=c89 -ggdb3 -O3 -Wall -Werror -Winit-self -DPLATFORM_POSIX -pthread -D_GNU_SOURCE=1 -D_REENTRANT -isystem /usr/include/glib-2.0 -isystem /usr/lib/glib-2.0/include -isystem /usr/include/SDL -c -o build/posix.o posix.c]
14:57:21 <elliott> make: *** [build/posix.o] Error 1
14:57:23 <elliott> ais523: indeed
14:57:31 <Vorpal> elliott, fuck gcc errors :D
14:57:38 <elliott> Vorpal: // FIXME: Should we transform alpha too?
14:57:39 <elliott> is the line.
14:57:42 <Vorpal> aaah
14:57:51 <Vorpal> elliott, so line comments then
14:57:53 <elliott> There's also a ton of declarations in for loops.
14:57:54 <ais523> that's a reasonably good error message
14:58:01 <elliott> And reasonable shit like that, rather than bunching them all at the start of a function.
14:58:04 <ais523> tells you exactly what character was out of place
14:58:11 <elliott> I think we also use { .foo = ... }.
14:58:14 <elliott> Yes, we do.
14:58:16 <elliott> Quite a lot, even.
14:58:21 <elliott> ((struct foo){ ... }) mainly.
14:58:22 <Vorpal> elliott, indeed
14:58:41 <Vorpal> elliott, sensible reasons :)
14:59:08 <elliott> Oh, we did use nested functions, but don't any more.
14:59:22 <elliott> Those aren't standard at all.
14:59:29 <Vorpal> indeed
14:59:32 <Vorpal> they are just gcc
15:05:26 -!- oerjan has quit (Quit: Later).
15:05:33 <Vorpal> ais523, any idea what swing component might be good for drawing a bitmap quite a lot, as in for a game or such (or maybe I should use some SDL bindings for java?)
15:05:56 <ais523> Vorpal: oh, haha, be careful not to hit an infamous bug/design error in Java's stdlib
15:06:02 <Vorpal> ais523, oh?
15:06:06 <ais523> let me check what I did in jettyplay
15:07:22 <Vorpal> ais523, I just need to blit a bitmap to a jframe basically :)
15:07:23 <elliott> Vorpal: Why are you using Java, why are you drawing a bitmap with Java
15:07:30 <Vorpal> elliott, because of university
15:07:36 <Vorpal> elliott, I would not use java if I could avoid it
15:07:58 <elliott> Can't you use vector stuff rather than blitting a bitmap or w/e
15:08:07 <ais523> oh, and the answer is, I avoided the image stuff like the plague
15:08:21 <ais523> Vorpal: basically, the standard way to do that sort of thing involves BufferedImage
15:08:33 <ais523> but repeatedly redrawing images with that gives a memory leak
15:08:38 <Vorpal> elliott, well I have it as a bitmap, as in, that is how the world is represented. Think a worms style game.
15:08:42 <kallisti> you guys remember AOP?
15:08:44 <Vorpal> (very much simpler than worms though)
15:08:45 <kallisti> I sure don't..
15:08:56 <elliott> Vorpal: You're writing an AI that operates directly on a screen-scraping?
15:08:56 <ais523> and the reason is, that BufferedImage is lazy, and also doesn't optimise for the cases where the image below has already loaded or the current image has no alpha
15:09:12 <elliott> Vorpal: Or what?
15:09:23 <Vorpal> elliott, no? I'm writing the client for this multiplayer game.
15:09:38 <elliott> Vorpal: Why is your output image your in-game representation
15:09:42 <elliott> Presumably there's a rendering step
15:09:46 <elliott> From data structures -> image
15:10:02 <elliott> It'd be easier to use whatever drawing API Swing has directly.
15:10:31 <Vorpal> elliott, you realise how worms work right? the non-3D versions
15:10:38 <Vorpal> elliott, which is that your terrain /is/ an image
15:10:46 <Vorpal> destructible too
15:10:57 <elliott> Yes, I know how Worms works, thank you very much; I daresay I've played it more than you have.
15:11:03 <Vorpal> elliott, probably
15:11:21 <elliott> I wouldn't represent it as an image I mutate to destruct parts of it, but whatever.
15:11:39 <Vorpal> elliott, and thus I need to draw the terrain, plus some players, plus some health bars and so on
15:11:49 <Vorpal> so yes there is a bit of rendering
15:12:06 <ais523> Vorpal: anyway: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4014323
15:12:19 <ais523> comments say that the bug was only partially fixed even though Sun claimed to deliver a fix
15:12:22 <Vorpal> ais523, hm so what to do instead?
15:12:24 <kallisti> elliott: is there any reason I'd want to use an Array instead of a Sequence in representing a chess board in Haskell? I was thinking reads will be predominate, the constant time access could be worth the cost of slower updates, unless I decide to write an AI which uses decision trees.
15:12:37 <ais523> elliott: hmm, I probably would represent Worms terrain as a bitmap
15:12:41 <ais523> although I'm not sure if it would directly be an image
15:12:47 <ais523> probably just a collidable/noncollidable mask
15:13:16 <Vorpal> ais523, indeed, that is basically 1-bit alpha though
15:13:29 <ais523> no, it's a mask
15:13:34 <elliott> kallisti: You should rarely use Sequence. You should never use Array.
15:13:43 <ais523> most likely rendering would be to draw pixels from one image if it's clear and a different one if it's set
15:13:46 <kallisti> so... Map?
15:13:53 <elliott> kallisti: The choice should be between Vector or a Map-alike.
15:14:10 <elliott> I would use a storable vector, but a HashMap would work too.
15:14:11 <Vorpal> ais523, indeed, which is kind of the same effect alpha has, just that alpha is stored interleaved with the image
15:14:27 <ais523> elliott: chess programs normally work efficiently by mutating their chessboard view in-memory stack-style, but that algo is clearly a bad one to use with Haskell
15:14:31 <Deewiant> You're writing a chess AI in Haskell? I was just thinking about doing that last night, but then I figured I'd probably just be disappointed by the performance.
15:14:32 <ais523> I suspect there are other efficient algos
15:14:32 <Vorpal> ais523, anyway what should I do to avoid said bug?
15:14:37 <kallisti> I considered Map but I was under the impression the Sequence had similar complexity characteristics to Map.
15:14:44 <ais523> Vorpal: there's some advice in the thread, but I haven't personally tried it
15:14:46 <kallisti> for linear sequences of things.
15:15:04 <elliott> ais523: Why are you telling me this?
15:15:12 <elliott> Deewiant: Do it anyway, kallisti will inevitably produce something terrible. I mean, uh.
15:15:23 <elliott> (Performance in which sense?)
15:15:28 <Vorpal> <ais523> oh, and the answer is, I avoided the image stuff like the plague <-- doing what instead?
15:15:29 <Deewiant> I'd rather go improve stockfish or something
15:15:30 <kallisti> well no I don't intend to write an AI just yet
15:15:32 <ais523> elliott: I thought it was vaguely relevant
15:15:36 <kallisti> I'm just going to write the server program first.
15:15:44 <ais523> Vorpal: rendering the entire thing with graphical primitives and text-drawing primitives
15:15:46 <elliott> Deewiant: Who the fuck works on other people's code?
15:15:47 <kallisti> for a chess variant.
15:15:49 <Vorpal> ais523, ah...
15:15:53 <ais523> because that works quite well for a terminal
15:16:02 <Vorpal> ais523, I guess there are SDL bindings for java...
15:16:02 <ais523> probably not so well for other programs
15:16:08 <elliott> http://www.google.co.uk/search?sourceid=chrome&ie=UTF-8&q=sdl+java
15:16:19 <kallisti> elliott: Vector has a lot of modules... which ones besides Data.Vector are worth looking at.
15:16:31 <elliott> kallisti: http://hackage.haskell.org/package/vector
15:16:37 <elliott> An efficient implementation of Int-indexed arrays (both mutable and immutable), with a powerful loop optimisation framework .
15:16:37 <elliott> It is structured as follows:
15:16:37 <elliott> Data.Vector
15:16:37 <elliott> Boxed vectors of arbitrary types.
15:16:37 <elliott> Data.Vector.Unboxed
15:16:38 <elliott> Unboxed vectors with an adaptive representation based on data type families.
15:16:40 <elliott> Data.Vector.Storable
15:16:42 <elliott> Unboxed vectors of Storable types.
15:16:44 <elliott> Data.Vector.Primitive
15:16:46 <elliott> Unboxed vectors of primitive types as defined by the primitive package. Data.Vector.Unboxed is more flexible at no performance cost.
15:16:49 <Deewiant> elliott: Well, even if I write my own, it'd have to be in C or some such, because of course the goal is to be the world's best :-P
15:16:49 <elliott> Data.Vector.Generic
15:16:49 <kallisti> elliott: .......
15:16:51 <elliott> Generic interface to the vector types.
15:16:53 <elliott> Each module has a Safe version with is marked as Trustworthy (see http://hackage.haskell.org/trac/ghc/wiki/SafeHaskell).
15:16:54 <Vorpal> ais523, so, there is nothing mentioned there since 2004, I guess that might mean the bug is fixed?
15:16:56 <elliott> This snarky copy-paste brought to you by the power of reading.
15:17:00 <Vorpal> ais523, I'm using JDK 7 so
15:17:04 <ais523> Vorpal: it isn't
15:17:10 <elliott> Deewiant: Just a tad hubristic
15:17:16 <Vorpal> huh, strange the bug has no activity then
15:17:17 <kallisti> elliott: I was just on that page. weird, huh?
15:17:20 <ais523> what happened is that Sun locked the thread, because it'd been fixed for a couple of years according to their records
15:17:25 <Vorpal> ah
15:17:27 <elliott> kallisti: You evidently didn't read it, because it told you exactly what the relevant modules were for.
15:17:28 <ais523> even though it was only a partial fix
15:17:30 <Vorpal> I see
15:17:33 <elliott> And I previously even gave you a recommendation of which kind to use.
15:17:33 <ais523> apparently, it was even worse a while ago
15:17:35 <Vorpal> ais523, that is a jerk move
15:17:45 <ais523> Vorpal: no, that's an automated bug database maintenance move
15:17:48 <Vorpal> ah
15:17:50 <kallisti> elliott: it doesn't say anything about the Fusion stuff.
15:18:05 <Vorpal> ais523, oh well, I guess I might just use SDL or such
15:18:18 <elliott> kallisti: Maybe it omits some of the exposed modules because they're not relevant to you, in an attempt to try and answer the question you just asked me.
15:18:19 <Deewiant> elliott: I'm just too competitive, I'd be annoyed/lose interest if it ends up being too poor
15:18:22 <elliott> (It does.)
15:18:50 <elliott> Deewiant: I think you'd do rather badly in a field as competitive and high-stakes as chess AI then, unless you're prodigal or an expert :P
15:19:20 <kallisti> elliott: you are more trusting than I.. :P
15:19:42 <kallisti> Vector looks good though.
15:19:51 <kallisti> I think this is what I want.
15:20:08 <Deewiant> elliott: Exactly, which is why I figured I'd rather drop it
15:20:20 <Vorpal> ais523, doesn't jframe have some surface I could draw directly to hm?
15:20:26 <Deewiant> I don't feel like making a poor AI and I know I probably won't be able to make a good AI
15:20:33 <Vorpal> somehow stuff must be able to draw to it, I mean the existing components
15:20:39 <kallisti> unfortunately it doesn't appear to have an Ix-like thing
15:20:41 <ais523> Vorpal: you don't draw directly to jframe ever, you draw to a panel you put inside the frame
15:20:49 <kallisti> so I can't use tuples to index a 2D Vector :( ah well
15:20:58 <Deewiant> At least without spending a /lot/ of time on it, and I don't think I have enough interest :-P
15:20:59 <Vorpal> ais523, okay so does the panel have a surface I can draw a bitmap to directly?
15:21:01 <ais523> and you can easily get a Graphics for a JPanel, for the purpose of drawing on
15:21:13 <Vorpal> right
15:21:18 <Vorpal> then I could just blit to it I presume
15:21:20 <ais523> Vorpal: the problem's that you have to go through Graphics' methods; or in practice, Graphics2D's methods
15:21:29 <Vorpal> ais523, can't draw a bitmap?
15:21:32 <ais523> (the Graphics you get is declared as a Graphics, but is always actually a Graphics2D; I consider this an API mistake)
15:21:33 <Vorpal> hm
15:21:49 <Vorpal> ais523, as opposed to Graphics1D?
15:21:59 <elliott> <kallisti> unfortunately it doesn't appear to have an Ix-like thing
15:22:10 <elliott> kallisti: Just define your own indexing/update functions, takes about 3 seconds.
15:22:16 <ais523> Vorpal: nah, Graphics2D is just a particular specialisation of Graphics
15:22:17 <elliott> Ix is way overcomplicated.
15:22:19 <kallisti> elliott: that's the idea.
15:22:23 <elliott> That's one reason Vector is nicer :P
15:22:28 <elliott> kallisti: Alternatively, use repa
15:22:32 <elliott> kallisti: Which is based on vector
15:22:43 <Vorpal> ais523, hm there is drawImage, or does that one have the issue mentioned?
15:22:47 <elliott> I'd tout the automatic parallelism, but that's sort of irrelevant when you have 64 cells.
15:22:52 <kallisti> indeed.
15:22:57 <ais523> Vorpal: there is drawImage, and it does have the issue mentioned
15:23:00 <kallisti> elliott: UNLESS I END UP WITH AI
15:23:01 <Vorpal> ah
15:23:06 <elliott> Also it can only store predefined types, more or less.
15:23:10 <elliott> You can write instances but it's a pain.
15:23:14 <Vorpal> ais523, well that creates some issues
15:23:21 <Vorpal> damn
15:23:24 <elliott> Well, hmm
15:23:27 <elliott> Yeah, it is
15:23:35 <ais523> you can get around it by only using the one BufferedImage, and mutating it
15:24:02 <ais523> and BufferedImage has a method that gets you a WritableRaster, which is probably what you want
15:24:11 <Vorpal> ais523, ah okay
15:24:17 <Vorpal> simple enough then
15:24:51 <Vorpal> a bit annoying, but simple enough
15:25:19 <kallisti> @m
15:25:19 <lambdabot> Maybe you meant: map messages messages? more msg . ? @ v
15:25:36 <kallisti> @ms
15:25:36 <lambdabot> Not enough privileges
15:25:43 <kallisti> @mssa
15:25:43 <lambdabot> Not enough privileges
15:25:44 <kallisti> @mssag
15:25:45 <lambdabot> Not enough privileges
15:26:00 <elliott> @massage
15:26:00 <lambdabot> You don't have any new messages.
15:26:02 <elliott> @massages
15:26:02 <lambdabot> You don't have any new messages.
15:26:53 <ais523> Vorpal: basically, the problem is that drawImage is lazy, and there is no strict version
15:27:04 <ais523> and a lazy drawImage is necessarily going to leak memory in the general case
15:27:19 <ais523> actually, I vaguely fear it leaks memory even if you keep redrawing the same image, just less so
15:27:40 <ais523> I think I tried overwriting the entire image with a solid colour before redrawing it; that seemed to help, but not perfectly
15:29:14 <itidus21> video was really invented for games
15:29:27 <Vorpal> ais523, so what is the proper solution to this?
15:29:40 <Vorpal> ais523, not using swing?
15:29:40 <elliott> itidus21: i
15:29:57 <elliott> Vorpal: <ais523> you can get around it by only using the one BufferedImage, and mutating it <ais523> and BufferedImage has a method that gets you a WritableRaster, which is probably what you want
15:30:08 <Vorpal> elliott, "<ais523> actually, I vaguely fear it leaks memory even if you keep redrawing the same image, just less so"
15:30:17 <Vorpal> elliott, it was in reply to that line
15:30:23 <itidus21> i know that ralph baer doesn't like the term video games
15:30:44 <ais523> Vorpal: both Swing and AWT have the same problem, as they both use Graphics/Graphics2D
15:30:50 <Vorpal> right
15:30:58 <ais523> it's possible there's some less popular rendering toolkit that doesn't
15:31:18 <ais523> incidentally, one of the problems with Java atm is that people consider both Swing and AWT obsolete, but disagree on what's replaced them, if anything
15:31:22 <itidus21> i know that video isn't invented in the formal sense, and that it's just light medium, the eyes, the brain, conciousness, qualia "happening"
15:31:22 <Vorpal> ais523, well I guess I could find some suitable SDL bindings and use that, it obviously wouldn't have the same issue
15:32:11 <elliott> Vorpal: SWT might have something.
15:32:19 <elliott> That's at least popular.
15:32:33 <Vorpal> elliott, the downside: I don't know the API of that. At all.
15:32:50 <elliott> Qt Jambi? :p
15:32:57 <Vorpal> ais523, or is there built in opengl support? Then it should be fairly simple to just draw a texture and render it with a non-perspective camera
15:33:09 <elliott> I would be surprised if your university would be happy with having to install an SDL binding thing.
15:33:09 <Vorpal> elliott, I have no clue what you mean
15:33:21 <elliott> Vorpal: That's because you're unable to use Google.
15:33:22 <Vorpal> elliott, I used SDL for another course (from C then)
15:33:29 <itidus21> so, it may be that video represents the intentional act of manipulating visible objects to represent images, at a high enough frequency that those images appear to consist of a sequence of frames
15:33:44 <ais523> Vorpal: Java has a 3D library, but I'm not sure if it has anything to do with OpenGL or not
15:33:48 <Vorpal> elliott, in that case it was just a case of dropping SDL.dll into the build dir
15:33:50 <elliott> Vorpal: You can't just bundle JNI stuff in a .jar, can you?
15:34:01 <itidus21> and it is this definition that i think is truely invented for games
15:34:04 <ais523> elliott: and even if you could, someone marking the work would be insane to run it
15:34:05 <Vorpal> elliott, can't you? What does minecraft do then?
15:34:13 <elliott> <Vorpal> ais523, or is there built in opengl support? Then it should be fairly simple to just draw a texture and render it with a non-perspective camera
15:34:15 <elliott> lwjgl
15:34:22 <ais523> "lwjgl"?
15:34:25 <elliott> Or http://en.wikipedia.org/wiki/Java_OpenGL, I suppose. That's a JSR.
15:34:26 <Vorpal> elliott, which uses JNI, right?
15:34:31 <elliott> ais523: lwjgl
15:34:33 <elliott> Vorpal: Well, eys.
15:34:33 <elliott> yes.
15:34:34 <itidus21> lets wiki java gl
15:34:37 <elliott> Vorpal: Minecraft downloads natives.
15:34:43 <elliott> Have you ever paid attention to the updater?
15:34:51 <Vorpal> elliott, indeed, I could just bundle SDL.dll surely?
15:34:55 <Vorpal> or whatever
15:34:55 <elliott> It's also the reason you need -Djava.natives=... or w/e.
15:34:59 <Vorpal> right
15:35:02 <elliott> You can't start Java normally and use it.
15:35:13 <Vorpal> so a .bat file as well then
15:35:54 <Vorpal> elliott, anyway, I guess I'll just do the mutate-bufferedimage thingy and hope for the best
15:35:58 <ais523> elliott: anyway, a quick search of StackOverflow, on a bunch of different search terms, implies that some people there are enough aware of the problem to know about it
15:36:08 <ais523> but nobody there really knows enough about it to talk coherently about it
15:36:12 <elliott> heh, I just use Google to search SO
15:36:42 <itidus21> ais523: i have tried to ponder the real question of worms terrain
15:37:12 <ais523> anyway, Java really badly needs a "copy this raster to the screen" operation
15:37:32 -!- Jafet has quit (Read error: Connection reset by peer).
15:37:34 <ais523> or even a strict "draw this image" operation, if you know the image is in memory or somewhere similar where that's not going to hang for minutes waiting for a network connection to load
15:37:52 <Vorpal> ais523, btw when you say it is lazy what do you actually mean? That it keeps old image data below the overwritten data?
15:37:55 * elliott has no idea what sense of "lazy" ais523 is using.
15:38:23 <Vorpal> ais523, because obviously it is going to draw once the screen refreshes and so on
15:38:24 -!- Jafet has joined.
15:38:50 <Vorpal> which would force an evaluation if it was the haskell sense of lazy
15:39:06 <ais523> elliott: well, it's more like "backgrounded"
15:39:11 <ais523> when you call drawImage, it returns immediately
15:39:15 <Vorpal> ah
15:39:23 <ais523> then the image starts loading in a different thread, and calls an ImageObserver as more parts of it load
15:39:25 <quintopia> sounds like java from here :p
15:39:38 <ais523> and the screen updates as that happens
15:39:41 <Vorpal> ais523, so how does this cause a memory leak, wouldn't the resources be freeded once the image is actually drawn?
15:39:45 <elliott> itidus21: Isn't Baer the guy who wrongly claims to have invented the video game?
15:39:48 <ais523> Vorpal: they aren't, that's the problem
15:40:08 <Vorpal> ais523, so it keeps a reference around?
15:40:10 <Vorpal> huh
15:40:12 <ais523> and trying to work around it depends on exactly which resources it is that aren't being freed, which nobody seems to be quite sure on
15:40:27 <itidus21> elliott: well.. was spacewar before baer?
15:40:29 <Vorpal> ais523, couldn't you just look into the openjdk source?
15:40:30 <ais523> Vorpal: well, suppose you draw one image with some transparent pixels, then another image with transparent pixels on top of it, and neither have loaded
15:40:32 <Vorpal> to figure it out
15:40:33 <itidus21> i guess it probably ways
15:40:35 <ais523> then it needs to start backgrounding both
15:40:38 <elliott> itidus21: Tennis for Two was.
15:40:45 <ais523> Vorpal: hmm, I typically have problems finding specific bits of Java library source
15:40:50 <elliott> And yes, Spacewar! was.
15:40:55 <elliott> As were several others: http://en.wikipedia.org/wiki/First_video_game#History
15:41:01 <ais523> I've tried before now, it's kind-of luck-based whether Ican find it anywhere
15:41:07 <Vorpal> ais523, it obviously needs to draw in the same order as they are submitted
15:41:09 <Vorpal> so hm
15:41:13 <ais523> Vorpal: no, this is Java
15:41:17 <kallisti> hmmm, cool. lazy evaluation of Levenshtein distance is much faster than the regular eager approach.
15:41:25 <elliott> itidus21: Even Baer's claimed date of the original idea postdates the Cathode Ray Tube Amusement Device thing.
15:41:27 <ais523> it obviously needs to draw all the pixels as soon as they can be calculated, and assume transparent if it doesn't know
15:41:42 <Vorpal> ais523, you can't draw transparency out of order, it would result in incorrect blending!
15:41:59 <elliott> kallisti: You still need to do the dynamic programming yourself: http://www.haskell.org/haskellwiki/Edit_distance
15:42:03 <ais523> Vorpal: you can, because you're keeping references to all the images around
15:42:06 <Vorpal> that is the reason z-buffering doesn't work on transparent polygons in 3D graphics
15:42:09 <Vorpal> ais523, hm okay
15:42:10 <ais523> so you recalculate each pixel when any of the images in the stack loads
15:42:13 <elliott> Although I suspect you could abstract it out a bit.
15:42:15 <ais523> do you see where the memory leak comes from now?
15:42:20 <Vorpal> yeah
15:42:26 <Vorpal> ais523, it is utterly stupid though
15:42:35 <ais523> well, I'm not disagreeing with you on that
15:42:35 <itidus21> elliott: wow.. that page is really full of trivia
15:42:40 <elliott> ais523: Couldn't you just block until it's drawn?
15:42:49 <itidus21> they should be congratulated on that
15:42:54 <elliott> itidus21: Err, not compared to most Wikipedia articles.
15:42:59 <ais523> elliott: my guess is no, because that'd involve blocking the Swing UI thread, and there's only one of those
15:43:08 <ais523> and the image loading code probably tries to call into it
15:43:13 <itidus21> ok it's not trivial
15:43:14 <elliott> ais523: heh
15:43:18 <ais523> in order to redraw the bit of the image that just loaded
15:43:38 <itidus21> but.. in any normal human's life, the history of video games is useless information :D
15:43:45 <ais523> elliott: anyway, I'm not convinced that it drops the reference to the image even when it's fully loaded
15:43:50 <ais523> for reasons I don't fully understand
15:44:09 <itidus21> one might as well say that history is useless
15:44:09 <ais523> as far as I can tell, all the solutions to the image problem so far have focused on not leaking huge int arrays
15:44:16 <ais523> rather than focusing on not leaking stacks of metadata
15:44:19 <Vorpal> ais523, speaking of which, I saw a presentation on a solution to having to apply the painters algorithm for transparency on GPUs, using linked lists on them. Normally this is a terrible idea of course, but it used some new atomic counters feature. The presentation was by AMD so they probably know what they are doing
15:44:22 <elliott> heh
15:44:24 <ais523> which is much smaller and thus less obvious when profiling
15:44:25 <itidus21> for some specific definition of useless
15:44:29 <itidus21> what is useless
15:44:34 <itidus21> blah
15:44:45 <Vorpal> ais523, basically a linked list per fragment which is then sorted at the end
15:44:48 <elliott> ais523: incidentally, I was surprised to learn that there are C->VHDL tools
15:44:52 <kallisti> itidus21: a Perl program that doesn't import anything.
15:44:56 <elliott> that sounds harder than ICA->VHDL to me :-)
15:44:58 <ais523> elliott: I wasn't
15:45:01 <elliott> *:) whoops forgot i was consistentising
15:45:02 <Vorpal> ais523, it would mean you don't have to split intersecting polygons and so on
15:45:02 <ais523> they're on very limited subsets of C
15:45:05 <Vorpal> kind of neat
15:45:07 <elliott> ais523: oh
15:45:09 <elliott> lame
15:45:10 -!- Jafet has quit (Read error: Connection reset by peer).
15:45:37 <ais523> elliott: also, the few tools that try to implement larger subsets typically get it wrong
15:45:42 <ais523> there's a paragraph about this in one of my papers
15:45:55 <elliott> kallisti: Ah, http://blog.tmorris.net/finding-the-levenshtein-distance-in-scala/.
15:46:05 <elliott> kallisti: Easily implementable with http://hackage.haskell.org/packages/archive/data-memocombinators/0.4.3/doc/html/Data-MemoCombinators.html.
15:46:05 <ais523> isn't scala eager?
15:46:24 <elliott> (e.g. unsafeArrayRange)
15:46:32 <elliott> ais523: it has optional laziness, as used there
15:46:35 <kallisti> elliott: waaaa what is this magic.
15:46:39 <ais523> elliott: ah, OK
15:46:41 <elliott> I was just presenting a nicer implementation than my previously-linked one.
15:46:44 <elliott> kallisti: What is what magic?
15:46:49 <kallisti> elliott: memo combinators
15:46:59 <elliott> kallisti: It's trivial.
15:47:02 -!- Jafet has joined.
15:47:04 <elliott> bool :: Memo Bool
15:47:04 <elliott> bool f = cond (f True) (f False)
15:47:04 <elliott> where
15:47:04 <elliott> cond t f True = t
15:47:04 <elliott> cond t f False = f
15:47:04 <elliott> list :: Memo a -> Memo [a]
15:47:06 <elliott> list m f = table (f []) (m (\x -> list m (f . (x:))))
15:47:08 <elliott> where
15:47:10 <elliott> table nil cons [] = nil
15:47:12 <elliott> table nil cons (x:xs) = cons x xs
15:47:14 <elliott> It just uses a trie of bits for integral types.
15:47:26 <elliott> Relies on the benign mutating nature of sharing that you don't understand because you think seq has side-effects.
15:51:55 <Vorpal> ais523, hm... I was on windows and ran a java program using swing... I happened to have fraps running (I forgot I left that running), it displays an FPS counter in the top right corner of Direct3D and OpenGL programs. It did that for the swing program too. How curious.
15:52:10 <kallisti> elliott: yeah I don't understand...
15:52:13 -!- Jafet has quit (Ping timeout: 276 seconds).
15:53:07 <elliott> kallisti: Indeed.
15:53:38 <itidus21> ais523: at one time i tried to sit down and start thinking about the topic of worms terrain.. this is how it ended up looking http://oi44.tinypic.com/o6jrjo.jpg
15:53:53 <kallisti> elliott: I also don't understand what it has to do with seq
15:53:55 <itidus21> suffice to say i got sidetracked and never really returned to it
15:54:04 <ais523> that's weird-looking terrain
15:54:15 <ais523> same concept as websplat, only using Word documents as the source?
15:54:25 <Vorpal> ha
15:54:26 <itidus21> openoffice
15:54:44 <elliott> kallisti: Because it's the same benign mutation.
15:54:48 <itidus21> i may be on windows but i am using openoffice
15:54:53 -!- Jafet has joined.
15:54:54 <Vorpal> itidus21, it isn't really expensive. The reason is that computers are very fast.
15:55:18 <kallisti> elliott: strict evaluation?
15:55:42 <ais523> elliott: well, it has less magic in a way; seq somehow manages to special-case each data type individually, whereas that's writing the special cases out so it doesn't look nearly so magical
15:55:46 <Vorpal> itidus21, and you end up using the memory anyway
15:56:06 <itidus21> Vorpal: i intended to go right into the subject in detail in a rant, but if i was capable of such applied focus i wouldn't be so hopeless
15:56:30 <elliott> ais523: well, that's a way to explain seq, but doesn't define its semantics at all
15:56:41 <ais523> elliott: right, indeed
15:56:43 <elliott> ais523: the semantics of seq are incredibly trivial
15:56:50 <itidus21> i think it may have been in here that someone inspired me that bitmapped terrain isn't a panacea
15:56:50 <ais523> I'm explaning the difference between seq and Memo in terms of magicalness
15:56:51 <elliott> ais523: seq ⊥ b = ⊥; seq a b = b
15:56:53 <itidus21> or some irc channel
15:56:55 <ais523> not defining either itself
15:56:58 <elliott> well, err, no
15:57:04 <elliott> that's not how Memo works at all
15:57:08 <elliott> it's unrelated to the pattern-matching
15:57:17 <ais523> ah, hmm, in that case I don't understand it
15:57:21 * kallisti has an idea for a game like websplat except the idea is to be actually fun to play instead of just cool.
15:57:23 <elliott> I'm not surprised
15:57:29 <elliott> kallisti: websplat is fun on havenworks
15:57:37 <Vorpal> ais523, is there an onRedraw function or such for JPanels? Or am I approaching that from the wrong direction.
15:57:38 <kallisti> that site that doesn't exist anymore?
15:57:40 <kallisti> or is it up now?
15:58:03 <elliott> itidus21: 253 kilobytes is a tiny amount of memory for an HD screen-sized area.
15:58:11 <Vorpal> ais523, I'm kind of used to taking the opengl and SDL approach which is to draw in a main loop, not sure if that is the correct approach for swing
15:58:16 <elliott> The waiting comment makes no sense, and it's not computationally expensive to work on bitmaps at all.
15:58:32 <elliott> The two basic operations stuff also doesn't really make sense; the two basic operations are poke and peek, really.
15:58:37 <elliott> Also, that's not a rant.
15:58:44 <itidus21> :D
15:58:51 <elliott> Vorpal: I would bet money that Swing is event-based.
15:58:54 <ais523> Vorpal: in swing, everything happens in response to something
15:58:59 <elliott> Kerching.
15:58:59 <Vorpal> ah
15:59:00 <elliott> Gimme money.
15:59:06 <Vorpal> so that is the approach to take then
15:59:16 -!- Jafet has quit (Ping timeout: 252 seconds).
15:59:17 <Vorpal> far more annoying
15:59:23 <ais523> standard way of drawing something is to override paintComponent
15:59:29 <kallisti> and of course "events" in Java are actually "subclasses" :P
15:59:42 <ais523> so that whenever Swing tries to redraw it, it ends up calling your custom redraw code
15:59:44 <itidus21> elliott: well after that i went on to discover that sprites could carry more interesting information than they normally do, and never did return back to the actual topic
15:59:45 <Vorpal> ais523, I guess I need to use two threads then to deal with the network...
15:59:46 <Vorpal> oh well
15:59:50 <ais523> kallisti: that's, umm, not even wrong, but it is rather misleading
16:00:00 <ais523> Vorpal: well, the general rule is that events have to be handled really quickly
16:00:07 <elliott> Deewiant: "Houdini cares for the children of the world. 10% of the revenues generated by Houdini 2 will be donated to Unicef to support their ongoing efforts to improve children's living conditions all over the world."
16:00:09 <ais523> if you want to do something slow in response to one, you start a new thread
16:00:10 <elliott> Deewiant: You can't compete against LOVE.
16:00:16 <Vorpal> ais523, right, this is much simpler with the main loop approach really
16:00:30 <elliott> itidus21: Quite a trailblazer.
16:00:36 <ais523> not really, I actually consider the main loop approach really bad
16:00:37 <kallisti> ais523: how is it misleading? typically the pattern is that you override some kind of interface (occasionally with only one method).
16:00:46 <elliott> The main loop approach is ridiculous.
16:00:46 <kallisti> often as an anonymous class.
16:00:58 <ais523> when I'm working with a main-loop-based API, I typically implement an event loop in it
16:01:02 <Vorpal> hm
16:01:13 <ais523> and even then, SDL works by repeatedly calling usleep(1000) in a loop
16:01:13 <Deewiant> elliott: I'd compete only against stockfish anyway, I'm not going to pay for better engines
16:01:15 <elliott> (Callbacks are more ridiculous, though.)
16:01:16 <Vorpal> bbl
16:01:18 <ais523> which is ridiculous
16:01:40 <Vorpal> ais523, really? heh
16:01:52 <elliott> ais523: Err.
16:01:58 <ais523> Vorpal: not only that, it alternates usleep and gettimeofday
16:01:59 <itidus21> when i discussed my findings, someone then explained to me:
16:01:59 <elliott> ais523: No?
16:02:03 <itidus21> actually the first icon and cursor format on Windows supported exactly that. it had two bits per pixel, one was ANDed with the underlying pixel, the other was XORed with the result of the and so with an AND bit of 0 and XOR bit of 0, you get black, 0/1 gives you white, 1/0 gives you transparent and 1/1 gives you inverted. quite clever actually IMO
16:02:07 <Vorpal> ais523, um...
16:02:09 <elliott> ais523: mcmap runs with 0% CPU usage most of the time.
16:02:16 <ais523> elliott: exactly
16:02:21 <Vorpal> elliott, usleep would have no CPU usage
16:02:25 <elliott> Well, OK.
16:02:29 <ais523> turns out that waking every millisecond is close enough to 0% to be a rounding error
16:02:34 <ais523> but it really spams the hell out of strace
16:02:39 <Vorpal> hah
16:02:44 <elliott> Nobody run mcmap on a laptop.
16:02:47 <itidus21> and then i discovered alvy ray smith who was insistant that pixels are not rectangles
16:02:55 <Vorpal> elliott, I did, but mc is far worse :P
16:02:57 <elliott> They're not.
16:03:16 -!- PiRSquared17_ has joined.
16:03:18 <itidus21> so.. i mean i really did end up going down the rabbit hole quite some depth
16:03:19 -!- sebbu2 has changed nick to sebbu.
16:03:21 <Vorpal> ais523, anyway it is sensible for what SDL is trying to be
16:03:25 <itidus21> i didnt get all the way though
16:03:29 <kallisti> pixels are more like... dots right?
16:03:30 <Vorpal> ais523, you are going to do the same sort of stuff for opengl too
16:03:34 <elliott> kallisti: No.
16:03:35 <ais523> Vorpal: err, are you serious?
16:03:40 <itidus21> you can see alvy's influence on me in my recent post
16:03:46 <ais523> it should just wait for the next timed event, or be interrupted by untimed events
16:03:47 <elliott> kallisti: They're points.
16:03:50 <ais523> what do you think interrupts are /for/?
16:03:50 <Vorpal> ais523, maybe we misunderstood each other
16:03:53 <kallisti> elliott: that's what I meant
16:03:58 <itidus21> "video represents the intentional act of manipulating visible objects to represent images, at a high enough frequency that those images appear to consist of a sequence of frames"
16:03:59 <ais523> if the user asks for a timer, fine, make a timer
16:04:04 <kallisti> elliott: "dot" is the unfancy way of saying "point"
16:04:14 <elliott> kallisti: "Dot" usually means "little square/circle".
16:04:18 <itidus21> that was how i defined video a few screens up
16:04:19 <ais523> and then sleep until the next time the timer would run out
16:04:22 <kallisti> elliott: oh, well no, not that.
16:04:44 <Vorpal> ais523, well, if you are using opengl you are going to need to keep redrawing, preferably at least at vsync-speed
16:04:53 <Vorpal> ais523, doing the same for SDL seems sensible to me
16:05:00 <ais523> Vorpal: so trigger on vsyncs
16:05:05 <ais523> rather than polling every millisecond
16:05:21 <ais523> I'd be very surprised if there weren't an interrupt connected to vsyncs or vblanks
16:05:30 <Vorpal> ais523, except what happens if you are only able to reach 50 FPS and trigger on vsync? You are going to get every second vsync
16:05:35 <Vorpal> and get 30 FPS instead
16:05:44 <kallisti> elliott: but it would be accurate to say that pixels are points that correspond to rectangles, yes?
16:05:50 <elliott> kallisti: No.
16:06:01 <elliott> kallisti: http://www.google.co.uk/url?sa=t&rct=j&q=pixels%20are%20not%20little%20squares&source=web&cd=1&ved=0CCIQFjAA&url=http%3A%2F%2Fwww.cs.princeton.edu%2Fcourses%2Farchive%2Fspr06%2Fcos426%2Fpapers%2Fsmith95b.pdf&ei=1hsHT6CpGoaD-watrfmrAQ&usg=AFQjCNFXhye-H_eqy71fz4fA904iIHgNGw&sig2=8Ru3uE2J7d4vHgj5YDTdNA
16:06:05 <elliott> I hate you, Google.
16:06:06 <itidus21> my definition of video works for people in a stadium holding up colored panels to form an image
16:07:15 <Vorpal> kallisti, pixels are just points?
16:07:33 <Vorpal> well, usually with colours
16:07:49 <Vorpal> they are kind of useless if there isn't at least one bit of information per pixel
16:07:54 <Vorpal> anyway bbl really now
16:08:30 <itidus21> i think the real question is.. what shape are color qualia
16:08:48 <itidus21> do they even have shape?
16:09:32 <itidus21> is the shape uhhh .. potentially variable between concious beings
16:10:14 <kallisti> elliott: ah
16:10:31 <kallisti> itidus21: what
16:10:43 <itidus21> >:-)
16:11:02 <itidus21> ok sorry i will rephrase
16:11:18 <itidus21> what is the nature of the qualia in which the visual field consists
16:11:33 <itidus21> and is it variable between creatures with visual fields
16:11:35 <kallisti> s/concious/conscious/ s/qualia/koala/
16:12:05 <itidus21> are they points
16:12:11 <itidus21> are they uniform?
16:12:23 <kallisti> oh
16:12:30 -!- Jafet has joined.
16:12:34 <itidus21> are they side by side?
16:12:56 <itidus21> pretty deep, i know..
16:13:06 <itidus21> noone would question that it's a deep topic
16:13:58 <kallisti> itidus21: I would think it corresponds to however our brain processes the 90-million-something cone and rod cells in the human eye.
16:14:20 <kallisti> *the data from those cells
16:14:31 <itidus21> the data can come from the tongue also
16:14:40 <itidus21> which is pretty confusing
16:14:43 <kallisti> ....I can't see with my tongue
16:14:45 <kallisti> what are you talking about.
16:14:59 <itidus21> also synesthesiates sometimes see sound
16:15:20 <itidus21> the military invented a device which uses the tongue to feed visual info into the brain
16:15:24 <kallisti> also drugs can do fun things to your vision.
16:16:39 <itidus21> id say the system is designed for eye data
16:16:47 <itidus21> but it can recieve data from other sources
16:16:54 <kallisti> yes
16:17:00 <itidus21> much like a word processor can view an executable file
16:17:05 <kallisti> sure
16:17:46 <itidus21> this topic gives me mind numbing headaches
16:18:05 <kallisti> you should learn Haskell instead.
16:18:44 <itidus21> and feeds into subconcious anxieties such as not having free will, or being a machine, or not really existing
16:18:47 <itidus21> all that kind of thing
16:19:07 <itidus21> which i think, is a bit of a lie
16:19:39 <itidus21> anxiety seems to usually be triggered by actual percieved dangers i think
16:19:53 <itidus21> or the rippling effects of past percieved danegrs
16:20:46 <itidus21> having sufficiently damaged you all... i think i should take a chat break
16:22:44 <Vorpal> ais523, I'm unable to find the java function that wraps select()
16:23:00 <Vorpal> (on multiple sockets)
16:23:01 <elliott> Vorpal: threads
16:23:16 <Vorpal> elliott, what do you do if you have thousands of sockets?
16:23:17 <ais523> Vorpal: select is far too low-level for this sort of thing
16:23:21 <ais523> Vorpal: you have thousands of threads
16:23:21 <elliott> Vorpal: threads
16:23:28 <Vorpal> this is stupid
16:23:28 <ais523> actually, if you have thousands of sockets, select won't actually work
16:23:33 <ais523> it can't count to a thousand
16:23:33 <Vorpal> ais523, sure, epoll
16:23:36 <Vorpal> whatever
16:23:50 <itidus21> actually, i believe i was rubbing shoulders with some cults in a chatroom.. and led me to preoccupation with useless things
16:23:53 <ais523> Vorpal: do you know any languages that aren't imperative?
16:24:03 <Vorpal> ais523, yes, erlang, some haskell
16:24:10 <elliott> <itidus21> noone would question that it's a deep topic
16:24:12 <elliott> Is this an invitation?
16:24:15 <Vorpal> ais523, so java's threads are lightweight enough?
16:24:16 <ais523> Vorpal: well, what's the equivalent of select in erlang?
16:24:17 <Vorpal> hm
16:24:24 <Vorpal> ais523, very very lightweight threads
16:24:28 <ais523> anyway, /nothing/ in Java is lightweight
16:24:31 <Vorpal> ais523, but java /is/ imperative.
16:24:33 <elliott> <Vorpal> ais523, so java's threads are lightweight enough?
16:24:36 <elliott> Java's threads are OS threads.
16:24:38 <ais523> so it doesn't really matter what you use, it's going to be equally heavy either way
16:24:39 <Vorpal> ouch
16:25:04 <ais523> if something isn't working for you, you just add extra layers of abstraction
16:25:05 -!- iamcal has quit (Remote host closed the connection).
16:25:07 <ais523> it won't actually /help/
16:25:12 <ais523> but it'll make things feel more Javay
16:25:21 <Vorpal> ais523, you use threads (processes they are called) in erlang, but they are cheap. Including the initial stack size it is about 300 words of memory to create a new thread.
16:25:50 <ais523> Vorpal: the vast majority of performance problems with Java, the usual solution is "get more memory"
16:25:55 <itidus21> elliott: its a sign i am going nutso
16:26:05 <ais523> or on OS X, "tell the JVM it's allowed to use more memory"
16:26:16 <Vorpal> ais523, you need that on linux too
16:26:19 <Vorpal> ais523, for minecraft at least
16:26:23 <kallisti> Vorpal: is this relevant maybe? http://docs.oracle.com/javase/1.4.2/docs/api/java/nio/channels/Selector.html
16:26:26 <Vorpal> ais523, anyway there are computational overheads in thread switching.
16:26:30 <Vorpal> hm
16:26:39 <Vorpal> kallisti, let me look
16:26:51 <itidus21> hm
16:26:51 <kallisti> as far as I can tell this is how Java does select()
16:27:06 <Vorpal> seems a bit complicated but sure, I'll take a look at it
16:27:35 <fizzie> java.nio.* is often a good bet for "more complicated" IO needs.
16:27:42 <Vorpal> heh
16:28:13 <kallisti> Vorpal: just click through the subclasses and interfaces and you'll figure it out. :P
16:28:54 <kallisti> Vorpal: http://www.exampledepot.com/egs/java.nio/NbClient.html
16:29:53 <Vorpal> ais523, btw erlang actually uses epoll or kqueue for polling if available, it just hides that with its userspace threads (which are scheduled on OS threads, to be able to take advantage of multiple processors)
16:30:27 <kallisti> don't most userspace thread systems work like that?
16:30:33 <Vorpal> kallisti, server sockets in this case, but I see there is a link to that as well
16:30:40 <Vorpal> kallisti, well you could use only one OS thread
16:31:05 <kallisti> right but do people actually do that?
16:31:29 <Vorpal> kallisti, erlang used to do that, way back before multiple CPUs were common.
16:31:41 <kallisti> ah
16:31:42 <fizzie> As a historical interest, Sun JVM pre-1.2 had "green threads" that I think might've been single-core-only.
16:31:56 <fizzie> 1.2 went to native OS threads.
16:32:07 <Vorpal> green threads are far better IMO.
16:32:29 <ais523> we need other colours of thread
16:32:33 <Vorpal> thousands of OS threads is not a good idea. Tens of thousands of erlang threads is a non-issue.
16:32:36 <ais523> like indigo threads, for making jeans
16:32:40 <Vorpal> heh
16:33:57 -!- ais523 has quit (Remote host closed the connection).
16:34:10 <fizzie> Red threads which are, like, so heavyweight it's not even funny. Takes a minute to even spawn one.
16:34:27 <Vorpal> fizzie, I would guess cygwin uses them
16:36:05 <Vorpal> also oh god, the selector API looks painful. Less painful than threads though.
16:36:25 <Vorpal> I guess ais and elliott would disagree about that
16:36:28 * kallisti has decided to not try writing an AI anytime soon.
16:36:39 <kallisti> I have no clue what would make a good portal chess strategy, since I haven't played it.
16:37:04 -!- Jafet has quit (Ping timeout: 240 seconds).
16:37:18 <itidus21> kallisti: the best problems are the ones where the solution isn't immediately obvious upon seeing the problem
16:37:44 <kallisti> yes those are the ones that are actually problems.
16:38:38 <itidus21> i believe the problem with the patent system is that most patents are obvious solutions to obscure problem definitions
16:39:24 <itidus21> but then -- ok ill wrap up this obvious troll rant quickly -- the patent system is used to keep the economy working..
16:39:25 * kallisti should patent portal chess.
16:40:31 <itidus21> kind of like slow internet connections are good at preventing movie pirating
16:40:49 -!- Jafet has joined.
16:41:08 <kallisti> itidus21: I think the patent system exists because inventors feel entitled to the spoils of their inventions and this makes sense from an ethical perspective. Paradoxically, people claim that it encourages competition, despite it doing the exact opposite of that by definition.
16:41:42 <itidus21> maybe once it did, but that purpose is long lost
16:42:05 <kallisti> s/an ethical perspective/a society's intuitive ethical perspective/
16:42:25 <itidus21> kind of like the way the word gay now means blasphemous or mentally ill in some circles
16:42:26 <fizzie> Also I'm not so sure all softfloats are IEEE-like, though I don't really have counter-examples (except I think some CC65/SDCC float thing); all softfloats on system families where there sometimes are (IEEE) hardfloats are of course all IEEE-like for sanity.
16:43:04 * kallisti wonders how he should represent loops.
16:43:48 <itidus21> kind of like the way a word which once meant happy now means blasphemous or mentally ill or likely to get aids in some circles
16:44:03 <kallisti> I guess I could just set all of the relevant cells with a "isDeathWall" boolean...
16:44:19 <kallisti> but maybe there's a better way.
16:44:29 <fizzie> SHARC native floats are "IEEE-ish" 40 bit "extended single-precision" things, but it reads/writes 32-bit IEEE floats; much like x87 except half the bits, really. Though I doubt anyone's running mcmap on a DSP.
16:45:27 <itidus21> kallisti: the bourgeois would tend to possess the rare
16:45:39 <itidus21> whats rare in one place may be common in another place
16:45:55 <kallisti> like air
16:45:59 <kallisti> air isn't very common in space.
16:46:10 <itidus21> hence, ummm
16:46:42 <kallisti> hence when we become asteroid-mining space colonists air will become an economic resource.
16:47:24 <elliott> I really want to retag this question with [c] so I get all the attention, but there's a maximum of 5 tags :'(
16:47:29 <itidus21> the possession of diamonds by the bourgeois is more about establishing their bourgeoisness more than wanting a malleable metal
16:47:42 <itidus21> oops i forgot i said diamonds instead of gold
16:47:49 <kallisti> we'll need large botanical gardens in our space colonies with reflective panels to direct solar energy towards the plants.
16:47:55 -!- iamcal has joined.
16:48:08 <kallisti> itidus21: well most people want gold because it has value.
16:48:10 <kallisti> much like money.
16:48:20 <kallisti> before money became something other than "paper representing gold"
16:48:47 <kallisti> or... after? or...
16:48:51 <kallisti> I don't know why I said before.
16:49:03 <elliott> `addquote <itidus21> the possession of diamonds by the bourgeois is more about establishing their bourgeoisness more than wanting a malleable metal <itidus21> oops i forgot i said diamonds instead of gold
16:49:07 <HackEgo> 795) <itidus21> the possession of diamonds by the bourgeois is more about establishing their bourgeoisness more than wanting a malleable metal <itidus21> oops i forgot i said diamonds instead of gold
16:49:23 <elliott> kallisti: Gold isn't really very useful.
16:49:28 <elliott> That's why it's such a good currency.
16:49:36 <elliott> Nobody much wants it for anything else.
16:49:43 <itidus21> so patents represent an asset that a company obtains for doing some work.
16:49:44 <Phantom_Hoover> It's useful /now/, because we have uses for basically everything now.
16:49:47 <itidus21> they are just assets
16:49:49 <kallisti> elliott: yes but I'm not sure if that's /why/ it's currency. certainly that helps.
16:50:04 <Phantom_Hoover> Except thulium.
16:50:09 <itidus21> theres no morals or ethics guiding companies to want patents
16:50:19 <itidus21> its just assets for the sake of assets
16:50:26 <itidus21> for whatever uses a company has for assets
16:50:30 <kallisti> s/sake of assets/sake of money/
16:50:48 <kallisti> I bet money is a good use.
16:51:12 <kallisti> hm I may just represent loops as a structure seperate from the Vector grid.
16:51:35 <itidus21> ok ok my words full of fallacies
16:51:38 <kallisti> so that I can treat them as a group rather than doing gross traversal stuff.
16:51:56 <kallisti> (no one knows what I'm talking about right now....)
16:52:25 <itidus21> well because other companies could otherwise exploit a companys work, a patent protects a companys investment of time/energy/money into some work
16:52:35 <elliott> <kallisti> elliott: yes but I'm not sure if that's /why/ it's currency. certainly that helps.
16:52:43 <elliott> kallisti: If something is really useful, people will be too busy using it to trade it.
16:52:48 <kallisti> elliott: right.
16:53:01 <elliott> Phantom_Hoover: Yeah, but it's a lot less useful than lots of other things.
16:53:03 <itidus21> i guess what i am trying to say is that the protection of investments is the key thing, and not the celebration of invention or innovation
16:53:16 <elliott> <itidus21> theres no morals or ethics guiding companies to want patents
16:53:16 <elliott> <itidus21> its just assets for the sake of assets
16:53:16 <elliott> <itidus21> for whatever uses a company has for assets
16:53:19 <elliott> Today itidus21 learned: Capitalism!
16:53:29 <kallisti> elliott: I think gold also became a currency because it was pretty and hard to obtain historically.
16:53:32 <elliott> kallisti: You're talking about portal chess.
16:53:35 <kallisti> elliott: yes
16:53:44 <elliott> Also, duh, yes, only scarce resources are valuable.
16:54:37 <itidus21> company makes an investment, others threaten that investment, company protects the investment using some set of laws which lately tends to be patents
16:54:51 <kallisti> hmmm, I think I'll represent all the loops on the board as a Vector of sets. This allows me to efficiently remove them and change their boundaries as a group, but also allowing me to test if positions are within a loop because, well, they're sets.
16:54:52 <itidus21> i suppose there is always laws in place to protect the investment a company makes
16:55:29 <itidus21> but maybe corporations do business like katamari
16:55:44 <kallisti> I wonder if I should make it a rule that you cannot willingly place a piece within a loop. This basically makes them like impenetrable (redirectable) walls.
16:56:08 -!- Jafet has quit (Read error: Connection reset by peer).
16:56:15 <kallisti> in a physical game it would be cool to allow pieces to accidentally meander into loops, because their player forgot about their existence.
16:56:27 <itidus21> so what i am trying to say here is that, any AI which is easy to program is pointless :)) :))
16:56:29 <elliott> kallisti: Be careful about using Vectors.
16:56:29 <kallisti> but presumably in a computer representation you have graphics that allow you to see all the loops.
16:56:35 <Vorpal> kallisti, didn't you decide above not to write an AI?
16:56:36 <kallisti> elliott: why's that?
16:56:39 <kallisti> Vorpal: correct.
16:56:45 <kallisti> my purpose was never to write an AI.
16:56:46 <kallisti> >_>
16:56:51 <Vorpal> so what are you doing now?
16:56:53 <elliott> kallisti: Every update requires copying all the data (all the pointers if you used a boxed vector).
16:56:58 <itidus21> if the method of writing an AI is too obvious.. then the AI is too trivial
16:57:02 <itidus21> the game is too easy
16:57:07 <kallisti> writing a server program that connects to clients and implements a game of portal chess.
16:57:17 <elliott> kallisti: It's probably good if you have 64 elements but not if you have a few hundred.
16:57:26 <Vorpal> kallisti, how does portal chess differ from normal chess?
16:57:31 <Vorpal> kallisti, I hope it involves a portal gun
16:57:37 <kallisti> elliott: this Vector will, in all likelihood, remain at 0 to 2 elements.
16:57:44 <kallisti> I could just as easily use a linked list.
16:57:50 <Vorpal> because that would be awesome to apply on the other side
16:57:58 <kallisti> except that I think I would want random access? not sure.
16:58:03 <itidus21> <itidus21> kallisti: the best problems are the ones where the solution isn't immediately obvious upon seeing the problem <itidus21> i believe the problem with the patent system is that most patents are obvious solutions to obscure problem definitions [...] <itidus21> if the method of writing an AI is too obvious.. then the AI is too trivial
16:58:10 <itidus21> see, there is method to my madness
16:58:15 <itidus21> waahahahahhaha
16:58:37 <kallisti> Vorpal: it involves two pieces that are portals.
16:58:50 <kallisti> Vorpal: which other pieces and projectile abstraction things can pass through
16:59:23 <Vorpal> kallisti, oh, less fun than a portal gun (probably saner though)
16:59:56 <kallisti> honestly the "loop" rule is akin to one of the weird chess rules like en passant or the trade-pawn-for-any-other-piece rule.
17:00:05 <kallisti> Vorpal: yes considering it's a game of chess.
17:00:13 <Vorpal> indeed
17:00:35 <itidus21> kallisti: this is why we need inspiration and motivation, because all good things require hard work and commitment
17:00:42 -!- Jafet has joined.
17:00:48 <kallisti> but who knows, maybe in the future thriving scene of portal chess the loop rule will take on an unforseen importance in portal chess strategy.
17:01:18 <itidus21> so, in collecting motivation it is important for us to realize it's ok to abandon a project which we don't like
17:01:21 <Vorpal> itidus21, "because all good things require hard work and commitment" <-- not really, garlic doesn't require hard work as such
17:01:38 <itidus21> hmm...
17:01:39 <Vorpal> kallisti, the loop rule being?
17:02:21 <kallisti> okay so there are pieces called cannons that can, as their move, fire a projectile in one of four directions. This projectile will capture something in its path, or will otherwise interact with a piece in the way its rules specify.
17:02:25 -!- elliott has quit (Ping timeout: 276 seconds).
17:02:42 <kallisti> one such piece is portals themselves. if a projectile goes through the opening of a portal it will continue out of the other portal
17:02:48 <Vorpal> kallisti, ah
17:02:52 <kallisti> another piece is the arrow
17:03:09 <kallisti> which, will redirect the path of the projectile in the direction that it's facing.
17:03:14 <Vorpal> ah
17:03:17 <Vorpal> kallisti, I see
17:03:21 <kallisti> using these two pieces you can form projectile loops
17:03:24 <Vorpal> kallisti, so what happens in the case of a loop?
17:03:28 <kallisti> where the projectile travels indefinitely in a loop.
17:03:32 <kallisti> at which point
17:03:39 <kallisti> it remains as a persistent part of the game state.
17:03:48 <Vorpal> oh, I hoped for an explosion
17:03:49 <kallisti> until something in its path breaks the loop.
17:03:58 <Vorpal> kallisti, and what effect does breaking said path have?
17:04:09 <kallisti> well, imagine you place an arrow within the loop
17:04:19 <kallisti> immediately a projectile fires from the direction the arrow is pointing
17:04:23 <kallisti> simultaneously breaking the loop.
17:04:27 <Vorpal> then you could change it into another loop
17:04:30 <kallisti> yes
17:04:31 <Vorpal> with enough arrows
17:04:37 <Vorpal> how many arrows do you have
17:04:39 <kallisti> there are only 4 arrows on the board.
17:04:41 <kallisti> 2 per player
17:04:48 <kallisti> but yes that's possible.
17:04:49 <Vorpal> right
17:04:58 <kallisti> the main purpose would be to allow arrows to quickly capture pieces.
17:05:08 <kallisti> a loop is immediately a danger if an arrow is nearby
17:05:12 -!- Jafet has quit (Ping timeout: 252 seconds).
17:05:48 <Vorpal> kallisti, do the pieces have hitpoints or are cannon shots one-hit kills?
17:06:00 <kallisti> they capture pieces
17:06:05 <kallisti> it's not too removed from chess in that sense.
17:06:09 <kallisti> the goal is to capture the king.
17:06:15 <Vorpal> hm
17:06:26 <Vorpal> with capture you don't mean traditional chess capture?
17:06:29 <kallisti> the pieces are arranged as in chess.
17:06:43 * Vorpal imagines chess with HP and headshots.
17:07:01 <kallisti> Vorpal: hmmm, well no it could work that way.
17:07:01 <itidus21> headshots
17:07:12 <kallisti> it would be against the rules for a king to walkinto the line of sight of a cannon, for example.
17:07:18 <kallisti> and if the king has no valid moves
17:07:21 <kallisti> then that's checkmate
17:07:24 <Vorpal> right
17:07:41 <itidus21> kallisti: you need a concept artist
17:07:57 <itidus21> someone like yoshitaka amano or akiman
17:08:02 <Vorpal> kallisti, anyway what about a variant of chess were each capture causes a mini-game in the form of D&D style fight with d20 and so on?
17:08:06 <Phantom_Hoover> * Vorpal imagines chess with HP and headshots.
17:08:20 <Vorpal> Phantom_Hoover, yes?
17:08:32 <kallisti> Vorpal: D&D kind of already works like this if you play with a grid map.
17:08:45 <Phantom_Hoover> After me and a friend got kicked out of the school library for playing Halo on the library computers when we were bored we invested quite a bit of time into inventing Chess Halo.
17:08:56 <Vorpal> kallisti, hm kind of, except more than one unit move per turn
17:08:59 <itidus21> hmm
17:09:02 <Phantom_Hoover> (All the school computers have Halo because.... I don't know.)
17:09:09 <kallisti> Vorpal: anyway I'm not going to suddenly start creating a new chess variant when I want to focus on implementing, playtesting, and improving my current game.
17:09:11 <Vorpal> Phantom_Hoover, awesome
17:09:22 <kallisti> also there's some rule issues to decide.
17:09:29 <kallisti> I currently have, I think, 3 variant rules.
17:09:34 <Vorpal> Phantom_Hoover, and yes that is strange
17:09:37 <kallisti> and I should probably pick a "standard" rule.
17:09:43 <kallisti> concerning loops and how they interact with portals.
17:09:46 <itidus21> ok, what about chess on a finite euclidean plane
17:09:58 <kallisti> itidus21: what are the pieces? points?
17:10:03 <kallisti> what are "turns" in a continuous space.
17:10:14 <itidus21> the pieces could be circles :D
17:10:19 <itidus21> centered on points
17:10:25 <Phantom_Hoover> It's an RTS, I assume.
17:10:42 <kallisti> otherwise turns would have to be discrete steps
17:10:48 <Phantom_Hoover> Although one with infinitely fast thinking for each player.
17:10:50 <Vorpal> itidus21, and you could do collision tests to see if you capture
17:10:51 <Vorpal> :D
17:10:55 <itidus21> kallisti: turns involve translating from one point to another point with some given min/max
17:10:57 <Vorpal> collision checks*
17:11:08 <kallisti> Vorpal: the current issue is that it's not clear how portals should interact with loops
17:11:14 <itidus21> and uhmm..
17:11:17 <kallisti> because the capture rules for portals are direction-based
17:11:30 <Vorpal> kallisti, hm... explode
17:11:34 <Vorpal> kallisti, definitely explode
17:11:37 <kallisti> a portal cannot be captured from the direction it's facing. an attempt to do so results in the piece exiting through the other side.
17:11:47 <Vorpal> kallisti, causing AOE damage
17:11:55 <Phantom_Hoover> I'm seeing this as basically DEFCON except chess rather than war.
17:11:56 <Vorpal> in the 3x3 centered on the portal
17:12:01 <kallisti> Vorpal: no that's what happens when a portal tries to pass through its sister portal. :P
17:12:11 <Vorpal> Phantom_Hoover, wow that sounds awesome
17:12:13 <kallisti> one explosion rule is enough
17:12:16 <Vorpal> kallisti, aww
17:12:27 <Vorpal> kallisti, you can never have too many explosions
17:12:36 <Phantom_Hoover> "WHITE LAUNCH DETECTED"
17:12:37 <kallisti> you could actually use the explosion to your advantage
17:12:41 <Vorpal> Phantom_Hoover, :D
17:12:49 <kallisti> if destroying both your portals is worth the outcome
17:13:00 <Phantom_Hoover> "E5 HIT, 1 DEAD"
17:13:04 <Vorpal> kallisti what happens if the king is in the exploded area?
17:13:16 <kallisti> also putting your portals within line of sight of each other and having them facing each other basically creates a space where a king cannot enter
17:13:20 <kallisti> because he could get exploded.
17:13:46 <Vorpal> Phantom_Hoover, and then we could do a fallout-style followup :D
17:14:15 <Phantom_Hoover> Climbing up the ruins of the black queen?
17:14:18 <kallisti> anyway back to the loop/portal problem. the problem is that there are two kinds of loops. one is unidirectional, meaning that there is a definite direction to such a loop. it travels in a clockwise or counter clockwise circuit.
17:14:21 <Phantom_Hoover> This looks so awesome in my head.
17:14:23 <Vorpal> Phantom_Hoover, that sounds dirtly
17:14:26 <Vorpal> dirty*
17:14:38 <kallisti> in this situation a portal can enter the loop and "catch" the projectile causing it to be expelled from its sister portal.
17:14:43 <Vorpal> (at least if another chess piece does it)
17:14:49 <Vorpal> Phantom_Hoover, and yes, same here
17:14:51 <Phantom_Hoover> — Arvid "I couldn't find any SCSI porn!" Norlander.
17:15:05 <kallisti> however another class of loops are "bidirectional"... they oscillate back and forth between two endpoints.
17:15:06 <Vorpal> Phantom_Hoover, where did I say that was a bad thing?
17:15:23 <Vorpal> Phantom_Hoover, anyway I did that to prove that rule 34 was incorrect
17:15:24 <Phantom_Hoover> There was a tangible sense of disappointment there.
17:15:51 <Vorpal> kallisti, heh
17:15:52 <kallisti> this situation is the ambiguous one. what happens when a portal enters a bidirectional loop? you could have it so that portals are captured, or you could have it where portals always redirect. or you could have it so that portals have a 50/50 chance of either.
17:16:16 <fizzie> Just because you can't find something is not proof of it not existing.
17:16:19 <kallisti> these are the 3 rule possibilites.
17:16:25 <Vorpal> kallisti, I would suggest oscillation at a fixed frequency. Makes it harder to keep track of the game for the players
17:16:38 <kallisti> Vorpal: so you want a turn-based game to have a real-time element?
17:16:46 <Vorpal> fizzie, indeed. But it wasn't within the first few pages of google image search results
17:16:47 <kallisti> I suppose that's possible on a computer.
17:17:04 <Vorpal> fizzie, it is very unlikely it exists though at least
17:17:23 <itidus21> do you know whats dissapointing? having an idea and then googling it.. well time for me to google this finite euclidean plane chess idea of mine
17:17:29 <Vorpal> kallisti, sure.
17:17:31 <kallisti> Vorpal: that basically means that you have to time how long it takes for a turn to transpire and correctly position the portal at the right time in order to catch the projectile.
17:17:44 <kallisti> this sounds really... wonky to me. it doesn't make any sense in a turn-based strategy game.
17:17:48 <kallisti> and it's very implementation dependent.
17:17:50 <Vorpal> kallisti, I like really screwy chess variants :P
17:17:59 <kallisti> how much time passes in piece movement?
17:18:00 <fizzie> http://www.epicycle.org.uk/images/carriers.jpg -- I don't know, that's pretty close. (Google Image search result for "scsi porn".)
17:18:07 -!- azaq23 has joined.
17:18:12 <kallisti> is it instant?
17:18:15 -!- azaq23 has quit (Max SendQ exceeded).
17:18:32 <Vorpal> kallisti, no I meant real time oscillation, while the player is considering their next move. I suggest a frequency of 1-3 Hz
17:18:42 <kallisti> I would rather have the "portals can always catch bidirectional loops if the portal is facing one of the two directions" rule
17:18:43 -!- azaq23 has joined.
17:18:50 <Vorpal> kallisti, you can then time your move to take advantage of it
17:19:00 <kallisti> because it is strategically equivalent to the real-time-frequency thing you're suggesting
17:19:05 <kallisti> without this silly timing thing involved. :P
17:19:15 <Vorpal> kallisti, I like silly chess variants :P
17:19:48 <itidus21> i wonder if this idea is genuinely innovative
17:19:59 <kallisti> Vorpal: also it complicates implementation for... basically no gain.
17:20:05 <Vorpal> true
17:20:07 <itidus21> i have definitely never heard of a chess game based on euclidean geometry
17:20:26 <itidus21> (but then i am clueles about chess)
17:20:44 <fizzie> Vorpal: Okay, here: http://e621.net/post/show/43346/4-3-blush-darkdoomer-iriver-overstretched-rule_34- -- note, it's a SCSI cable; you can tell from the logo.
17:20:46 <Vorpal> kallisti, anyway I suggest you add missiles as well, with a cooldown
17:20:53 <kallisti> Vorpal: .....
17:20:57 <kallisti> no, you're banned from ideas now.
17:21:01 <Vorpal> kallisti, why?
17:21:11 <kallisti> still I also like the "portals always are captured (and therefore cannot cross a loop" because it has interesting consequences and makes loops more formidable defensively.
17:21:13 <Vorpal> kallisti, anyway card games have that sort of things
17:21:17 <Vorpal> kallisti, and they are turn based
17:21:19 <kallisti> the 50/50 rule is pretty much bad to me. randomness in chess? nothx
17:21:34 <kallisti> but I see all 3 as viable rule variants
17:21:45 <kallisti> so I'll probably list all of them in the official rules.
17:21:47 <Vorpal> fizzie, eww
17:22:43 <kallisti> lol you could calculate the probability based on the distance the portal is from the endpoint it's facing in the loop path...
17:22:46 <kallisti> heh
17:22:59 <kallisti> directly inbetween the two endpoints is 50/50 regardless of direction.
17:23:09 <Vorpal> kallisti, anyway I think randomness in chess could be interesting
17:23:23 <itidus21> to imagine my idea.. it is like this.. the rule is that you have to move the piece in a straight line
17:23:55 <Vorpal> kallisti, it has to be done carefully though
17:24:00 <Vorpal> as all randomness in games
17:24:14 <kallisti> Vorpal: it's basically a corner case.
17:24:21 <itidus21> you can move the pieces according to some set of rules based on geometry.. but the most important rule is the straight line rule
17:24:32 <kallisti> it's a very specific situation in a very specific rule.
17:24:41 <Vorpal> itidus21, what about adding gravitation causing bent paths?
17:24:42 <Vorpal> :D
17:24:52 <itidus21> whoa!
17:24:55 <Vorpal> (wow that must be one fat knight)
17:25:09 <itidus21> yes .. what about adding gravitation
17:25:11 <kallisti> Vorpal: I can actually think of a lot of different loop configurations that you could create
17:25:19 <Vorpal> kallisti, nice
17:25:26 <kallisti> for example you could actually put arrows in a loop in such a way that they don't interfere with the loop
17:25:37 <kallisti> this makes them a cannon in their own right
17:25:42 <kallisti> they just turn to fire.
17:25:50 <itidus21> Vorpal: chess with spaceships which can make an impulse thrust in a given direction once per turn
17:25:59 <Vorpal> kallisti, anyway you could have it oscillate once per turn or such
17:26:03 <itidus21> around planets
17:26:04 <Vorpal> kallisti, that might be interesting
17:26:08 <kallisti> Vorpal: hmmmm maybe
17:26:17 <kallisti> it would be hard to visualize it
17:26:23 <kallisti> graphically
17:26:30 <Vorpal> hm
17:26:54 <kallisti> unless the projectiles are like huge beams with clearly labelled arrows. :P
17:27:03 <kallisti> "hi player I go this way"
17:27:10 <kallisti> "hey now I'm going this way"
17:27:15 <Vorpal> kallisti, could easily be done on a computer
17:27:23 <itidus21> computers once again become useful
17:27:25 <Vorpal> just make it look like >>>>> or such
17:27:28 <itidus21> for the first time since ww2
17:27:28 <kallisti> yes it just doesn't make sense in the model I have for how the game works...
17:27:33 <Vorpal> in red above the board
17:27:56 <Vorpal> kallisti, how can you have a model when you haven't yet decided on the rules
17:28:06 <kallisti> that's the only undecided rule.
17:28:25 <fizzie> Huh, the 'coretemp' sensor on this Atom box is saying "Core 0: +23.0°C (crit = +90.0°C)" -- that sounds dubiously low, but I guess it's *possible*, since it's an Atom and mostly idle. (The box is making a worrisome noise, might be the PSU fan dying.)
17:28:38 <fizzie> +23 is pretty much room temperature, though.
17:28:40 <Vorpal> fizzie, I had an old sempron that idled at 28 C
17:28:50 <Vorpal> when it was like 17 C inside
17:29:04 <kallisti> the difficulty of this rule is that it either requires a special case, a real-time element of the game, or a re-interpretation of how loops work.
17:29:10 <Vorpal> my current CPU tends to idle much higher, but then the fan is no longer constant speed
17:29:11 <fizzie> lm-sensors tends to report all kinds of nonsense numbers, but normally coretemp's quite reliable, AFAIK.
17:29:35 <Vorpal> fizzie, yeah all machines should have IPMI
17:29:47 <fizzie> Everyone wires the motherboard-specific sensors differently for some reason.
17:29:47 <Vorpal> that reports temperatures with proper names too
17:30:01 <Vorpal> fizzie, it tends to be mostly reliable on thinkpads
17:30:05 <Vorpal> (lm-sensors)
17:30:10 <Vorpal> fizzie, even then there are some issues
17:30:32 <itidus21> Vorpal: if i allowed gravity then i could allow acceleration
17:30:33 <Vorpal> fizzie, and that is with the thinkpad-isa-0000 "adapter"
17:30:45 <Vorpal> fizzie, they wire it differently in different models
17:30:51 <Vorpal> some stuff are the same though
17:31:01 <Vorpal> itidus21, sure
17:31:08 <itidus21> that would be quite weird
17:31:09 <fizzie> Mhm, modprobed also the actual superio chip found by sensors-detect ("Fintek F71862FG Super IO Sensors"); it gives temp1, temp2 and temp3 at 39, 46 and 51, respectively.
17:31:15 <fizzie> No idea where those temperatures are, though.
17:31:25 <Vorpal> itidus21, I wonder when this turns into something completely different than chess, instead of a variant of chess
17:31:28 <kallisti> Vorpal: I suppose I could simply leave it an open question, with reinterpretations of the rule being permitted. Obviously for any kind of tournament you would want to pick one rule for the entire series of games.
17:31:48 <kallisti> my implementation will have the 4 non-real-time rules that I've got so far (including the oscillating one you suggested)
17:31:50 <Vorpal> fizzie, might even be offset from the real values depending on the type of probe iirc
17:32:02 <kallisti> with an option to choose which rule you want to play.
17:32:16 <fizzie> Certainly. Or multiplied with a different factor.
17:32:32 <Vorpal> fizzie, or both :P
17:32:32 <itidus21> Vorpal: turn based asteroids basically
17:32:39 <Vorpal> itidus21, :D
17:32:52 <Vorpal> anyway is there any realtime chess I wonder
17:33:09 <Vorpal> there are other RTS obviously, but are there any based on chess?
17:33:34 <itidus21> i wonder if anyone has ever tried to implement asteroids with turn based
17:33:43 <Vorpal> doubtful
17:33:49 <itidus21> its so insane
17:33:55 <Vorpal> why don't you do it?
17:34:12 <itidus21> my initial definition of turn is turning to jelly
17:34:19 <kallisti> I guess if I ever implement a system that matches players together, they could each check off which rules they want to play and it will match them with anyone else that picked those rules.
17:34:23 <Vorpal> itidus21, anyway astroids is turn based, it is just that they are very short turns and take a fixed amount of time :P
17:34:29 <kallisti> but that's further away from just getting the actual game itself.
17:34:33 <Vorpal> (computers are not continuous!)
17:34:48 <itidus21> and the idea is that instead of firing guns in asteroids, that you collide with things to destroy them
17:35:05 <itidus21> so, you could only destroy the asteroid on your turn, in such a system
17:35:15 <kallisti> Vorpal: FRP maintains a sample-independent abstraction that logically resembles continuity.
17:35:28 <Vorpal> kallisti, FRP being?
17:35:32 <kallisti> functional reactive programming
17:35:36 <Vorpal> right
17:35:49 <kallisti> of course you have to sample values at some point, the code itself is written as though it were continuous.
17:35:56 <Vorpal> kallisti, anyway I doubt astroids is implemented with it in the classical implementation
17:36:04 <itidus21> this isn't really an idea i just had.. this is just lots of ideas culminating
17:36:12 <Vorpal> kallisti, and still the actual computer is discrete
17:36:37 <kallisti> I certainly don't disagree that computers are discrete.
17:36:39 <itidus21> i have a notepad showing you how i labor over the question of turn based vs realtime in games
17:36:56 <Vorpal> itidus21, how is that something to labor over?
17:36:58 <itidus21> and finally i made some progress here
17:37:05 <Vorpal> you just decide from case to case what fits best
17:37:52 -!- Jafet has joined.
17:37:59 <itidus21> gameplay begins with standard chessboard.. each has a pawn piece placed somewhere on rear row.
17:38:42 <itidus21> turn by turn an impulse is done by the "ship" direction and speed indicated
17:38:42 <Phantom_Hoover> What if you make the pieces continuous too?
17:38:59 <Phantom_Hoover> You don't have pawns, you have a long strip of pawn at the start.
17:39:08 <itidus21> not in this variation
17:39:15 <Vorpal> Phantom_Hoover, interesting, how would you move it?
17:39:19 <Vorpal> Phantom_Hoover, like a barrier?
17:39:30 <itidus21> well could have more than 1
17:39:53 <Vorpal> in the continuous model I mean
17:40:18 <Phantom_Hoover> Vorpal, you'd fling bits of it along defined trajectories so the integral of movement d(pawn) is within allowed bounds?
17:40:25 <kallisti> Vorpal: of course, thanks to the sampling theorem, we know that a continuous function with no frequencies higher than N can be completely determined by a discrete signal with a sample rate of .5*N. I'm not sure what implications this has for games. :P
17:41:25 <Phantom_Hoover> You'd probably have to forbid non-measurable sets of piece from being moved.
17:41:31 <Vorpal> Phantom_Hoover, hrrm
17:41:37 <Vorpal> and yes
17:42:29 <Vorpal> kallisti, I would suspect a lot of non-continuous functions in games
17:42:49 <Vorpal> kallisti, well, depends on the game. I was thinking FPS or such here
17:43:29 <kallisti> Vorpal: I'm just not really sure how to calculate frequencies on fuctions on non-real (co)domains.
17:44:31 <Vorpal> hm
17:44:59 <Vorpal> bbl
17:45:10 <kallisti> but given the clock speed computers I would think that most data "frequencies" are "low enough" in comparison.
17:45:13 <kallisti> +of
17:46:36 <itidus21> heres a pic of what i have in mind: http://oi44.tinypic.com/2sbtmvb.jpg
17:47:11 <itidus21> each vector representing a turn somehow
17:48:09 <kallisti> guys what if I write this portal chess server and people actually play it?
17:48:31 <itidus21> the trouble begins if i allow velocity.. then each vector gets modified every turn
17:48:34 <fizzie> Then you're doomed to be known as the "portal chess guy". There are worse fates. (But not many?)
17:48:49 <kallisti> fizzie: what are you talking about portal chess is often.
17:48:55 -!- Klisz has joined.
17:48:59 <kallisti> yes, often
17:49:01 <kallisti> not awesome
17:50:00 <kallisti> fizzie: are you implying that "portal chess guy" is not a title with dignity?
17:50:12 <kallisti> I completely disagree.
17:50:41 <fizzie> No, no, it certainly has gravitas.
17:51:03 <fizzie> Perhaps even gravytude.
17:51:21 <itidus21> if the game uses velocity and if vectors have variable time, then it means that the time your turn can determine the length of time that the other objects move during your turn
17:51:46 <kallisti> itidus21: yes
17:51:58 <itidus21> this is unanticipated pain
17:52:12 <kallisti> turns + real time = you can wait forever (or until a time limit) and maintain the current status quo of the system
17:52:39 <itidus21> but then again..
17:52:40 <Vorpal> <kallisti> but given the clock speed computers I would think that most data "frequencies" are "low enough" in comparison. <-- from what sort of data?
17:53:05 <kallisti> Vorpal: precisely. it was a very vague statement. I'm guessing many game states fall into this category.
17:53:16 <Vorpal> right
17:53:24 <kallisti> but not all. it again dependends on how you calculate frequency of an entire game state
17:53:32 <kallisti> I don't know how to do that or if it's necessarily possible.
17:53:34 <itidus21> hummm
17:53:59 <itidus21> i guess these sorts of problems become simpler when actually testing the thing in practice, instead of theorizing
17:53:59 <kallisti> I guess it would help if I knew more about Fourier transforms.
17:54:03 <Vorpal> kallisti, I was just going to point out that for example microwave control circuits from what I remember run at much higher frequencies than computers do
17:54:30 <kallisti> Vorpal: well I didn't mean "any data"
17:54:43 <Vorpal> kallisti, and iirc there was some sort of carbon transistor that could switch at 100 GHz
17:54:50 <Vorpal> which is pretty impressive
17:55:11 <kallisti> we should design a carbon transistor processor and make it affordable to the masses.
17:55:45 <Vorpal> kallisti, if it works out in the end I guess that will happen, probably won't give you a 100 GHz CPU, there are many overheads
17:55:55 <kallisti> right
17:55:59 <itidus21> what i am talking about seems to be a continuous board "racetrack" where the objective is to crash into the opponent
17:56:20 <kallisti> itidus21: I would say you want a time limit
17:56:21 <kallisti> to a turn
17:56:33 <kallisti> to maintain sanity.
17:56:43 <itidus21> racetrack adopts the idea that no other pieces move during a turn
17:56:58 <kallisti> so it's like...
17:57:01 <kallisti> a non-real-time game?
17:57:06 <itidus21> yeah :)
17:57:22 <itidus21> my goal is turnbased on a continuous board
17:57:38 <kallisti> anyway turnbased asteroids could be interesting if you have precise control over what you can do per turn
17:57:56 <kallisti> like applying this much force in this direction, or aim and fire
17:58:30 <itidus21> i need to study the racetrack rules a bit closer
17:59:38 <Vorpal> kallisti, what about 3D chess?
17:59:40 <kallisti> hmmm one nice thing about Haskell is I'll be able to take advantage of its excellent concurrency support when I actually write the server code that hosts games.
17:59:46 <kallisti> Vorpal: what about it?
17:59:49 <fizzie> Continuous boards sound like a recipe for endless squabbling about how you *would* have won except the unfair floating-point imperfections of your implementation kept favouring the opponent. (Unless of course you're going to analytically solve everything.)
17:59:52 <Vorpal> kallisti, it could be interesting
17:59:53 <kallisti> pretty sure that already is a thing.
18:00:14 <fizzie> Don't they play 3D chess in Star Trek?-)
18:00:29 <fizzie> http://www.chessvariants.com/3d.dir/startrek.html -- apparently.
18:00:48 <Vorpal> kallisti, 4 players, two like usual, the other two on the "ceiling"
18:01:05 <kallisti> ah yes that could be interesting
18:01:14 <Vorpal> kallisti, would require 8x8x8
18:01:14 <kallisti> 3 or more player variants are always interesting
18:02:04 <kallisti> of course if I'm making a whole portal chess server with web-based and desktop clients I'll need a website too
18:02:10 <pikhq> Star Trek 3D chess is more chess on a very strange 2D board.
18:02:12 <kallisti> "Welcome the international hub of portal chess gaming!"
18:02:19 <Vorpal> pikhq, heh
18:02:20 <kallisti> my website will be so good.
18:02:25 <kallisti> missing words everywhere
18:02:34 <fizzie> Well, it's got that movable-level thing going on.
18:03:09 <pikhq> Oh, right, movable levels.
18:03:16 <kallisti> it would be interesting to play a game of chess where you have two boards, with two different starting configurations
18:03:17 <pikhq> Okay, I suppose you could call it 3D barely.
18:03:25 <kallisti> and each piece on one board is connect to a piece on the other board
18:03:35 <Vorpal> what about 4D chess?
18:03:37 <fizzie> pikhq: I think the handwavey justification for those would be that they represent starships.
18:03:41 <kallisti> so that moving one requires you to move the other according to rules (possibly they're the same piece but you could have them do different things)
18:03:55 <pikhq> fizzie: I suppose.
18:04:31 <kallisti> and capturing a piece on one board "frees" the piece on the other board.
18:04:36 <kallisti> creating an interesting strategic element.
18:05:04 <kallisti> where capturing an opponent piece can actually make the pieces on the other board more dangerous.
18:05:24 <kallisti> ....basically I should just make chess variants all day.
18:05:26 <kallisti> and get paid to do it.
18:05:29 <Vorpal> kallisti, I fear it might end up being very annoying to play
18:05:35 <kallisti> Vorpal: perhaps
18:05:38 <kallisti> depends on the specific mechanics.
18:05:42 <Vorpal> indeed
18:05:53 <kallisti> also winning conditions are uncertain
18:06:07 <kallisti> it could be either winning on one board wins the whole game or you have to win both games
18:06:16 <kallisti> with a draw being both players win one game
18:06:38 <kallisti> this is plausible if one player focuses on their success on one board, to the detriment of the other board.
18:06:46 <kallisti> gradually freeing all of their pieces
18:06:54 <kallisti> so that it just becomes two mostly seperate games of chess
18:07:07 <kallisti> or well, whatever this chess variant is called.
18:08:17 * kallisti is more interested in games that have a complex but elegant set of rules, rather than wacky variants.
18:09:18 <itidus21> fizzie: a solution i have is that you can make a continuous move by rolling a [0; a,b,c] continued function on a dice and stop rolling on some number on that dice
18:09:24 <Vorpal> kallisti, I'm quite a fan of RPGs myself. I wonder if you could make some sort of chess-inspired RPG
18:09:33 <Vorpal> chess with sidequests sounds too weird so hm
18:09:43 <kallisti> Vorpal: I do like your suggestion that bidirectional loops change direction once per turn because it's an interesting gameplay element, I'm just not sure that it can be used strategically or if it's mostly an element of luck and circumstance.
18:10:03 <itidus21> so if stop rolling on a "1" then.. dicerolls 2 6 4 6 5 1 results in [0; 2,6,4,6,5]
18:10:05 <Vorpal> kallisti, you would have to time your turn to the loop to take advantage of it
18:10:05 <kallisti> Vorpal: well I have some ideas for a real-time-strategy RPG
18:10:19 <Vorpal> kallisti, not sure how common such loops are anyway
18:10:19 <itidus21> i just learned about continued functions a few hours ago
18:11:49 <kallisti> Vorpal: I feel like it's going to be one of those rules that results in unintended metagameplay, which arose as a natral consequence of other rules.
18:12:02 <Vorpal> kallisti, hm?
18:12:04 <kallisti> and was originally seen as a very specific rare circumstance.
18:12:21 <kallisti> well, because even now I can think of many possible uses.
18:12:29 <kallisti> just not sure how it fits into the game.
18:12:37 <Vorpal> kallisti, Nothing wrong with metagaming, it is kind of common in competitive computer games anyway.
18:13:09 <itidus21> kallisti: a difficult thing is that most games depend on the fact there are no perfect players
18:13:10 <kallisti> I think the game itself will be very glass cannony. like playing out WW3 on a chess board. both players basically have nukes and want to kill each other. now what happens?
18:13:38 <Vorpal> kallisti, lots of explosions yay!
18:13:44 <itidus21> its something i think about a lot
18:14:08 <itidus21> there is no perfect life though, or is there.. i guess one can ask the indians
18:14:15 <Vorpal> itidus21, a lot of computer games depend on timing to ensure that
18:14:45 <Vorpal> you can't time perfectly usually
18:14:50 <itidus21> chess is interesting in that even by cheating you can't be a perfect player
18:15:03 <kallisti> itidus21: American Indians were not a perfect society living idyllic lives. kthx
18:15:06 <Vorpal> itidus21, are you sure there is no perfect play in chess?
18:15:13 <itidus21> no perfect player
18:15:19 <itidus21> not no perfect play
18:15:32 <itidus21> to be a player, one must actually play :D
18:15:44 <Vorpal> itidus21, well computers can easily beat humans
18:15:51 <itidus21> so some hermit in a cave who knows perfect chess but never plays anyone doesn't count
18:15:59 <Vorpal> eh
18:16:04 <kallisti> itidus21: cheating usually isn't regarded in defining a "perfect game" :P
18:16:05 <Vorpal> who said anything about such a guy?
18:16:29 <itidus21> for my definition of player, it is not enough to have the potential to play.. the playing must be actual
18:16:38 <Vorpal> yes and?
18:16:46 <Vorpal> I don't see your point here
18:17:04 <Vorpal> chess probably does have perfect play, just no one figured it out yet
18:17:18 <itidus21> i agree chess has perfect play
18:17:22 <kallisti> Vorpal: anyway I was thinking of a game that is partially inspired by magicka, and also partially inspired by real time strategy, but not really having much in common with them...
18:17:22 <itidus21> but it has no perfect players
18:17:41 <Vorpal> itidus21, as of yet. Computers aren't powerful enough and the chess AIs not got enough. Yet.
18:17:56 <itidus21> even if you are willing to cheat... even if you turn every resource to the task
18:17:58 <kallisti> Vorpal: you would start off as a single adventurer, and gradually gather a party. the interface is RTS style. you click on people and issue orders and use hotkeys to cast abilities.
18:18:08 <itidus21> you cannot play in the capacity of a perfect chess player
18:18:13 <itidus21> at this stage :D
18:18:17 <Vorpal> itidus21, cheating doesn't make sense in chess, what would it be? Moving two pieces in a turn?
18:18:18 <kallisti> Vorpal: also I was considering perhaps having a system of automation, like Dragon Age.
18:18:31 <itidus21> look.. umm..
18:18:35 <Vorpal> kallisti, never played that game
18:18:42 <itidus21> even IF both players talked about what move each player intended to make next
18:18:53 <kallisti> itidus21: cheating defines what the game is. when you permit cheating you're talking about a different game entirely.
18:18:56 <itidus21> uhmm.. no that doesnt make sense
18:18:59 <kallisti> *redefines
18:19:09 <Vorpal> oh then it is easy to solve, if you actually know what a player will do in a given situation
18:19:17 <itidus21> hmm ....
18:19:19 <Vorpal> you can just recursively apply that until you find a good one
18:19:22 <itidus21> it is?
18:19:40 <itidus21> ok i guess it is :D
18:19:43 <Vorpal> if it isn't restricted to next turn but can be applied to hypothetical future turns
18:19:56 <Vorpal> then you basically have a perfect "heuristic"
18:20:12 <itidus21> well.. this is headache material for me..
18:20:16 <Vorpal> and can just search down the tree of moves to figure out a variant where you wins
18:20:22 <kallisti> Vorpal: I don't know I have a feeling that chess has too many divergent possibilities for a set of rules in response to the opponent's moves that results in a guaranteed victory.
18:20:59 <Vorpal> kallisti, hm?
18:21:04 <kallisti> ....nevermind. :P
18:21:23 <itidus21> Vorpal: ok suppose that 1 player would tell his next move.. and the other one would not do so
18:21:36 <itidus21> now he will only tell his next move :D
18:21:42 <Vorpal> kallisti, I wrote a rather good AI for othello once for an university assignment. It easily beat all humans I tried it on
18:21:59 <itidus21> i mean player A will say "if i do this what will you do?" and player B will say, i will do such and such
18:21:59 <Vorpal> kallisti, and that just looked ahead 7 moves in searching for good positions
18:22:11 <itidus21> and then player B does such and such
18:22:12 <Vorpal> kallisti, used alpha-beta pruning
18:22:23 <itidus21> and then it is player A's turn again.. and cycle repeats
18:22:33 <itidus21> can player B beat player A? :D
18:22:44 <itidus21> curious idea, eh
18:23:19 <itidus21> but.......
18:23:24 <Vorpal> itidus21, that is just doing that algorithm to the depth 1. I assumed you mean that once player B replied what he would do then A would ask "and what if I then did this" and B would answer and so on
18:23:26 <itidus21> his "what will you do?" only counts for 1 turn
18:23:30 <Vorpal> with no limit of depth
18:23:40 <Vorpal> then B can't beat A unless B can pull off perfect play
18:23:42 <itidus21> yeah.. i wasnt sure at first...
18:23:56 <Vorpal> (which might be possible)
18:23:58 <itidus21> but i decided the latter question is more interesting
18:24:05 <kallisti> Vorpal: also regarding magic I was going to make effective use of magic much more challenging than in other games.
18:24:10 <kallisti> I think this is where the magicka influence stems from.
18:24:20 <kallisti> but instead of in an action-adventure game it's an RPG-like RTS.
18:24:35 <Vorpal> itidus21, and sure B can beat A. You need a greater depth in searching for solutions. Even human chess players look ahead a few turns
18:24:41 <Vorpal> (well, good ones at least)
18:24:55 <Vorpal> kallisti, omg.... chess with magicka style magic!
18:24:59 <Vorpal> kallisti, epic win
18:25:12 <itidus21> Vorpal: another curious question is.. whether such a system would negatively affect player A's chances of winning
18:25:40 <Vorpal> kallisti, very good when you don't have much time. Someone will die very soon
18:25:45 <itidus21> through the distraction of knowing his moves
18:25:51 <Vorpal> kallisti, I predict game length will be a few minutes at most
18:25:57 -!- iamcal has quit (Remote host closed the connection).
18:26:16 <Vorpal> kallisti, just imagine crossing opposite beams on top of the opposing king.
18:26:19 <Vorpal> :D
18:26:31 <kallisti> most magical abilities would take the form of a) very slow casts with powerful effects and high cost b) very slow casts with moderate effects and moderate costs c) fast weak effects with moderate cost d) fast moderate effects with high cost e) fast powerful effects with incredibly high cost leaving you completely vulnerable
18:26:48 <kallisti> Vorpal: I have no idea how such a game would work
18:27:00 <Vorpal> kallisti, neither do I, but it sounds awesome
18:27:15 <Vorpal> itidus21, doubtful. I'm not really good at psychology.
18:27:19 <Vorpal> so who knows
18:27:34 <itidus21> so, if player A is a grand master, and player A and B are both using the most powerful computing resources available, and reasonably unbounded turn times.. and player B is giving player A his next turn
18:27:46 <itidus21> i would wonder what sort of game would come out of it
18:27:56 <itidus21> maybe both should be grandmasters im not sure :-s
18:28:08 <kallisti> so then the key ideas of effective magic use involve a) picking the best spell for the best situation b) ensuring you have enough time to cast it because taking damage quickly interrupts you c) ensuring you have enough magical resources in the long-term
18:28:25 <kallisti> the powerful, fast, costly spells would be a last-ditch effort when you fuck up.
18:28:35 -!- PiRSquared17 has joined.
18:28:45 <Vorpal> kallisti, heh
18:28:49 <itidus21> i am curious of what length of time would be useful for a computer in chess...
18:29:06 <Vorpal> kallisti, so completely unlike the magic of magicka then
18:29:07 <itidus21> and is there a cutoff period where a computer is no longer able to efficiently use time to play chess
18:29:36 <itidus21> like if you give a computer a year to make a move
18:29:37 <kallisti> Vorpal: I was considering various complex magic models that would be magicka-esque, but yes... not directly like it at all.
18:29:45 <itidus21> will it just sit there twiddling its thumbs
18:30:08 <Vorpal> kallisti, sounds fairly like magic in trading card games from what I seen of them (I watched an LP, never played them myself)
18:30:24 <kallisti> itidus21: well assuming it's using a decision tree it will eventually run out of possibilities or hit its cutoff point.
18:30:24 <Vorpal> well, to some degree
18:30:27 <Vorpal> not so much the cost thing
18:30:32 <Vorpal> that is just adding mana though
18:30:36 <kallisti> Vorpal: I know nothing about that game.
18:30:47 <Vorpal> kallisti, trading card games is a genre
18:30:51 <Vorpal> kallisti, not a specific game
18:30:55 <kallisti> I was considering breaking away from the traditional mana concept and having different kinds of resources
18:30:57 <Vorpal> kallisti, like magic the gathering and such
18:31:12 <kallisti> Vorpal: that's what I assumed you were talking about.
18:31:15 <Vorpal> not a huge fan of them myself
18:31:16 <itidus21> i wonder then, if there is a specific length of time where current chess computing of a move is useless after it
18:31:39 <Vorpal> especially the business model of the companies making them pisses me off
18:31:49 <kallisti> it also resembles magic in WoW based on the abstract concept I provided with cast time vs. power output vs. cost. but I want the decision to be much more important than it is in WoW
18:32:11 <Vorpal> kallisti, iirc WoW copied from some other earlier MMO
18:32:13 <kallisti> good timing should be greatly rewarded, and poor execution should be punished. but you should also have a number of failsafes you can rely on when you fuck up.
18:32:17 <Vorpal> never played WoW myself
18:32:17 <kallisti> Vorpal: everquest
18:32:20 -!- Jafet has quit (Ping timeout: 268 seconds).
18:32:20 <Vorpal> right
18:32:48 <itidus21> in other words, i wonder what is currently the longest useful chess computation
18:33:02 <kallisti> I've always been interested in magic that involves elements in your environment.
18:33:03 <Vorpal> kallisti, I watched some videos of SWTOR, and my god does the combat look horrible. From what I heard the WoW combat works pretty much the same way, but less polished
18:33:04 <itidus21> is it merely a question of searching an existing data set?
18:33:23 <kallisti> Vorpal: I didn't play WoW because it looks good.
18:33:29 <Vorpal> kallisti, hotkey combat just looks so utterly boring. Mindless buttonmashing.
18:33:33 <kallisti> I'm more interested in mechanics. WoW has pretty polished mechanics.
18:34:10 <kallisti> but yes it gets dull.
18:34:13 <Vorpal> kallisti, and from what I heard the SWTOR mechanics are indeed pretty similar. Took some ideas from other MMOs as well
18:34:53 <itidus21> mmo's.. the worst thing to ever happen to the internet :-"
18:34:56 <kallisti> WoW has had a lot of time to take form.
18:35:00 <Vorpal> kallisti, anyway at least SWTOR seems to have a good story, which I heard was pretty bad in WoW
18:35:05 <itidus21> i havent played any i admit
18:35:08 <kallisti> yes there is no story basically.
18:35:10 <kallisti> no one cares about the story.
18:35:19 <Vorpal> itidus21, I think MMOs could be good, just not hotkey ones
18:35:38 <kallisti> Vorpal: planetside had a lot of potential
18:35:40 <itidus21> the last 12 years of gaming is "could be good but isnt"
18:35:41 <kallisti> I think they're making a sequel?
18:36:01 <kallisti> itidus21: dunno I think gaming has developed pretty well in a very short time. Sure it's not perfect.
18:36:10 <Vorpal> kallisti, no idea, I don't really keep track of MMOs.
18:36:20 <kallisti> Vorpal: Planetside is/was an MMO FPS
18:36:33 <Vorpal> itidus21, problem is that there are scalability issues with more interesting form of combats
18:36:37 <itidus21> tidus must remind you that gaming is not a synonym for 3d rendering
18:36:39 <Vorpal> itidus21, like, lag issues
18:36:46 <Vorpal> itidus21, hotkey mmo is a way to work around those
18:36:46 <kallisti> I say "is" because it still exists and I say "was" because its userbase is mostly dead.
18:36:52 <Vorpal> though things are moving away from hotkey
18:36:57 <Vorpal> better connections and so on
18:37:08 <itidus21> what is the main causes of lag?
18:37:17 <Vorpal> itidus21, latency
18:37:25 <Vorpal> there are of course computing issues as well
18:37:32 <Vorpal> but latency is the real problem here
18:37:33 <itidus21> what are the main causes of latency?
18:37:39 <kallisti> Vorpal: but it was basically a neverending game of base-capturing spread out across multiple planets. you could get dropped into warzones pretty quickly and there were a lot of cool multi-person vehicles.
18:37:47 <kallisti> there were 3 factions
18:38:00 <itidus21> i know these questions are getting repetitive from me
18:38:17 <itidus21> leading up to, what can be done by gamers about latency
18:38:19 <Vorpal> itidus21, I'm trying to remember
18:38:22 <Vorpal> I read this at university
18:38:33 <Vorpal> there is of course propagation delay for the signal
18:38:36 <kallisti> there's a few algorithms
18:38:37 <Vorpal> then there is routing time
18:38:41 <Vorpal> and a few more factors
18:38:47 <Vorpal> there was some nifty equation for it
18:38:54 <itidus21> is it due to the dimorphism between download speeds and upload speeds?
18:38:54 <Vorpal> completely forgot it
18:38:57 <kallisti> one algorithm is to basically predict what will happen based on previous input
18:39:00 <Vorpal> itidus21, no
18:39:19 <Vorpal> kallisti, for an MMO the issue is network latency
18:39:22 <kallisti> http://mine-control.com/zack/timesync/timesync.html
18:39:26 <kallisti> Vorpal: yes this is what I'm talking about
18:39:30 <kallisti> combating latency
18:39:45 <Vorpal> kallisti, well you can't. There is always at least the propagation delay
18:39:53 <kallisti> ....yes
18:39:54 <Vorpal> unless you have a wormhole, nothing you can do
18:39:55 -!- Jafet has joined.
18:40:00 <kallisti> I'm not suggesting you can apply an algorithm that eliminates latency
18:40:05 <kallisti> that is obviously ridiculous.
18:40:29 <itidus21> well.. is latency not the same thing as connection speed?
18:40:41 <Vorpal> itidus21, connection speed is ill-defined
18:40:58 <Vorpal> kallisti, anyway if one guy jumps sideways while another guy shoot him, they see different scenarios. Who is correct?
18:41:02 <itidus21> that is to say, people used to play games on 56k modems :P
18:41:04 <kallisti> itidus21: latency is basically the time between send and receive
18:41:11 <Vorpal> kallisti, either way one guy is going to be pissed off
18:41:38 <itidus21> and now even though you can download gigabytes from powerful servers at > 2mb/s
18:41:45 <itidus21> latency is still a problem
18:42:21 <kallisti> Vorpal: dead reckoning combats this slightly by using previous inputs to predict what is about to happen, this causes the discrepancy to be a little less extreme.
18:42:34 <kallisti> if the algorithm is good at prediction that is
18:42:47 <Vorpal> itidus21, there is latency and there is bandwidth. Latency is the time it takes for any data to reach the other end. Bandwidth is how much data you can send. Think about a car fast car and a slow truck. The fast car can't carry as much but will reach the destination quicker
18:43:00 <kallisti> for an FPS this is pretty difficult to accomplish.
18:43:09 <Vorpal> kallisti, problem is that you can't easily predict future inputs of a human
18:43:24 <kallisti> you can't predict when someone is going to shoot. you can however predict that they're going to continue holding down automatic fire if they were already doing so.
18:43:43 <Vorpal> kallisti, not having ranged weapons would help, though not completely.
18:43:48 <itidus21> Vorpal: thats pretty difficult to comprehend that latency is independant of bandwidth
18:43:56 <itidus21> its a royal headfuck
18:44:06 <Vorpal> itidus21, not really
18:44:08 <kallisti> itidus21: bandwidth concerns how much data you can receive at any given point
18:44:15 <kallisti> itidus21: latency is how long it takes for data to get to you.
18:44:18 <kallisti> or to be sent from you
18:44:18 -!- Jafet has quit (Ping timeout: 252 seconds).
18:44:51 <kallisti> itidus21: you could be sending gigabytes of data per second but it still takes 5 seconds to be received.
18:44:51 <Vorpal> itidus21, what about this: fill a truck with harddrives with data. You will have a HUGE latency but the bandwidth will be enormous.
18:44:59 <itidus21> but.. why wouldn't the latency be uniform?
18:45:11 <Vorpal> itidus21, well that is easy, internet is best-effort
18:45:18 <Vorpal> this is why we need tcp
18:45:23 <Vorpal> to resend dropped packets and so on
18:45:26 <itidus21> so bandwidth is easier to achieve than latency?
18:45:34 <kallisti> itidus21: conversely, you could be receiving a single byte per second but it's received a nanosecond later.
18:45:35 <Vorpal> not really that is best-effort too
18:45:50 <itidus21> well.. people care more about latency than bandwidth i assume
18:45:59 <Vorpal> itidus21, gamers usually do yes
18:46:02 <itidus21> .. no they don't ;_; who am i kidding
18:46:11 <olsner> then again, a lot of people care more about bandwidth than latency
18:46:13 <itidus21> and the internet is geared up for pro-bandwidth
18:46:21 <kallisti> itidus21: of course there's a point where the bandwidth becomes so small that the net effect is a perceived latency, as it takes long to receive the entire packet. this is most obviously when your bandwidth completely drops to zero (aka you disconnect)
18:46:40 <Vorpal> itidus21, anyway there are other users on the internet, that causes the available resources to vary. Your packet might end up waiting in the input queue of a router a bit longer one time than for the next packet for example
18:46:52 <Vorpal> that would cause latency
18:47:12 <itidus21> so.. the question here then is... could an internet be designed pro latency?
18:47:16 <itidus21> at the cost of bandwidth?
18:47:28 <Vorpal> not sure that tradeoff exists
18:47:47 <Vorpal> sure there might be minor tweaks you could make, but nothing major I suspect
18:47:55 <kallisti> they're certainly connected to each other but they're not directly or inversely proportional.
18:48:12 <kallisti> bandwidth can be a bottleneck to latency.
18:48:27 <kallisti> and vice versa, I'd imagine.
18:48:53 <Vorpal> itidus21, anyway there are lots of things that need bandwidth: downloading updates for your OS. Doesn't matter if it takes 1 or 2 seconds for the first bit of those to arrive from when you request them
18:49:19 <Vorpal> sending emails isn't very sensitive either way.
18:49:55 <itidus21> i dont understand why sending a large fille is different from sending lots of state updates
18:50:03 <kallisti> itidus21: intuitively you could think of bandwidth as the size of the pipe, and the inverse of latency is how fast the data is being pumping on average.
18:50:14 <itidus21> is it like.. saying.. you can have large updates but you can't have a lot of them?
18:50:20 <Vorpal> kallisti, intertubes :D
18:50:23 <kallisti> yep
18:50:53 <kallisti> itidus21: if you have a very small pipe and you're sending a lot of data, it's going to take longer for that data to arrive.
18:51:01 -!- AnotherTest has joined.
18:51:03 -!- AnotherTest has left.
18:51:07 <Vorpal> itidus21, not at all. The thing with a large file is that there is still latency. It is just that the time it takes to transfer the whole file is much larger than the latency
18:51:26 <Vorpal> so you don't really care
18:51:44 <Vorpal> (well there are some complications here, mostly due to TCP ACKs and so on)
18:52:15 <Vorpal> (lets not dwell on those, I'm just pointing out I know about them if anyone (real elliott) is going to talk about them when log reading)
18:52:19 <kallisti> basically the latency still slows the transfer but it's not very much. it's a product where the latency is a very very small quantity compared to the total file size.
18:52:25 <Vorpal> (read*)
18:52:45 <itidus21> ok well.. what if i pretended to send a file, but i was secretly sending a stream of my actions in an mmo >:-)
18:52:55 <kallisti> then...
18:52:58 <kallisti> ....?
18:52:59 <kallisti> okay.
18:53:02 <Vorpal> kallisti, interestingly ssh file copy has/had problems on high-bw, high-latency links
18:53:12 <Vorpal> kallisti, there was/is even a patch set to fix that
18:53:20 <itidus21> is it that the sending will be broken up sporadically
18:53:40 <kallisti> yes that's the latency
18:53:44 <kallisti> for any transfer of data.
18:53:45 <kallisti> that exists.
18:53:47 <Vorpal> kallisti, basically it sends rather small packets thus the latency ends up being an issue due to the time it takes for TCP ACK
18:53:59 <kallisti> Vorpal: aha
18:54:15 <Vorpal> kallisti, here: http://www.psc.edu/networking/projects/hpn-ssh/
18:54:20 <kallisti> yes the pipe analogy kind of breaks down when you actually start to talk about discrete packets.
18:54:37 <kallisti> rather than a continuous "fluid"
18:54:43 <Vorpal> kallisti, it kind of works for UDP still
18:54:47 <Vorpal> not just for TCP
18:55:03 <Vorpal> kallisti, and I have no clue if it works for SCTP and so on
18:55:13 <Vorpal> my guess would be "sometimes"
18:55:50 <Vorpal> (SCTP is a newer protocol that fixes several shortcommings in TCP and UDP, however it is not widely adopted yet, and might never be. Kind of cool though)
18:56:06 <itidus21> so, if you were to try calculus on a connection speed.. the gamers ideal is that at each sampling of the speed it would be above some minimum threshold
18:56:21 <Vorpal> kallisti, anyway kind of curious it works better for UDP than TCP... since TCP is closer to being a stream actually
18:56:25 <itidus21> but the movie downloader's ideal is that the sum of the samples is the highest
18:56:55 <Vorpal> itidus21, what do you mean with connection speed?
18:57:01 <Vorpal> itidus21, latency or bandwidth
18:57:07 <kallisti> itidus21: well essentially latency becomes more of an issue when you're sending small packets. such as game state commands.
18:57:09 <Vorpal> there is no such thing as speed
18:57:17 <itidus21> well forget the word calculus
18:57:35 <itidus21> suppose i chose some sampling rate of 100 times per second to see how much new data has arrived sinced last sample
18:58:00 <itidus21> maybe 100 times is asking a lot
18:58:04 <itidus21> but for fun
18:58:15 <Vorpal> that measures bandwidth
18:58:19 <Vorpal> I think
18:58:34 <Vorpal> it doesn't make sense on anything else than a download anyway
18:58:42 <kallisti> itidus21: in a game latency is more important because time synchronization is important. it's not a one-way dataflow. the game state of clients is depending on small bits of data that it hasn't received yet.
18:58:43 <Vorpal> (or upload of course)
18:58:55 <kallisti> itidus21: consequently, the player is sending packets in response to an incorrect game state
18:59:03 <kallisti> itidus21: so this fine-grained time synchronization issues become more important
18:59:19 <itidus21> latency would seem to cause samples where no new data has arrived
18:59:41 <Vorpal> eh?
18:59:56 <itidus21> ohhh ... no i think i am getting it slowly
19:00:07 <kallisti> itidus21: also it's not a large amount of data per second. so bandwidth isn't very important beyond a bare minimum.
19:00:46 <itidus21> lets say.. all we want to send is 1 byte every 60th of a second
19:01:01 <itidus21> so bandwidth is not our problem in this scenario
19:01:05 <kallisti> conversely downloading is a one-way stream with large amounts of data. the latency of each packet isn't very relevant or noticeable (unless your latency is extreme), but the bandwidth is, because it creates a cap on how much data you can receive per second.
19:01:25 <itidus21> oops uhh ill extend it
19:01:35 <itidus21> lets say.. all we want to send is 1 byte every 60th of a second, and recieve 1 byte every 60th of a second
19:01:39 <itidus21> i know this is asking a lot
19:01:47 <itidus21> but just for the sake of an example
19:02:10 <Vorpal> itidus21, no what you want to send is 1 byte in response to an event at an unknown time to notify the other end that it happened
19:02:23 <Vorpal> you want that to arrive as fast as possible
19:03:07 <itidus21> i guess what i am wondering here is if there is a hardware issue in latency or just dumb programmers
19:03:31 -!- DCliche has joined.
19:04:00 <Vorpal> itidus21, generally it is out of the hands of the game developer in question. You can do various tricks to try to hide it. Like assume if someone was moving in the last update they will continue moving in the same direction
19:04:02 <itidus21> i always seem to say "our topic was just X, but now i realize i wanted to think about Y"
19:04:07 <itidus21> i do this ad nauseum..
19:04:23 <Vorpal> itidus21, there are some physical limitations, like the speed of light, and there are various issues in the hardware of the internet, routers and so on
19:04:24 <itidus21> because its just how i fucking think .. shameful as it is
19:04:50 <kallisti> Vorpal: I'd like to think more sophisticated predictions are possible if you apply some hueristics on a large input buffer.
19:05:05 <Vorpal> kallisti, certainly, that was just a basic example
19:05:08 <kallisti> but I don't know what those heuristics are.
19:05:17 <Vorpal> kallisti, neither do I.
19:05:35 <Vorpal> kallisti, an obvious one is "if jumping they will fall down rather than continue upwards" :P
19:05:51 <kallisti> fizzie: hi you know things about statistics how can you make predictions about future inputs from previous inputs.
19:06:23 <itidus21> i have heard of that side of things
19:06:23 <Vorpal> kallisti, for the purpose here it is enough to point out various methods exist
19:06:30 <kallisti> Vorpal: ah well the prediction only needs to be on the input stream not on each physics tick.
19:06:32 <Vorpal> itidus21, anyway nothing wrong with going off on tangets
19:06:38 <Vorpal> itidus21, I do it all the time
19:06:41 <itidus21> but i am wondering if there is problems in the actual internet which cause latency
19:06:50 <itidus21> which gamers could pay people to fix
19:07:09 <Vorpal> doubtful. There isn't really a good solution anyway
19:07:09 -!- Klisz has quit (Ping timeout: 260 seconds).
19:07:12 <kallisti> yes the problem is that other people are using it
19:07:20 <kallisti> if they paid a bunch of people to not use the internet for a while
19:07:22 <kallisti> they could fix it.
19:07:46 <itidus21> the internet is effectively being spammed with junk traffic
19:07:56 <itidus21> it is.. lets face it
19:07:57 <kallisti> yes such as this IRC channel.
19:08:19 <kallisti> (ha ha ha)
19:08:32 <Vorpal> the internet was a success because of the design of it. It is packet based rather than connection-oriented. You just send a packet and hope for the best. Then there is TCP on top which will resend packets if it didn't get an acknowledgement (of course acknowledgement might get lost too)
19:09:09 <itidus21> the idea of using screenshot sending to provide games seems to me a vast waste of the internet
19:09:20 <Vorpal> you mean OnLive?
19:09:26 <kallisti> wat?
19:09:27 <itidus21> its very tragic waste of the net
19:09:31 <itidus21> yeah OnLive
19:09:57 <itidus21> but
19:10:10 <itidus21> i guess latency matters less there
19:10:22 <Vorpal> kallisti, the game runs on a server, it sends a compressed stream to the client. An interesting idea. And from what I heard it works surprisingly well. Well enough for games like racing games, not well enough yet for games like high-precision FPS
19:10:35 <Vorpal> itidus21, latency matters a lot there
19:10:51 <kallisti> oh...
19:10:54 <Vorpal> itidus21, more so than usual
19:11:07 <Vorpal> itidus21, when you press a button there is a delay until the server gets it and a delay until you see the result
19:11:09 -!- Jafet has joined.
19:11:14 <Vorpal> itidus21, you definitely want to keep those delays down
19:11:38 <itidus21> Vorpal: well the positive thing is that the renderer doesn't have to make any predictions
19:11:44 <itidus21> since the game state is localized
19:11:58 <kallisti> a drawback is that the service /can't/ make predictions..
19:12:01 <Vorpal> itidus21, OnLive both needs low latency and high bandwidth (though they use some custom compression, so they get away with like 2 Mbps iirc)
19:12:01 <kallisti> on the game state
19:12:12 <Vorpal> (or was it MBps? I don't remember)
19:12:21 <Vorpal> kallisti, indeed
19:12:35 <kallisti> for a racing game this would give vast improvements
19:12:42 <kallisti> a racing game would be pretty easy to apply predictions to
19:12:51 <kallisti> for a few milliseconds at a time.
19:12:56 <Vorpal> maybe
19:12:57 <pikhq> Vorpal: 2 Mbps isn't that unreasonable...
19:13:05 <Vorpal> pikhq, fair enough
19:13:08 <pikhq> You can pull that off with x264 and some tweaking.
19:13:13 <itidus21> kallisti: so the player might feel their controls lag, and their video lags, but at least the screenshots will always reflect the true gamestate :D
19:13:14 <Vorpal> hm okay
19:13:27 <itidus21> even if the gamestate is "late"
19:13:50 <pikhq> You'll want higher than that to get higher resolution, but still, streaming video over the Internet is quite doable.
19:13:57 <Vorpal> kallisti, anyway, latency is usually more than a few ms. More 20 ms to my ISP even
19:14:05 <Vorpal> More like*
19:14:32 <kallisti> Vorpal: that's an acceptable range for a racing game.
19:14:39 <kallisti> I'd say up to.... half a second would be okay in many cases.
19:14:43 <Vorpal> kallisti, that is to my ISP. Not to, say, google
19:15:09 <Vorpal> traceroute is fucking up for me for some reason atm... hm
19:15:17 -!- iamcal has joined.
19:15:18 <pikhq> The issue they'll have, of course, is bufferbloat.
19:15:21 <kallisti> traceroute is very unreliable in my experience.
19:15:36 <Vorpal> kallisti, it gets 5 jumps then "no reply"
19:15:39 <Vorpal> very strange
19:15:47 <Vorpal> it usually works to google
19:15:55 <pikhq> For stupid reasons a lot of hosts like to block ICMP.
19:15:56 <itidus21> anyway, i think OnLive is exploitative use of the internet
19:16:13 <Vorpal> pikhq, yes, lattency jitter is going to be a huge issue for OnLive
19:16:25 <itidus21> the people who made the internet would vomit that it is used this way
19:16:28 <Vorpal> itidus21, not really. It is best effort. It is there for everyone to share.
19:16:45 <pikhq> itidus21: I disagree. However, it suffers from the major implementation flaws in the infrastructure.
19:16:53 <pikhq> Such as "my downlink isn't 6 Gbps"
19:17:21 <pikhq> And "There's seconds of buffering, which breaks TCP flow control and is going to give us congestion collapse one of these days"
19:17:38 <Vorpal> pikhq, that is for the uncompressed case. You are never going to get that. You would need like thousands of TBps at least for the backbone then
19:18:01 <itidus21> i mean, surely all these constant 2mb/s connections onlive demands will overall cause more latency on the internet overall
19:18:12 <Vorpal> pikhq, hm, OnLive breaks TCP flow control?
19:18:17 <itidus21> oops @ repeating overall
19:18:18 <Vorpal> pikhq, I would have assumed they used UDP
19:18:28 <pikhq> Vorpal: No, bufferbloat does.
19:18:38 <pikhq> OnLive merely suffers from it like the rest of us.
19:18:57 <Vorpal> pikhq, bufferbloat where? In the routers?
19:19:07 <pikhq> Vorpal: In basically every device.
19:19:08 <kallisti> itidus21: I'd bet that if you look at total network traffic on the internet that portion would be very small.
19:19:13 <Vorpal> pikhq, hm true
19:19:29 <Vorpal> pikhq, you need some buffers though, or the packet drops would get excessive
19:19:33 <kallisti> itidus21: you're basically hating on an internet service because it's using what the internet is for.
19:19:46 <pikhq> itidus21: If TCP flow control were functioning correctly, a flood of constant 2Mbps connections wouldn't increase latency notably.
19:19:56 <pikhq> Vorpal: You want packet drops.
19:20:10 <Vorpal> pikhq, to some degree yes. But not so much it disconnects
19:20:10 <pikhq> Vorpal: TCP flow control triggers on packet drops.
19:20:15 <Vorpal> and indeed
19:20:21 <itidus21> i hate screen tearing and i hate latency...
19:21:05 <pikhq> Vorpal: But, yes, you want a *small* amount of buffering.
19:21:08 <itidus21> du hast
19:21:13 <kallisti> itidus21: forming negative opinions about things that also requires network resources that aren't the thing you're doing is not the way to go about that hatred.
19:21:16 <Vorpal> pikhq, a few packets per input queue or such yes
19:21:30 <kallisti> itidus21: you must really hate Google.
19:21:38 <Vorpal> not sure how much exactly, would need careful measurement
19:21:44 <pikhq> The appropriate buffer size, IIRC, is a function of the bandwidth-latency product.
19:21:53 <Vorpal> ah yes that sounds familiar
19:22:04 <Vorpal> pikhq, are you saying that they are usually oversized?
19:22:21 <pikhq> Vorpal: They are typically set as a few megabytes anymore.
19:22:36 <Vorpal> pikhq, and what should they be?
19:22:36 <itidus21> i don't like knowing that after overworked teams spend millions of $ to create something, that the audience won't truely be able to enjoy it due to technicalities
19:22:48 <Vorpal> pikhq, that might be reasonable on the backbone for all I know
19:22:51 <pikhq> Vorpal: On common links? ~10 packets.
19:23:00 <Vorpal> pikhq, what about the backbone then?
19:23:09 <Vorpal> or was that what you meant with common links?
19:23:11 <kallisti> itidus21: uh the teams don't spend that money themselves. they /receive/ that money.
19:23:16 <pikhq> Vorpal: I meant end-user links there.
19:23:22 <kallisti> itidus21: part of it
19:23:26 <Vorpal> pikhq, okay so what about the backbone links then?
19:23:28 <pikhq> Vorpal: On a backbone? Eh, maybe 100 packets?
19:23:32 <Vorpal> hm okay
19:23:42 <itidus21> all the work comes second place to lag issues
19:23:55 <kallisti> >_>
19:23:57 <kallisti> okay.
19:24:13 <Vorpal> itidus21, anyway there is always going to be lag you can't avoid due to the speed of light
19:24:18 <itidus21> lag is swept under the carpet
19:24:22 <Vorpal> s/lag/latency/
19:24:28 <pikhq> Vorpal: Anyways. What we get now is when any given link is used to capacity, latency skyrockets up to about the size of the buffer in terms of time.
19:24:41 <Vorpal> pikhq, ouch
19:24:46 <Vorpal> pikhq, so why do people do it wrong?
19:25:03 <pikhq> Because nobody knows better.
19:25:11 <Vorpal> pikhq, also what about UDP?
19:25:15 <kallisti> who are these people? what code is this? where is this implemented?
19:25:47 <itidus21> pikhq seems to have the cynicism set in reality i was looking for
19:25:48 <pikhq> kallisti: Some of the buffering is in networking device firmware, some of it in kernels.
19:26:08 <kallisti> ah
19:26:52 <itidus21> so buffering is the main (avoidable) cause of latency?
19:27:03 <kallisti> eh...
19:27:18 <itidus21> or filled buffers?
19:27:32 <pikhq> itidus21: Basically.
19:27:33 <kallisti> latency is mostly caused by scarcity of resources, I would think.
19:27:56 <Vorpal> pikhq, anyway this wouldn't help at all with UDP
19:27:58 <Vorpal> hm
19:28:07 <itidus21> pikhq: so to try and get an answer to my core enquiry
19:28:10 <pikhq> Vorpal: Most things streamed over UDP have manual flow control.
19:28:30 <itidus21> pikhq: what would a pro-minimal-latency internet do differently to the current internet?
19:28:30 <pikhq> kallisti: Nope. TCP attempts to share bandwidth equally.
19:28:34 <Vorpal> pikhq, which may be anything
19:29:01 <pikhq> kallisti: The only thing scarcity of resources should do to TCP streams is make them have less bandwidth available.
19:29:08 <pikhq> (but at roughly the same latency)
19:29:37 <pikhq> Vorpal: Generally they're designed with the intent of behaving nicely with TCP flow control, though.
19:29:43 <pikhq> (unfortunately, not always)
19:29:50 <Vorpal> heh
19:30:16 <Vorpal> brb
19:30:20 <itidus21> hmm
19:30:37 <pikhq> itidus21: Mostly, just have good buffer sizes in place (either via a nice buffer adjustment algorithm, or just setting them to something small that will be suboptimal in general but a hell of a lot better than what we have now)
19:31:36 <pikhq> itidus21: Beyond that, the Internet is actually fairly reasonable about latency. Something like half lightspeed latency...
19:32:27 <itidus21> so if there was only 2 people using the internet at a time it would be damned fast eh?
19:33:03 <itidus21> humm
19:33:10 <pikhq> Or if there weren't seconds long buffers in between people.
19:34:14 <Vorpal> pikhq, what are the usual buffer sizes in the backbone?
19:34:26 <itidus21> is there any way that programmers can fight these buffers without occupying IETF and Cisco?
19:34:39 <pikhq> Vorpal: I honestly don't know; it's a bit hard to measure without cracking open the devices.
19:34:51 <pikhq> Vorpal: You can generally measure buffersize by congesting a link and measuring latency.
19:35:01 <Vorpal> pikhq, kind of hard to do that with the backbone
19:35:12 <pikhq> itidus21: Start with end-user devices. They congest first, and thus are the first ones to show symptoms.
19:36:05 <Vorpal> pikhq, hm does TCP resend the inidial SYN or is that up to the application?
19:36:19 <Vorpal> initial*
19:36:29 <pikhq> itidus21: Also, IETF and Cisco shouldn't be that hard to get to change; just hand them good AQM and voila.
19:36:39 <Vorpal> pikhq, AQM?
19:36:59 <itidus21> google says active queue management
19:37:07 <Vorpal> ah
19:37:20 <itidus21> In Internet routers, active queue management (AQM) is a technique that consists in dropping or ECN-marking packets before a router's queue is full.
19:37:27 <Vorpal> pikhq, what about ECN?
19:37:30 <Vorpal> indeed
19:37:44 <Vorpal> ECN seems like a workaround for too large buffers to me
19:38:12 <pikhq> ECN is actually *slightly* better than the drop-packet flow control.
19:38:24 <Vorpal> hm okay
19:38:24 <pikhq> It allows you to signal congestion *and* get data through.
19:38:29 <Vorpal> right
19:38:34 <Vorpal> pikhq, so is it used much?
19:38:47 <pikhq> Unfortunately, there's a bunch of intermediate devices that break it.
19:38:53 <Vorpal> oh?
19:39:02 <Vorpal> do those devices clear the bit or something?
19:39:18 <pikhq> Or drop packets with the bit set.
19:39:33 <Vorpal> pikhq, well they need to if their own queue is full
19:39:37 <Vorpal> obviously
19:39:50 <pikhq> Vorpal: Drop packets with the "I can do ECN" bit set.
19:39:58 <Vorpal> pikhq, what? why?
19:40:19 <pikhq> Because some hardware manufacturers have less intelligence than the average monkey.
19:40:28 <Vorpal> it doesn't make any sense
19:41:09 <itidus21> pikhq is basically the truth behind my rant about latency... but i admit i didnt know any of this
19:41:30 <itidus21> but what he is saying is what gamers should rally behind it seems
19:41:45 <pikhq> Anyways: most hosts support ECN but don't have it on by default.
19:41:46 <Vorpal> and others too. Consider VOIP
19:41:55 <Vorpal> you want low latency
19:42:20 <Vorpal> pikhq, really? Is it default to off in windows? Linux?
19:42:33 <itidus21> my priority though, is gaming... i guess not everyone will agree
19:42:39 <pikhq> Vorpal: Default to off in Windows, default to "only if the other end supports it" in Linux.
19:42:44 <Vorpal> pikhq, why
19:42:50 <Vorpal> those are silly defaults
19:42:52 <fizzie> kallisti: Search for "time series prediction", or some-such. There are too many methods. I would say in general mostly they boil down to either: (a) generate a "model" of the "system", learn the "parameters" and "current state" from past history, then run it forward and observe (fsvo of the quoted words); or (b) build a (statistical) model directly on the function "f(some amount of past) = some amount of future", and use (overlapping) pieces of the exis
19:42:53 <fizzie> ting history as (input, output) samples for learning it.
19:42:54 <pikhq> Because of aforementioned broken devices.
19:43:17 <itidus21> just like not everyone hates screen-tearing as much as me
19:43:21 <Vorpal> pikhq, ah
19:43:36 <Vorpal> pikhq, are those backbone devices or end user devices?
19:43:46 <pikhq> Vorpal: Mostly end user devices.
19:43:51 <Vorpal> hm
19:44:12 <pikhq> There's few manufacturers of backbone devices, and they tend to hire more knowledgable people.
19:44:34 <Vorpal> pikhq, so linux only does it if it acts as a server I guess? Or can the server start the enabling of ECN?
19:46:12 <pikhq> Acting as a server, I think.
19:46:17 <Vorpal> hm
19:46:26 <Vorpal> I should enable it and see what happens I guess
19:47:12 <itidus21> now that we all concede there is a solvable problem causing latency, i feel unburdened
19:47:20 <pikhq> The current way of mitigating bufferbloat on end user links is sickening, yet funny.
19:47:21 <Vorpal> ... wow
19:47:28 <Vorpal> pikhq, oh?
19:47:45 <pikhq> What you do is throttle your link to slightly less than max.
19:48:09 <pikhq> Thus ensuring buffers near you can't fill.
19:48:11 <Vorpal> heh
19:48:15 <Vorpal> that is absurd
19:49:12 <pikhq> e.g. if you've got a 4Mbps link, throttle to, oh, 3.8 Mbps.
19:49:41 <itidus21> does throttle here mean transmit data at that rate?
19:49:43 <pikhq> And you will have low latency unless the backbone starts having congestive collapse.
19:49:56 <kallisti> fizzie: that description is so vague that it actually matches what I was thinking would work.
19:50:08 <pikhq> itidus21: Basically.
19:50:12 <itidus21> lol
19:50:32 <itidus21> probably would work in countries with unlimited bandwidth
19:50:41 -!- nooga has quit (Ping timeout: 244 seconds).
19:50:47 <pikhq> itidus21: What you generally do is have your router (preferably one of those open firmwares) drop packets that would shove it above the set bandwidth.
19:51:12 <fizzie> I used to do that "do Linux traffic shaping to slightly less than max bandwidth" thing when I lived in another place, because there all my SSH connections froze completely if I tried to download a file.
19:51:24 <pikhq> This basically prevents you from seeing bufferbloat in your router, your modem, the ISP's modem, or the ISP's router.
19:51:25 <Vorpal> fizzie, heh.
19:51:35 <kallisti> fizzie: basically compile a bunch of frequency information on N past inputs, add weights and postprocessing and filtering as desired, and then go to town on the data.
19:51:53 <pikhq> You'll still see bufferbloat in the ISP's network or the backbone, but this doesn't really happen much.
19:52:02 <pikhq> (end user links fall over *well* before those do)
19:52:08 <kallisti> fizzie: but frequency likely isn't the only interesting "parameter" to look at for this "model" of the "system"
19:52:20 <pikhq> fizzie: Classic bufferbloat.
19:52:30 <itidus21> pikhq: since i didnt understand that, i will aska few questions to clarify
19:53:05 <itidus21> does "pikhq> itidus21: What you generally do is have your router (preferably one of those open firmwares) drop packets that would shove it above the set bandwidth." involve transmitting as much data as possible?
19:53:11 <pikhq> itidus21: No.
19:53:14 <itidus21> hmm
19:53:22 <pikhq> itidus21: It means never going *above* that speed.
19:53:56 <Vorpal> pikhq, why not just use small buffers?
19:54:04 <pikhq> You artifically make that your maximum speed, rather than what your link theoretically could do.
19:54:13 <pikhq> Vorpal: Some of the buffers are out of your control.
19:54:18 <kallisti> fizzie: I'd imagine with a game system it would be reasonable to scale more recent states. this covers the case where, if a player was last seen moving right, he is very likely to continue moving right.
19:54:18 <Vorpal> hm true
19:54:24 <pikhq> Vorpal: You can't realistically change the buffer on your modem.
19:54:38 <Vorpal> pikhq, well my modem is also my router
19:54:44 <pikhq> And you'll need to replace router firmware to change the router buffer.
19:55:34 <kallisti> fizzie: oh hmmm, but if you analyze a large history of past actions, you can possibly predict when they're going to stop spamming the same input, or what they may do next.
19:55:56 <fizzie> kallisti: Well, you know; the (a) method typically tries to have the "model" actually represent the "system" somewhat, like if it has a structure, you'd try to model that; or if it's a physical thing, you'd do some physics; while the (b) method just picks a random "approximate a function based on data" method (say, neural nets, autoregressive models, support vector machines, whatever) and then just apply that to learn f(w_{t-4}, w_{t-3}, w_{t-2}, w_{t-1
19:55:56 <fizzie> }) = w_t, using ((w_1, w_2, w_3, w_4), w_5), (w_2, w_3, w_4, w_5), w_6), ... as the dataset; where w_t is the world at time t.
19:56:11 <pikhq> There's also a decent chance of there being a buffer ISP side.
19:56:27 <kallisti> MARKOV PREDICTION. :P
19:56:33 <kallisti> this is the obvious answer.
19:56:37 <kallisti> markov can be applied to anything.
19:56:54 <fizzie> Well, it *is* a Markov process in that case, since it's a finite amount of history.
19:57:03 <kallisti> excellent.
19:57:13 <Vorpal> Markov is awesome
19:58:02 <kallisti> fizzie: the (a) method sounds more relevant to a game
19:58:12 <kallisti> well hmmm
19:58:13 <kallisti> no
19:58:15 <Vorpal> kallisti, not really
19:58:20 <kallisti> (b) is more relevant to the human inputs
19:58:24 <Vorpal> indeed
19:58:25 <kallisti> (a) is more relevant to the game system.
19:58:27 <itidus21> pikhq: this may sound dumb, but, what is the best way to determine max link speed?
19:59:34 <itidus21> i am considering mentioning this theory to my brother who is always open to ways to improve his gaming
19:59:44 <kallisti> fizzie: I don't even think modeling the game system is a statistical problem... since you know everything about how it works.
19:59:52 <pikhq> itidus21: One of those bandwidth testing sites...
19:59:57 <kallisti> you're mostly concerned with analyzing the human input.
20:00:10 <fizzie> Well, yes. In that case you could try modeling the humans, and then just run the game to see what happens when they do things.
20:00:17 <kallisti> yep
20:00:25 <Vorpal> itidus21, he is not going to be able to do anything about it
20:01:13 <itidus21> pikhq: ah ok.. so what you mean is that there is some fixed limit for a connection, and a connection will try to go faster than it?
20:01:38 <pikhq> itidus21: Yes, because a connection will always try to go faster until packets drop.
20:01:45 <pikhq> And buffers prevent packets from dropping.
20:01:52 <Vorpal> pikhq, and it should (modulo ECN)
20:02:04 <pikhq> Yeah.
20:02:29 <kallisti> fizzie: thanks for the terminology I have so many things to read on Wikipedia now...
20:02:48 <fizzie> In that case it might be slightly difficult to go very deep (a)-style; I mean, I guess you could try to guesstimate some "goals" or something that the humans are doing. But anyway there's of course overlap between (a) and (b); if you use, say, a clustering-related thing to learn the function in (b), it might be that what you're actually doing is learning (a)-meaningful clusters. (Everyone doing clustering is always pretending the clusters they get are s
20:02:48 <fizzie> omehow meaningful.)
20:03:20 <Vorpal> fizzie, they are?
20:03:55 <kallisti> fizzie: uh... modeling human behaviors sounds difficult. :P
20:03:59 <Vorpal> fizzie, I found that it varies a lot
20:04:12 <kallisti> I'd rather just crunch some data and derive conclusions. :P
20:04:14 <fizzie> Vorpal: Well, with sufficient amounts of exaggeration, anyway.
20:04:50 <kallisti> fizzie: but yes analyzing goals is something to keep in mind.
20:04:51 <fizzie> Let's just say that most people would at least like it if their clusters were somehow meaningful.
20:05:02 <fizzie> Anyone doing visualization at least. :p
20:05:12 <kallisti> what do you mean by clusters.
20:05:17 <kallisti> I think I missed something.
20:05:21 <fizzie> Or, okay, anyone doing visualization that's not just doing it for aesthetical reasons.
20:05:29 <Vorpal> fizzie, well yes
20:06:19 <fizzie> kallisti: It was just an example for a statistical model; some of them divide (in a "soft" or "hard" way) all the samples into different clusters, and then use different models (or just sets of parameters) for each individual cluster.
20:07:55 <kallisti> fizzie: I'm not sure if I explained what the purpose is. The idea is to predict what delayed inputs will be to minimize the bad visual feedback of latency.
20:08:11 <fizzie> I'm pretty sure I didn't read that far back, just the single line that was red.
20:10:29 <kallisti> the ideal situation would be that if an input was sent at X time, it could processed as though it occured at X time on the receiving end, meanwhile the game makes predictions of what that input would have been.
20:10:32 <itidus21> pikhq: so is there any common name for this link throttling, router setting which would have it drop packets that would shove it beyond set limit?
20:11:11 <kallisti> I don't think perfect time sync will be easy or necessarily possible, but you can at least reduce the latency interval somewhat and still get reasonable results. Attempt to have perfect time sync would probably result in glitchy visual feedback.
20:11:23 <kallisti> *attempting
20:11:25 <fizzie> My based-on-no-information-at-all guess about most network games (which I've understood do actually do that stuff) is that they use very simple methods for it.
20:11:40 <kallisti> fizzie: yes I've been researching what is commonly used.
20:12:04 <kallisti> fizzie: one approach is called "dead reckoning" but I haven't really found an exact algorithm. it appears to vary widely.
20:12:27 <pikhq> itidus21: Probably something like "traffic shaping".
20:12:32 <itidus21> ahh
20:12:43 <pikhq> itidus21: You'll probably want to do the same with uplink, BTW.
20:13:10 <itidus21> my brother is in charge of all that stuff.. but i think he would be interested to hear this idea
20:13:52 <kallisti> fizzie: I think if you try to do perfect time sync you'll get unpleasant stutters in game continuity, but if you allow some latency you might be able to strike a balance between time synchronization and visual continuity.
20:14:56 <kallisti> (vague statement of what the solution should look like without actually going into any details of how to implement it)
20:15:44 <itidus21> i look forward to telling my brother about this..
20:15:50 <kallisti> ((parenthetical aside noting the purpose of the previous statement))
20:15:57 <itidus21> he would go to any lengths to get better latency
20:16:39 <kallisti> itidus21: what idea? I'm sure someone has attempted some kind of sophisticated time sync algorithm before...
20:16:55 <itidus21> no i mean pikhq's link throttling idea
20:18:09 <kallisti> also you don't "get better latency" you're just making it slightly more fair. so that the time you activated an input actually matters, not when it was received. At the same time you're also trying to maintain visual continuity so that the game is visually consistent.
20:18:13 <kallisti> oh
20:18:15 <kallisti> ....nevermind
20:18:18 <kallisti> :)
20:18:46 <fizzie> I believe this new pipe I have is slightly worse in terms of latency than the old one. It's something like 12-15 ms to Finnish places; the old one used to do sub-10, unless I misremember. (DSL sure is one "delay-full subscriber line", anyway.)
20:19:06 <itidus21> i will go into your topic some time when this hardware one has left my brain
20:20:33 <itidus21> im approaching that morning hours when i should be just waking up
20:21:10 <fizzie> Even the modem statistics say there's a 6+1 (down+up) millisecond inherent delay on that less-than-a-hundred-metres link alone. Phone cabling from (in this case) the 1980s is such a silly way to send bits.
20:21:55 <itidus21> kallisti: you don't understand.. my brother called out the isp technicians like a dozen times to get their help before changing isps.. he lives for fast connections
20:22:08 <itidus21> not like ultra fast
20:22:15 <kallisti> sounds like a...
20:22:16 <fizzie> Does he, by any chance, play any network games?
20:22:17 <kallisti> pointless existence.
20:22:29 <kallisti> I bet he does.
20:22:39 <fizzie> It's just that most "ping hunters" I know are in "the business" mostly for that reason.
20:22:45 <itidus21> WoW, LoL, HL2, SC2, BF2 uhmm
20:22:50 <kallisti> so... yes.
20:22:51 <itidus21> i could go on
20:22:56 <itidus21> =))
20:23:08 <itidus21> oops wait why did i list hl2
20:23:20 <itidus21> i meant LFD2
20:23:32 * kallisti would be interested to see statistics on how closely latency and game success are correlated on various online games.
20:24:08 <kallisti> I bet in Battlefield 3 it would be more noticeable than in, say, SC2.
20:24:13 <itidus21> sc1, quake, quakewars, eve
20:24:24 <fizzie> "An experimental estimation of latency sensitivity in multiplayer Quake 3 -- [PDF] from psu.eduG Armitage - Networks, 2003. ICON2003. The 11th IEEE …, 2003 - ieeexplore.ieee.org"
20:24:37 <kallisti> where latency and fast reflexes are still important but long-term effects of strategy and economy is much more important.
20:24:42 <kallisti> *are
20:26:31 <itidus21> so he is responsible for my connection.. so im happy with it
20:27:38 <fizzie> "How sensitive are online gamers to network quality?", Kuan-Ta Chen, Polly Huang, Chin-Laung Lei, Communications of the ACM, Vol. 49, No. 11, pages 34--38, lists 8 studies that have "sought to evaluate the effect of network quality on online gamers".
20:28:34 <fizzie> Both subjective ("oh god my ping was so high that last game") and objective (how many dudes they killed) measurements, apparently.
20:28:50 <fizzie> Oh, now it's talking about marijuana.
20:28:52 <itidus21> "Vint Cerf recommended that I start immediately blogging about bufferbloat a year or so ago, given the severity of the problem to avoid the usual publication"
20:29:01 <kallisti> fizzie: lol
20:29:12 <kallisti> fizzie: good study.
20:29:30 <fizzie> kallisti: "Psychologically, the pleasing sensation players experience in online games is analogous to being in the flow state after taking a mood-changing substance like marijuana." It's like they've just put this thing in, it's not like it's anyway connected to what's before or after it.
20:30:09 <kallisti> haha
20:30:17 <fizzie> They don't even cite anyone.
20:30:25 <fizzie> Bunch of potheads, is my guess.
20:30:27 <kallisti> yep.
20:30:40 <kallisti> metaphor-making pothead bastards.
20:32:36 <lifthrasiir> http://hg.mearie.org/esotope/esotope/rev/baa33b474417 i've just got it working after 2 1/2 months of hiatus.
20:33:07 <fizzie> Anyhow, they have some statistics about how long people keep playing some mumorpuger I've never heard of ("Shen Zhou Online") depending on network quality; on average sessions last 4 hours when latency is <175 ms, and less than one hour when it's >225 ms. But they don't have any "how well they do" statistics in-between games. I'm sure someone's collected those too, though.
20:34:59 * kallisti would be more interested in data on Starcraft 2 since it's actually played professionally.
20:35:11 <kallisti> presumably at tournaments they have awesome network latency though.
20:35:43 <fizzie> There's separate studies on Quake 3, UT2003, "Madden NFL Football" and "networked racing games", but based on titles I can't guesstimate if any of these cited studies have compared different (genres of) games for latency-sensitivity.
20:36:06 <itidus21> "Many mid-range or high end home routers have traffic shaping features. They may be called traffic shaping, or QOS (Quality of Service). Some routers Ive seen (Ive seen quite a few over the last years) have a single knob to set bandwidth on both directions; they arent particularly useful. You want one which lets you adjust bandwidth in both directions. Ive experimented with several
20:36:06 <itidus21> routers: your mileage will vary. Some commercial routers work really well, some less so. Sometimes these routers are marketed as gamer routers. "
20:39:18 <kallisti> itidus21: the important thing is: can you turn the knobs up to 11?
20:39:36 <itidus21> no, it goes around to 0
20:39:41 <fizzie> There's a QOS feature on this VDSL2 box, but as far as I can tell it's pretty useless. It can be used to set some precedence queues if you wanted to, say, give priority to interactive stuff over bulk downloads, and set the DSCP IP header fields of outgoing stuff, which I'm sure will do absolutely nothing.
20:46:03 -!- Jafet has quit (Read error: Connection reset by peer).
20:49:50 -!- Jafet has joined.
20:51:35 <kallisti> wait a second.
20:51:40 <kallisti> I'm seeing a pattern here.
20:51:50 <kallisti> everytime I ask myself "how would I write X in perl"
20:51:52 <kallisti> I should instead ask
20:52:01 <kallisti> "what CPAN module already does X for me?"
20:52:21 <kallisti> http://search.cpan.org/dist/Text-Levenshtein/Levenshtein.pm
20:52:24 <kallisti> well, that was easy.
20:54:19 <kallisti> print distance("foo","four");
20:54:19 <kallisti> # prints "2"
20:54:19 <kallisti> print fastdistance("foo","four");
20:54:20 <kallisti> # prints "2" faster
20:54:25 <kallisti> ...so what's the catch?
20:55:14 <itidus21> the catch is you would develop dependancy on cpan
20:55:21 <Sgeo> Clearly, older applications relied on the slowness of distance
20:55:28 <itidus21> which would eventually come back to haunt you
20:55:29 <Sgeo> Just like old games that required a turbo button to play
20:55:56 <Sgeo> "Is faster in most cases"
20:56:02 <Sgeo> I wonder what the worst-case stuff is like
20:56:13 <Sgeo> Which may be important when dealing with web-facing applications
20:56:13 <itidus21> the keyword of the problem turns out to be bufferbloat as pikhq said..
20:56:18 <kallisti> I think I actually want WagnerFischer so I can configure weights.
20:56:35 <itidus21> and the problem-mitigation is basically called QoS or traffic shaping
20:57:31 <kallisti> hmmm but Wagner Fischer makes insert/delete equivalent
20:57:37 <kallisti> I want delete to weigh more
20:59:14 <itidus21> is distance the number of steps to get from one string to the other?
20:59:36 <kallisti> yes.
20:59:52 <kallisti> with Wagner Fischer you can weigh different operations
20:59:56 <itidus21> i have been in here too long then
21:01:12 <kallisti> why's that?
21:01:51 <itidus21> MAX [insert D between A and X] [insert D between D and X] [insert O between D and X]
21:03:20 -!- Jafet has quit (Ping timeout: 255 seconds).
21:03:43 <itidus21> MAX [shift A to the left of M] [shift X to the left of A] [insert H to the left of X] [insert E between H and X] [insert H between X and A] :P
21:04:31 <itidus21> i know i am using fairly large operations
21:04:46 <kallisti> .....
21:05:24 -!- Jafet has joined.
21:05:45 <itidus21> and MAX [replace X with T] [insert H after T]
21:06:56 -!- oerjan has joined.
21:09:00 <fizzie> Levenshtein distance is the ur-example they always trot out when explaining the "dynamic programming" thing.
21:09:29 <Sgeo> hmm?
21:09:50 -!- Jafet has quit (Ping timeout: 252 seconds).
21:10:00 <fizzie> You can compute it with a dynamic programming thing; just table the Levenshtein distances between all prefixes.
21:11:30 <itidus21> distance("windows", name); .. not sure about syntax of name.. is a function call that can be used to create a hierarchy
21:12:51 <itidus21> could be a fun gimmicky website... compare the distance between lovers names
21:13:07 -!- elliott has joined.
21:13:48 <fizzie> elliott: So how's your budding relationship with that "lax" person going?
21:14:00 -!- Jafet has joined.
21:14:36 <itidus21> or.. it could be used for baby name generation!
21:14:41 <fizzie> elliott: Compared Levenshtein distances yet?
21:15:27 <itidus21> if you take the mothers name and the fathers name, and find the name closest to the middle operation
21:17:52 <itidus21> see.. im an applications guy
21:17:57 * oerjan hazards a calculation that the distance is 8
21:18:16 <itidus21> i can think up uses for things but not build them
21:18:28 <fizzie> oerjan: Oh no! Or, wait, is that a good score? I don't know at all.
21:19:45 <oerjan> oh hm wait
21:19:48 <fizzie> Also isn't it just 4 deletions and 2 substitutions?
21:19:53 -!- Jafet1 has joined.
21:20:32 <oerjan> i somehow considered only deletions and insertions
21:20:46 <oerjan> a hazardous calculation indeed
21:20:48 <elliott> 16:57:37: <kallisti> elliott: this Vector will, in all likelihood, remain at 0 to 2 elements.
21:20:48 <elliott> 16:57:44: <kallisti> I could just as easily use a linked list.
21:20:48 <elliott> 16:57:58: <kallisti> except that I think I would want random access? not sure.
21:20:52 <elliott> kallisti: n=2, you already have random access.
21:20:57 <elliott> The second element is one pointer dereference slower.
21:21:05 <elliott> fizzie: We're actually married.
21:21:18 -!- Jafet has quit (Ping timeout: 268 seconds).
21:21:28 <kallisti> elliott: true enough.
21:21:33 <kallisti> a linked list would be fine.
21:21:55 <elliott> kallisti: And consing is much faster for a linked list.
21:22:48 <elliott> Eek, who changed github?
21:22:50 <elliott> Was it fizzie?
21:23:13 <kallisti> honestly this is one of those structures where efficiency is absolutely pointless to worry about. so.. default to the one that's more commonly used?
21:23:36 <elliott> kallisti: Like I said, use Vector sparingly.
21:24:38 <fizzie> I did no such thing. *whistles*
21:24:48 <elliott> fizzie: :(
21:24:50 <elliott> fizzie: Put it back!
21:24:52 <Sgeo> What's wrong with Vector?
21:26:20 <fizzie> What's our vector, Victor?
21:26:21 <elliott> Sgeo: Slow updates, no sharing.
21:26:24 -!- Jafet1 has quit (Ping timeout: 240 seconds).
21:26:42 -!- Jafet has joined.
21:28:05 -!- iconmaster has joined.
21:28:22 <fizzie> Their blog isn't saying anything about any changes. It seems to be mostly about drinking.
21:28:57 <elliott> Such is life.
21:31:04 -!- Jafet has quit (Ping timeout: 240 seconds).
21:32:28 -!- Jafet has joined.
21:41:44 -!- Jafet has quit (Ping timeout: 240 seconds).
21:42:27 <oerjan> @msseg
21:42:27 <lambdabot> Not enough privileges
21:42:33 <oerjan> @moseg
21:42:33 <lambdabot> Maybe you meant: more msg
21:42:58 * oerjan wonders what that command kallisti kept correcting to is
21:43:07 <oerjan> @msg
21:43:08 <lambdabot> Not enough privileges
21:43:16 <oerjan> hm i guess that _is_ it
21:43:26 <oerjan> @list msg
21:43:27 <lambdabot> system provides: echo list listchans listmodules listservers uptime
21:43:29 <fizzie> @mossagas
21:43:30 <lambdabot> You don't have any new messages.
21:43:59 <oerjan> @mesag
21:43:59 <lambdabot> Not enough privileges
21:44:18 <oerjan> @messa
21:44:18 <lambdabot> Maybe you meant: messages messages? msg oeis vera
21:45:05 <oerjan> @admin
21:45:05 <lambdabot> Not enough privileges
21:45:09 <oerjan> @list admin
21:45:09 <lambdabot> system provides: echo list listchans listmodules listservers uptime
21:45:49 <oerjan> i wonder if they really are in system, or if it just defaults to that because of the privilege stuff
21:45:57 <PiRSquared17> @messages?
21:45:58 <lambdabot> Sorry, no messages today.
21:46:02 <oerjan> @list wefiubp
21:46:02 <lambdabot> No module "wefiubp" loaded
21:46:05 <PiRSquared17> Aww :(
21:46:17 <PiRSquared17> @message PiRSquared17_ Hello!
21:46:17 <lambdabot> Maybe you meant: messages messages?
21:46:30 <PiRSquared17> @tekk PiRSquared17_ Hello!
21:46:30 <lambdabot> Consider it noted.
21:46:39 -!- Jafet has joined.
21:46:40 <oerjan> PiRSquared17: don't be sad, just sit down and meditate on the mantra "finnmark"
21:46:43 <PiRSquared17_> tekk = mell?
21:46:43 <lambdabot> PiRSquared17_: You have 1 new message. '/msg lambdabot @messages' to read it.
21:46:52 <PiRSquared17_> @messages
21:46:52 <lambdabot> PiRSquared17 said 22s ago: Hello!
21:47:01 <PiRSquared17_> finnmark
21:47:14 <oerjan> PiRSquared17: tekk = tell, autocorrection
21:49:00 <PiRSquared17_> hmm
21:49:14 <PiRSquared17_> @yrkk PiRS|test foo
21:49:14 <lambdabot> Unknown command, try @list
21:49:20 <PiRSquared17_> @trkk PiRS|test foo
21:49:21 <lambdabot> Unknown command, try @list
21:49:25 <PiRSquared17_> @trlk PiRS|test foo
21:49:25 <lambdabot> Maybe you meant: tell url
21:49:42 <PiRSquared17_> How close is close enough?
21:49:45 <oerjan> 2
21:49:51 <fizzie> @frob f :: a -> b
21:49:52 <lambdabot> h . f = f . g
21:49:53 <PiRSquared17> Lev. distance?
21:49:57 <oerjan> but only if unambiguous
21:50:19 <PiRSquared17> ok
21:51:08 <oerjan> @fear f :: a -> a
21:51:08 <lambdabot> Maybe you meant: faq keal learn read
21:51:18 <oerjan> hm...
21:51:36 <oerjan> @fare f :: a -> a
21:51:36 <lambdabot> Maybe you meant: arr fact faq farber free more part yarr
21:51:53 <oerjan> @grue f :: a -> a
21:51:54 <lambdabot> Maybe you meant: free run
21:52:19 <fizzie> @yarr
21:52:20 <lambdabot> Get out o' me way, yeh landlubber
21:52:31 <fizzie> Oh, it's exactly what it sounds like.
21:52:52 <Sgeo> @free coerce :: a -> b
21:52:53 <lambdabot> g . coerce = coerce . f
21:53:52 <Sgeo> @free id
21:53:56 <lambdabot> f . id = id . f
21:54:22 <Sgeo> @free ($) :: (a -> b) -> a -> b
21:54:22 <lambdabot> Pattern match failure in do expression at Plugin/Free/FreeTheorem.hs:54:20-34
21:54:28 <Sgeo> @free apply :: (a -> b) -> a -> b
21:54:28 <lambdabot> g . h = k . f => g . apply h = apply k . f
21:55:59 -!- Jafet has quit (Ping timeout: 252 seconds).
22:00:18 <kallisti> @m
22:00:19 <lambdabot> Maybe you meant: map messages messages? more msg . ? @ v
22:00:30 <kallisti> mess
22:00:32 <kallisti> @mess
22:00:32 <lambdabot> Maybe you meant: messages messages? msg oeis
22:01:07 <PiRSquared17> @oeis 1,3,6,10
22:01:11 <lambdabot> Triangular numbers: a(n) = C(n+1,2) = n(n+1)/2 = 0+1+2+...+n.
22:01:11 <lambdabot> [0,1,3,6,10,15,21,28,36,45,55,66,78,91,105,120,136,153,171,190,210,231,253,2...
22:01:15 <PiRSquared17> yay
22:01:47 <fizzie> @oeis 1,2,3,4,5,6,7,8
22:01:53 <lambdabot> The natural numbers. Also called the whole numbers, the counting numbers or ...
22:01:53 <lambdabot> [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,...
22:01:58 <PiRSquared17> lol
22:01:58 <fizzie> The interestingest.
22:02:18 <Sgeo> @map
22:02:19 <lambdabot> http://www.haskell.org/hawiki/HaskellUserLocations
22:02:35 <PiRSquared17> The requested URL /hawiki/HaskellUserLocations was not found on this server.
22:02:43 -!- Jafet has joined.
22:03:04 <PiRSquared17> Should be http://www.haskell.org/haskellwiki/HaskellUserLocations ...
22:05:22 <fizzie> @oeis 3 7 4 8 1
22:05:27 <lambdabot> Sprague-Grundy values for Dawson's Chess (octal game .137).
22:05:28 <lambdabot> [0,1,1,2,0,3,1,1,0,3,3,2,2,4,0,5,2,2,3,3,0,1,1,3,0,2,1,1,0,4,5,2,7,4,0,1,1,2...
22:05:37 <fizzie> lambdabot: Actually that was just from /dev/random...
22:08:55 <elliott> PiRSquared17: /hawiki/ is where the old wiki was
22:09:19 <PiRSquared17> @oeis 1 5 5 5 3
22:09:26 -!- Ngevd has joined.
22:09:26 <lambdabot> Decimal expansion of zeta(3) = sum(m>=1, 1/m^3 ).
22:09:26 <lambdabot> [1,2,0,2,0,5,6,9,0,3,1,5,9,5,9,4,2,8,5,3,9,9,7,3,8,1,6,1,5,1,1,4,4,9,9,9,0,7...
22:09:32 <PiRSquared17> XD
22:09:33 <Ngevd> Hello
22:09:36 <PiRSquared17> hi
22:09:43 <Ngevd> I'm not my usual chirpy self today
22:09:48 <Ngevd> For I am a tad annoyed at myself
22:09:56 <Ngevd> At my ceaseless procrastination
22:10:08 <Ngevd> Also, I'm listening to Chopin.
22:11:20 <Ngevd> Chopin makes me sad
22:11:26 <oerjan> Ngevd: just put off the annoyance until later, duh
22:11:40 <Ngevd> I should listen to... probably anything other than Nocturne in E-flat minor
22:12:01 <Ngevd> Nocturne in B major, here I go!
22:12:01 <Ngevd> :)
22:12:06 <oerjan> fizzie: PiRSquared17: oeis doesn't require the numbers to be consecutive in the sequence unless you use commas
22:12:14 <fizzie> oerjan: Ohhhh.
22:12:22 <PiRSquared17> oh
22:12:40 <fizzie> oerjan: But does it require it to be a subsequence at least?
22:13:00 <Ngevd> @oeis 3 1 1
22:13:07 <oerjan> fizzie: i'm not sure, check the website :)
22:13:10 <Sgeo> @oeis 3,7,4,8,1
22:13:13 <lambdabot> Pascal's triangle read by rows: C(n,k) = binomial(n,k) = n!/(k!*(n-k)!), 0<=...
22:13:13 <lambdabot> [1,1,1,1,2,1,1,3,3,1,1,4,6,4,1,1,5,10,10,5,1,1,6,15,20,15,6,1,1,7,21,35,35,2...
22:13:19 <lambdabot> Sprague-Grundy values for Dawson's Chess (octal game .137).
22:13:19 <lambdabot> [0,1,1,2,0,3,1,1,0,3,3,2,2,4,0,5,2,2,3,3,0,1,1,3,0,2,1,1,0,4,5,2,7,4,0,1,1,2...
22:13:29 <oerjan> it probably _prefers_ consecutive hits, though
22:13:40 <Ngevd> :t ord
22:13:41 <lambdabot> Char -> Int
22:13:45 <Ngevd> > map ord "Hexham"
22:13:46 <lambdabot> [72,101,120,104,97,109]
22:13:56 <PiRSquared17> >map chr [72,101,120,104,97,109]
22:14:01 <PiRSquared17> err
22:14:08 <Ngevd> @oeis 72,101,120,104,97,109
22:14:09 <lambdabot> Sequence not found.
22:14:09 <Sgeo> Err, space between > and map
22:14:14 <PiRSquared17> > map chr [72,101,120,104,97,109]
22:14:15 <lambdabot> "Hexham"
22:14:37 <Ngevd> @oeis 72,101,120
22:14:37 <lambdabot> Sequence not found.
22:14:40 <Ngevd> @oeis 72,101
22:14:41 <lambdabot> a(n) = a(n-1) + Sum_{0<k<=n/4} a(n-4k), with a(0)=1.
22:14:41 <lambdabot> [1,1,1,1,2,3,4,5,8,12,17,23,34,50,72,101,146,212,306,436,627,905,1305,1871,2...
22:14:42 <PiRSquared17> > map ord "PiRSq"
22:14:43 <lambdabot> [80,105,82,83,113]
22:14:51 <PiRSquared17> @oeis 80,105,82,83,113
22:14:52 <lambdabot> Sequence not found.
22:14:56 <PiRSquared17> o.O
22:14:56 <Ngevd> > map ord "Taneb!
22:14:57 <lambdabot> <no location info>:
22:14:57 <lambdabot> lexical error in string/character literal at end o...
22:14:58 <Ngevd> > map ord "Taneb"
22:14:59 <lambdabot> [84,97,110,101,98]
22:15:09 <Ngevd> @oeis 84,97,110,101,98
22:15:10 <lambdabot> Sequence not found.
22:15:17 <Ngevd> @oeis 84 97 110 101 98
22:15:18 <lambdabot> Sequence not found.
22:15:22 <Sgeo> @oeis 3,4,6,1,2,6
22:15:28 <lambdabot> Decimal expansion of the absolute value of the abscissa of the local minimum...
22:15:28 <lambdabot> [1,5,7,3,4,9,8,4,7,3,1,6,2,3,9,0,4,5,8,7,7,8,2,8,6,0,4,3,6,9,0,4,3,4,6,1,2,6...
22:15:36 <PiRSquared17> @oeis 56,56,56,56
22:15:37 <lambdabot> Quadruplicated tetrahedral numbers A000292
22:15:37 <lambdabot> [1,1,1,1,4,4,4,4,10,10,10,10,20,20,20,20,35,35,35,35,56,56,56,56,84,84,84,84...
22:15:40 <Ngevd> @oeis 1 2 4 8 16 33
22:15:41 <lambdabot> Generalized Catalan numbers: a(n+1)=a(n)+ Sum a(k)a(n-1-k), k=2..n-1.
22:15:41 <lambdabot> [1,1,1,1,2,4,8,16,33,69,146,312,673,1463,3202,7050,15605,34705,77511,173779,...
22:15:49 <Ngevd> @oeis 1 2 4 8 16 32 65
22:15:49 <PiRSquared17> Quadruplicated tetrahedral numbers XD
22:15:50 <lambdabot> Base 2 digits are, in order, the first n terms of the periodic sequence with...
22:15:50 <lambdabot> [1,2,4,8,16,32,65,130,260,520,1040,2080,4161,8322,16644,33288,66576,133152,2...
22:16:25 <Ngevd> Nocturne in B Major is making me angry
22:16:37 <Ngevd> >:(
22:16:57 <Ngevd> Let's try some Brahms
22:17:21 <Ngevd> Opens quite lugubriouslty
22:17:26 <Ngevd> s/ty/y/
22:17:54 <PiRSquared17> @pl flip (.)
22:17:55 <lambdabot> flip (.)
22:18:00 <PiRSquared17> @unpl flip (.)
22:18:00 <lambdabot> (\ b c f -> c (b f))
22:19:19 -!- Jafet has quit (Ping timeout: 240 seconds).
22:22:08 <Ngevd> Okay, this is making me simultaneously mournful and excited.
22:22:16 <Ngevd> Amazing how music can have such an affect
22:22:21 <Ngevd> Effect.
22:22:25 <Ngevd> One of the two..
22:23:36 <oerjan> possibly both
22:23:46 <PiRSquared17> kekeke
22:23:49 <oerjan> PiRSquared17: >>>
22:23:56 <PiRSquared17> <<<
22:24:04 <oerjan> :t (>>>)
22:24:04 <lambdabot> forall (cat :: * -> * -> *) a b c. (Control.Category.Category cat) => cat a b -> cat b c -> cat a c
22:24:16 <Ngevd> :t flip (.)
22:24:17 <lambdabot> forall a b (f :: * -> *). (Functor f) => f a -> (a -> b) -> f b
22:24:28 <PiRSquared17> :t (>>=)
22:24:29 <lambdabot> forall (m :: * -> *) a b. (Monad m) => m a -> (a -> m b) -> m b
22:24:44 <elliott> oerjan: huh?
22:24:45 <Ngevd> Wow
22:24:47 <elliott> that's the real type of (>>>)
22:24:48 <oerjan> :t (>>>) `asTypeOf` flip (.)
22:24:49 <lambdabot> forall a a1 b. (a -> a1) -> (a1 -> b) -> a -> b
22:24:52 <elliott> unless Ngevd means flip (.)
22:24:54 <elliott> er
22:24:56 <elliott> *unless you mean
22:24:59 <elliott> but (>>>) has that type standard
22:25:17 <Ngevd> Now I feel all optimistic, thinking we can arise from the ashes of a broken society to make a new world
22:25:23 <Ngevd> Wow
22:25:30 <elliott> we can't
22:25:32 <elliott> :))))))))
22:25:32 <PiRSquared17> Chopin?
22:25:35 <Ngevd> Brahms now
22:25:37 <elliott> oerjan: btw
22:25:38 <oerjan> elliott: i was merely pointing out that :t completely obscures their types being related
22:25:55 <elliott> challenge 1: write foo :: (Applicative g) => (forall f. (Functor f) => f a -> f b) -> g (a -> b)
22:25:59 <elliott> (this is trivial)
22:26:04 <elliott> challenge 2: write bar :: (Applicative g) => (forall f. (Applicative f) => f a -> f b) -> g (a -> b)
22:26:19 <elliott> laws of foo: foo f = pure g, where f = fmap g (by necessity)
22:26:37 <elliott> laws of bar: bar (fmap f) = pure f; bar (f <*>) = f
22:27:10 <Ngevd> Now for some Beethoven!
22:27:10 <elliott> bar (<*> f) = flip ($) <$> f
22:27:16 <elliott> dunno if there are any other laws, those are the obvious ones
22:27:24 <elliott> erm
22:27:27 <elliott> yeah
22:27:32 <elliott> wait no
22:27:36 <Ngevd> I am of course referring to the films about the dog
22:27:38 <elliott> ok dunno what bar (<*> f) should be
22:27:48 <elliott> but w/e :p
22:28:07 <elliott> oerjan: foo f = pure (runIdentity . f . Identity) is the obvious one
22:28:12 <elliott> bar I don't know how to implement
22:28:41 <PiRSquared17> are unicode characters allowed in the channel?
22:29:05 <elliott> no, banned, totally banned (yes)
22:29:20 <Ngevd> Yes, on the server, on the client, depends on the client
22:29:27 <oerjan> elliott: erm, why won't the same implementation work for bar, Identity is a Monad
22:30:04 <elliott> oerjan: will it follow the laws?
22:30:27 <elliott> brb
22:35:28 <elliott> back
22:36:47 <oerjan> fmap f = (pure f <*>), of course, so those are the same
22:38:45 <oerjan> i have a hunch that any (f <*>) which has the right quantified signature must be of the form (pure g <*>)
22:39:02 <elliott> oerjan: what about \x -> (pure f <*> x) <*>x ?
22:39:06 <elliott> *<*> x?
22:39:14 <oerjan> hm...
22:40:04 <oerjan> elliott: but that's not of the form (f <*>)
22:40:30 <elliott> oerjan: indeed not
22:40:31 <elliott> hmm...
22:40:37 <elliott> :t \x -> f <$> x <*> x
22:40:38 <lambdabot> forall a b (f :: * -> *). (Show a, SimpleReflect.FromExpr b, Applicative f) => f a -> f b
22:40:40 <elliott> >_<
22:40:46 <elliott> :t \x -> (?f) <$> x <*> x
22:40:47 <Ngevd> brb
22:40:47 <lambdabot> forall a b (f :: * -> *). (?f::a -> a -> b, Applicative f) => f a -> f b
22:41:08 <elliott> oerjan: ok well bar (\x -> f <$> x <*> x) should be pure (join f), obviously
22:41:17 <elliott> does that work with the Identity implementation? i guess so...
22:42:16 <oerjan> i think so too
22:44:53 <elliott> oerjan: well that was almost interesting :(
22:45:10 <oerjan> heh
22:46:07 <oerjan> any expression that is to be of all Applicative types must be composed of pure and <*>, i should think
22:46:54 <kallisti> @test
22:46:54 <lambdabot> Maybe you meant: let list tell
22:48:32 <oerjan> <Phantom_Hoover> Except thulium.
22:48:53 <oerjan> "Despite its high price and rarity, thulium is used as the radiation source in portable X-ray devices and in solid-state lasers."
22:49:20 -!- zzo38 has joined.
22:49:40 <Ngevd> Back
22:50:13 <Ngevd> And now Debussy is making me feel alone
22:50:24 <elliott> oerjan: IS NOTHING SACRED
22:51:54 <oerjan> elliott: yes, nothing is very sacred in some indian religions. hth.
22:52:44 <elliott> :(
22:52:51 <elliott> IS ALL THAT GLITTERS NOT GOLD
22:53:12 <elliott> http://esoteric.voxelperfect.net/wiki/Main_Page
22:53:13 <elliott> sigh
22:53:17 <elliott> oerjan: you revert it im too lazy
22:53:42 <elliott> (diff) (hist) . . Language list‎; 11:31 . . (+78) . . (Talk) (Just look at the difference just 20-30 rock solid Tea Party conservatives have made in the House already. They've turned "1/3 of the government" on its head and started a war between the establishment)
22:53:42 <elliott> not this again :(
22:57:16 <kallisti> @test
22:57:16 <lambdabot> Maybe you meant: let list tell
22:58:24 <oerjan> elliott: i can't, this stupid Taneb guy got to it first
22:58:42 <Ngevd> Bloody Taneb
22:58:57 <elliott> fuck taneb, worst person ever
22:59:04 * elliott founds taneb sucks club
22:59:20 <Ngevd> Can I join?
22:59:21 <oerjan> elliott: also, no, gold is a counterexample to that theory.
23:01:05 <Phantom_Hoover> OK I have thought some more about continuous chess and it is the best thing
23:02:46 <Phantom_Hoover> Basically, the board is a continuous square, and each area corresponding to an initial piece is instead full of continuous piece.
23:04:10 <elliott> Phantom_Hoover++
23:04:17 <elliott> How does play work?
23:04:39 <elliott> Unless it involves derivatives or integration, I'm not interested.
23:04:44 <zzo38> I saw some other message somewhere about chess with continuous boards, and I have thought of similar ideas too
23:04:45 <Phantom_Hoover> To perform a move, you take some measurable subset of one batch of piece and move them such that the measure of the piece remains the same (this is inelegant but, I think, necessary) and \int ddp is equal to a valid move vector.
23:05:00 <Phantom_Hoover> elliott, well of course.
23:05:34 <elliott> Phantom_Hoover: How do horsies move.
23:05:37 <Phantom_Hoover> Capture consists of moving some quantity of piece over some of your opponent's piece, which erases the target piece.
23:05:42 <Phantom_Hoover> elliott, same way as everything else.
23:06:00 <Phantom_Hoover> You just need to make the integral equal to a knight's move.
23:06:12 <elliott> Ah.
23:06:32 <elliott> Phantom_Hoover: Not restricted to the naturals, though, right?
23:06:42 <itidus21> i want to take credit here for bringing the terms continuous and chess together today and also to promote phatom hoover's birthday
23:06:47 <itidus21> hehe
23:06:57 <Phantom_Hoover> Well, the move vectors are the standard chess ones.
23:07:02 <itidus21> woo hoo right on.. real brittania
23:07:08 <elliott> Phantom_Hoover: Hmm, right, yeah, didn't think.
23:07:13 -!- monqy has joined.
23:07:17 <Phantom_Hoover> But you can move half a knight two knight's moves, for instance.
23:07:20 <elliott> Phantom_Hoover: OK so let's play a game.
23:07:27 <elliott> Er, probably on a small board, or this is going to be completely confusing.
23:07:36 <elliott> I guess that just equates to "bigger pieces in non-standard configuration".
23:07:57 <Phantom_Hoover> Erm, there'll have to be some restriction placed on valid displacement vectors.
23:08:07 <itidus21> this is a pic i came up with earlier today depicting a continuous chess http://oi44.tinypic.com/2sbtmvb.jpg
23:08:28 <elliott> Phantom_Hoover: Lame???
23:08:32 <Phantom_Hoover> Otherwise you can just hop your queen out basically anywhere.
23:08:33 <monqy> explosion chess
23:08:47 <elliott> Phantom_Hoover: OK what limit.
23:08:49 <Phantom_Hoover> elliott, just that you can't move piece through piece.
23:08:55 <elliott> OK good.
23:09:03 <Ngevd> Except for the knight
23:09:05 <elliott> What discrete board/configuration are we using.
23:09:10 <Ngevd> I presume
23:09:17 <Phantom_Hoover> itidus21, see, graphical display is basically impossible here.
23:09:35 <elliott> You just need a real display.
23:09:37 <zzo38> itidus21: Those kind of idea have been done by a few other people too.
23:09:41 <elliott> BADUM TISHHSHSHSH
23:10:01 <Phantom_Hoover> There's nothing stopping you from mushing pieces out into a fractal, for instance, at least beyond the measurability constraint.
23:10:41 <itidus21> zzo38: well, i started to think about how my own particular idea as contrasted to phantom hoovers take on this term, as resembling the game of racetrack
23:10:47 <elliott> Phantom_Hoover: Can't we just remove the measurability constarint.
23:10:50 <elliott> constraint.
23:11:21 <elliott> Phantom_Hoover: So wait, how do you capture.
23:11:25 <elliott> Oh, you said that.
23:12:01 <elliott> Phantom_Hoover: I think you can make board configurations whose mate-yness is an unsolved problem.
23:12:10 <elliott> Er.
23:12:11 <elliott> Check-yness.
23:12:19 <Phantom_Hoover> Undoubtedly.
23:12:31 <Phantom_Hoover> Simply calculating if a move is legal is nigh impossible.
23:13:22 <itidus21> my idea was that each move should be a straight line which can have gaps in it if necessary
23:13:42 <Phantom_Hoover> elliott, didn't I say?
23:13:57 <elliott> Phantom_Hoover: I mean, a smaller one.
23:14:09 <Phantom_Hoover> 3x3, king at each corner.
23:14:11 <kallisti> hmmm playing around with weights on the Wagner-Fischer algorithm can have unexpected results.
23:14:14 <Phantom_Hoover> im reference
23:14:17 <elliott> Oh. You didn't, no.
23:14:19 <elliott> Phantom_Hoover: OK you go first.
23:14:53 <kallisti> hmmm I don't know, perfect play sounds impossible.
23:15:17 <Ngevd> kallisti, from what I understand there are an infinite number of possible moves
23:15:20 <elliott> Phantom_Hoover: Also, *refrance
23:16:31 <itidus21> video games have the luxury of finite vector representations
23:16:50 <elliott> Phantom_Hoover: GO ON
23:16:53 <itidus21> mostly anyway :-?
23:17:07 <itidus21> but math guys don't
23:17:15 <monqy> poor math guys :(
23:17:25 <Phantom_Hoover> elliott, assuming the playspace is [0,3]^2 and our king is at [0,1]^2 and [2,3]^2 for me and you respectively, I move [0.5,1]×[0,1] to [2.5,3]×[0,1].
23:17:42 <Phantom_Hoover> Proof of legality is left as an exercise to the adjudicator.
23:18:11 <Phantom_Hoover> (I appoint itidus21 as adjudicator because I am a terrible person.)
23:18:14 <itidus21> dear god, what have i done
23:18:20 <elliott> Dear god, what has Phantom_Hoover done.
23:18:24 <monqy> dear god
23:18:28 <elliott> Phantom_Hoover: OK, I will have my move after approx. 3 hours of Wikipedia.
23:18:39 <itidus21> `pastelogs continuous
23:18:43 <Phantom_Hoover> elliott, aww c'mon, at least make a capture.
23:18:51 <Phantom_Hoover> Erm, *make capture
23:18:54 <elliott> Phantom_Hoover: By "one batch of piece", do you just mean a continuous blob of the same piece-type?
23:19:02 <Phantom_Hoover> elliott, same initial piece.
23:19:07 <elliott> Phantom_Hoover: That's really inelegant?
23:19:09 <elliott> Hidden state.
23:19:12 <HackEgo> No output.
23:19:28 <itidus21> `pastelog continuous
23:19:31 <Phantom_Hoover> Not really, you just have pawn1, pawn2, pawn3.... as separate pieces.
23:19:53 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.2287
23:19:55 <Phantom_Hoover> Or you could not have that, it just seemed a bit wrong to me?
23:20:17 <itidus21> humm..
23:20:24 <elliott> Phantom_Hoover: I think you should be able to treat your line of pawns as one big pawn?
23:20:31 <elliott> Phantom_Hoover: Anyway OK um.
23:20:34 <itidus21> i know, i should just look at the logs for today
23:20:35 <Phantom_Hoover> That looks like a plural.
23:20:48 <elliott> Phantom_Hoover: Well, your row of pawn.
23:20:54 <elliott> Phantom_Hoover: OK um...
23:21:01 <Ngevd> God I'm too tired to spell selep
23:21:05 -!- Ngevd has quit (Quit: goodnight).
23:21:29 <Phantom_Hoover> I was about to grumble about vectors but then I realised my definitions work fine with that.
23:21:29 <elliott> Phantom_Hoover: Wait, er, you moved two spaces?
23:21:39 <Phantom_Hoover> elliott, yes, but I only moved half my king.
23:21:49 <elliott> Oh, right.
23:21:57 <elliott> Phantom_Hoover: [2+pi,3-chaitin's omega] to... err...
23:22:18 <elliott> Wait, no.
23:22:22 <elliott> [pi,3-chaitin's omega]
23:22:32 <Phantom_Hoover> pi-1, surely?
23:22:37 <elliott> Er, yes.
23:22:42 <elliott> [pi-1, 3-chaitin's omega] to.........
23:22:47 <Phantom_Hoover> And you need to take its product with something.
23:22:50 <elliott> Oh, right.
23:22:52 <elliott> THIS IS HARD.
23:22:56 <Phantom_Hoover> And *which* Chaitin's omega?
23:23:07 <fizzie> "pi-1", aka the "two-pi".
23:23:18 <elliott> two-pi = tau
23:23:19 <Phantom_Hoover> AKA tau, qed.
23:23:20 <fizzie> (Since it starts with a 2.)
23:23:21 <elliott> yes
23:23:43 <elliott> Phantom_Hoover: Which Chaitin's omega... I really want to say "the Chaitin's omega for the maximally-compressing language'.
23:23:45 <elliott> *".
23:23:50 <elliott> I somewhat doubt that's a thing, though, even theoretically.
23:23:52 <fizzie> I didn't know it had to be a contiguous subset you move, anyway.
23:23:58 <elliott> OK, Chaitin's omega for binary lambda calculus per Tromp.
23:23:58 <Phantom_Hoover> It didn't.
23:24:01 <Phantom_Hoover> Just measurable.
23:24:13 <elliott> [pi-1, 3-chaitin's omega]*[2,3] to [help Phantom_Hoover help
23:24:29 <itidus21> <Phantom_Hoover> * Vorpal imagines chess with HP and headshots. [...] <itidus21> ok, what about chess on a finite euclidean plane <kallisti> itidus21: what are the pieces? points? <kallisti> what are "turns" in a continuous space. <itidus21> the pieces could be circles :D [...]
23:24:29 <fizzie> Also remove the measurability thing, I want to see elliott go all Banach-Tarski on you.
23:24:38 <elliott> fizzie: I was considering suggesting that.
23:24:42 <elliott> But I think it might be "cheating".
23:24:48 <elliott> Also it would take countably infinite moves?
23:24:52 <Phantom_Hoover> fizzie, honestly, I considered that.
23:25:03 <elliott> Maybe that means it's a non-issue.
23:25:04 <Phantom_Hoover> Have fun proving the legality of that.
23:25:20 <Phantom_Hoover> oerjan, oi, are integrals even well-defined under those circumstances?
23:25:33 <elliott> Phantom_Hoover: Can you help me figure out a destination please im bad at arithmetic
23:25:48 <Phantom_Hoover> I'm not a very good Turing oracle.
23:26:10 <elliott> Phantom_Hoover: Er, I don't think you need to be?
23:26:13 <PiRSquared17_> > tau/pi
23:26:14 <lambdabot> Not in scope: `tau'
23:26:21 <elliott> Phantom_Hoover: To help me figure out a simple valid destination.
23:26:23 <PiRSquared17_> @let tau pi
23:26:23 <lambdabot> TemplateHaskell is not enabled
23:26:32 <elliott> Phantom_Hoover: I mean, we know chaitin is 0.0something.
23:26:37 <itidus21> <Phantom_Hoover> "WHITE LAUNCH DETECTED" [...] <Phantom_Hoover> "E5 HIT, 1 DEAD"
23:26:38 <elliott> And there's a 1 fairly early on.
23:26:40 <elliott> In binary.
23:26:46 <fizzie> Though did you need three dimensions for at least the "standard" bit of reassembling a ball into two balls?
23:26:53 <itidus21> "<Phantom_Hoover> Climbing up the ruins of the black queen?"
23:26:54 <elliott> fizzie: I think so.
23:27:05 <Phantom_Hoover> fizzie, yes.
23:27:27 <elliott> fizzie: help me figure out a destination Phantom_Hoover is mean ;_;
23:27:35 <Phantom_Hoover> Ultimately it's because 2D rotation is abelian and 3D isn't.
23:27:47 <fizzie> I don't want to have any part in your "game", sorry.
23:27:56 <itidus21> elliott: someone also had the great idea of using gravity in continuous chess
23:28:14 -!- PiRSquared17 has quit (Quit: Bye! :)).
23:28:14 -!- PiRSquared17_ has quit (Quit: Bye! :)).
23:28:18 <Phantom_Hoover> fizzie, are you talking smack about my game
23:28:26 <elliott> Phantom_Hoover: Come up with a destination for me or I'll join him.
23:28:29 <itidus21> "<Vorpal> itidus21, what about adding gravitation causing bent paths?"
23:28:38 <Phantom_Hoover> ;_;
23:28:42 <fizzie> Anyway, it sounds nontrivial since you need to have the distance match. Well, unless of course you just move the rest of the piece too.
23:29:03 <elliott> But Phantom_Hoover's move was so simple!
23:29:20 <itidus21> hmm
23:29:28 <Phantom_Hoover> Hmm, I think moves need to ultimately consist of contiguous blocks of piece.
23:29:40 <Phantom_Hoover> Because otherwise the movement integral isn't well-defined.
23:29:53 <Phantom_Hoover> I might be more sure if oerjan would wake up, the lazy bastard.
23:30:16 <elliott> Phantom_Hoover: COMEUP WITH A DSETINATION OR IL RIP YOUR SOUL
23:31:25 <elliott> Phantom_Hoover: (Is it actually possible to come up with a destination can't you just apply ARITHMETIC>?0000)
23:31:26 <Phantom_Hoover> Like, move all your pieces into a bar along the centre?
23:31:54 <Phantom_Hoover> s/pieces/piece/
23:32:07 <elliott> Phantom_Hoover: Yes sure.
23:32:22 <elliott> Phantom_Hoover: As long as there's some Chaitin on the board at the end of it.
23:32:23 <Phantom_Hoover> You'll clip my piece at [2.5,3]×[0,1], at least.
23:32:41 <Phantom_Hoover> Jesus christ, working out whether you're in check is nearly impossible.
23:32:50 <elliott> :D
23:33:01 <Phantom_Hoover> Assuming it means your opponent can capture all your piece in one move.
23:33:05 <Phantom_Hoover> s/piece/king/
23:33:12 <elliott> I think you have to existentially quantify over at least the reals.
23:33:40 -!- MDude has quit (Ping timeout: 252 seconds).
23:34:28 <Phantom_Hoover> Well, um, you definitely wouldn't be in check after that move, because I wouldn't be able to capture 1 king with 1-whatever king.
23:35:14 <elliott> Excellent.
23:35:17 <fizzie> Also does this thing work so that you can move the back half of a full pawn backwards and left one unit, and the front half forward three units and one right?
23:35:38 <elliott> Phantom_Hoover: I'm not sure if you've noticed, but this game is impossible to play.
23:35:39 -!- azaq23 has quit (Quit: Leaving.).
23:35:52 <fizzie> Or was it just "move one blob" sort of thing?
23:36:05 <itidus21> continuous tarpit
23:36:07 -!- Klisz has joined.
23:36:14 <kallisti> !perl %x=(1,2); print scalar %x
23:36:16 <EgoBot> 1/8
23:36:16 <Phantom_Hoover> fizzie, yes.
23:36:23 <elliott> Phantom_Hoover: Wait, really?
23:36:24 <kallisti> lolwat
23:36:27 <elliott> That wasn't clear frmo your description.
23:36:48 <kallisti> >_>
23:36:58 <Phantom_Hoover> You can use piece for propulsion.
23:37:03 <elliott> *from
23:37:06 <elliott> Phantom_Hoover: You're just making shit up now.
23:37:06 <kallisti> !perl %x=(1,2); print %x == 2
23:37:07 <EgoBot> No output.
23:37:09 <kallisti> !perl %x=(1,2); print %x == 1
23:37:09 <EgoBot> 1
23:37:27 <zzo38> I also know of some chess variant where the piece on a square can be fractional (including even more than one, or less than one, but not less than zero). Pieces of the same kind and color can be combined and split as fractions; moving fractions uses up that much fraction of a move, and you can capture an opponent's fraction by your piece the same or greater fraction.
23:37:29 <Phantom_Hoover> elliott, no, it's a consequence of the legality integral.
23:37:48 <kallisti> !perl %x=(1,2,3,4); print %x == 2
23:37:48 <EgoBot> 1
23:38:08 <elliott> Phantom_Hoover: Ah.
23:38:29 <elliott> Phantom_Hoover: This must be what the Brockian Ultra-Cricket players have for an intellectual game.
23:38:33 <elliott> (Who were they? Cue fizzie.)
23:38:33 <Phantom_Hoover> If you move 0.5 pawn 1 backwards and 0.5 pawn 2.5 forwards it's still a legal move.
23:39:03 -!- DCliche has quit (Ping timeout: 255 seconds).
23:39:04 <oerjan> <Phantom_Hoover> oerjan, oi, are integrals even well-defined under those circumstances? <-- probably not. although if the board is 2d, banach-tarski doesn't apply; there _is_ a finitely additive measure on all sets invariant under 2d moves.
23:39:07 <elliott> I guess continuous chess Ultra-Cricket is their equivalent of chess boxing.
23:39:37 <Phantom_Hoover> oerjan, you've read the rules, I take it?
23:39:51 <fizzie> Phantom_Hoover: So 0.5*2.5 - 0.5*1 = 1 nowadays?
23:40:00 <elliott> Phantom_Hoover: I like how almost all moves cannot even be named.
23:40:07 <Phantom_Hoover> s/2.5/3/
23:40:18 <elliott> Phantom_Hoover: And therefore an AI that doesn't have to present its move is infinitely advantaged over a human.
23:40:24 <elliott> (Assuming we had real computers.)
23:40:33 <Phantom_Hoover> elliott, I like how I still have no idea what's a move and what isn't.
23:40:48 <elliott> Phantom_Hoover: It gets easier if you drop the measurable criterion?
23:40:55 <Phantom_Hoover> It... does?
23:41:03 <Phantom_Hoover> But how does the integral fit in?
23:41:06 <pikhq> My head hurts now; thanks guys.
23:41:10 <kallisti> !perl print 3 > 1
23:41:10 <EgoBot> 1
23:41:11 <oerjan> <Phantom_Hoover> Ultimately it's because 2D rotation is abelian and 3D isn't. <-- the technical term is "amenable", it applies to all commutative groups but also some non-commutative ones.
23:41:26 <itidus21> hooray for 2 dimensions...
23:41:36 <elliott> Phantom_Hoover: Well, it... gives you one less thing to check.
23:41:44 <Phantom_Hoover> I mean, if it's not defined, nor is any condition I can think of for move legality.
23:41:54 <Phantom_Hoover> oerjan, OK, what are the conditions of being able to do that integral?
23:42:22 <elliott> Phantom_Hoover: I hate to point this out, but you haven't quite made it continuous.
23:42:27 <elliott> Phantom_Hoover: Time is still discrete.
23:42:41 <Phantom_Hoover> Oh, right you are.
23:42:54 <Phantom_Hoover> Um...
23:43:12 <elliott> Phantom_Hoover: (You might have trouble with the concept of "turn".)
23:43:14 <Phantom_Hoover> The legality condition is the only thing that needs changing for continuous time, really.
23:43:14 <itidus21> i had this idea from the racetrack game that only one object should be able to move at a time
23:43:35 <Phantom_Hoover> ...and the semantics of a capture.
23:43:44 <elliott> Phantom_Hoover: I suppose you could just end turns when a move's worth of movement happens, and disallow "non-terminating" moves.
23:44:24 <monqy> what's a movesworth
23:44:39 <elliott> monqy: One vector of movement per the blah blah
23:44:53 <Phantom_Hoover> monqy, i dont know fwargleblagka;gaowirg
23:44:56 <oerjan> <Phantom_Hoover> oerjan, you've read the rules, I take it? <-- i'm not even going to try.
23:45:03 * Phantom_Hoover jumps off a cliff wearing his pants on his head
23:45:47 <fizzie> As I think they say in these situations, "gg".
23:45:58 <fizzie> (It's short for "good game".)
23:46:14 <elliott> oerjan: <Phantom_Hoover> To perform a move, you take some measurable subset of one batch of piece and move them such that the measure of the piece remains the same (this is inelegant but, I think, necessary) and \int ddp is equal to a valid move vector.
23:46:28 <elliott> Oh and
23:46:28 <elliott> <Phantom_Hoover> OK I have thought some more about continuous chess and it is the best thing
23:46:28 <elliott> <Phantom_Hoover> Basically, the board is a continuous square, and each area corresponding to an initial piece is instead full of continuous piece.
23:46:32 <elliott> plus
23:46:32 <elliott> <Phantom_Hoover> Capture consists of moving some quantity of piece over some of your opponent's piece, which erases the target piece.
23:47:00 * Phantom_Hoover moves 0.5 Phantom_Hoover into the Atlantic, and captures fizzie's upper body with 0.5 Phantom_Hoover.
23:47:13 <fizzie> Glurk.
23:47:21 <elliott> `addquote * Phantom_Hoover moves 0.5 Phantom_Hoover into the Atlantic, and captures fizzie's upper body with 0.5 Phantom_Hoover. <fizzie> Glurk.
23:47:25 <HackEgo> 796) * Phantom_Hoover moves 0.5 Phantom_Hoover into the Atlantic, and captures fizzie's upper body with 0.5 Phantom_Hoover. <fizzie> Glurk.
23:47:43 <kallisti> huh, cool I didn't realize you could allocate the space of a hash table
23:47:49 <itidus21> ironically, real chess on a physical board is actually continuous except for the formalities of turns and board squares
23:47:56 <kallisti> keys(%hash) = 1024;
23:48:04 <kallisti> resizes the hash table.
23:48:44 <itidus21> that last rule probably wasn't wise
23:49:04 <itidus21> might be better to capture the whole piece by covering part of the piece
23:49:18 <itidus21> or else you are surely just torturing yourselves
23:49:21 <Phantom_Hoover> itidus21, are you kidding?
23:49:34 <itidus21> i don't know
23:49:36 <kallisti> (no)
23:49:43 <Phantom_Hoover> Capturing is really, really easy that way.
23:49:54 <Phantom_Hoover> Also it violates the spirit of continuous space and piece.
23:50:16 <itidus21> ok ok you're right
23:50:25 <itidus21> i support the rule
23:50:53 <Phantom_Hoover> Indeed, the minute you start the game you are in check.
23:51:10 <itidus21> cell from dragon ball z uses these rules
23:51:37 -!- Klisz has quit (Quit: SLEEP, GLORIOUS SLEEP).
23:51:49 <oerjan> hm i think this integration is essentially about calculating (displacement of center of mass) * measure moved
23:51:50 <itidus21> you destroy all but 1 piece of his body and he can use banarch tarski type means to regrow himself back to full size
23:51:53 <Phantom_Hoover> (Knights are even cooler this way; you can use them as low-powered, tactical snipers.
23:51:59 -!- Patashu has joined.
23:52:12 <Phantom_Hoover> oerjan, oh, that's a lot nicer.
23:52:39 <Phantom_Hoover> Hmm, except for the condition about not being able to move piece through other piece, which I added later.
23:52:39 <iconmaster> I have absolutely no idea how this continuous chess thing works but it sounds like the most awesome thing ever.
23:52:40 <oerjan> or wait, is that _divided_ by measure moved
23:52:58 <oerjan> er, no.
23:52:59 <Phantom_Hoover> iconmaster, I have no idea either, and I invented it.
23:53:13 <iconmaster> I mean, a game where a single move takes hours of mathmatical calculation? CLASSIC.
23:53:28 <Phantom_Hoover> oerjan, I think it's just the displacement of the centre of mass, actually.
23:53:45 <kallisti> iconmaster: njot if u ply wif c0mmurrtr
23:53:48 <Phantom_Hoover> Unless there's a counterexample that hasn't occurred to me.
23:54:17 <Phantom_Hoover> elliott, on the plus side, calculating the centre of mass probably needs calculus too!
23:54:23 <elliott> Phantom_Hoover: YAAAAAAAAY
23:54:29 <elliott> Phantom_Hoover: Have you figured out continuous time yet?
23:54:32 <elliott> iconmaster: Hours?
23:54:47 <elliott> iconmaster: Dude, it's easy to create a move whose legality is an unsolved mathematical problem.
23:54:58 <itidus21> wow
23:55:03 <elliott> Heck, you might even be able to make a move whose legality is independent of ZFC.
23:55:21 <iconmaster> I mean, for someone like ME to make a move would take,like, infinity+1 hours.
23:55:29 <elliott> AKA infinity hours.
23:55:33 <iconmaster> yep
23:55:42 -!- NihilistDandy has joined.
23:55:43 <kallisti> elliott: HA HA GET IT?
23:55:44 * Phantom_Hoover moves 0.25 Phantom_Hoover further into the Atlantic, and captures elliott's head with 0.25 Phantom_Hoover.
23:56:06 <Phantom_Hoover> This is the best superpower?
23:56:25 <itidus21> ok i thought up how it can get weirder
23:56:29 <kallisti> challenge: make the cantor set important. go
23:56:38 <oerjan> <Phantom_Hoover> oerjan, I think it's just the displacement of the centre of mass, actually. <-- hm oh right, if consider the _whole_ piece rather than just the part moved
23:56:40 <itidus21> if you extend the gameboard into the physical universe
23:56:59 <elliott> Phantom_Hoover: So, continuous time?
23:57:09 <kallisti> itidus21: so when you die in continuous chess you die in real life?
23:57:20 <elliott> itidus21: Reality doesn't have the necessary resolution for continuous chess.
23:57:30 <itidus21> elliott: ahh i see
23:57:30 <Phantom_Hoover> oerjan, OK, now for non-collision.
23:57:46 <iconmaster> Make the rules change based on the number of continunitous segments in play?
23:58:08 <elliott> iconmaster: NOT MATHEMATICALLY ELEGANT
23:58:10 <kallisti> what constitutes a "move" exactly?
23:58:20 <itidus21> kallisti: lol... hahah
23:58:22 <itidus21> hahahhaha
23:58:27 <Phantom_Hoover> A down-and dirty way would be to define it such that a move is illegal if the convex hull of the final piece contains any other piece.
23:58:38 <iconmaster> ok I have like no handle on what is going on I think I'll shut up
23:58:41 <oerjan> Phantom_Hoover: i guess you need a bijection from starting positions to ending positions, and none of the lines through corresponding pairs must collide with another piece.
23:58:49 <Phantom_Hoover> oerjan, that's better.
23:58:55 <itidus21> can it be proven that a valid move even exists?
23:59:08 <elliott> Phantom_Hoover: But knights?
23:59:10 <oerjan> ideally the bijection should be measure-preserving.
23:59:12 <elliott> itidus21: Yes.
23:59:14 <elliott> Phantom_Hoover made one.
23:59:28 <oerjan> (on subsets)
23:59:34 <elliott> Also, I continue to assert that measurability should not be a condition.
23:59:48 <Phantom_Hoover> Soooo... a move is a measure-preserving bijection which does not violate the intersection rule.
←2012-01-05 2012-01-06 2012-01-07→ ↑2012 ↑all