00:06:55 -!- Phantom_Hoover has joined.
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: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: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.
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 1.9.0.17/2009122204]).
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.
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:06:18 <ais523> `learn wisdom is always factually accurate, except for this entry
10:06:30 <HackEgo> wisdom is always factually accurate, except for this entry
10:10:23 <HackEgo> \ Looking up 127.0.0.1:3128 \ Making HTTP connection to 127.0.0.1:3128 \ 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: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:50:15 <lambdabot> monqy: You have 1 new message. '/msg lambdabot @messages' to read it.
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: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:07 <ais523> shachaf: yep, only 6 days left
10:57:10 <Vorpal> ais523, I don't read /everything/ in this channel.
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: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: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:52 <zzo38> It also means bare king loses since you will be forced to move it and therefore to change it.
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: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:29 <Jafet> Or perhaps that later flight simulator using motif
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:02:03 <Vorpal> Jafet, if I do I don't remember the name of it
11:02:19 <Vorpal> (I'm terrible at remembering names)
11:02:21 <Jafet> http://www.ioccc.org/1984/mullender.c
11:03:15 <Jafet> mullender? vax/pdp polyglot.
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:53 <Vorpal> Jafet, hm I wonder if gcc would accept that sort of stuff...
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: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: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: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: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:09:06 <Jafet> gcc compiles C11 now?
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: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:43 <elliott> ais523: gcc 4.6 does -std=c1x
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: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: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:26 <elliott> It would be acceptable if he actually integrated the suggestions that didn't directly fix his bug from last time.
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:22 <ais523> pointer to function that takes two integer arguments and returns a pointer to an array of 7 chars
11:16:30 <elliott> ais523: right, so not valid
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:17:00 <ais523> char (*(f[7]))(int,int); is what I make it
11:17:09 -!- nooga has joined.
11:17:15 <ais523> which is probably equivalent to elliott's, because of operator precedence
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: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:23:12 <elliott> monqy: wouldn't it be great if you had like data Expr = Lit Integer | ... and then could say
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: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:48 <elliott> (eval .) . Add = liftA2 (+) eval eval
11:26:52 -!- Phantom_Hoover has joined.
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:46:32 <oerjan> HAPPY BIRTHDAY DO YOU, HAPPY BIRTHDAY TO YOOOOOOU, HAPPY BIRTHDAY TO PHANTOM_HOOVER, HAPPY BIRTHDAY TO YOOOU
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:05:03 <kallisti> I write perl code because it's aesthetically beautiful
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: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: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: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: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:26 <kallisti> and then go on to explain why that is
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: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: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: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: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:40 <elliott> Also, he thinks that algorithm = 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: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:53 <Vorpal> perl really looks ugly
13:23:34 <Vorpal> I think it is due to the abundance of $ in front of words.
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:59 <kallisti> because perl strings are not completely immutable.
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: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:57 <itidus21> can i just run into a perl room and show the code and say fix this for some anonymous individual?
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:43 <Vorpal> kallisti, do you have a really really really slow disk?
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: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 <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: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:30:05 -!- derdon has quit (Remote host closed the connection).
13:30:17 <lambdabot> System.Random randomRs :: (Random a, RandomGen g) => (a, a) -> g -> [a]
13:30:37 <Vorpal> kallisti, anyway I recommend you profile the code, it might help
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: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: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: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 <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:40 <Phantom_Hoover> I suppose you'd just get some garbage which called itself a Void.
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: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: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: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: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:44 <Vorpal> kallisti, I know someone who has 32 GB RAM in her desktop though, not so far to 40 GB from there.
13:40:03 <oerjan> :t (uncurry replicate =<<)
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:32 <kallisti> ....except reverse the order that I said those.
13:40:50 <Vorpal> kallisti, really? That is stupid, it doesn't make sense that it has that effect
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: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:53 <Phantom_Hoover> True, but that's a Haskell 2010 thing, so the old one is still relevant.
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: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: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:34 <Vorpal> does perl even have a type system?
13:45:34 -!- ais523 has quit (Read error: Connection reset by peer).
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: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: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:38 <kallisti> it's certainly convenient, if you understand how it works.
13:50:13 <Vorpal> kallisti, anyway would for(my $line = <$f>) even work?
13:50:33 <Vorpal> kallisti, is <$f> considered a generator expression or something then?
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:50 <kallisti> so yeah your above code will grab the first line and store it in $line, and the iterate exactly once
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: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: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: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: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:27 <kallisti> which can reference hash tables and lists. that's the equivalent of "structs" in Perl.
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: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:26 <Vorpal> kallisti, can $foo and @foo coexist?
14:01:26 <elliott> I thought $foo was scalar @foo if @foo existed.
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:17 <Vorpal> kallisti, so they can coexist then?
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: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:04:15 <kallisti> anyway I just showed that I'm not wrong.
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: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: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: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: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:39 * elliott can't figure out whether the guy is just dedicated to the fake identity or not.
14:10:57 <elliott> "USELESS PATHETIC WRONG" is a really good project description.
14:10:58 <Vorpal> kallisti, well, I don't like python and I never used ruby
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: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:44 * elliott desperately tries to find evidence that this guy is actually that guy.
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: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: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: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:56 <Vorpal> kallisti, personally I prefer a language with some amount of syntax that is between lisp and perl
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:50 <Vorpal> kallisti, probably even "most"
14:18:01 <kallisti> yes they're pretty much on opposite ends there.
14:18:31 <kallisti> Perl 6 trumphs Perl 5 in syntax though.
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:27 <elliott> perl 6 actually has useful syntax though
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: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:32 <kallisti> I guess maybe Perl 5 borrowed it from Perl 6 or something.
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:27:11 <kallisti> elliott: can you explain why $@ iterates over a filehandle
14:28:00 <lambdabot> help <command>. Ask for help for <command>. Try 'list' for all commands
14:28:20 <lambdabot> Maybe you meant: . ? @ bf do faq ft id map pl rc v wn
14:28:40 <Vorpal> oh it tries to match around typos right?
14:28:47 <lambdabot> help <command>. Ask for help for <command>. Try 'list' for all commands
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: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:52 <Vorpal> oerjan, phew, the Earth is afe
14:32:57 <lambdabot> Maybe you meant: bid id pl slap src
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: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: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: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: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:30 <Vorpal> ais523, and for outputting I assume there is DataOutputStream?
14:43:38 <ais523> I guess so, although I haven't checked
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:38 <ais523> elliott: I was just about to mention that; DataStream says that it uses the same rules as longBitsToFloat/bitsToDouble
14:45:03 <elliott> Vorpal: http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Float.html#intBitsToFloat(int)
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:53 <elliott> Write once, run anywhere my ass.
14:46:02 <elliott> Vorpal: Um, for non-IEEE platforms?
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: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: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: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: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: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:25 <elliott> I'm sure it can run mcmap.
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:30 <elliott> Vorpal: They probably have a really shitty libc; also we need C99.
14:53:39 <Vorpal> what do you use C99 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: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: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> 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:31 <Vorpal> elliott, fuck gcc errors :D
14:57:38 <elliott> Vorpal: // FIXME: Should we transform alpha too?
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:21 <elliott> ((struct foo){ ... }) mainly.
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.
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: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:44 <Vorpal> (very much simpler than worms though)
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: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:57 <elliott> Yes, I know how Worms works, thank you very much; I daresay I've played it more than you have.
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: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: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: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> Boxed vectors of arbitrary types.
15:16:38 <elliott> Unboxed vectors with an adaptive representation based on data type families.
15:16:42 <elliott> Unboxed vectors of Storable types.
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: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: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: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: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: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: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: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: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: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: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: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: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: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:51 <Vorpal> a bit annoying, but simple enough
15:25:19 <lambdabot> Maybe you meant: map messages messages? more msg . ? @ v
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: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: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:33 <Vorpal> elliott, the downside: I don't know the API of that. At all.
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: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: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 <elliott> It's also the reason you need -Djava.natives=... or w/e.
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:23 <ais523> then the image starts loading in a different thread, and calls an ImageObserver as more parts of it load
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: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: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: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: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: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: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: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:24 <ais523> which is much smaller and thus less obvious when profiling
15:44:25 <itidus21> for some specific definition of useless
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: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: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:32 <elliott> ais523: it has optional laziness, as used there
15:46:35 <kallisti> elliott: waaaa what is this magic.
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:47:02 -!- Jafet has joined.
15:47:04 <elliott> bool f = cond (f True) (f False)
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: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: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: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: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:55 <ais523> not defining either itself
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: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: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: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:59:06 <Vorpal> so that is the approach to take then
15:59:16 -!- Jafet has quit (Ping timeout: 252 seconds).
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: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:58 <ais523> when I'm working with a main-loop-based API, I typically implement an event loop in it
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: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: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:09 <elliott> ais523: mcmap runs with 0% CPU usage most of the time.
16:02:21 <Vorpal> elliott, usleep would have no CPU usage
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: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: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: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:50 <ais523> what do you think interrupts are /for/?
16:03:50 <Vorpal> ais523, maybe we misunderstood each other
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: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: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:08:30 <itidus21> i think the real question is.. what shape are color qualia
16:09:32 <itidus21> is the shape uhhh .. potentially variable between concious beings
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:30 -!- Jafet has joined.
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:31 <itidus21> the data can come from the tongue also
16:14:43 <kallisti> ....I can't see with my tongue
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:17:00 <itidus21> much like a word processor can view an executable file
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: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: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: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: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: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: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: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: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: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: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: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: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:59 <kallisti> air isn't very common in space.
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:20 <kallisti> before money became something other than "paper representing gold"
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:49 <kallisti> elliott: yes but I'm not sure if that's /why/ it's currency. certainly that helps.
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: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: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: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:45 <kallisti> my purpose was never to write an AI.
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: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: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: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: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:03:09 <kallisti> which, will redirect the path of the projectile in the direction that it's facing.
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: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:37 <Vorpal> how many arrows do you have
17:04:39 <kallisti> there are only 4 arrows on the board.
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: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: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: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: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: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: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: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:55 <itidus21> kallisti: turns involve translating from one point to another point with some given min/max
17:11:08 <kallisti> Vorpal: the current issue is that it's not clear how portals should interact with loops
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:27 <Vorpal> kallisti, you can never have too many explosions
17:12:37 <kallisti> you could actually use the explosion to your advantage
17:12:49 <kallisti> if destroying both your portals is worth the outcome
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: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:23 <Vorpal> Phantom_Hoover, that sounds dirtly
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: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: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: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: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: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:57 <kallisti> no, you're banned from ideas now.
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: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: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: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: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: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:04 <Vorpal> kallisti, that might be interesting
17:26:17 <kallisti> it would be hard to visualize it
17:26:54 <kallisti> unless the projectiles are like huge beams with clearly labelled arrows. :P
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 <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: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: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 <itidus21> Vorpal: turn based asteroids basically
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: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:32 <kallisti> functional reactive programming
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:59 <Phantom_Hoover> You don't have pawns, you have a long strip of pawn at the start.
17:39:15 <Vorpal> Phantom_Hoover, interesting, how would you move it?
17:39:19 <Vorpal> Phantom_Hoover, like a barrier?
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: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:45:10 <kallisti> but given the clock speed computers I would think that most data "frequencies" are "low enough" in comparison.
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:50:00 <kallisti> fizzie: are you implying that "portal chess guy" is not a title with dignity?
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: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: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: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: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: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:43 <itidus21> racetrack adopts the idea that no other pieces move during a turn
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: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: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: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:29 <Vorpal> kallisti, I fear it might end up being very annoying to play
18:05:38 <kallisti> depends on the specific mechanics.
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: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: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: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: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: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: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: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: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:19 <Vorpal> you can just recursively apply that until you find a good one
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: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: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: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: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: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: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: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:20 -!- Jafet has quit (Ping timeout: 268 seconds).
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: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:08 <kallisti> yes there is no story basically.
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: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: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: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:57 <kallisti> one algorithm is to basically predict what will happen based on previous input
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:45 <Vorpal> kallisti, well you can't. There is always at least the propagation delay
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: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: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: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 -!- 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: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: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: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: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: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: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: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: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: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:15 <Vorpal> that measures bandwidth
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: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: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: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: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: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:46 <itidus21> the internet is effectively being spammed with junk traffic
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:27 <itidus21> its very tragic waste of the net
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: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:12 <Vorpal> (or was it MBps? I don't remember)
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:57 <pikhq> Vorpal: 2 Mbps isn't that unreasonable...
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: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: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: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: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: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: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: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: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:42 <itidus21> all the work comes second place to lag issues
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: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: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:52 <itidus21> so buffering is the main (avoidable) cause of latency?
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: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: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: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: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:59 <itidus21> google says active queue management
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: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 <pikhq> It allows you to signal congestion *and* get data through.
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: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:50 <pikhq> Vorpal: Drop packets with the "I can do ECN" bit set.
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: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: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:36 <Vorpal> pikhq, are those backbone devices or end user devices?
19:43:46 <pikhq> Vorpal: Mostly end user devices.
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: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: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: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: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: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: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: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: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:58:02 <kallisti> fizzie: the (a) method sounds more relevant to a game
19:58:20 <kallisti> (b) is more relevant to the human inputs
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: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: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: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:21 <fizzie> Or, okay, anyone doing visualization that's not just doing it for aesthetical reasons.
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: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: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: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:16 <fizzie> Does he, by any chance, play any network games?
20:22:39 <fizzie> It's just that most "ping hunters" I know are in "the business" mostly for that reason.
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: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: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: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:17 <fizzie> They don't even cite anyone.
20:30:25 <fizzie> Bunch of potheads, is my guess.
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: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:50 <kallisti> everytime I ask myself "how would I write X in perl"
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:54:19 <kallisti> print fastdistance("foo","four");
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:59:14 <itidus21> is distance the number of steps to get from one string to the other?
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: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: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: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: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: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:55 <elliott> kallisti: And consing is much faster for a linked list.
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: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: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:58 * oerjan wonders what that command kallisti kept correcting to is
21:43:16 <oerjan> hm i guess that _is_ it
21:43:27 <lambdabot> system provides: echo list listchans listmodules listservers uptime
21:44:18 <lambdabot> Maybe you meant: messages messages? msg oeis vera
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:46:17 <lambdabot> Maybe you meant: messages messages?
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 <lambdabot> PiRSquared17_: You have 1 new message. '/msg lambdabot @messages' to read it.
21:47:14 <oerjan> PiRSquared17: tekk = tell, autocorrection
21:49:57 <oerjan> but only if unambiguous
21:51:08 <lambdabot> Maybe you meant: faq keal learn read
21:51:36 <lambdabot> Maybe you meant: arr fact faq farber free more part yarr
21:52:31 <fizzie> Oh, it's exactly what it sounds like.
21:52:52 <Sgeo> @free coerce :: a -> b
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:19 <lambdabot> Maybe you meant: map messages messages? more msg . ? @ v
22:00:32 <lambdabot> Maybe you meant: messages messages? msg oeis
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: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: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: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: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: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:06 <oerjan> fizzie: PiRSquared17: oeis doesn't require the numbers to be consecutive in the sequence unless you use commas
22:12:40 <fizzie> oerjan: But does it require it to be a subsequence at least?
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:45 <Ngevd> > map ord "Hexham"
22:14:08 <Ngevd> @oeis 72,101,120,104,97,109
22:14:09 <Sgeo> Err, space between > and map
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:57 <lambdabot> lexical error in string/character literal at end o...
22:15:09 <Ngevd> @oeis 84,97,110,101,98
22:15:17 <Ngevd> @oeis 84 97 110 101 98
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: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: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:57 <Ngevd> Let's try some Brahms
22:17:21 <Ngevd> Opens quite lugubriouslty
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:24:04 <lambdabot> forall (cat :: * -> * -> *) a b c. (Control.Category.Category cat) => cat a b -> cat b c -> cat a c
22:24:17 <lambdabot> forall a b (f :: * -> *). (Functor f) => f a -> (a -> b) -> f b
22:24:29 <lambdabot> forall (m :: * -> *) a b. (Monad m) => m a -> (a -> m b) -> m b
22:24:29 <oerjan> CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALE
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: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: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: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: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: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: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:40:04 <oerjan> elliott: but that's not of the form (f <*>)
22:40:38 <lambdabot> forall a b (f :: * -> *). (Show a, SimpleReflect.FromExpr b, Applicative f) => f a -> f b
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:44:53 <elliott> oerjan: well that was almost interesting :(
22:46:07 <oerjan> any expression that is to be of all Applicative types must be composed of pure and <*>, i should think
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:50:13 <Ngevd> And now Debussy is making me feel alone
22:51:54 <oerjan> elliott: yes, nothing is very sacred in some indian religions. hth.
22:52:51 <elliott> IS ALL THAT GLITTERS NOT GOLD
22:53:12 <elliott> http://esoteric.voxelperfect.net/wiki/Main_Page
22:53:17 <elliott> oerjan: you revert it im too lazy
22:53:42 <elliott> (diff) (hist) . . Language list; 11:31 . . (+78) . . 149.255.39.18 (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:58:24 <oerjan> elliott: i can't, this stupid Taneb guy got to it first
22:58:57 <elliott> fuck taneb, worst person ever
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: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: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:06:00 <Phantom_Hoover> You just need to make the integral equal to a knight's move.
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: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:32 <Phantom_Hoover> Otherwise you can just hop your queen out basically anywhere.
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:09:03 <Ngevd> Except for the knight
23:09:05 <elliott> What discrete board/configuration are we using.
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: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:11:21 <elliott> Phantom_Hoover: So wait, how do you capture.
23:12:01 <elliott> Phantom_Hoover: I think you can make board configurations whose mate-yness is an unsolved problem.
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:35 <elliott> Phantom_Hoover: I NOTE YOU STILL HAVE NOT PRESENTED AN INITIAL BOARD
23:13:57 <elliott> Phantom_Hoover: I mean, a smaller one.
23:14:11 <kallisti> hmmm playing around with weights on the Wagner-Fischer algorithm can have unexpected results.
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: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:20 <elliott> Dear god, what has Phantom_Hoover done.
23:18:28 <elliott> Phantom_Hoover: OK, I will have my move after approx. 3 hours of Wikipedia.
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:07 <elliott> Phantom_Hoover: That's really inelegant?
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: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:48 <elliott> Phantom_Hoover: Well, your row of pawn.
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:57 <elliott> Phantom_Hoover: [2+pi,3-chaitin's omega] to... err...
23:22:42 <elliott> [pi-1, 3-chaitin's omega] to.........
23:23:07 <fizzie> "pi-1", aka the "two-pi".
23:23:20 <fizzie> (Since it starts with a 2.)
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: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: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:25:03 <elliott> Maybe that means it's a non-issue.
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:26:10 <elliott> Phantom_Hoover: Er, I don't think you need to be?
23:26:21 <elliott> Phantom_Hoover: To help me figure out a simple valid destination.
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: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: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: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: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: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:32:22 <elliott> Phantom_Hoover: As long as there's some Chaitin on the board at the end of it.
23:32:41 <Phantom_Hoover> Jesus christ, working out whether you're in check is nearly impossible.
23:33:01 <Phantom_Hoover> Assuming it means your opponent can capture all your piece in one move.
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: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:07 -!- Klisz has joined.
23:36:14 <kallisti> !perl %x=(1,2); print scalar %x
23:36:23 <elliott> Phantom_Hoover: Wait, really?
23:36:27 <elliott> That wasn't clear frmo your description.
23:37:06 <elliott> Phantom_Hoover: You're just making shit up now.
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: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: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: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:41:06 <pikhq> My head hurts now; thanks guys.
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: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:40 <elliott> <Phantom_Hoover> AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
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: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:56 <oerjan> <Phantom_Hoover> oerjan, you've read the rules, I take it? <-- i'm not even going to try.
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> <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> <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: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: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:54 <Phantom_Hoover> Also it violates the spirit of continuous space and piece.
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:37 <elliott> UM EXCUSE ME I SAID I WASN'T INTERESTED IF INTEGRALS WEREN'T INVOLVED
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: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:47 <elliott> iconmaster: Dude, it's easy to create a move whose legality is an unsolved mathematical problem.
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:42 -!- NihilistDandy has joined.
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: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: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: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: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: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.