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