00:00:13 <elliott> Gregor: I mean, it's not really that grotty, because it's a nice SW/SE/NW/NE
00:00:21 <Gregor> elliott: I'm not sure if that works at an angle ... hold on, I need to do a little pseudomath here.
00:00:22 <elliott> You can just draw a ray outwards then contract it
00:00:45 <elliott> Gregor: I'm half-sceptical of your claim that rotating a WireWorld board that way keeps it working, but I hope it's true because it's an elegant property
00:00:51 <elliott> And if it is true, there's no excuse not to do views :P
00:01:06 <Gregor> I never claimed that rotating a wireworld board that way keeps it working.
00:01:14 <elliott> <elliott> Gregor: Wireworld is symmetrical, right?
00:01:15 <elliott> <elliott> Is it symmetrical diagonally?
00:01:22 <elliott> Gregor: Are you unaware of what I mean by a symmetrical CA?
00:02:02 <Gregor> All of its rules are perfectly symmetrical.
00:02:07 <Phantom_Hoover> You mean that the lattice is the same if you distinguish diagonal and orthogonal connections?
00:02:20 <elliott> Gregor: Then it has to work.
00:02:35 <elliott> Gregor: Something can't break just by rotating it if the rules are symmetrical :P
00:03:12 <elliott> I'll wait for Gregor to explain :P
00:03:43 <Gregor> The problem is that you CAN'T rotate a bunch of squares by 45° and still have squares :P
00:04:07 <elliott> Gregor: Yes, but you can draw a ray outwards expanding at one second per second and then contract
00:04:13 <Phantom_Hoover> For one thing, the diagonal connections cross, which means they're completely different to the orthogonal ones.
00:04:23 <Gregor> elliott: Sadly, the square root of 2 is not 1.
00:04:37 <Gregor> elliott: So your cells will be in some crazy quantum superposition of states.
00:04:49 <elliott> Hmm, I've become retarded... I'm not seeing it.
00:04:59 <elliott> I mean, yes, the borders aren't proper.
00:05:05 <elliott> But isn't that just the borders
00:05:20 <elliott> Gregor: OK fine, how about don't rotate the view :P
00:05:35 <elliott> Gregor: Of course your view isn't a square if you're looking diagonally
00:05:52 <elliott> (I mean, no it isn't, but from an "easier-in-CA" point of view...)
00:05:59 <elliott> Wow I can't think right now.
00:06:13 <Gregor> What I'm concluding here is actually that cardinal directions are actually the way to go :P
00:06:39 <Gregor> Maybe with both "forward" and "shimmy" :P
00:06:44 <Phantom_Hoover> What I'm concluding here is that elliott thinking about CAs inevitably leads to confusion for all involved.
00:06:50 <elliott> Gregor: But then building diagonal wire is a pain :?
00:07:03 <Gregor> (Shimmy is forward and left/right)
00:07:08 -!- FireFly has quit (Quit: FireFly).
00:07:28 <elliott> Gregor: That's so gross :P
00:07:38 <elliott> Gregor: Especially since it lets you U-turn faster if you go weird
00:07:53 <Gregor> Shimmy doesn't turn you
00:08:08 <elliott> Gregor: Shimmy, turn, shimmy, turn
00:08:15 <elliott> Compare turn, turn, forwards... hmm ok :P
00:08:32 <elliott> Gregor: I STILL THINK SHIMMY IS UGLY BUT OK :P
00:08:54 <Gregor> Well, I really like having your "canonical" direction be unknown, and rotating the map so you just see in your own direction.
00:08:58 <Gregor> You ain't got no compass!
00:09:21 <elliott> Gregor: Are you sure you can't hack that by presenting your diagonal viewing range as a partly-filled square? >_>
00:09:32 <Gregor> You could, but it would have incorrect behavior :P
00:10:19 <elliott> I guess the point is that if you do it that way, you can SEE LESS by looking diagonally :P
00:10:29 <elliott> "Fuck, I'm looking diagonally, and therefore mostly blind."
00:10:41 <Gregor> But that means you lose some of the generality of look-direction ...
00:11:25 <Gregor> Which is even more gross than shimmy :P
00:11:29 <Gregor> Esp. if I don't call it "shimmy"
00:11:43 <elliott> shimmy is a good name for it.
00:11:46 <elliott> Gregor: So how big is the viewing distance?
00:12:02 <Gregor> Well now that we've done all this shit, I have no bloody idea :P
00:12:24 <Gregor> Wait, it needs to be odd.
00:12:33 <elliott> Hmm.... Actually, I don't see why you can't do diagonals.
00:13:05 <elliott> Gregor: When looking in a direction, take all cells with a marked ray, and then include N cells in a square around them
00:13:14 <Gregor> elliott: SQUARE around them!
00:13:19 <Gregor> THERE AIN'T NO SQUARE AROUND THEM :P
00:13:21 <elliott> Gregor: When looking in a direction, take all cells with a marked ray, and then include N cells in a square-rotated-appropriately around them
00:13:26 <elliott> Now it's not resulting in a square >_>
00:13:28 <Gregor> elliott: Draw an array of cells A1 A2 A3...\nB1 B2 B3...\n, then draw the subset that corresponds to any diagonal view within them, as a square.
00:13:34 <elliott> <Gregor> THERE AIN'T NO SQUARE AROUND THEM :P
00:13:39 <elliott> So of course there's a square around them :P
00:13:42 <elliott> Just not from that orientation >_>
00:14:27 <Gregor> http://sprunge.us/TAcC <-- see
00:14:42 <Gregor> (The second set is a diagonal view NE from D2)
00:15:21 <elliott> Gregor: I'm not sure what your point is there
00:15:28 <elliott> Why couldn't you just send that second square down the wire
00:15:41 <Gregor> Where's C2? Where's D3?
00:16:01 <Gregor> It cannot be both a correct representation of the CA as viewed from that orientation, and a square.
00:16:34 <Gregor> Anywho, cardinal directions are sexy.
00:16:50 <Gregor> You just move like a chess piece (OK, it happens that this particular chess piece doesn't exist...)
00:17:05 <Phantom_Hoover> I should totally write that physics paper by Lifeforms.
00:17:20 <elliott> Gregor: Although, is it wrong that that it's not a correct representation? Of course you can't expect to see the whole world.
00:17:24 <Patashu> there's a chess piece that moves only WASD, it's called a Wazir
00:17:33 <elliott> You should be merging it into a world representation after rotating
00:17:35 <elliott> And it'll be accurate then
00:17:44 <elliott> I mean, you can't simulate the squares ANYWAY
00:17:51 <elliott> Because they lack, y'know, everything outside the edges :P
00:17:56 <Gregor> No, but you should be able to make some guesses.
00:18:01 <Gregor> You can't even do that.
00:18:04 <elliott> Gregor: Which you can, as long as you look around more.
00:18:14 -!- Phantom_Hoover has quit (Quit: Leaving).
00:18:15 <Gregor> Not if you happened to start oriented like that.
00:18:21 <Gregor> You'd just see that nothing makes any goddamn sense :P
00:19:01 <elliott> Gregor: Hmm, what if you start out like that, and then rotate three-sixty?
00:19:18 -!- zzo38 has left.
00:19:32 <Gregor> I think (though I don't want to work it out, bleh) that there would have to be nearby activity to determine your orientation, but either way it's an effload of work.
00:19:54 <elliott> Gregor: I'm so writing warriors in Haskell, BTW :P
00:20:50 <elliott> Gregor: I do think you should have a switch to turn off all time limits, though
00:20:56 <elliott> The game is much purer that way :P
00:21:06 <elliott> And no warrior should break, because they'll wait for the server to tell them when a new turn is
00:21:19 <elliott> Gregor: (The server should wait for an ACK of the new turn from both warriors before starting the counter, I guess...)
00:21:25 <elliott> And kick everything that doesn't ACK quickly enough, of course :P
00:21:43 <elliott> Well, I guess reading from a FIFO or whatever won't be that slow :P
00:21:46 <elliott> But reading from a socket could be.
00:21:50 <elliott> But I guess network play would be slow in general
00:21:52 <elliott> And also completely pointless
00:21:55 <elliott> Because you can just repeat it locally
00:22:16 <Patashu> the problem with 'take as long as you like' is that the optimal strategy is to take as long as possible
00:22:18 <elliott> And network play allows for undetectable human intervention anyway :P
00:22:24 <Patashu> so no game will ever finish with perfect play
00:22:25 <elliott> "In five moves turn right 'cuz I said so."
00:22:31 <Gregor> elliott: I was going to have the move you want an action to be performed in specified in that action (or some special token for "any turn"), so you don't need to ack as a client.
00:22:33 <elliott> Patashu: Yes, I didn't mean to actually run things with the --no-limits flag.
00:22:40 <Gregor> elliott: (And the server would ack moves)
00:22:42 <elliott> I just meant it's purer, and might also be useful for testing?
00:23:34 <elliott> <Gregor> elliott: I was going to have the move you want an action to be performed in specified in that action (or some special token for "any turn"), so you don't need to ack as a client.
00:24:04 <elliott> If the client wants to do nothing it should send nothing.
00:24:13 <Gregor> If the client wants to do nothing, it sends nothing.
00:24:21 <Gregor> But if the client sends something too late, it also doesn't do it.
00:25:06 <elliott> If the client sends something too late, it's the next turn.
00:25:11 <elliott> And that's the correct behaviour :P
00:25:29 <elliott> Clients just need to listen to the input stream, send whenever their move queue gets full, and then wait until the next turn
00:25:31 <Gregor> Idonno if I agree, but my point was that if you wanted that behavior, you could specify "any turn"
00:25:47 <elliott> Having clients note which turn it is is kind of gross
00:25:52 <elliott> I mean, <elliott> Clients just need to listen to the input stream, send whenever their move queue gets full, and then wait until the next turn
00:25:56 <elliott> It should be OK for moves to happen late
00:26:09 <elliott> You just need one thread to plan, react to input, and decide on moves, and then to push them :P
00:27:12 <elliott> Gregor: Plus you can make moves one byte :)
00:27:17 <Gregor> elliott: But what if something appears in your area in that next frame, and you go into reaction mode?
00:27:33 <Gregor> elliott: You won't want your slightly-mistimed previous move to take precedence.
00:27:56 <elliott> Gregor: Well, if you want hard-realtime like that, then have your fucking IO thread notify you of a new turn.
00:27:59 <Gregor> Of course, you also wouldn't want to make a slightly-mistimed previous move ...
00:28:02 <elliott> And have this notification lock the queue.
00:28:11 <elliott> If you want that, fine, but it shouldn't be part of the protocol :P
00:28:37 <Gregor> If it's NOT part of the protocol, then it's not actually hard real-time by the way :P
00:29:10 <Gregor> (Because there is undefined behavior on timeouts)
00:29:20 <elliott> Gregor: Timeout = next move starts, it's taken as "do nothing"
00:29:29 <elliott> If you want to do nothing, don't send anything.
00:29:32 <Gregor> elliott: Here is the sequence of actions that causes the problem:
00:29:59 <Gregor> elliott: Server sends turn, client does computation, client sends move, server sends next turn, server receives move, server acts on move which was computed on stale data.
00:30:39 <elliott> Gregor: Servers always try to read before starting a new move.
00:30:54 <Gregor> elliott: You're acting as if IPC is magic.
00:30:56 <elliott> I'm assuming you're not doing this over a network because that won't work anyway.
00:30:58 <Gregor> elliott: Also, atomic.
00:31:07 <elliott> Gregor: I was assuming something file-esque like a FIFO.
00:31:17 <Gregor> A single FIFO is ordered.
00:31:21 <Gregor> Bidirectional communication is two FIFOs.
00:31:39 <elliott> Well that's stupid, what's an ordered IPC mechanism
00:31:45 <elliott> Wait, that is a Unix socket.
00:31:52 <Gregor> There's no such thing as bidirectional ordering guarantees.
00:31:55 <Gregor> That doesn't even make sense.
00:31:59 -!- yourstruly has joined.
00:32:24 <Gregor> You'd have to have some crazy shared locking mechanism that both processes are aware of, but that means the client could lock out the server, gross.
00:32:28 <Gregor> elliott: No, doesn't for stdio.
00:32:48 <Gregor> Console I/O does not have bidirectional ordering.
00:33:23 <elliott> Gregor: OK, fine, moves contain one byte of identifier and are just dropped if they refer to an identifier other than the current turn's :P
00:33:43 <Gregor> That's exactly my proposal >_<
00:34:05 <Gregor> OH KAY, now that we've got that out of the way :P
00:34:48 <elliott> Gregor: BTW, if you don't make the move instructions <>^v I'll cut you.
00:35:02 <elliott> Gregor: BTW, if you don't make the turn instructions <> I'll cut you.
00:35:06 <elliott> And the move instruction ^ :P
00:35:16 <elliott> Turn instructions should be \/ actually >_>
00:35:19 <Gregor> Why ya gotta ASCII? :P
00:35:25 <Gregor> What direction is each of those?
00:35:25 <elliott> Funge does [] which is totally unsatisfying
00:35:31 <elliott> Gregor: \ is left, / is right, obviously
00:35:37 <elliott> Those are the only turns, also obviously
00:35:54 <elliott> That looks even less like looking left or right than \ and / do
00:36:05 <Gregor> Oh, I see what your metaphor is.
00:36:06 <elliott> <Gregor> Why ya gotta ASCII? :P
00:36:48 <Gregor> Command format is: {turn byte} {command}
00:36:49 <Gregor> One-byte commands: <^>\/
00:37:03 <elliott> You forgot build and destroy :P
00:37:12 <Gregor> Those aren't one-byte commands (?)
00:37:12 <elliott> Hit should be X or ! for the damage metaphor
00:37:29 <Gregor> We haven't decided build directionality.
00:37:40 <elliott> Well the WHOLE POINT of the turtle thing is that it's faster to create a line
00:37:46 <elliott> So I guess you build behind you and destroy in front of you
00:37:51 <elliott> You poop wire, in other words
00:38:00 <Gregor> Then build is more of a modifier of move.
00:38:15 <elliott> You could build and then turn around and move away instead.
00:38:28 <elliott> You're facing forwards, you build, now there's a wire behind you, you turn to your right, and run away.
00:38:34 <Gregor> Oh, I thought build-and-move-in-some-direction was a single move.
00:38:51 <Gregor> Whoah whoah wait, you're proposing that you build BEHIND you?
00:38:52 <elliott> So to destroy something and build over it you destroy it, U-turn, and then build X-D
00:39:02 <elliott> Gregor: Yes, bear with me: because if you build in FRONT of you:
00:39:08 <elliott> Gregor: Then to build a wire you have to CONSTANTLY TURN THREE-SIXTY
00:39:15 <Gregor> I was thinking that you build on TOP of you.
00:39:15 <elliott> Build, threesixty, forwards, repeat
00:39:35 <Gregor> (Since building in your own spot yields a bizarre situation ...)
00:39:41 <elliott> Gregor: Like TEN HOURS AGO I said that I'm thinking of it as the agents being a cell so that updates make more sense and that you can't move in front of wires.
00:39:47 <elliott> Ergo nothing is ever on top of you ever :P
00:39:51 -!- pikhq has joined.
00:39:54 -!- pikhq_ has quit (Ping timeout: 240 seconds).
00:39:56 <Gregor> Yes, that's the bizarre situation.
00:40:07 <elliott> Gregor: I dunno, I kind of like the poop metaphor X-D
00:40:12 <Gregor> But building behind you is terrible since you can't see there any more.
00:40:14 <elliott> To build over something: Hit it until it dies, turn around, poop.
00:40:45 <elliott> Gregor: I was kind of imagining it as a little bug eating wire (destroying) and leaving a trail of wirepoop :P
00:40:52 <Gregor> I'm likin' the move-and-build paradigm more and more >_>
00:41:06 <elliott> Gregor: Do you want to be able to build a wire in n ticks?
00:41:07 <Gregor> (That is, build and move are an atomic action)
00:41:13 <Gregor> That's my problem with it.
00:41:38 <elliott> Gregor: Don't propose that each cell has a "builtness" counter because I will cut you :P
00:41:43 <elliott> (To make it take multiple ticks)
00:41:48 <elliott> I guess building has to take one tick, then
00:41:53 <elliott> Because that applies to building behind you, too
00:42:08 <elliott> <elliott> Gregor: Don't propose that each cell has a "builtness" counter because I will cut you :P
00:42:25 <Gregor> The thing with building behind you is that if you shimmy, your "behind you" location is somewhat ambiguous.
00:42:37 <Gregor> (i.e. building diagonal wires is still weird)
00:42:50 <elliott> Well, yeah, I was pretending shimmying didn't exist because... because I don't like that.
00:43:09 <Gregor> It's better than any alternative I can think of *shrugs*
00:43:22 <elliott> Just make diagonal wire-building take longer and fuck you deal with it? :P
00:43:48 <elliott> Gregor: BTW, howya gonna show the direction agents are facing on the board? With a zoom it's easy, just pack an arrow into one block a la mcmap
00:43:50 <Gregor> If I could make it take √2, that'd be ideal :P
00:44:02 <elliott> Gregor: Things CA space is not:
00:44:10 <elliott> - NOT MANHATTAN IF YOU'RE NOT AN ELECTRON
00:44:21 <Gregor> HELLO I AM WITH MAKING OF THE JOKESES!
00:44:28 <elliott> <elliott> Gregor: BTW, howya gonna show the direction agents are facing on the board? With a zoom it's easy, just pack an arrow into one block a la mcmap
00:44:44 <elliott> ...without a zoom, I suggest just alpha-blending two blocks diagonal from it with [agent colour] to be the tail X-D
00:44:48 <elliott> MOST IMPORTANT PROBLEM DEFINITELY
00:45:07 <Gregor> Honestly I don't think it's enormously important to show the direction in the actual visible window, since their movement should make that sufficiently clear *shrugs*
00:45:32 -!- Libster has quit (Read error: Connection reset by peer).
00:45:53 <elliott> Gregor: Unless the WARRIOR (so much cooler than agent) just sits there spinning around and entertaining its retarded self by becoming dizzy.
00:46:07 <Gregor> elliott: And if it does, why do we care about its direction? :P
00:46:14 <elliott> Gregor: Because it'll look funny.
00:46:32 <elliott> BTW, agents just have to be pink because I can't stop thinking of them as pink... I guess because of mcmap
00:47:09 <Gregor> I was going to make a color per.
00:47:34 <elliott> Give them little nametags. The best idea.
00:48:25 <Gregor> There are flags too, remember
00:49:00 <elliott> Gregor: Yeah, every flag should just be interchangable... everyone defending every flag while trying to get to any flag.
00:50:31 <Gregor> That's a complete 360° from the current design of the CTF game :P
00:50:43 <elliott> Gregor: I'm being VERY SERIOUS
00:50:46 <Gregor> (A design which, naturally, you don't know)
00:50:50 <elliott> I'm actually joking but wondering if it might be good :P
00:51:05 <elliott> Gregor: Lemme guess... every agent has a flag, starts next to it, has to stop the other agent from destroying it
00:51:05 <Gregor> That's closer to my very original idea, which was to have a sort of resource gathering game.
00:52:24 <Gregor> elliott: I'll explain it in terms of the CA (roughly): There's a 'base' cell type, which never changes under any circumstances, and has an owner. There's a 'flag' cell type which also has an owner, and turns into a conductor if there are any electrons next to it. If an electron is next to a base or flag, it becomes a flag of the same owner.
00:52:35 <Gregor> If a flag is next to a base of a different owner, then the owner of the flag loses.
00:52:46 <Gregor> So you have to actually ferry the flag from the enemy to you.
00:52:56 <Gregor> And it doesn't move at lightspeed, so they have a chance to defend.
00:52:58 <elliott> So simplified, you want to connect the flag to a base with wire?
00:53:08 <elliott> "it doesn't move at lightspeed" <-- So more cell states then?
00:53:23 <Gregor> elliott: It just only moves when an /electron/ touches it.
00:53:33 <Gregor> elliott: Making an absolute max of ½ lightspeed.
00:53:54 <elliott> Surely you have enough of an idea to implement it now :P
00:54:04 <Gregor> Yes, but it's now quite a bit different than it was a few hours ago X-D
00:54:15 <elliott> Has it changed in the last half hour? :P
00:54:21 <elliott> Apart from that shimmying shit
00:54:28 <elliott> Which you should totally hold back on because EWW
00:54:31 -!- GreaseMonkey has joined.
00:54:34 <elliott> I agree with the "build and move" model, FWIW
00:55:15 <Gregor> elliott: A bit which I thing I had given up on, but might be worthwhile with the build-and-move model, is that there was a "conductor potentia" cell type, which turned into a conductor when an electron touched it, but didn't conduct that particular electron.
00:55:54 <Gregor> Just slows building down a bit *shrugs*
00:56:12 <Gregor> It was just a trick to make building slower if it turned out to be too fast relative to destruction.
00:56:13 <elliott> Oh right, we didn't resolve that
00:56:47 <elliott> Gregor: I think destroying should take... hmm.
00:57:03 <elliott> Gregor: That way damage is a two bit value :-)
00:57:40 <Gregor> Gee, and here I figured I'd be drawing an ASCII-art motif for the area in front of you, so who cares how many bits I waste on damage values.
00:57:56 <elliott> Gregor: I'm speaking in terms of elegance, not in terms of protocol.
00:58:16 <Patashu> damage time vs build time is something you'll tweak in testing anyway
00:58:26 <Gregor> OK, I can implement something.
00:58:28 <elliott> Gregor: Not that 49 is many bytes
00:58:49 <elliott> Gregor: If you want an even number, you want a power of two
00:58:52 <elliott> If you want an odd number, you want a prime
00:59:10 <Gregor> elliott: Viewbox is 7x7, damage is 4 :P
00:59:28 <elliott> Twenty-three squared is 529 bytes, and half a kilo is a bit much to send, receive and process every zero point zero six
00:59:40 <elliott> So seven, eleven, seventeen or nineteen it is
01:00:01 <Gregor> elliott: Enjoy writing agents in Haskell with no 0-8 btw.
01:00:24 <elliott> Gregor: Dude, I've been coding continuously since the Accident :P
01:00:45 <Gregor> I like how it's capitalized now.
01:00:51 -!- zzo38 has joined.
01:00:51 <Gregor> But my point was really just to mock you 8-D
01:00:53 <elliott> Gregor: Please don't make fun of my disability.
01:01:59 -!- hagb4rd has joined.
01:02:26 <elliott> Gregor: BTW what ASCII chars are you using for the world
01:02:39 <elliott> It's totally irrelevant but :P
01:02:47 <Gregor> elliott: \x00, \x01, \x02, ... :P
01:02:56 <elliott> Gregor: No dude no. No. Dude. You make me sad. Dude. No.
01:03:39 <elliott> Gregor: I suggest empty: or ., wire: =, head: *, tail: ~
01:03:44 <Gregor> Probably ' ' for nothing, . for wire, @ for actor, + for head, - for tail
01:03:49 <elliott> It looks like a little worm SO CUTE???
01:04:02 <elliott> You can't deny the worminess.
01:04:06 <Gregor> It looks like a botched enema.
01:04:17 <elliott> Gregor: OK no dude ~* is absolutely perfect.
01:04:25 <elliott> It is the perfect electron worm.
01:04:31 <elliott> Gregor: @ for actor is good though.
01:04:39 <Gregor> DUDE, you can't go antirogue.
01:04:44 <elliott> Gregor: What about 0-9A-Z for actors? It'd avoid sending more.
01:04:58 <Gregor> Except flags have owners too :)
01:05:03 <elliott> Gregor: @ does not mean "another player-species"
01:05:12 <elliott> Gregor: @ means "you, or something with the symbol @ (usually humanoids)"
01:05:24 <elliott> Consider playing a gnome in NetHack.
01:05:28 <Gregor> Are you claiming that actors aren't humans? That happen to be written in C?
01:05:57 <elliott> Gregor: OK, hmm... 0-9 for actors, A-J for flags?
01:06:07 <Gregor> A-J for base, a-j for flags.
01:06:19 <elliott> I see flags as more important than bases
01:06:22 <elliott> So you want them to be more shouty :-)
01:06:27 <Gregor> OK, then a-j for bases, A-J for flags *shrugs*
01:06:28 <elliott> 0-9 for actors, a-j for base, A-J for flags?
01:06:35 <elliott> FINALLY WE WILL HAVE A PERFECTLY CRAFTED ASCII DISPLAY THAT NOBODY WILL EVER SEE
01:06:52 <Gregor> Now, do I separate every row with a \n, WASTING BYTES???
01:07:04 <Gregor> Making the ASCII display beyond useless :P
01:07:30 <elliott> Gregor: Suggested format: [move identifier (not guaranteed to be sequential)][grid][damages as raw bytes]
01:07:43 <elliott> Gregor: Hmm, you should be able to see which way an actor is turning...
01:07:58 <Gregor> I was thinking I would only send damages for those which have damages.
01:08:13 <elliott> Gregor: That means that the update is not constant-sized.
01:08:35 <elliott> Gregor: Well, it makes things slower for the programs...
01:08:45 <elliott> Rather than just read(..., 243)
01:08:51 <Gregor> We definitely don't want programs to have to think...
01:08:51 <elliott> Where truncated input basically never happens
01:09:01 <Gregor> Seriously though, we don't *shrugs*
01:09:02 <elliott> I get what you mean, about the protocol
01:09:15 <elliott> I was going to say damage as ASCII just 'cuz, but then I realised it's nice to be able to just memcpy it
01:09:19 <elliott> For comparisons, obviously
01:10:14 <elliott> Gregor: Commands: turn left: \, turn right: /, advance: ^, hit: X or !, poop: dunno?
01:10:22 <elliott> (Whereby poop I mean build and move forwards)
01:10:54 <Gregor> elliott: I refuse to deshimmy :P
01:11:00 <monqy> these commands are all over the place
01:11:08 <elliott> Gregor: I was thinking you should add shimmy later...
01:11:27 <Gregor> monqy: Having them compacted into e.g. 0x00-0x10 doesn't actually help anything.
01:11:28 <elliott> Gregor: I mean, it's gross to be able to build diagonally but not destroy diagonally, and adding another command to do THAT is insanity.
01:11:37 <elliott> So you should just stick with the orthogonality and accept that we're in Taxicab geometry :P
01:11:49 <Gregor> elliott: That's why my thought was that destroy and build are more-or-less modifiers.
01:12:08 <Gregor> But I may be willing to accept cardinal-only :P
01:12:16 <elliott> Gregor: Sure, but that only makes sense if you come from the viewpoint that shimmy makes sense :P
01:12:23 <elliott> The ONLY reason it makes sense is that we were talking about looking diagonally.
01:12:28 <monqy> oh I was thinking keyboard-wise but maybe that doesn't matter?? I'm not exactly sure what you're even doing
01:12:37 <elliott> WireWorld's rules may be "diagonally symmetrical" but that doesn't actually make sense because it's a field made out of squares :P
01:12:48 <elliott> monqy: you don't type these, it's a programming game
01:12:57 <elliott> Well, you could play as a human, but it'd be really hardcore
01:13:02 <Gregor> elliott: Being diagonally symmetrical is independent of being orthogonally symmetrical ...
01:13:06 <monqy> what do you type help
01:13:33 <elliott> Gregor: My point is that the only reason shimmying is even on the cards is that electrons travel diagonally
01:13:47 <elliott> But that DOESN'T mean that diagonal movement is reasonable in a logo-graphics model :P
01:13:58 <Gregor> monqy: Keyboard is irrelevant unless you can react to things within 1/15th of a second :P
01:14:06 <elliott> Gregor: BTW, I take it that things like invalid builds and the like will just be ignored?
01:14:13 <elliott> You shouldn't be making such moves anyway
01:14:24 <elliott> And things like bumping into things when walking, well... you can see the bloody wall right in front of you.
01:14:30 <Gregor> elliott: I was intending to ack commands, so you would know if they actually happened within the turn.
01:14:39 <Gregor> That ack could be "OK" vs "too late" vs "invalid"
01:14:52 <elliott> Gregor: wait, there are no invalid digs now
01:14:57 <elliott> Gregor: wait, there are no invalid builds now
01:15:04 <elliott> Because you have to stand on the square your wire appears on
01:15:17 <Gregor> elliott: Errr, what if another agent moves there :)
01:15:19 <elliott> Gregor: wrt too late, agents can check that themselves by comparing the world-state I think
01:15:25 <elliott> There might be edge-cases where someone cancels out what you do identically
01:15:33 <elliott> Gregor: Agents can't walk into agents
01:15:35 <elliott> Just like they can't walk into wires
01:15:57 <elliott> So yeah, that build fails.
01:15:57 <Gregor> Anyway, there are still invalid hits.
01:16:13 <elliott> Gregor: Yeah, but if they try and hit that, they're either like, genetic based... or broken >_>
01:16:23 <elliott> If "genetic", then "nothing happened" is the right thing to learn, if broken, well fuck 'em
01:16:54 <elliott> Gregor: But yeah, I think that a properly-written agent doesn't really have to worry about its turn going through...
01:17:01 <Gregor> So yeah, whether you like it or not, I'm acking everything. Neener neener neener.
01:17:14 <Gregor> (Err, acking all client commands, that is)
01:17:14 <elliott> Gregor: The time it takes to react to the ack makes it worthless
01:17:19 <elliott> You don't want to cancel your current decision-making process
01:17:25 <elliott> Gregor: Then there's no reason to ack :P
01:17:33 <Gregor> elliott: Maybe not for YOU.
01:17:48 <Gregor> elliott: Maybe if I'm getting a bunch of ack-too-lates, I'd like to switch to a faster strategy.
01:18:05 <elliott> Gregor: Fair enough... but you don't want a dynamic-length response.
01:18:09 <elliott> So you can only ack one per tick :P
01:18:15 <Gregor> And I don't want to determine that by "I moved forward in a totally-empty field and nothing appears to have happened"
01:18:22 <elliott> And invalid moves should ack as "received"
01:18:24 <Gregor> Or "I build-and-moved in a totally empty field and nothing appeared to happen"
01:18:44 <Gregor> Only one move per tick is valid anyway, of course I can only ack one.
01:18:52 <elliott> [zero or one][the identifier it was sent with][new identifier][grid][damages]
01:18:56 <elliott> Gregor: Yes, but it could receive two because of lag...
01:19:19 <Gregor> OH, I see what you're saying.
01:19:28 <Gregor> You want literally every message from the server to be of a fixed length.
01:19:29 <elliott> But w/e, just ack one, if you're that lagged you're fucked anyway
01:19:33 <Gregor> So, only one message per tick.
01:19:40 <elliott> Gregor: The only messages are updates and acks, so... yes?
01:19:54 <elliott> There's no compelling reason not to unify those since acks are of questionable usability anyway
01:20:08 <elliott> OK, let me put it this way:
01:20:15 <elliott> Multiple acks per tick is of VERY questionable usability.
01:20:26 <elliott> And breaks the simple "just read with constant size" client end.
01:20:34 <elliott> You have to do some kind of buffering.
01:20:48 <elliott> Gregor: BTW, I'd suggest eleven or seventeen viewfield, seven is a bit small...
01:20:50 <Gregor> OK, wait, since you can only validly send one move per turn ANYWAY, there's no need for multiple acks per tick ever.
01:21:23 <elliott> Gregor: Did you just un-realise?
01:21:26 <elliott> <elliott> Gregor: Yes, but it could receive two because of lag...
01:21:26 <elliott> <Gregor> OH, I see what you're saying.
01:21:32 <elliott> You saw what I was saying about a different thing
01:21:33 <elliott> <elliott> Gregor: Yes, but it could receive two because of lag...
01:21:37 <Gregor> If one is lagged, it's already been acked negative.
01:21:56 <Gregor> Since you specify the turn the move is intended for in the move.
01:22:01 <elliott> Client receives two server updates in quick succession because of lag, hastily responds to both.
01:22:09 <elliott> Server reads. Server gets two commands.
01:22:16 <elliott> Server can only say "hey, too late" to one.
01:22:18 <elliott> (Both of them were late.>)
01:22:32 <Gregor> elliott: The server's ALREADY said "hey, too late" to both.
01:22:40 <Gregor> It was part of its updates.
01:22:44 <Gregor> Every update includes an ack.
01:22:56 <Gregor> It's not really an ack anymore if you're acking nothingness, but :P
01:23:05 <elliott> If you enforce sequentiality of identifiers, then you can ack with one byte
01:23:30 -!- oklopol has quit (Ping timeout: 240 seconds).
01:23:40 <Gregor> OK, back to building ...
01:23:40 <hagb4rd> hey..i asked myself y not all the time
01:23:48 <elliott> Gregor: Link me to the hg repo btw?
01:24:34 <Gregor> https://codu.org/projects/rezzo/hg/
01:25:24 <elliott> Gregor: I blinked when a bitbucket page failed to materialised :P
01:26:29 <Gregor> Some stuff is out of date there though w.r.t. things I realized shouldn't have been there, and new changes.
01:28:06 <elliott> Gregor: So what IPC mechanism you using
01:28:12 <elliott> Please make it be something that looks like stdio to the program :P
01:28:26 <elliott> Also, is the playfield a torus or infinite?
01:28:38 <Gregor> Infinite = infinite pain.
01:28:51 <Gregor> I was going to use pipes, so stdio to the program, yes.
01:29:31 <elliott> Are you speaking from a C implementation POV, please just say no.
01:29:56 <Gregor> elliott: I'm speaking from a computation complexity point of view.
01:30:06 <Gregor> Whoops, my plain extended, I now have more work
01:30:27 <Gregor> If you wanted to fuck up the server, you could just move infinitely in one direction pooping stable circuits.
01:30:54 <elliott> I am so glad that pooping is now our official terminology :P
01:31:14 <elliott> Gregor: So is the field just as big as what you linked me?
01:31:24 <elliott> It's not like BF Joust where smaller = better strategy, I don't think
01:31:37 <Gregor> elliott: That was just an arbitrarily chosen size.
01:31:49 <elliott> (nuff is like cocaine but better.)
01:32:00 <elliott> (Therefore it means "good".)
01:32:08 <Gregor> I was just testing out substrate generation *shrugs*
01:32:41 <elliott> Gregor: Hmm, that sets off happy bells in my head that say "WORLD GENERATION!!!!"
01:32:46 <elliott> What if you made a maze?????
01:32:56 <elliott> With dead-end electron rings instead of exits
01:33:26 <Gregor> I'm quite happy with my substrate as-is :P
01:33:38 <elliott> Gregor: It's called EXPERIMENTATION :P
01:33:47 <elliott> Different warriors for different substrate algorithms
01:33:56 <elliott> Gregor: BTW, what ASCII value is pooping?
01:34:29 <Gregor> elliott: None? Doesn't need one ...
01:34:50 <elliott> Gregor: It's... a command...
01:34:53 <elliott> So yes it does............
01:35:21 <elliott> ~ is pretty good because your tail is ~ (BECAUSE I SAY SO)
01:35:28 <Gregor> Sorry, I'm writing the CA right now :P
01:35:48 <elliott> Gregor: Having fun with agents being a part of the field? :-)
01:35:55 <elliott> It's not that hard since you don't literally encode a state transition
01:36:03 <elliott> (Instead using ifs and the like)
01:36:14 <monqy> do people have tails too
01:36:14 <elliott> Gregor: NO IT MUST LOOK LIKE A LITTLE PICTURE
01:36:31 <Gregor> monqy: 'd' is already damage/destroy.
01:36:33 <elliott> Gregor: How about @, it looks like one of those fake plastic dog poops you can buy
01:36:38 <Gregor> Basically I'm trying to piss of elliott here.
01:36:50 <elliott> Gregor: I do not like you :|
01:37:39 <elliott> Gregor: Will you accept patches that make the commands and CA characters totally awesome if I get them in before any warriors are written that weren't written for the purpose of ensuring I can't write that patch :P
01:37:47 <hagb4rd> y do u care now? just do not spread all these magic values all around your code, so you can change it later
01:37:59 <elliott> hagb4rd: It's part of the protocol... magic values are the name of the game.
01:38:17 <Gregor> elliott: I won't accept any patches before I get the damned thing to work at all :P
01:40:12 <elliott> Gregor: Hmm... maybe destroying SHOULD take only one tick.
01:40:33 <elliott> Gregor: After all, if someone is right behind you, chasing you, in one direction, shouldn't they be able to destroy your wire at the same speed yer poopin'?
01:40:42 <elliott> Gregor: Destroying should move you into where the wire was
01:40:44 <elliott> So that it's dual to pooping
01:40:59 <elliott> That's stupid if it takes more than one tick
01:41:02 <elliott> Gregor: DISREGARD ALL THE ABOVE
01:41:09 <Gregor> elliott: Yeah, also if two people are both destroying the same cell.
01:41:35 <elliott> Gregor: They should merge. Each tick, it should swap whether one or the other's turn takes effect.
01:41:48 <elliott> This is the best idea and if you disagree with it, you are wrong, both in this matter, and as a person.
01:42:16 <elliott> LITERAL BEST IDEA. BEST CHIMERAS.
01:43:15 <elliott> Gregor: Hmm, the timing code will be quite subtle in a bot
01:43:17 <zzo38> What are you making??????????????????????????????????
01:43:30 <elliott> I mean, obviously you can't just arbitrarily break the machine code :P
01:43:32 <elliott> So it has to be at some barrier
01:43:37 <elliott> e.g. reading or writing state
01:43:47 <elliott> I guess you basically just need yield()s
01:43:51 <zzo38> What are you making????????????????????????????????????????????????????????????????????????????????????????????????
01:44:01 <elliott> #define YIELD if (volatile_thing) return
01:44:09 <elliott> zzo38: A game, stop using tons of question marks that's my thing
01:47:03 <zzo38> Another game to make is one that you have to pick up all of the balls but you cannot carry all of them because the different color balls have different mass so it makes it difficult to win
01:47:47 <monqy> game where you flip a coin but it's really really big
01:47:47 <elliott> Gregor: You should replace the whole game with that.
01:48:29 <zzo38> monqy: Make that game too.
01:48:47 <zzo38> monqy: But I think your idea is a bit simple
01:52:23 <elliott> `addquote <monqy> game where you flip a coin but it's really really big
01:52:27 <HackEgo> 610) <monqy> game where you flip a coin but it's really really big
01:53:04 -!- evincar has joined.
01:53:33 <hagb4rd> a lil bit out of context isnt it? ..where can i read the quotes?
01:54:48 <zzo38> A lot of them are out of context, they like to do it like that
01:55:31 <hagb4rd> operation mindfuck still undone
01:56:16 <HackEgo> http://codu.org/projects/hackbot/fshg/index.cgi/raw-file/tip/paste/paste.30030
01:57:54 <Gregor> elliott: I have successfully made something hideously broken.
01:58:22 <Gregor> elliott: Also, it only doesn't crash if I set a hardware watchpoint on the variable that causes the crash.
01:59:42 <elliott> Gregor: How about not using C\
02:00:03 <Gregor> C: THE BEST LANGUAGE THERE IS FOR ALL PORPOISES EVER
02:01:53 <zzo38> C is not bad. But I don't think it is the best language there is for all porpoises ever, or the best language for all purposes ever. There are a lot of programming languages. But use C if that is what you want to use in this case.
02:02:42 <elliott> Gregor: What did you use before you used C for everything
02:03:58 <Gregor> D, before that Java, before that VB.
02:04:07 * Gregor sobs to admit that last one.
02:04:07 <elliott> You have really shitty taste in languages
02:04:15 <elliott> Gregor: But you don't sob to admit Java?
02:05:17 <hagb4rd> so it doesn't crash while debugging?
02:05:38 <zzo38> I have used a lot of programming languages. Sometimes I still do.
02:05:47 -!- copumpkin has joined.
02:06:05 <elliott> Gregor: Are you using pthreads
02:06:10 <Gregor> hagb4rd: It doesn't crash while debugging, but ONLY if I set a watchpoint.
02:06:53 <elliott> Gregor: What ARE you using
02:06:59 <elliott> I can helpfully tell you not to use it
02:07:12 <Gregor> Nothing interesting, that's the thing.
02:07:21 <Gregor> There's no smell to chase.
02:07:36 <elliott> Are you using... for loops?
02:07:41 <elliott> Gregor: Is it in SDL-related code mayhaps?
02:07:50 <Gregor> elliott: SDL hasn't even started yet.
02:08:27 <Gregor> elliott: I've got plenty, but the only active one is for (d = 0; d < tod; d++)
02:08:46 -!- copumpkin has quit (Client Quit).
02:08:46 <elliott> Gregor: I suggest avoiding for loops, they might crash your program. Hope this helps.
02:08:47 <zzo38> Why to avoid those?
02:09:04 <elliott> It is ENTIRELY possible for a program in a for loop to crash. Think about it.
02:09:18 <zzo38> Anything can crash your program if you program it incorrectly. That is why you have to be careful.
02:09:36 <elliott> World should be square btw
02:09:49 <Gregor> Rather than a 97x1627390102 wtfagon.
02:10:10 <zzo38> There is no foreach in C, you have to make up a macro to do foreach in C.
02:10:28 <zzo38> Although it can be done and is useful in some programs to do so.
02:11:45 <Gregor> DAMN - YOU - C - MODULO - OPERATION
02:13:30 <Gregor> !c printf("%d\n", (-1) % 5
02:13:33 <Gregor> !c printf("%d\n", (-1) % 5);
02:14:02 <elliott> !c printf("%d\n", (-1) % 5);
02:14:26 <Gregor> Anyway, that is the WRONG ANSWER >_<
02:15:04 <elliott> Gregor: C does what it wants mofo
02:15:13 <elliott> (div and mod and quot and rem)
02:15:44 <Gregor> hagb4rd: I can say with 100% certainty that anyone who has ever said that (-1) % 5 is any value other than 4 is a terrible person.
02:16:42 <elliott> Gregor: Operator precedence I think >_>
02:16:42 <Gregor> lol, mod and divMod don't agree
02:17:15 <elliott> - really needs to be part of the number literal syntax.
02:17:31 <elliott> That's one of Haskell's major warts, "lol - is the only unary operator and also this means that you have to parenthesise negative literals always"
02:17:46 <elliott> And it means that you can't do (- 9) to partially apply (-) with a section
02:21:10 <monqy> yeah I hate - it's awful
02:22:45 -!- sllide has quit (Read error: Connection reset by peer).
02:33:12 -!- Vorpal has quit (Ping timeout: 264 seconds).
02:39:51 <Gregor> Oh man, there is like a 0% chance that this viewport code is correct :P
02:44:47 <zzo38> I agree that (-1) % 5 == -1 is no good, I agree that it should be 4
02:45:08 <Gregor> elliott: See! Proof positive.
02:45:24 <Patashu> Why are there two kinds of modulus anyway, it's annoying
02:47:05 <zzo38> Maybe the negative kind is useful in some cases, but in general the positive kind (that is, without negative results) is better
02:49:38 <lambdabot> cannot mix `GHC.Real.mod' [infixl 7] and pref...
02:59:24 <elliott> <Patashu> Why are there two kinds of modulus anyway, it's annoying
02:59:37 <Gregor> elliott: I'm adding agents.
02:59:51 <Gregor> elliott: Also, I'm seeing that SDL doesn't seem to be able to select over FDs >_<
03:00:12 <elliott> Gregor: select() does that.
03:00:20 <elliott> Gregor: Why'd you need SDL to
03:00:20 <Gregor> elliott: select() doesn't select over SDL actions.
03:00:42 <Gregor> Such as "lol your window went away", "I need a repaint", or "somebody just closed the window"
03:00:53 <elliott> It only tells you to repaint when it's restored or whatever
03:00:59 <elliott> You probably want your own event loop
03:01:21 <Gregor> But under that I need /something/
03:01:26 <Gregor> And it seems that I have no something.
03:01:31 <Gregor> I can't use select() or SDL >_<
03:01:49 <elliott> One thread handles all events, then does a bunch of SDL_GetTicks and SDL_Delay so that you're on time for drawing the next frame, then you draw a frame, save the current time (so you know when the next frame is), and repeat
03:01:53 <elliott> Another thread can select() and handle the rest.
03:01:57 <elliott> It's basically impossible to avoid threads using SDL.
03:01:57 <evincar> while (running) { while (SDL_PollEvent(&event)) { switch (event.type) { ... } } }
03:02:04 <elliott> evincar: <Gregor> elliott: Also, I'm seeing that SDL doesn't seem to be able to select over FDs >_<
03:02:11 <elliott> evincar: Also, lolniceandslow
03:02:14 <elliott> You want WaitEvent if you're doing that
03:02:20 <elliott> But you don't want to do that, you want to use PollEvent and sleep yourself :P
03:02:44 -!- copumpkin has joined.
03:02:53 <evincar> Meh, didn't mean to write a busy loop there, but don't care.
03:03:01 <Gregor> evincar: It still doesn't help.
03:03:05 <evincar> Point is, variable frame rate.
03:03:08 <elliott> Gregor: I just told you how to do it :P
03:03:08 <Gregor> evincar: I know how to write a simple SDL event loop, that doesn't help me.
03:03:16 <Gregor> elliott: I REFUSE TO THREADS >_<
03:03:17 <elliott> Gregor: I'm getting pretty good at non-simple SDL event loops :P
03:03:21 <hagb4rd> you need the gametime to be passed
03:03:21 <elliott> Gregor: You have literally no choice.
03:03:25 <Gregor> elliott: NOOOOOOOOOOOOOOOOO
03:03:57 <elliott> Gregor: You need that anyway, because you need to sleep()
03:04:15 <Gregor> elliott: SDL has that.
03:04:36 <elliott> Gregor: You... don't want to rely on SDL for that >_.
03:04:54 <elliott> 90s library + your critical loop = woooooooooooooooooooooooooooo
03:05:13 <Gregor> This problem doesn't exist.
03:05:25 <elliott> Gregor: Sounds like you have a problem from all your whining :P
03:05:29 <Gregor> The times involved are not astronomical or astronomically or small.
03:05:35 <Gregor> elliott: The timing problem, not the FDs problem.
03:05:36 <evincar> SDL_AddTimer is good enough for many purposes. I just prefer to avoid it.
03:05:43 <elliott> I wouldn't put SDL_PollEvent into my main event loop.
03:06:09 <elliott> Gregor: You do realise that you are going to have to give in and use threads, right?
03:06:20 <Gregor> elliott: I already am, but the timing is totally unrelated to that.
03:06:25 <Gregor> I already have the timing infrastructure.
03:06:44 <elliott> Gregor: Have I mentioned that you're going to have to use SDL_PollEvent, not WaitEvent :P
03:06:56 <elliott> I suppose your world thread could create a user event
03:07:11 <Gregor> The SDL and CA parts are /DONE/.
03:07:15 <elliott> Gregor: I take it that's what you're doing
03:07:16 <evincar> Yeah, I've had more problems with that than it solved.
03:07:39 <evincar> From the timer thread, that is.
03:07:43 <elliott> Gregor: I'm asking a simple question, disregard evincar :P
03:08:03 <Gregor> elliott: Yes, that's what I'm doing. All I need is a big lock to make sure the CA and agents don't step on each other.
03:08:18 <elliott> Gregor: The CA evolves independently of the agents???
03:08:24 <Gregor> elliott: No, that's my point.
03:08:36 <elliott> Gregor: Why can't you just do ca_tick() after you get all the moves in and apply them
03:08:43 <elliott> That's a purely sequential thing
03:08:49 <elliott> All SDL has to do is turn the CA state into pixels
03:08:50 <Gregor> elliott: I have to display that shit :P
03:08:57 <elliott> So do that in the SDL thread
03:09:10 <hagb4rd> oh.. i thought we're talking bout the draw() not the update()
03:09:15 <elliott> for loop + p->pixels = done?
03:09:17 <elliott> I don't see how you need a lock at all
03:09:18 <Gregor> I'mma keep right on doing this how I'm doing it, because your advice is unhelpful :P
03:09:27 <elliott> Gregor: I just want to know why you need a lock
03:09:34 -!- pikhq has quit (Ping timeout: 252 seconds).
03:09:41 -!- pikhq has joined.
03:09:46 <Gregor> elliott: I suppose I don't need to guarantee I draw one consistent state to the screen, but I'd like to.
03:10:11 <hagb4rd> so you check collisions in the draw() part?
03:10:19 <elliott> Gregor: If the CA updates, I'd like it to update as quickly as possible :P
03:10:29 <elliott> hagb4rd: evincar: I take it you have no actual idea what we're doing at all.
03:10:34 <Gregor> elliott: And what the hell does that have to do with anything?
03:10:43 <elliott> Gregor: It was a joke re <Gregor> elliott: I suppose I don't need to guarantee I draw one consistent state to the screen, but I'd like to.
03:10:45 <elliott> Gregor: But hey, hashlife does it
03:11:01 <elliott> Don't you want to be as FAST AS HASHLIFE???
03:11:24 <elliott> Gregor: Wait. Waitasecond. Waitasecondamo. You use a user event to tell the SDL thread to draw, so the lock doesn't have to exist from SDL's perspective.
03:11:29 <elliott> You can lock before sending off the event.
03:11:38 <elliott> But you definitely want to lock before sending the event :P
03:12:05 <elliott> Gregor: With a big enough world, locking could cause the time guarantees to be fail to met.
03:12:11 <elliott> But I guess the time guarantees only matter while waiting for a turn.
03:12:11 <Gregor> one thread { while (select()) { BIG LOCK { everything } } } another thread { while (SDL_Bullshot()) { BIG LOCK { everything } } }
03:12:25 <elliott> Gregor: Beep, by "another thread" you mean "the main thread".
03:12:30 <elliott> You cannot call SDL threads from outside the main thread.
03:12:59 <elliott> Gregor: Anyway, I'd just draw without any lock because of aforementioned speed paranoia...
03:13:07 <elliott> And the fact that it really doesn't matter if it updates half way :P
03:13:26 <elliott> Since it'll draw again in like 0.06 seconds
03:13:31 <elliott> I guess you could have repeated bad luck, so w/e
03:13:55 <hagb4rd> elliott: i take it.. you have no idea bout game programming patterns
03:14:16 <elliott> hagb4rd: Wow, you're a jerk. Especially because Gregor isn't developing an interactive game
03:14:35 <elliott> And there are no collisions to detect outside of the totally separate agent handling.
03:16:25 <hagb4rd> All I need is a big lock to make sure the CA and agents don't step on each other. <-- collisions?
03:16:50 <elliott> hagb4rd: Step on in the programming sense.
03:17:33 <Gregor> I'mma let you two duke this out since I find the whole conversation 115% uninteresting.
03:17:44 <monqy> what's even happening
03:17:51 <elliott> Gregor: Is repeatedly correcting someone even "duking"
03:18:07 <Gregor> monqy: Everybody hates each other, and this umbrella works wonders for murdering.
03:19:20 <monqy> so is anything not stupid happening
03:19:51 <elliott> monqy: Gregor is writing a game that is good apart from not using my ca
03:20:21 <monqy> is it using a bad ca
03:22:28 <elliott> monqy: wireworld so it could be worse????
03:22:31 <monqy> is your ca even usable yet
03:22:50 <elliott> monqy: I don't know maybe soon???
03:24:55 <evincar> I feel like we've had this conversation before, and recently.
03:25:36 <evincar> YOU CAN'T TELL ME WHAT I FEEL
03:25:40 <monqy> evincar: and how's your language
03:26:09 <evincar> monqy: Been thinking about how best to implement the non-bootstrapped version in a way that doesn't bite me later.
03:27:22 <monqy> does that mean you've finished designing the language itself, or at least enough to consider implementation, or is this this problem not specific to or dependent upon the design of your language?
03:27:24 <evincar> Also what target language to use, which I suppose could be C++, if only as an alternative to C.
03:28:22 <evincar> Compiles natively, is C with some other stuff I don't want to automate.
03:28:38 <elliott> im literally going to suffocate myself on a pillow bye
03:28:45 <monqy> elliott: sorry i was bored
03:29:00 <evincar> elliott: If you'd like to recommend a different target language, be my guest.
03:29:21 <evincar> Your opinion is assuredly worth something.
03:30:08 <monqy> what about c++ is attractive
03:30:24 <evincar> Okay, so my language targets C. And now I have to write scads more code, and I can't rely on automatic destruction or smart pointers or existing collections.
03:30:36 <evincar> I want it to *work* first.
03:30:42 <evincar> I can add other targets later.
03:31:19 <monqy> this is less about c being good and more about c++ being bad
03:31:36 <monqy> target haskell $$$$$$$
03:32:11 <elliott> <evincar> Okay, so my language targets C. And now I have to write scads more code, and I can't rely on automatic destruction or smart pointers or existing collections.
03:32:24 <elliott> also do you know what the boehm gc is
03:32:37 <evincar> Alright, now I have an outside dependency.
03:33:14 <Gregor> (Is the source a GC'd language?)
03:33:48 <monqy> Gregor: presumably, else hahahahahahahahahahahahahahahah
03:33:59 <elliott> evincar: outside epdenency
03:34:06 <elliott> here's a list of language implementations that depend on boehm gc
03:34:13 <elliott> heres a list of other things that depend on boehm
03:34:18 <evincar> Gregor: I'm not entirely sure it needs to be, being that it's stack-based.
03:34:26 <elliott> even gcc uses boehm for chrisssakes
03:34:35 <elliott> yes, using a stack absolves you of all memory management
03:34:45 <hagb4rd> someone has to take the ring back to mordor
03:36:11 <evincar> No, using a stack just makes memory management absurdly straightforward.
03:36:38 <evincar> So I'll target C, whatever.
03:36:40 <elliott> thats true if and only if you cant push nontrivial structures to the stack
03:38:26 <evincar> It's all references anyway. So don't I just have to deal with counting?
03:38:37 <evincar> And can't I throw that responsibility to the garbage collector if I'm feeling lazy?
03:38:58 <elliott> you have no cyclic structures? sweet
03:39:00 * evincar is still not convinced of the merits of GC over deterministic destruction.
03:39:15 <elliott> except that gc works in the general case and "deterministic" methods don't
03:39:22 <elliott> (gc can be perfectly deterministic)
03:39:55 <elliott> You could also use GGGGC if you want precise GC.
03:41:50 <monqy> evincar: good luck designing a good language (thumbs up)
03:42:33 <evincar> monqy: Oh, I'll use a collector, and I'll end up the happier for it.
03:44:52 <Gregor> elliott: It continues to go :P
03:46:57 -!- hagb4rd has quit (Quit: Page closed).
03:54:45 <Gregor> elliott: ... what commands are left for actors other than move, build, destroy?
03:54:48 <zzo38> You could also have the programming language that targets LLVM, it has some things related to garbage collection too
03:54:53 <Gregor> Err, and turn of course :P
03:55:33 -!- MDude has changed nick to MSleep.
03:55:34 <Gregor> IIRC, LLVM's GC is lolterrible.
03:56:45 <Gregor> Also, apparently I can't decide if they're agents or actors.
03:57:42 <elliott> Gregor: Advance, poop, hit, turn left, turn right, these are the One True Names.
03:58:46 <elliott> Gregor: But yeah, those are all :P
04:01:17 -!- augur has quit (Remote host closed the connection).
04:06:46 <evincar> zzo38: I was going to mention LLVM, but I assumed I'd get laughed at.
04:07:01 <zzo38> evincar: I think LLVM is good in general.
04:07:23 <evincar> It certainly seems to be, but I honestly don't know enough about it to feel comfortable targeting it.
04:07:33 <evincar> Especially when I want to get something done quickly that I can later refine.
04:09:12 <zzo38> I am writing the program for using Glk with Haskell.
04:12:17 <Sgeo_> I am now witnessing what atrocious Python code looks like
04:12:33 <Sgeo_> I don't thnk this person's written in Python or any other computer language before
04:12:45 <zzo38> What program is it?
04:12:53 <Sgeo_> Something to do with YouTube stuff
04:13:38 <Sgeo_> I posted links in the minecraft channel
04:15:27 <zzo38> Do you know how, I can, in Haskell, to reference something in another module which I cannot import because it does not exist? But I do know the types of the other things I am accessing.
04:17:01 <Gregor> elliott: Now it all works except that it doesn't actually do anything.
04:17:30 <zzo38> Specifically glkInit :: String; glkMain :: Glk ();
04:18:28 <elliott> zzo38: Uhh, that doesn't make much sense. Do you want to use the FFI?
04:18:45 <elliott> zzo38: If the Glk is the Glk I know, though, I don't see why it needs its own monad; all the functions should just return in IO.
04:18:53 <elliott> /* glk_main() is the top-level function which you define. The Glk library
04:18:53 <elliott> extern void glk_main(void);
04:19:12 <zzo38> Yes that is the reason.
04:19:33 <elliott> You have to write a C file defining glk_main() that uses the FFI to call a Haskell function named glkMain.
04:19:36 <elliott> Then everyone has to link with that.
04:19:50 <elliott> You might have to mark it as exported to the FFI in the source file anyway.
04:21:27 <zzo38> No, glkInit and glkMain are values used by the library program I am making, and they need to use that in the functions which C calls. It also does various other things such as ensure it is safe codes unlike C codes, such as the C code keeping opaque objects registry and dispatching Glk calls, and the Haskell code converting the types between C types and Haskell types.
04:21:40 -!- augur has joined.
04:21:53 <zzo38> Which means I need to import things that do not exist.
04:22:05 <Gregor> elliott: OMG so slow D-8
04:22:23 <zzo38> The user program will also import this program too, although in that case everything is exist already.
04:23:01 <elliott> Gregor: What part is slow?
04:23:12 <elliott> zzo38: You just "import" them by referencing them from C.
04:23:42 <zzo38> elliott: OK. How do I reference them from C, then? They are not C types!
04:27:39 <elliott> zzo38: you can export things with the FFI
04:27:52 <elliott> eforeign export ccall foo :: Int -> IO Int
04:27:52 <elliott> foo n = return (length (f n))
04:27:54 <elliott> Then Foo_stub.h will contain something like this:
04:27:54 <elliott> extern HsInt foo(HsInt a0);
04:27:55 <elliott> and Foo_stub.c contains the compiler-generated definition of foo(). To invoke foo() from C, just #include "Foo_stub.h" and call foo().
04:28:03 <elliott> see http://www.haskell.org/ghc/docs/7.0.2/html/users_guide/ffi-ghc.html
04:28:10 <elliott> zzo38: you also want to look at 8.2.1.1. Using your own main()
04:29:59 <zzo38> I have looked at 8.2.1.1 already
04:32:48 <zzo38> I suppose one idea, which can make it add the necessary exports if needed, as well as other things if needed, is to use Template Haskell.
04:33:52 <zzo38> Why does "foreign export" require the type even if it is already specified in the program?
04:37:01 <Gregor> elliott: So it's POSSIBLE ... just POSSIBLE that even with the simplest possible client you can't keep up :P
04:38:32 -!- evincar has quit (Quit: leaving).
04:38:52 <Gregor> elliott: No, never mind, seems to be a different bug >_>
04:39:08 <zzo38> Now ghci won't load the program if it has foreign export
04:39:51 <Gregor> elliott: Heh, I was always expecting the wrong timestamp X-P
04:42:02 <Gregor> elliott: Pull for AGENTS
04:44:52 <elliott> Gregor: I never downloaded
04:46:10 <Gregor> https://codu.org/projects/rezzo/hg/
04:46:48 <elliott> Gregor: So will you accept a patch that fixes your letters :P
04:47:04 <Gregor> MY CHARACTERS ARE PERFECTION
04:48:41 <elliott> Gregor: http://sprunge.us/HNjb
04:49:07 <zzo38> Maybe it is {-# SOURCE #-} which will do allowing importing non-existing modules
04:49:13 <elliott> Gregor: I will accept keeping the name build rather than poop :P
04:49:27 <elliott> zzo38: You _cannot reference glkMain in that way from Haskell code_.
04:49:30 <elliott> But with the FFI you can refer to it.
04:50:47 <elliott> Gregor: But I will be happy to test it once those completely-vital breaking changes are through :P
04:51:06 <elliott> Also, lol at your argument parsing "library"
04:51:57 <zzo38> Are you sure? It says you can use that to compile mutually recursive modules. But I don't know how you can refer to it with FFI since glkInit and glkMain are not C types.
04:52:32 <elliott> zzo38: By exporting them with "foreign export" from the Haskell file.
04:52:46 <elliott> You must simply do extern void glkMain(...); from your C file.
04:52:54 <elliott> And compile that to an object file which must be linked with the program using GHC.
04:53:11 <elliott> 222 if ((buf = SDL_SetVideoMode(w*z, h*z, 32, SDL_HWSURFACE|SDL_DOUBLEBUF)) == NULL) SDLERR;
04:53:20 <elliott> Gregor: You probably don't want HWSURFACE.
04:53:29 <zzo38> elliott: But it says "foreign export" still needs to be C types. I have two things neither of whcih are C types
04:53:44 <elliott> zzo38: IO () is exported just as IO ()
04:53:55 <elliott> Gregor: For one, your code will probably break with an HWSURFACE, since you don't lock/unlock it
04:54:03 <elliott> Gregor: For two, poking at pixels with an hwsurface is almost definitely going to be slow
04:54:48 -!- pikhq has quit (Ping timeout: 252 seconds).
04:54:50 -!- pikhq_ has joined.
04:55:09 <elliott> Suspect Gregor isn't actually here :P
04:56:11 <elliott> Gregor: My advice about HWSURFACEs is hardly irrelevant... especially since the only time you're going to get one is fullscreened anyway.
04:56:51 <Gregor> I never claimed that anything you said was irrelevant, just that I'm ignoring you :P
04:56:55 <Gregor> I already did HW -> SW :P
04:57:39 -!- CakeProphet has joined.
04:57:39 -!- CakeProphet has quit (Changing host).
04:57:39 -!- CakeProphet has joined.
04:57:49 <elliott> Gregor is just hiding his shame that he didn't think of ! for destroy and ~ for tail.
04:57:59 <elliott> Hoping nobody will ever know.
04:58:57 <Gregor> elliott: Do gcc wander.c -o wander, then ./rezzo ./wander
04:58:57 <elliott> --help?! What's this nonsense!
04:59:17 <elliott> if (sm.ack == ACK_INVALID_MESSAGE) {
04:59:23 <elliott> I... would not call walking into a wall an "invalid message".
04:59:28 <elliott> Nothing HAPPENED, but it was perfectly possible to try.
04:59:39 <elliott> And that wall could have been created on the same turn.
04:59:48 <elliott> (How do you handle such cases, when the ordering of agents is revealed?)
04:59:56 <elliott> (That's a lot of special cases.
05:00:14 <elliott> Welp, I did ./rezzo ./wander and can't fucking find the bastard at all.
05:00:27 <elliott> You should flash the general area with inverted colours at the start :P
05:01:08 <elliott> Well, what would you be open to? It's literally impossible to find.
05:01:29 <elliott> Even with four of them I can only find two.
05:01:56 <elliott> You don't appear to generate any blocks on the most right hand side of the field... an off-by-one?
05:03:32 -!- zzo38 has quit (Remote host closed the connection).
05:04:24 <Gregor> elliott: Actually trying to fix exactly that problem.
05:04:31 <Gregor> I assume there's an off-by-one, but I'm yet to find it.
05:04:45 <elliott> Gregor: The "I can't see where any contestant is" problem seems more important...
05:04:51 <elliott> Or at least it is for me :P
05:05:04 <Gregor> It'll be easier when they're doing something :P
05:05:31 <elliott> Not... really? I have a high-DPI screen.
05:05:38 <elliott> They're smaller than the specks of dust on here.
05:06:05 <elliott> In fact, when they're adjacent to lines, I literally can't tell it from what subpixel rendering artifacts look like on other screens.
05:06:59 <Gregor> Honestly I consider the issue that's not just some display nonsense to be considerably more important.
05:07:09 <elliott> Any zoom level doesn't fit on my screen.
05:07:24 <Gregor> -w and -h change the field size
05:07:29 <elliott> That changes the gameplay.
05:07:56 <elliott> Gregor: OK, here's a MODEST PROPOSAL: What about a simple tail behind the agents? Just pink to background colour in like five pixels.
05:08:00 <elliott> That would make it incredibly to see them on any zoom level.
05:08:14 <Gregor> It actually /removes/ the blocks from the right and bottom >_O
05:08:42 <Gregor> elliott: I have not yet committed to making no changes for visibility. What I have committed to is fixing bugs before UI issues.
05:09:13 <Gregor> for (y = 0, yoff = 0; y < h-1; y++, yoff += w) {
05:09:13 <Gregor> for (x = 0, i = yoff; x < w-1; x++, i++) {
05:10:00 <Gregor> The worst part is I honestly couldn't tell you why I thought it should be h-1 and w-1.
05:10:31 <elliott> pix[si+w*z*zy+zx] = typeColors[world->c[wi]];
05:10:38 <elliott> wrt so slow, you could just increment pix :P
05:11:09 <elliott> At least that works here, dunno if that might have side-effects
05:11:41 <elliott> Actually I'm unclear how you actually do zooming...
05:18:16 <Gregor> Arghwtf, I just "fixed" something and instead it broke everything.
05:18:31 <elliott> Gregor: Patch (in suitable format for "hg import"): http://sprunge.us/BVGR
05:19:37 <Gregor> I didn't realize you could - an include line ...
05:20:17 <elliott> I'm pretty sure that's the one and only reason to do it ever :P
05:20:19 <Gregor> For some reason my board is turning dead instantly right now >_<
05:20:56 <elliott> Gregor: What is sizeof(ServerMessage)?
05:21:05 <Gregor> elliott: Look at its definition :P
05:21:25 <Gregor> elliott: Look at its definition :P
05:21:43 <Gregor> elliott: Look at its definition :P
05:21:46 <elliott> Okay so it's thirteen squared times two plus two.
05:23:43 <Gregor> Wow, apparently I don't know how to swap buffers properly (at 1AM) >_<
05:26:28 <elliott> itidus20: Almost as helpful as hagb4rd or whatever his name is :P
05:26:48 <elliott> Gregor: The amount of infrastructure required for a simple bot is astonishing :P
05:26:56 <elliott> I mean, slightly less simple than wander, by which I mean, recording anything at all.
05:27:15 <Gregor> Wander is clearly the best bot.
05:27:25 <elliott> Mostly the problem is that I have to translate it all to decent structures on read...
05:27:32 <elliott> Which I SUSPECT may take longer than 0 seconds.
05:27:40 <elliott> And operating on it in raw ASCII form is gross.
05:29:56 <itidus20> ahh C ... could it be, that C is the language with the most different compilers ever written
05:30:38 <Gregor> elliott: By making wander use BUILD instead of ADVANCE, I made a circuit!
05:31:20 <elliott> Gregor: Now if only we could say it was POOPING and have the names on our side.......................
05:31:20 <itidus20> thats what people need to be told when listing the virtues of C
05:31:49 <Gregor> But ... that IS one of the virtues of C ...
05:32:13 <Gregor> That list probably goes C, C++, JavaScript, by the way :)
05:32:37 <Gregor> (OK, OK, some of the olde languages may be up there too >_> )
05:32:54 <Gregor> elliott: Every browser has an implementation!
05:33:39 <Gregor> Anyway, I've pushed my last changes for tonight, I'm going to sleep.
05:33:41 <Patashu> How about languages like fortran/fourth/cobol
05:33:52 <Gregor> <Gregor> (OK, OK, some of the olde languages may be up there too >_> )
05:34:19 <Patashu> magical google adventure time!
05:34:19 <Gregor> I don't think COBOL actually had that many implementations though?
05:34:54 <Patashu> why is fortran faster than C anyway?
05:35:17 <Patashu> 'Significantly, the increasing popularity of FORTRAN spurred competing computer manufacturers to provide FORTRAN compilers for their machines, so that by 1963 over 40 FORTRAN compilers existed.' fortran wins I think
05:35:25 <elliott> Over FORTY??????????????????????????????????????
05:38:34 <Gregor> Remember, there were barely forty COMPUTERS in 1963 (zzzzzz)
05:38:58 <Patashu> Lex Luthor stole forty fortran compilers
05:39:09 <Gregor> Patashu: And that's awful.
05:39:34 <Gregor> (Or was it "terrible"?)
05:39:47 <Gregor> Durn, it was terrible.
05:39:50 <Patashu> No! You can't quote a meme wrong!
05:46:31 <elliott> Gregor: Ha ha I might be able to do it without ANY PARSING AT ALL
05:46:36 -!- CakeProphet has quit (Ping timeout: 240 seconds).
05:48:19 -!- oerjan has joined.
05:49:33 <oerjan> 14:35:53 <elliott> 06:36:47: <oerjan> quintopia: well assuming you are using Linux, last i used that for a desktop focusing and moving to the top were independent actions
05:49:36 <oerjan> 14:35:59 <elliott> That's not really a common choice nowadays :P
05:49:46 <oerjan> PEOPLE POISONED BY WINDOWS CONVENTIONS, I SAY
05:50:41 <Patashu> there's a program, xmouse, that lets you focus on a window without bringing it to the top in windows
05:51:14 <elliott> That's also called any sloppy-focus WM ever.
05:51:31 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
05:53:12 <oerjan> well admittedly the wm's i used had a tendency to focus into the window the mouse was pointing to, which did have its own dangers. an actual way to _select_ a window for focus without bringing it to the top might be better. (and it probably exists.)
05:53:56 <elliott> oerjan: That's focus-follows-mouse. Sloppy focus is: Keyboard focus is behind mouse; clicking raises to surface.
05:54:23 <Patashu> wait, is there a difference between the two?
05:54:25 <oerjan> um what's the difference between those two.
05:55:39 <oerjan> and i mean selecting by some action other than simply moving the mouse, which as i said had its own dangers.
05:58:49 <elliott> oerjan: I described the exact difference.
05:59:03 <elliott> Focus-follows-mouse: Keyboard focus is behind mouse; mousing into a window raises to surface.
05:59:07 <elliott> Sloppy focus: Keyboard focus is behind mouse; clicking raises to surface.
05:59:36 <oerjan> ah. so it has no difference for focus.
05:59:49 <monqy> the way it works for me is clicking brings focus and clicking while holding down the super key floats the window if tiled and raises to the surface (and if you drag while holding the super key you move it around)
06:00:01 <monqy> I think the xmonad default is that focus follows mouse but I dislike that
06:00:36 <monqy> I usually use the keyboard controls to change focus if it's something textual, and click if it's something graphical
06:02:46 -!- copumpkin has joined.
06:03:11 <oerjan> <Patashu> why is fortran faster than C anyway?
06:03:30 <oerjan> i've read something about better aliasing rules that are easier to optimize
06:15:07 <Patashu> http://www.ibiblio.org/pub/languages/fortran/ch1-2.html in particular b)
06:17:05 <oerjan> a timeless document. and by that i mean it has no date.
06:17:37 <Patashu> http://www.ibiblio.org/pub/languages/fortran/ch1-2.html 1996-1998
06:21:31 <elliott> Gregor: Guess who has a perfect clone of wonder that also presents the whole update structure as a rich structure with ALMOST NO PARSING OVERHEAD
06:22:03 <elliott> Well... it does store cells in memory as their ASCII character, so OK, it has the parsing overhead of "a really simple case statement on the character" each grid read, but c'mon :P
06:22:09 <oerjan> elliott should write advertisements
06:22:27 <elliott> oerjan: It's exactly 99 lines longer than the C version X-D
06:22:49 <elliott> But the C version uses the headers of the C implementation and DOESN'T do any of that fancy stuff, so it's about ten times lamer.
06:23:05 <oerjan> wait, are we talking about a haskell program _longer_ than a corresponding C program?
06:23:26 <elliott> I could write the equivalent of the C program in as many lines, although it cheats by having a dependency on an implementation header file that I don't
06:23:30 <oerjan> there may have to be some withdrawing of badges here
06:23:39 <elliott> I wrote mine with an eye to generalising to bots that ACTUALLY DO ANY DECISION-MAKING AT ALL:P
06:23:49 <elliott> Apart from "Did I just bump into a wall? Turn left. Otherwise go forwards."
06:24:03 <oerjan> ah good old Karel the Robot
06:24:15 -!- CakeProphet has joined.
06:24:15 -!- CakeProphet has quit (Changing host).
06:24:15 -!- CakeProphet has joined.
06:24:32 <oerjan> another instance of me reading programming books without access to a computer
06:25:01 <elliott> Warning: Defaulting the following constraint(s) to type `Integer'
06:25:01 <elliott> (Integral b0) arising from a use of `^' at wonder.hs:25:20
06:25:01 <elliott> (Num b0) arising from the literal `2' at wonder.hs:25:21
06:25:01 <elliott> In the expression: viewport ^ 2
06:25:02 <elliott> In an equation for `viewSize': viewSize = viewport ^ 2
06:25:07 <elliott> I LITERALLY HAVE "VIEWSIZE :: INT" THE PREVIOUS LINE
06:25:15 <elliott> Oh, it's defaulting the TWO to Integer :P
06:26:00 <oerjan> elliott: you must have some humongous warning level :P
06:26:21 <elliott> oerjan: Warning about defaulting is reasonable since Integer is slow :P
06:26:31 <elliott> case $wf1 13 lvl27_r2Tk of ww_s2Kb { __DEFAULT ->
06:26:33 <oerjan> istr someone complaining about ^ giving too many warnings before
06:26:34 <elliott> HOW DID YOU NOT CONSTANT FOLD THAT
06:26:36 <NihilistDandy> oerjan: elliott actually set up GHC to give inapplicable warnings. Just to keep him on his toes.
06:26:53 <elliott> viewSize = viewport * viewport
06:26:56 <elliott> LET'S SEE IF YOU CAN CONSTANT FOLD THIS
06:27:27 <elliott> There, now viewSize doesn't even exist :P
06:28:20 <elliott> oerjan: You'll be pleased to know that I use no less than _two_ unsafe functions in this program.
06:28:33 <elliott> Well, ignoring castPtr/poke/peek I needed to implement Storable for Cell.
06:28:44 <elliott> getViewBytes :: Get (Vector Word8)
06:28:44 <elliott> bytes <- getBytes viewSize
06:28:44 <elliott> let (ptr, offs, len) = BI.toForeignPtr bytes
06:28:44 <elliott> return $ V.unsafeFromForeignPtr ptr offs len
06:28:45 <elliott> getView :: Get (Vector Cell)
06:28:47 <elliott> getView = V.unsafeCast <$> getViewBytes
06:28:53 <elliott> BI is, of course, Data.ByteString.Internal, an unstable API.
06:29:02 <elliott> Though I somewhat doubt toForeignPtr's interface will change much.
06:29:16 <oerjan> i also recall someone complaining that ghc did not optimize ^2
06:29:24 <oerjan> both of these were years ago
06:29:29 <elliott> oerjan: It might have even been m- oh :P
06:29:49 <oerjan> not _that_ many years. after i joined this channel, certainly
06:29:59 <Gregor> elliott: Winning condition is unachievable :P
06:30:05 <elliott> Gregor: Good sleeping, eh?
06:30:07 <oerjan> which you did only slightly later.
06:30:10 <elliott> Gregor: Wanna see my Haskell? :P
06:30:16 <Gregor> elliott: Right up until I realized the winning condition was unachievable it was 8-D
06:30:25 <elliott> Gregor: Do you even place flags?
06:30:26 <NihilistDandy> elliott: It still pisses me off that I'm older than you. MY LIFE WAS WASTED
06:30:36 <Gregor> elliott: No, but that's not the reason.
06:30:36 <elliott> NihilistDandy: You're probably more accomplished than me.
06:30:46 <elliott> Gregor: http://sprunge.us/ZYPI BEHOLD MY WANDER CLONE
06:30:49 <oerjan> also i have a vague idea it was probably on haskell-cafe
06:30:53 <Gregor> elliott: (The implementation is incomplete, but I mean by /spec/ it's unachievable)
06:31:09 <elliott> I'm actually proud of that code, it doesn't really have a single grotty line, even when it's doing something totally unsafe :)
06:31:19 <elliott> Which it only actually does in really one place in the code, but anyway
06:31:45 <elliott> {-# LANGUAGE MultiParamTypeClasses #-}
06:31:45 <elliott> Oh cool, this is actually unneeded
06:32:05 <monqy> so what does this thing do
06:32:10 -!- zzo38 has joined.
06:32:26 <elliott> monqy: It's a bot for Gregor's neat-o WireWorld-based programming game :P
06:32:38 <elliott> It is exactly as stupid as the example bot Gregor wrote.
06:33:07 <Sgeo_> Ooh, where's this game?
06:33:13 <elliott> monqy: Here's his: http://codu.org/projects/rezzo/hg/index.cgi/file/c4149bcda0c3/wander.c
06:33:26 <oerjan> i wonder if anyone has made a game based on the day and night CA
06:33:28 <elliott> Mine is just a port of that thing's logic to a much more generic, efficient, nice, pretty Haskell framework for this :P
06:33:52 <elliott> monqy: Optimised because you have exactly 0.06 seconds to decide what to do each tick.
06:34:05 <oerjan> one color per player, each turn it evolves normally and each player gets to manually change the color of one pixel
06:34:05 <NihilistDandy> elliott: You could have just said "Haskell framework" :D
06:34:16 <oerjan> goal is to wipe the other player's color off the board
06:34:16 <elliott> NihilistDandy: Now now, I'm not THAT much of a fanboy :P
06:34:54 <NihilistDandy> I'm midproposal for the UVM CS department, and the year hasn't even started
06:34:59 <elliott> What I do need to add is an additional thread... I basically need to run a "decide what to do thread" that decides what to do each turn and gets killed if it takes too long.
06:35:10 <elliott> That, in turn, has to draw from a longer-term "plan based on world state as merged in from updates"...
06:35:17 <elliott> But wander doesn't need any of that :P
06:35:22 <elliott> <elliott> Gregor: So why is that?
06:35:29 <Gregor> <elliott> Gregor: So why is that? // electrons spread flags, and bases act like permanent flags. To win you have to get an enemy flag next to your base. But that means you have to put an electron between the two, which, having two incompatible options, will simply dissipate.
06:35:42 <elliott> (More likely very slow typing)
06:36:00 <elliott> oerjan: Darnes & Noble? My first thought.
06:36:05 <elliott> (Yeah, yeah, day and night :P)
06:36:17 <NihilistDandy> elliott: Darnes and Noble is how I feel everytime I leave one of those stores
06:36:51 <elliott> I'm going to sit here assuming Gregor thinks my Haskell is amazing.
06:36:54 <NihilistDandy> Also, found the link, oerjan, so don't bother, if you were going to
06:37:26 <oerjan> haskell is always amazing
06:37:35 <oerjan> http://en.wikipedia.org/wiki/Day_%26_Night
06:37:54 <elliott> oerjan: I can't spot a pun... IS THIS A FANBOY STATEMENT FROM OERJAN???
06:38:07 <oerjan> yep, i love day and night
06:38:25 <elliott> Day & Night is prettier than GoL, hough
06:38:34 <oerjan> oh that. well i suppose.
06:39:07 <oerjan> it's certainly complicated enough to be TC
06:39:15 <elliott> but so are a lot of things :)
06:39:23 <elliott> i guess those things are usually tc though :/
06:39:39 <elliott> http://upload.wikimedia.org/wikipedia/en/8/8f/Ladder_burst.gif this is pretty
06:39:56 <oerjan> finite memory, says some people
06:41:04 <oerjan> elliott: what CA is that
06:41:06 <elliott> oerjan: life without death
06:42:07 <elliott> oerjan: did you admire my beautiful haskell :{
06:43:36 <elliott> or do you mean it was not beautiful
06:44:27 <monqy> some of the optimization sads me a bit
06:44:35 <oerjan> iz ok. btw you don't need to repeat an identical pattern for a new guard.
06:45:03 <Patashu> if you want to play with unusual cellular automata you can use MCell
06:45:07 <elliott> Gregor: So is there an obvious fix to the spec, or?
06:45:11 <oerjan> i suppose it doesn't matter when it's a single character
06:45:13 <monqy> oerjan: did nested guards finally happen
06:45:21 <elliott> oerjan: oh hm, like I can just start it with |?
06:45:46 <oerjan> monqy: no, has always been that way
06:45:50 <elliott> oerjan: that feels really weird... local bindings propagating to an AST node not included within that binding structure
06:45:53 <monqy> I was thinking of something else
06:46:01 <elliott> I think I'll keep the "c" because that makes me feel happier than that thing which is disturbing?
06:46:07 <CakeProphet> This is the busiest IRC channel I frequent.
06:46:07 <elliott> well I guess it kind of is one pattern with a lot of guards
06:46:13 <elliott> CakeProphet: not without me >:D
06:46:23 <monqy> I was thinking pattern in the sense of not haskell paterns but more like patterns occurring throughout the code
06:46:36 <monqy> and then I think I misread something
06:47:09 <pikhq_> "The solution, obviously, was to hurry up and become God." This line makes me far too happy.
06:47:10 <oerjan> elliott: but the guards _are_ in the scope of the same pattern
06:47:59 <elliott> the indentation would push it that far anyway :D
06:48:08 <elliott> <NihilistDandy> CakeProphet: Get all up in #haskell
06:48:16 <elliott> NihilistDandy: it's much less homely/useful now that it's so busy :(
06:48:34 <CakeProphet> yes #haskell wasn't very busy when I was there.
06:49:14 <NihilistDandy> I wouldn't even know about Haskell were it not for Lisp
06:49:49 <oerjan> monqy: i do recall there was some kind of proposal for nesting guards and/or patterns
06:49:51 <CakeProphet> I like how I'm getting paid to move bytes around.
06:50:07 <elliott> CakeProphet: everyone is just paid to move atoms around.
06:50:08 <monqy> I'd also like multiple-clause lambda
06:50:11 <oerjan> the idea was that you should be able to nest without committing to the branch you nested into
06:50:30 <elliott> NihilistDandy: edwardk is nice... you only knew haskell since land of lisp?
06:50:41 <elliott> i really didn't like that guy's short thing about lisp and haskell
06:50:48 <elliott> i mean you can say it's in jest but it still betrays your biases
06:50:54 <NihilistDandy> elliott: That was the first place I heard of it. Then I dropped Lisp and Scheme like syphilitic whores
06:51:04 <Sgeo_> http://www.fanfiction.net/s/5782108/11/Harry_Potter_and_the_Methods_of_Rationality
06:51:31 <elliott> Sgeo_ has finally got to the point where it's impossible to tell if he's confused or just stupid.
06:51:46 <elliott> <Sgeo_> http://www.fanfiction.net/s/5782108/11/Harry_Potter_and_the_Methods_of_Rationality
06:51:53 <CakeProphet> I find it prudent to keep track of less beautiful languages for the purposes of making money.
06:52:03 <monqy> http://www.fanfiction.net/u/1730364/Hans_von_Hozel best fanfic author imo
06:52:11 <NihilistDandy> elliott: Scheme was my first exposure to FP, and I do love it. But Haskell's just nicer on a personal level
06:52:18 <elliott> CakeProphet: Knowing the more beautiful languages is a much scarcer skill.
06:52:22 <monqy> hans von hozel's fanfics are truly amazing
06:52:38 <elliott> CakeProphet: And not one generally called upon to do tedious busywork like you're enjoying.
06:52:40 <Sgeo_> elliott, ....what?
06:52:48 <elliott> Sgeo_: you continue to push the boundaries.
06:53:10 <Sgeo_> I'm confused as to what, exactly, is wrong with what I said.
06:53:24 <NihilistDandy> CakeProphet: I know C, a little C++, and some x86. I can't even touch Java
06:53:32 <itidus20> J Rowling's How to Build an Empire Writing a Few Magic Novels
06:54:02 <CakeProphet> NihilistDandy: I've been working in C# for the past fews days, but now I'm suddenly in Python.
06:54:04 <NihilistDandy> Also Perl, but I don't really consider that a programming language so much as a really heavy implementatino of awk
06:54:06 <elliott> monqy: how amazing are these fan fictions i must know
06:54:21 <elliott> `addquote <NihilistDandy> Also Perl, but I don't really consider that a programming language so much as a really heavy implementatino of awk
06:54:23 <HackEgo> 611) <NihilistDandy> Also Perl, but I don't really consider that a programming language so much as a really heavy implementatino of awk
06:54:26 <elliott> 56. We are the Pirates reviews
06:54:26 <elliott> Pirates make their sail in to LazyTown!
06:54:26 <elliott> Lazytown - Rated: K - English - Crime/Suspense - Chapters: 1 - Words: 199 - Reviews: 8 - Published: 5-17-09 - Stephanie & Sportacus - Complete
06:54:26 <elliott> 57. Eurovision Song Contest 2009 » reviews
06:54:26 <elliott> And of course, that the ending can only make its finish when the contest actually happens.
06:54:28 <monqy> elliott: if i recall correctly, so amazing
06:54:28 <elliott> TV X-overs - Rated: K - English - Drama/Suspense - Chapters: 11 - Words: 1,673 - Reviews: 9 - Updated: 5-17-09 - Published: 5-8-09
06:54:31 <elliott> monqy: i cant decide which to read
06:54:31 -!- Patashu has quit (Ping timeout: 246 seconds).
06:54:45 <CakeProphet> NihilistDandy: elliott has this thing about Perl, you see...
06:54:46 <elliott> NihilistDandy: Sorry, but I cannot misrepresent lines.
06:54:55 <elliott> There are plenty of typos in the database; you will just have to suffer in unison.
06:55:06 <elliott> NihilistDandy: I AM THE ARCHIVIST. YOU SHALL NOT DISTORT THE RECORD.
06:55:11 <elliott> That R in Record is capitalised.
06:55:33 <elliott> http://www.fanfiction.net/s/5067667/1/We_are_the_Pirates
06:55:38 <elliott> "Maybe we should have not made our stealings their detection!" shout Captain Pirate, as the nuke to collide LazyTown and a boom.
06:55:59 <pikhq_> VVE HAVE ALVVAYS BEEN AT VVAR VVITH EVRASIA.
06:56:02 <elliott> The people were all stuck on boats because the Snails owned the world now. --http://www.fanfiction.net/s/5048176/1/Maple_Story
06:56:09 <elliott> monqy: this is the bes tfixtion
06:56:16 <elliott> 80. Danube to the Stars reviews
06:56:16 <elliott> The Englands are tired at being confuse with America!
06:56:16 <elliott> Allo Allo! - Rated: K - English - Sci-Fi - Chapters: 1 - Words: 284 - Reviews: 7 - Published: 5-7-09 - Complete
06:56:19 <NihilistDandy> CakeProphet: What is elliott's thing about Perl, anyway/
06:56:45 <pikhq_> elliott: http://www.fanfiction.net/s/5782108/1/Harry_Potter_and_the_Methods_of_Rationality I've actually been finding this utterly amusing.
06:56:54 <pikhq_> Perhaps a bit... Too much.
06:57:09 <NihilistDandy> pikhq_: Was this the channel where I first saw that mentioned, or was it #jesus?
06:57:26 <pikhq_> I find it a bit too easy to excuse an 11 year old genius polymath.
06:57:34 <elliott> The Methods of Rationality has potential in concept but it's really terrible.
06:57:53 <pikhq_> Well, yes, there's many obvious flaws in the writing.
06:57:58 <CakeProphet> NihilistDandy: his enjoyment of Perl bashing, I suppose.
06:57:59 <pikhq_> The concept is just amusing the hell out of me.
06:58:06 <NihilistDandy> My Immortal is the only fanfiction that matters, ever
06:58:14 <monqy> my immortal is good yes
06:58:26 <elliott> If anyone would like a summary: Harry Potter is a brat, but Eliezer Yudkowsky -- sorry, I mean Eliezer Potter -- is always right. This is because he uses Logic while everyone uses Stupid. Except when he's wrong!!! But even then, he's right.
06:58:43 <monqy> elliott: that sounds awful
06:58:45 <pikhq_> In case you hadn't noticed, I am willing to excuse a hell of a lot when the ideas entertain me.
06:58:47 <elliott> pikhq_: But if you have a thing for self-insert wish fulfilment fantasy fan fiction...
06:59:01 <NihilistDandy> [02:59:58] <elliott> pikhq_: But if you have a thing for self-insert wish fulfilment fantasy fan fiction...
06:59:17 <pikhq_> NihilistDandy: Like I said, many obvious flaws.
06:59:20 <CakeProphet> NihilistDandy: hey our timezones match imagine that.
06:59:33 <monqy> im going back to hans von hozel ok
06:59:38 <NihilistDandy> CakeProphet: Yeah, the whole GMT -5:00. Nobody lives there. :P
07:00:06 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
07:00:09 <elliott> pikhq_: The problem is that the purpose of the story is basically to recruit people into the Great Rationalist Yudkowsky Worshipping Circlejerk, and Harry is the vector for this.
07:00:15 <elliott> pikhq_: But this means that Harry can never actually fail, ever.
07:00:28 <pikhq_> elliott: Well, yeah. Yudkowsky does enjoy his circlejerking.
07:00:32 <elliott> He's the embodiment of rationality, and so it is LITERALLY IMPOSSIBLE for him to ever fail, because that would not match the worldview the thing is trying to portray.
07:00:44 <pikhq_> elliott: That doesn't mean I can't be entertained by his thoughts from time to time.
07:00:45 <elliott> So there can never actually be any real conflict, so it's pretty much DOA as fiction.
07:01:01 <monqy> i'd be too dead to enjoy any of it
07:01:22 <pikhq_> elliott: You needn't worry, I'm not about to go out joining the Yudkowsky circlejerk.
07:01:51 <elliott> Sure. I gave up on MOR basically when it became clear that Eliezer wasn't going to stop pushing his terrible view of social interaction.
07:01:55 <pikhq_> elliott: For a rationalist, he seems exceptionally egotistic.
07:02:18 <elliott> ("The only thing anyone cares about ever is status; therefore everyone should master portraying status and you will WIN. This applies UNIVERSALLY.")
07:02:34 <pikhq_> In fact, I'd say his ego is the largest I can think of.
07:02:36 <elliott> I'm pretty sure this is also the mentality that created the hilarious "pickup artist" bullshit...
07:02:58 <pikhq_> Which, TBH, is a pretty major flaw in someone who claims to engage in rational thought often. :P
07:03:43 <pikhq_> But, anyways, I'm enjoying his wank-in-text-form, perhaps a bit too much.
07:04:03 <CakeProphet> I can't say that many of my thoughts correspond to ratios very much.
07:04:13 <pikhq_> CakeProphet: Smartass.
07:04:40 <pikhq_> NihilistDandy: Smartass².
07:04:40 <elliott> NihilistDandy: It's pretty much the view most commonly picked up by being an cynical nerd who's bad at social interaction.
07:05:00 <elliott> Cynicism is pretty much the source of everything unbearable except the things it isn't the source of.
07:05:05 <elliott> Helpful statements from elliott.
07:05:21 <pikhq_> elliott: Hmm. I'm a cynical nerd who's bad at social interaction, and I just figure that there's something I'm missing here.
07:05:47 <elliott> pikhq_: Try not being a cynic.
07:05:57 <pikhq_> I do, but it ain't easy.
07:06:05 <pikhq_> Many people seem to try hard to justify cynicism.
07:06:24 <elliott> "Young people who pretend to be wise to the ways of the world are mostly just cynics. Cynicism masquerades as wisdom, but it is the farthest thing from it. Because cynics don’t learn anything. Because cynicism is a self-imposed blindness, a rejection of the world because we are afraid it will hurt us or disappoint us." --STEPHEN COLBERT BEYOTCHES
07:06:32 <Gregor> elliott: I can't think of how to fix my flags :P
07:06:32 <elliott> (I think this is how you win arguments on the Internet; quoting Stephen Colbert.)
07:06:41 <elliott> Gregor: What's the problem again? I forgot completely :P
07:06:51 <Gregor> <Gregor> <elliott> Gregor: So why is that? // electrons spread flags, and bases act like permanent flags. To win you have to get an enemy flag next to your base. But that means you have to put an electron between the two, which, having two incompatible options, will simply dissipate.
07:07:03 <CakeProphet> elliott: yes I've read from arguments on the internet that this is a good approach
07:07:13 <elliott> Define "electrons spread flags"? If an electron has a flag behind it, it copies a flag as it move?
07:07:27 <Gregor> elliott: I explained these rules :P
07:07:33 <pikhq_> Well. Actually, not sure that "cynicism" is quite the right term for what's a much more simple "fuck most everything, everything is wrong and could be better".
07:07:36 <Gregor> elliott: A flag moves if there's an electron next to it.
07:07:41 <elliott> Gregor: OK, rather than making it dissipate into space, just have it dissipate INTO A FLAG :P
07:07:52 <pikhq_> In certain contexts that could even be interpreted as optimisim, even.
07:07:54 <elliott> pikhq_: The problem is when you apply it to people.
07:07:54 <Gregor> elliott: So, to get a flag from point A to point B, you have to continuously send a sequence of electrons from B to A.
07:08:02 <pikhq_> And that was one two many "even"s.
07:08:11 <elliott> Like, sure, everything sucks, but "people suck" doesn't explain that and it isn't helpful in any way.
07:08:11 <NihilistDandy> CakeProphet: s/arguments on the internet/any reddit thread ever/
07:08:15 <Gregor> elliott: That doesn't make any sense, since the rules for the base and flag conflict.
07:08:15 <pikhq_> elliott: Hrm. I... Generally don't, actually.
07:08:54 <Gregor> NihilistDandy: Also dandies?
07:08:58 <pikhq_> Very few people actually intend to do things that are wrong, evil, stupid, etc. Quite a few people act on misinformation, though.
07:09:07 <Gregor> elliott: Bases turn into flags ... that's how you get flags in the first place.
07:09:23 <elliott> I was just thinking of bases as FLAG-KILLERS.
07:09:23 <Gregor> elliott: That is, they behave like a flag, except they don't disappear when there's an electron next to them.
07:09:41 <elliott> Gregor: Hmm... flags are basically spreading currents, aren't they?
07:09:45 <pikhq_> NihilistDandy: Fundamentally uninteresting, IME.
07:09:48 <elliott> You could just make them literally that and drop the electrons.
07:09:55 <elliott> So you could just wire up opponent's base to your base.
07:10:13 <Gregor> A) Wiring an opponents base to your base = flags spreading in both directions, lol
07:10:14 <pikhq_> I mean, really, it'd be so easy and *boring* to be evil.
07:10:20 <NihilistDandy> pikhq_: You just don't know any really evil people. Cynical douche != villain
07:10:21 <Gregor> B) Remember the whole conversation about flags moving under lightspeed?
07:10:50 <elliott> I'm not sure what to do, but the basic model seems like it should be right...
07:11:13 <CakeProphet> the flag would just be a special, slow-moving electron
07:11:33 <pikhq_> NihilistDandy: Start assassinating a single, random individual with a sniper rifle, move on after each such instance. Start leaving notes in conspicuous places detailing this, threatening to not stop unless my goals are met. Simple, easy, evil, and fucking *boring as all hell*.
07:11:41 <Gregor> The rules as stands: Flag with no electrons -> flag. Electron next to flag -> flag. Electron next to base -> flag. Electron otherwise or next to conflicting flags/bases -> tail. Flag next to opponent's base -> conductor + lose.
07:11:59 <NihilistDandy> pikhq_: Murder is boring evil. Terrorism is a dreadful bore.
07:12:32 <pikhq_> Real evil is also a problem space I find even less interesting.
07:12:32 <Gregor> ANOTHER THUNDERSTORM, INDIANA?
07:12:52 <elliott> Gregor: It FEELS like it should be a really simple fix :P
07:13:03 <CakeProphet> Gregor: I think it would make more sense if flag simply generated a special flag electron when connected to a condcutor.
07:13:22 <Gregor> CakeProphet: But that means that when you connect your base to the opponent's, you now have flags moving in both directions.
07:13:33 <elliott> Gregor: Then it goes onto the FLAG FIGHT STATE
07:13:39 <pikhq_> Clearly, I am not cut out for this "evil mastermind" business, since I can't even consider it interesting enough to think about how one would *hypothetically* go about it for more than a few seconds. :P
07:14:04 <CakeProphet> Gregor: not if you wait to connect to your base.
07:14:26 <Gregor> CakeProphet: No, then your base poops a flag.
07:15:41 <CakeProphet> yeah that notation doesn't mean anything to me.
07:15:47 <elliott> Wait, flags can... change space into wire?
07:15:57 <Gregor> CakeProphet: a is a base, A and B are flags, . is a conductor, _ is space.
07:16:12 <Gregor> elliott: That was being done by an agent. I'm just showing what's wrong with CakeProphet's model.
07:16:21 <oerjan> `addquote <Gregor> ANOTHER THUNDERSTORM, INDIANA? <Gregor> That's three today. <elliott> Gregor: It FEELS like it should be a really simple fix :P
07:16:25 <HackEgo> 612) <Gregor> ANOTHER THUNDERSTORM, INDIANA? <Gregor> That's three today. <elliott> Gregor: It FEELS like it should be a really simple fix :P
07:17:19 <CakeProphet> Gregor: so your saying that your flag electron prevents their flag electron from ever reaching your base?
07:17:39 <CakeProphet> couldn't you just like, make the rules work so that it doesn't do that? :P
07:18:06 <Gregor> CakeProphet: Even if you did, it would take such ridiculous precision timing to do it right that I find it grotty at best.
07:18:17 <Gregor> (Which is the same answer to the same fix for the current system)
07:19:52 <elliott> Gregor: Is this going to require a major rework of some sort?
07:20:30 <elliott> Gregor: Here's a random idea: Destroying a base creates a flag-destroying virus that spreads. You have to destroy all flag cells of your opponent to win.
07:20:38 <elliott> So you have to take out the base and then get any on disconnected wires.
07:21:46 <elliott> Gregor is now ignoring me and coming up with something better :P
07:22:25 <CakeProphet> Gregor: I think it would just make sense if opposite flag electrons didn't interfere with one another, and then it just becomes a matter of who got their base connected last.
07:29:13 <Gregor> elliott: It probably won't require a major rework. It's probably too easy to just glut the substrate with flags and then block off your own base in that system ... maybe.
07:29:21 <Gregor> CakeProphet: This is a CA. That is not how CAs work :P
07:30:06 <Gregor> ...A.B... <-- lol what do you do here
07:30:29 <monqy> ....C.... presumably
07:30:33 <elliott> Gregor: Oh yeah, I'd rather you just quickly patch up the current system, I was just giving an option if that's not possible :P
07:31:16 <Gregor> I'm thinking maybe "base" and "flag geyser" need to be distinct.
07:32:03 <Gregor> Bases spit out nothing, they're just for swallowing opponent flags :P
07:33:21 <CakeProphet> Gregor: wouldn't it be easy if they just existed in the same place for a frame and then continued on?
07:33:34 <CakeProphet> I'm sure you could make it sound more formal.
07:34:14 <CakeProphet> you couldn't make one that works like that?
07:34:22 <elliott> Not without additional junk states.
07:34:39 <elliott> How about that's terrible.
07:34:48 <elliott> And would cause a HUGE explosion of junk states for clients to deal with.
07:35:03 <Gregor> CakeProphet: Also note that electrons are worthless in that system.
07:35:34 <Gregor> CakeProphet: Every cell has 2^players states to accommodate every possible flag combination.
07:36:07 <elliott> Gregor: BTW, you're kind of fucked wrt more players... well, I guess you could use the few characters after 9
07:36:18 <elliott> Oh well, breaking protocol changes rock
07:36:21 <Gregor> elliott: I don't care about supporting more than *10.
07:36:30 <CakeProphet> make up some new formalism. throw some operators in, everything will be fine. >_>
07:36:38 <elliott> Gregor: I can imagine a really packed grid being fun...
07:36:55 <Gregor> SOLVE OUR WIN-CONDITION PROBLEM
07:37:10 <elliott> Gregor: Base and flag geyser
07:37:19 <Gregor> elliott: That was my solution :P
07:37:59 <Gregor> Also I just noticed that you can protect your base by glutting it with your own flags X-D
07:38:09 <elliott> Gregor: Flags can be destroyed
07:38:16 <elliott> Gregor: What if your flags... were the bases.
07:38:18 <Gregor> CakeProphet: The agent in any situation starts in otherwise-empty space around them, not on either.
07:38:41 <elliott> Gregor: Note that you're going to have at least one ambiguous case because DRAWS ARE THINGS THAT EXIST
07:38:41 <Gregor> elliott: What if you destroy every flag?
07:38:47 <elliott> Gregor: Then you get more from the flag geyser
07:39:04 <Gregor> CakeProphet: Of course you get to know where your own base and flaggey are...
07:39:22 <Gregor> elliott: OHHHHHH, I see what you're saying.
07:39:33 <Gregor> elliott: But now you're saying that touching two flags = win ... but win for who?
07:39:38 <elliott> Gregor: <elliott> Gregor: Note that you're going to have at least one ambiguous case because DRAWS ARE THINGS THAT EXIST
07:39:49 <Gregor> Draws are the only circumstance here :P
07:39:56 <elliott> Gregor: OK, electron hitting a flag turns it into a DEATH FLAG.
07:40:01 <elliott> DEATH FLAG and flag = win for flag.
07:40:31 <CakeProphet> that could make for some interesting strategies.
07:40:51 <elliott> Gregor: ...so anyway, unrelated thing but something I keep messing up mentally: You remembered to include the row/column the agent is on when sending the view, right?
07:41:23 <elliott> Otherwise you... can't see things next to you. Which I guess is realistic in a sense, but at the same time, it's elegant to start next to your base and flag or whatever, rather than directly in front of them so you can see them :P
07:41:47 <Gregor> elliott: Yes, it's the bottommost row.
07:42:22 <CakeProphet> as it would mean that the strategic placement of electrons is important
07:42:44 <elliott> Gregor: Oh dear, CakeProphet likes my joke... is it any good? :P
07:43:24 <Gregor> It's just another "glut everything to win"
07:43:37 <Gregor> Protect your flag and barf electrons everywhere.
07:43:46 <HackEgo> /hackenv/bin/define: line 10: lynx: command not found
07:43:51 <Gregor> HackEgo: You're not helpful :P
07:44:07 <Gregor> Verb: Supply or fill to excess: "the factories for recycling paper are glutted".
07:44:07 <elliott> Gregor: Nonono, because you have to touch the special death flag.
07:44:18 <elliott> And death flags turn into flags as soon as they move.
07:44:26 <CakeProphet> yeah so the idea is that you have to avoid electrons.
07:44:31 <Gregor> elliott: Now that part you didn't mention.
07:44:33 -!- zzo38 has quit (Remote host closed the connection).
07:44:38 <CakeProphet> while making sure your oponents flag gets electrified.
07:45:38 <elliott> Gregor: Same way as usual.
07:45:46 <Gregor> Usual is that electrons move them.
07:45:52 <Gregor> So that means they're all ooooh deathflags.
07:45:59 <elliott> Gregor: They just spread along wire naturally, I guess :)
07:46:04 <CakeProphet> not if they just move like electrons but aren't electrons.
07:46:21 <elliott> Gregor: OR, electrons move them, but if an electron would push it OFF A WIRE, it becomes a deathflag.
07:46:26 <Gregor> elliott: Then you could never catch them with an electron AND get your flag to them, lightspeed restriction.
07:46:35 <Gregor> elliott: Electrons pull, they don't push.
07:46:54 <elliott> Yeah, but they could pull them onto non-wire :P
07:47:11 <Gregor> How could they do that? They're electrons, they're on a wire by definition.
07:47:51 <CakeProphet> I like the idea that the flag is a death flag permanently (well, until it dies...)
07:48:01 <elliott> Gregor: Well, OK, to despecify slightly:
07:48:19 <elliott> Gregor: Flags get turned into deathflags [somehow]. Deathflags turn into flags when they move. Flags move as before, by electrons. Flag touching deathflag = win for flag.
07:48:27 <elliott> All we need now is somehow :P
07:48:27 <itidus20> have you guys played super bomberman games?
07:49:07 <CakeProphet> what's wrong with a flag becoming a death flag permanently when it touches an electron?
07:49:24 <Gregor> elliott: Errr ... observation ... that doesn't solve the VERY FIRST PROBLEM, it just makes both sides motive.
07:50:14 <Gregor> elliott: .F*D. <-- lol that * should turn into both flags
07:50:28 <Gregor> CakeProphet: How do those flags move?
07:50:44 <Gregor> FLAGS - MOVE - BY - ELECTRONS >_<
07:50:45 <elliott> Gregor: So they fizzle like electrons do when giving up
07:51:07 <Gregor> elliott: Then you can't win.
07:51:30 <elliott> Gregor: Nope, because there's an electron below that asterisk
07:51:45 <CakeProphet> maybe death flag + your flag = your WIN flag
07:51:50 <Gregor> elliott: That asterisk is an electron ...
07:51:51 <CakeProphet> which you must then bring back to your base.
07:52:19 <Gregor> CakeProphet: Frankly I'm not a fan of any system where flags move like electrons ...
07:52:34 <Gregor> They're too fast, you can't meaningfully react to their presence if they're lightspeed.
07:53:01 <Gregor> I also don't like state hell :P
07:53:06 <elliott> <Gregor> elliott: That asterisk is an electron ...
07:53:27 <elliott> Gregor: OK, death flags turn into slightly-less-death-flags after a tick, and then turn into normal flags after that :D
07:53:40 <elliott> I feel an infinite regress.
07:53:47 <elliott> Gregor: OK, so first we have infinite states...
07:54:08 <Gregor> I'm likin' my base-and-geyser system a hell of a lot more than any of these nutty things :P
07:54:17 <elliott> Gregor: I thought there was something wrong with that
07:54:26 <elliott> Didn't you used to have geysers, I hg-nosied
07:54:39 <Gregor> elliott: I just used that terminology instead of "base" before.
07:54:44 <elliott> http://hpaste.org/50489 jesus christ
07:54:45 * CakeProphet likes the win-flag system that he is imagining, though he's not sure that everyone else is imagining the same thing.
07:55:11 <Gregor> elliott: I stopped reading after pokIntElement
07:55:40 <elliott> Gregor: DID YOU READ MY AWESOME HASKELL WARRIOR THOUGH
07:55:55 <elliott> Gregor: Not even glance?? :'(
07:56:11 <CakeProphet> Gregor: and there's not state-hell if you just make it so that states can be superimposed
07:56:22 <Gregor> CakeProphet: Superimposing states IS state hell >_<
07:56:33 <monqy> elliott: that hpaste what
07:57:18 <monqy> who would write that
07:57:52 <monqy> and these annotations
07:58:40 <monqy> i'm guessing that one's core, but what's that one supposed to be? I've never seen llvm so I guess it oculd be that
07:59:09 <elliott> i gotta hand it to them, they're dedicated :)
07:59:21 <elliott> makes me think I could truly write that malloc without consing
07:59:26 <monqy> is Cmm the only flavour of C-- still alive?
08:00:03 <elliott> It's also probably the only flavour that was ever alive, ever.
08:00:05 -!- myndzi has quit (Read error: Connection reset by peer).
08:00:10 <pikhq_> elliott: You officially frighten me.
08:00:26 <pikhq_> elliott: sannysanoff officially frightens me.
08:00:47 <Gregor> Well, now that that storm's passed, back to trying to sleep.
08:00:54 <elliott> pikhq_: Hey, dude, I wanted to avoid all assembly beyond bootup in a Haskell OS by writing a memory allocator that didn't cons at all.
08:01:10 <Gregor> CakeProphet, elliott: Continue thinking about win conditions and barking at each other kthx :P
08:01:18 <pikhq_> elliott: ... Is that even doable?
08:01:43 <CakeProphet> Gregor: space, conductor, electron head, electron tail, flag head, flag tail, death flag head, death flag tail, win flag head, win flag tail, base, flag geyser, electron geyser
08:02:14 * itidus20 . o O ( win conditions: 1) ring out 2) knock out 3) tap out )
08:02:14 <elliott> pikhq_: I... think it might be.
08:02:17 <elliott> Gregor: I still think yours is best.
08:02:30 <elliott> Gregor: I dunno how thought-out it is though :P
08:02:59 <elliott> pikhq_: I mean, you can make an Addr# pointing to anywhere you want.
08:03:28 <elliott> pikhq_: So it's just a matter of using a lot of octothorpes to read and write to that, and using Int#s for EVERYTHING.
08:03:39 <elliott> Even instead of Bools... although Bools might be OK since it's two static pointers, but I dunno how the RTS does it.
08:03:52 <CakeProphet> electron + flag = death flag death flag + flag = win flag (or maybe you just win at that point, I don't know if the win flag is actually a good idea)
08:04:06 <elliott> pikhq_: The real question is, can the RTS start without a memory allocator? Or rather, with a memory allocator written in Haskell that thus requires the RTS? :P (Even though it probably doesn't REALLY require the RTS because it doesn't cons or anything.)
08:04:40 <CakeProphet> once a death flaw always a death flag. any problems with this ruleset yet?
08:05:10 -!- myndzi has joined.
08:05:48 <elliott> CakeProphet: Let's ping Gregor and find out
08:06:25 <CakeProphet> oh, and flag electrons are slow (defined however you like)
08:07:38 <elliott> If you mean flags are a kind of electron
08:07:58 <CakeProphet> there's still a few questionable areas. death flag + electron = ?? (you could either change it back to a normal flag, have it continue being a death flag, or fizzle out) death flag + death flag = space I'm assuming.
08:08:40 <CakeProphet> yes the flags are just slow-moving electrons that do not interact with electrons in the same way as normal electrons.
08:10:25 <CakeProphet> elliott: can you give me a better idea of why it won't work?
08:10:48 <elliott> Dunno, not paying attention :P
08:11:41 <CakeProphet> that means you're paying even LESS attention than I am.
08:13:01 <CakeProphet> I think the rules are consistent but it may make the win conditions more or less circumstance.
08:13:45 <CakeProphet> (assuming you take out the win flag. including a win flag adds new complications but makes the win conditions a little less sporadic)
08:14:34 -!- pikhq has joined.
08:14:37 -!- pikhq_ has quit (Ping timeout: 264 seconds).
08:28:29 -!- Vorpal has joined.
08:53:22 <pikhq> elliott: Obvious problem with my reading this further: my estimation of the size of Yudkowsky's ego grows with each passing sentence.
08:53:37 <pikhq> I swear, the man's hit the ego singularity.
08:53:47 <pikhq> Now I'm just curious how far it goes.
08:54:01 <pikhq> No, it's quite clearly self-insertion, that was obvious from the first chapter.
08:54:22 <pikhq> How many autodidactic polymaths are there, exactly?
08:54:57 <elliott> very few; there are thousands who think they're one
08:55:30 <pikhq> One sees my point.
08:55:42 <pikhq> s/One sees/You see/
08:56:55 <pikhq> Honestly, at this point I'm just curious to see how far the ego goes.
08:57:36 <pikhq> We're already at the point of "Stallman seems humble>
08:58:44 <pikhq> Kanye West does not think himself the Rational Human.
09:00:05 <CakeProphet> perhaps you have a sampling of his lyrical work that would suggest he does not view himself as a rational?
09:00:11 <pikhq> Observation indicates Kanye does not, at least, act upon this belief.
09:00:18 <elliott> Thus spake @kanyewest, "Stay positive."
09:00:28 <elliott> Also: "Don't ever try to sell me on anything. Give me ALL the information and I'll make my own decisions."
09:00:30 <oerjan> hypothesis: _everything_ becomes absurd if taken to its logical conclusion.
09:00:33 <elliott> That sounds like some sort of support of rational belief.
09:00:42 <elliott> oerjan: well taking that to its logical conclusion, _everything_ is absurd
09:00:47 <pikhq> Whereas Eliezer runs an amazing, yet interesting, circlejerk.
09:01:08 <oerjan> elliott: no, not everything, just that sentence.
09:01:11 <elliott> "Mick Jagger is crazy fresh" -- Kanye has discovered new meanings of the word "fresh" I was previously unaware of
09:01:12 <pikhq> The worst bit is, he obviously is actually quite intelligent.
09:01:29 <elliott> "I didn't know Johnny Depp played guitar". The voice of a generation.
09:01:31 <oerjan> some things don't care about logical conclusions, and so may avoid absurdity.
09:01:40 <monqy> that harry potter fanfic's title alone gave me the death
09:01:51 <pikhq> And at least some of his egotism is the result of, well, probably being smarter than 99% of the people he's met.
09:03:36 <oerjan> Eliezer Yudkowsky and the Methods of Megalomania
09:03:58 <pikhq> oerjan: Not so much "megalomania".
09:04:02 <oerjan> (title hereby released to the public domain)
09:04:19 <CakeProphet> ...my client says that two of the previous devs had to learn C# for this project....
09:04:25 <elliott> http://twitter.com/FakeEliezer
09:04:31 <CakeProphet> I'm kind of surprised it took them any appreciable amount of time.
09:04:46 <oerjan> pikhq: he has an excessive belief in rationality and his own ability to produce it?
09:05:06 <oerjan> isn't that pretty much straight in the definition of megalomania...
09:05:35 <CakeProphet> it's not excessive because it's PERFECTLY RATIONAL OKAY?
09:06:28 <oerjan> actually even assuming rationality _is_ objectively correct, i hypothesize he has an excessive belief in his own ability to discern it.
09:06:35 <pikhq> oerjan: Okay, maybe it actually is megalomania.
09:06:50 <pikhq> Actually, quite probably.
09:07:09 -!- NihilistDandy has set topic: This umbrella works wonders for murdering! | software problems | Functor? I hardly knew 'er! | choking on a puzzle piece is like the consuming methanol of the alcohol abuse world | http://codu.org/logs/_esoteric/.
09:07:31 <monqy> is tunes still shunned
09:07:44 <oerjan> ask elliott, it's him doing the shunning
09:07:56 <pikhq> ... Yes, it's megalomania.
09:08:33 <pikhq> I've read 38 fucking chapters of self-insert fanfiction. It's fucking megalomania, and his head is larger than the solar system.
09:08:49 <elliott> you need a saline drip, stat
09:08:57 <elliott> something really non-pretentious
09:09:02 <monqy> how many chapters are there
09:09:19 <CakeProphet> ...this guy apparently thinks I am somewhat good at this.
09:09:27 <CakeProphet> even though I've just been kind of bullshitting the whole time.
09:10:03 <CakeProphet> guy who hired me to port his browser automator scripting engine thing over to linux.
09:10:25 <CakeProphet> which eventually turned into "rewrite this entire C# app in Python over the course of 3-4 months"
09:12:14 <Vorpal> CakeProphet, browser automator?
09:12:22 <pikhq> elliott: How can someone be this unhumble.
09:12:40 <CakeProphet> Vorpal: it interprets scripts that automatically control a browser to do things.
09:12:42 <pikhq> And be a "rationalist".
09:13:02 <Vorpal> h<pikhq> I've read 38 fucking chapters of self-insert fanfiction. It's fucking megalomania, and his head is larger than the solar system. <-- why did you read that
09:13:12 <Vorpal> I mean, are you trying to go mad?
09:13:14 <pikhq> Vorpal: It was at least interesting.
09:13:34 <pikhq> Few people write self-insert like actually intelligent people.
09:13:38 <CakeProphet> "this guy is full of himself, and I am totally captivated"
09:13:45 <pikhq> ... With ego inflation up the wazoo.
09:13:56 <pikhq> CakeProphet: After about chapter 2.
09:13:57 <oerjan> <elliott> http://twitter.com/FakeEliezer <-- doesn't look very updated.
09:13:58 <Vorpal> pikhq, how many Wolfram :P
09:14:37 <Vorpal> pikhq, I thought 1 Wolfram was max
09:14:44 <pikhq> He broke the scale.
09:15:18 <pikhq> I remind you, he is a "rationalist", and thinks anything notable of himself at all.
09:15:35 <oerjan> <pikhq> And be a "rationalist". <-- hypothesis, because everyone eventually confuses rationality with their own prejudices. i'm sure yudkowsky must have written something about it.
09:15:43 <Vorpal> what is a "rationalist"?
09:15:47 <pikhq> oerjan: Almost certainly.
09:16:04 <Vorpal> CakeProphet, never heard "Peter" in the name of that function before
09:16:10 <pikhq> Vorpal: One who believes in rational thought above all else, basically.
09:16:18 <CakeProphet> The original ackermann function took three arguments
09:16:47 <Vorpal> pikhq, I guess in theory that is commendable. Can't see it happening in practise if the world still has humans in it
09:17:06 <pikhq> He's also a singularitarian and a transhumanist.
09:17:08 -!- elliott has quit (Remote host closed the connection).
09:17:19 <pikhq> He's at least not suffering the *obvious* fault. :P
09:17:35 -!- elliott has joined.
09:17:48 -!- elliott has set topic: choking on a puzzle piece is like the consuming methanol of the alcohol abuse world | http://codu.org/logs/_esoteric/.
09:17:52 <elliott> NihilistDandy did it improperly. >:|
09:17:56 <CakeProphet> transhumanist = "yeah, I think having genetically and cybernetically engineered super powers would be pretty cool"
09:18:02 -!- Lymia has joined.
09:18:03 <elliott> should i write my memory allocator in consless haskell
09:18:13 <pikhq> CakeProphet: He intends to make it happen.
09:18:19 <Vorpal> pikhq, of course, one could aruge that anything sentient precludes absolute rationality. Maybe.
09:18:22 <elliott> can we stop giving yudkowsky attention now
09:18:35 <pikhq> He just seems to fail to apply the whole "humans are utterly irrational beings that are basically forcing their brainmeat to act sane at times" bit to himself.
09:18:42 -!- Lymia has changed nick to Lymee.
09:19:17 <CakeProphet> I force my brainmeat into a comfortable state of vanilla wafer composition.
09:19:19 <monqy> I don't know enough about this guy to understand but he sounds a bit obnoxious
09:19:22 <Vorpal> elliott, got something against yudkowsky?
09:19:48 <Vorpal> pikhq, btw, fan-fic of what work originally?
09:19:50 <elliott> Vorpal: yep, and I don't see anyone in here who hasn't
09:20:48 <CakeProphet> how do I force my brainmeat to do things, you ask?
09:21:38 <monqy> i don't punch people becuase i
09:21:45 <pikhq> Self-insert works a bit better with Harry Potter. It's already self-insert fiction. :P
09:21:49 <elliott> punching people is not nice
09:22:31 <monqy> i;d never be able to punch people i don't think i'd be able to bring myself to do it under most circumstances
09:23:13 <elliott> once i punched a puppy NOT TRUE FICTION NO COPYRIGHT INTENDED
09:23:14 <CakeProphet> you may conjecture that I do not force my brain to anything but instead it merely transitions naturally between states as governed by physics.
09:23:26 <elliott> (CONTROVERSIAL YOUNG NOVEL)
09:23:45 <monqy> i my brain meats into a fist into your face
09:24:11 <CakeProphet> elliott: but none of it has an elliott self-insert.
09:24:19 * pikhq should sleep. 'Tis 03:25.
09:24:23 <elliott> yes. isn't that reassuring.
09:24:25 -!- oerjan has quit (Quit: NO PUN IN TEN DID).
09:24:26 <CakeProphet> elliott: or are you suggesting that you've ALREADY WRITTEN SOME!!!???!?!?
09:24:29 <monqy> hhehehehehehe homestuck
09:24:39 <elliott> "hhehehehehehe homestuck" --monqy, intellectual and philosopher
09:25:04 <monqy> last night i had a discussion about how wonderful it would be if homestuck didn't exist but the fandom still did
09:25:18 <elliott> monqy's adventures in things that are like the opposite of truth
09:25:21 <CakeProphet> NihilistDandy: we are superimposed as one being the spectrum of timezone competitive sports.
09:29:02 <monqy> i am sorry but homestuck just makes me think of wonderfully horrible things now
09:30:07 <elliott> i too equate things with their fandoms. you _don't_ want to know what my conception of Harry Potter's plot is, let me tell you.
09:30:23 <monqy> http://www.youtube.com/watch?v=vWo2CU3KH_0 homestuck
09:30:45 <elliott> im not even going to click that
09:30:52 <monqy> you're missing out
09:35:17 -!- myndzi has quit (Ping timeout: 276 seconds).
09:35:43 <monqy> by the way what is your conception of harry potter's plot
09:36:54 <elliott> i was using something called sarcasm to make something called a point
09:46:20 <elliott> pikhq: NihilistDandy: http://sprunge.us/CJNI
09:47:40 -!- Phantom_Hoover has joined.
09:48:12 <monqy> (() -> Addr#)? what sort of trick is this
09:48:47 <elliott> monqy: cant have top-level unlifted binding lol
09:50:03 -!- elliott has quit (Remote host closed the connection).
09:50:27 -!- elliott has joined.
09:54:11 -!- FireFly has joined.
10:10:24 -!- Patashu has joined.
10:25:15 -!- SimonRC has quit (Ping timeout: 260 seconds).
10:31:54 -!- SimonRC has joined.
10:49:19 <quintopia> i am trying to rotate an image by half pi by moving the pixels
10:50:23 <elliott> rotate :: Double -> Picture a -> Picture a
10:50:23 <elliott> rotate r p = \(x :@ y) -> p (x*c - y*s :@ x*s + y*c)
10:50:26 <elliott> this is all i know dont hurt my family
10:50:33 <quintopia> newbuff2[i]=newbuff[i%h*w+w-1-i/h];
10:53:25 -!- monqy has quit (Quit: hello).
10:54:40 <quintopia> it does work, when i remember to swap the width and height afterwards, ha
10:54:55 <quintopia> also, fixing that made me realize another bug
10:56:09 <elliott> <benmachine> elliott: I can't help but feel if you're good enough to do this there are actually useful things you could be doing :P
11:03:30 <Vorpal> elliott, still haven't fixed your keyboard
11:03:31 <elliott> #0 0x0000000000457ba0 in allocate ()
11:03:32 <elliott> #1 0x0000000000448dde in rts_mkInt ()
11:03:32 <elliott> #2 0x0000000000402f71 in main ()
11:03:42 <elliott> Vorpal: Maybe I'll upgrade to Lion on MY BIRTHDAY
11:03:57 <Vorpal> elliott, congrats on that backtrace if it crashed there
11:04:21 <Vorpal> isn't that a separate issue from the keyboard
11:04:34 <elliott> Want to upgrade for clean slate
11:04:38 <elliott> So that I get something useful out of it
11:05:59 <elliott> <Vorpal> elliott, congrats on that backtrace if it crashed there
11:06:02 <elliott> Not hard with what I'm doing
11:06:27 <elliott> Actually what I want is a segfault, but not the segfault I'm getting
11:07:17 <elliott> Vorpal: Guess who gets to read Cmm code! It's me!
11:09:23 <elliott> rts_apply (Capability *cap, HaskellObj f, HaskellObj arg)
11:09:23 <elliott> ap = (StgThunk *)allocate(cap,sizeofW(StgThunk) + 2);
11:09:24 <elliott> SET_HDR(ap, (StgInfoTable *)&stg_ap_2_upd_info, CCS_SYSTEM);
11:11:57 <elliott> #0 0x0000000000457bb0 in allocate ()
11:11:58 <elliott> #1 0x00000000004503d8 in createThread ()
11:11:58 <elliott> #2 0x0000000000448af9 in createGenThread ()
11:11:58 <elliott> #3 0x0000000000448b82 in rts_eval ()
11:11:58 <elliott> #4 0x0000000000402f94 in main ()
11:12:17 <elliott> Vorpal: All these fuckin' allocations!
11:12:45 <Vorpal> <elliott> Actually what I want is a segfault, but not the segfault I'm getting <-- why
11:13:09 <Vorpal> elliott, anyway, why shouldn't creating a thread allocate stuff?
11:13:16 <Vorpal> elliott, also what made you resort to gdb
11:13:20 <elliott> Vorpal: Because I need 0 allocations.
11:13:26 <Vorpal> I'm curious. You are a known GDB hater
11:13:28 <elliott> And it's always gonna be gdb, I'm fucking around with the RTS.
11:13:38 <elliott> It's the only way to distinguish the _|_s that are segfaults from one another :P
11:13:40 <Vorpal> elliott, why do you need 0 allocations
11:13:46 <elliott> Vorpal: http://hpaste.org/50517
11:13:50 <elliott> Hope this answers your question
11:14:14 <Vorpal> elliott, I don't know enough of the internals of haskell to understand that
11:14:27 <elliott> You can read C code, so you can read that
11:14:30 <elliott> Just ignore the octothorpes
11:15:03 <elliott> topAddrAddr# is just NULL + 424242 with a dummy function around it
11:15:09 <elliott> topAddr and writeTopAddr just read and write it
11:15:15 <Vorpal> elliott, what is an Addr# ?
11:15:18 <elliott> primAllocBytes# should not be hard to understand, just ignore the threading of rw
11:15:29 <Vorpal> elliott, WHY DOES HASKELL EVEN ALLOW THIS!?
11:15:43 <Vorpal> okay why does GHC even allow it
11:15:44 <elliott> This code is so ludicrously nonportable in every way
11:16:37 <elliott> http://hackage.haskell.org/trac/ghc/browser/compiler/utils/Encoding.hs Take a look at utf8DecodeChar#
11:16:58 <elliott> It's done like that for performance reasons :P
11:17:37 <Vorpal> Patashu, why `plusAddr#`, why not make Addr# implement Num?
11:17:57 <elliott> Vorpal: Firstly, because Num wants an *
11:18:07 <elliott> Secondly, because look at the signature
11:18:13 <elliott> You add an Int# to an Addr#
11:18:56 <elliott> Vorpal: http://www.haskell.org/ghc/docs/7.0.3/html/libraries/ghc-prim-0.2.0.0/GHC-Prim.html
11:19:14 <Vorpal> elliott, so you are basically trying to do sbrk() in haskell?
11:19:21 <elliott> These aren't nearly as wired in as Etc..."
11:19:27 <elliott> Vorpal: It's malloc, it's just a really shitty malloc.
11:19:31 <elliott> But yeah, sbrk is basically how it works.
11:19:37 <elliott> The idea is to run that on the bare metal.
11:19:50 <elliott> Obviously the pesky RTS trying to allocate in the process of calling it is not a helpful situation.
11:19:57 <Vorpal> elliott, well, then don't be surprised if it fails spectacularly when hosted
11:20:13 <elliott> FFS, it's meant to segfault when it writes to the bullshit constant address
11:20:31 <elliott> Crashing when the RTS tries to allocate because I passed a null pointer for the RTS capability structure will not go any differently on the bare metal
11:20:58 <Vorpal> elliott, the misc/etc thing. I would say that etc is more common. It has god damn seq after all
11:21:24 <Vorpal> of course, seq is pretty magic...
11:21:33 <elliott> Those are wrapped later on
11:21:37 <elliott> http://www.haskell.org/ghc/docs/7.0.3/html/libraries/ghc-prim-0.2.0.0/src/GHC-Prim.html#seq
11:21:39 <Vorpal> elliott, what does traceCcs# do?
11:21:43 <elliott> Notice dummy implementation for haddock docs
11:21:48 <elliott> That's not the actual seq you use that's in GHC.Prim
11:21:55 <elliott> Probably some debugging thing
11:22:21 <Vorpal> elliott, according to that file. traceCcs# and seq are the same. Is this file a dummy file?
11:22:38 <elliott> <elliott> Notice dummy implementation for haddock docs
11:23:06 <Vorpal> elliott, why let and now where?
11:23:10 <elliott> rts_eval (Capability *cap, HaskellObj p, /*out*/HaskellObj *ret)
11:23:10 <elliott> tso = createGenThread(cap, RtsFlags.GcFlags.initialStkSize, p);
11:23:11 <elliott> return scheduleWaitThread(tso,ret,cap);
11:23:31 <elliott> It's a dummy implementation
11:23:42 <elliott> It's just put there by the script, the only time the file is ever used is to generate the Haddock docks
11:24:27 <Vorpal> elliott, anyway the RTS will have to allocate a bit for creating thread and so on. The memory must come from *somewhere*
11:24:56 <elliott> Vorpal: So don't do it by a thread
11:25:04 <elliott> Vorpal: I want as close to jumping in directly to the closure as possible
11:26:10 <Vorpal> elliott, you will need to patch ghc for that
11:26:53 <Vorpal> elliott, ever played oblivion btw?
11:28:21 <Vorpal> nah. I was wondering about opinions
11:29:08 <Vorpal> elliott, open world rpg, great scenery, a bit dated graphics by now, it is showing it's age. But my main issue with it is the bad voice acting. There is no flavour to it.
11:29:27 <Vorpal> but huge open world, have to give it credits for that
11:29:29 <elliott> I know at least some of the NPCs and plot thanks to Prequel :P
11:30:10 <Vorpal> elliott, well, the voice acting is terribly flat. No emotion in it. No flavour. I'd say no voice acting would be an improvement
11:30:31 <elliott> voices suck, also humans suck, have I mentioned Elliottcraft contains 0 humans?
11:30:34 <elliott> no fucking humans. or voies.
11:30:36 <Vorpal> NWN1 had good, if incomplete, voice acting. Witcher 2 has really really good voice acting.
11:30:42 <Vorpal> elliott, different type of game :P
11:31:03 <elliott> were some lines just silent
11:31:03 <Vorpal> elliott, besides what about elves, dwarves, orcs and so on
11:31:11 <Vorpal> elliott, some NPCs were not voiced
11:31:25 <Vorpal> elliott, only like the main NPCs were
11:31:57 <elliott> elves are humans, dwarves are humans, orcs are stupid humans
11:32:25 <Vorpal> elliott, talking dragons?
11:33:01 <Vorpal> given the copious amount of dialogue in NWN1 the lack of voice acting was probably required to make the game fit on a CD or whatever it came on, I don't remember.
11:33:16 <Vorpal> I think it came on 2 CDs or such
11:33:28 <elliott> yes, I would accept a game where every character is a talking dragon.
11:33:48 <elliott> i'm not even kidding i would play the fuck out of that
11:33:51 <Patashu> elliott, play Spyro The Dragon for the PSX
11:33:52 <elliott> especially if it's never brought up ever
11:33:56 <Vorpal> elliott, witcher 2 has supreme voice acting. If you like RPGs then it is a must.
11:34:11 <elliott> Vorpal: i don't like rpgs... except maybe pokemon, but i doubt witcher is that grindy
11:34:12 <Vorpal> for lots of other reasons than voice acting of course
11:34:21 <Vorpal> elliott, indeed it is plot driven.
11:34:51 <elliott> http://bulk2.destructoid.com/ul/149036-thewitcher.jpg uglier than elliottcraft
11:35:01 <Vorpal> elliott, btw "Prequel" you mentioned above, what/who is that?
11:35:01 <elliott> i should just make all the elliottcraft bloocks shit rainbows
11:35:04 <elliott> everything is every colour
11:35:25 <Vorpal> elliott, that is not max settings in that screenshot. Besides it is low res.
11:35:28 <elliott> Vorpal: It's a comic in roughly the same format as MSPA set in Oblivion
11:35:30 <elliott> http://prequeladventure.com/2011/03/prequel-begin/
11:36:28 <elliott> Or, well, set as a prequel, I guess
11:36:32 <elliott> Does it count as in if it's before?
11:36:38 <elliott> Deep ontological questions
11:36:38 <Vorpal> elliott, oh another thing in oblivion: character face look on NPCs is terribly plain. Too even.
11:36:57 <elliott> i saw a screenshot of the catpeople, they're scary
11:37:10 <Vorpal> elliott, yeah. But I meant human and elf faces. Too flat.
11:37:22 <elliott> oh quill-weave is more terrifying though
11:37:30 <Vorpal> not familiar with that
11:37:35 <elliott> http://images3.wikia.nocookie.net/__cb20110621230405/elderscrolls/images/4/45/Quill-Weave_1.jpg
11:38:02 <elliott> (compare http://prequeladventure.com/this/story278.gif)
11:38:17 <Vorpal> elliott, the witcher screenshot was terribly jpeg compressed too
11:39:06 <Vorpal> elliott, btw witcher 2 graphics, it works better when playing it or in a video than in a screenshot. You won't see effects like motion blur or swaying grass in a still image. Yogscast did partial play-through of the game some time ago. Check out the graphics from there IMO.
11:39:32 <Vorpal> elliott, hm nocookie.net?
11:40:03 <elliott> But anyway, I don't see how any game could have better graphics than Elliottcraft :)
11:40:05 <Vorpal> elliott, the game screenshot one is scarier
11:40:17 <Vorpal> elliott, how is that. Will your have smooth terrain
11:40:29 <elliott> Or do YOU know another game with dirt that looks different depending on the precise value of its moisture????
11:40:40 <elliott> Different in a way other than being tinted slightly :P
11:40:55 <Vorpal> elliott, that is not quite the same as having awesome dynamic light and shadows :P
11:41:06 <elliott> Vorpal: I considered joining corners up at one point, but I think the block model is nicer... I'm still open to arbitrary subdivision of blocks or smaller-than-minecraft blocks
11:42:00 <Vorpal> elliott, depends on your goals
11:42:29 <elliott> The only relevant genre, Elliottcraft
11:42:45 <elliott> It's based around utter hostility to all people that aren't me
11:42:53 <elliott> You might die your first three hundred days
11:43:30 <Vorpal> elliott, I'll turn on peaceful
11:44:13 <Vorpal> I think that minecraft is fun, but not for fighting in. It is fun to build in. If I want to fight I start an RPG and get a MUCH better fighting experience
11:44:31 <elliott> Who said anything about fighting?
11:45:13 <elliott> Anyway, feel free to build, but you'd better make sure it's structurally sound -- don't want that thing to topple over and all your blocks turned into worthless rubble that you have to melt-down and re-cast, mm?
11:45:31 <elliott> You might even have to steal a furnace.
11:48:54 <Patashu> Elliotcraft will have DF style structural integrity testing?
11:49:15 <elliott> It's not so much structural integrity testing, it's just... things won't stay up if you build them like an idiot.
11:49:24 <elliott> And unlike DF a one by one tower won't be enough to keep them up.
11:49:35 <Patashu> so what do you call it if not structural integrity testing?
11:49:48 <elliott> I dunno, that makes it sound like it's a separate step to me.
11:49:56 <elliott> It's like calling gravity "floating violation testing".
11:50:08 <Patashu> would you prefer 'block physics'
11:50:10 -!- GreaseMonkey has quit (Quit: The Other Game).
11:50:42 <elliott> Well obviously I have _that_ :-)
11:53:34 <elliott> Vorpal: "We're talking about Oblivion here; where faces and melted candles are indistinguishable from one another."
11:54:14 <Patashu> What will elliotcraft's circuitry be like
11:55:13 <elliott> (Two "t"s.) I'm not sure. Possibly hideously complex.
11:55:25 <elliott> Maybe bluestone :-P (Phantom_Hoover)
11:55:38 <Patashu> More complex than redstone?
11:55:52 <Vorpal> <elliott> Vorpal: "We're talking about Oblivion here; where faces and melted candles are indistinguishable from one another." <-- yep
11:55:56 <lambdabot> Phantom_Hoover: You have 2 new messages. '/msg lambdabot @messages' to read them.
11:55:59 <elliott> It's tricky to use because it's simple
11:56:00 <Vorpal> elliott, where is the quote from
11:56:34 <Vorpal> elliott, btw it allows you to customize a lot about your look. Even the size, position, and colour of your eyebrows.
11:56:52 <Vorpal> elliott, my guess is that all face textures are procedural in oblivion, and that is why they are flat.
11:58:09 <Patashu> There are some nice addons to the restone system in MC that you could steal
11:59:06 <fizzie> The land of Oblivion, where the paint brushes float.
12:05:54 -!- sllide has joined.
12:08:38 -!- elliott has quit (Read error: Connection reset by peer).
12:12:30 -!- elliott has joined.
12:14:52 -!- Lymia_ has joined.
12:15:02 -!- Lymia_ has quit (Changing host).
12:15:02 -!- Lymia_ has joined.
12:15:38 -!- Lymia_ has changed nick to Lymia.
12:17:37 <itidus20> ok i just had another of my ideas
12:17:56 <itidus20> i call it the 125 number system
12:18:22 -!- Lymee has quit (Ping timeout: 258 seconds).
12:32:30 <Vorpal> <fizzie> The land of Oblivion, where the paint brushes float. <-- you played it?
12:32:40 <Vorpal> how the hell do you swim. Can't figure it out.
12:34:23 <fizzie> <fizzie> Vorpal: I played it a little bit. <- yesterday or so.
12:34:44 <fizzie> I remember doing swimming, but now how to do it.
12:34:44 <Vorpal> fizzie, so 1) how do you swim 2) where do you sell stolen items
12:35:19 <fizzie> If you join the Thieves Guild, their fences will let you use their services.
12:35:53 <Vorpal> fizzie, and how/where do I join that. And are there any options if I don't join that
12:37:27 <fizzie> According to UESPWiki, Thieves Guild fences, one of the Dark Brotherhood Murderers, and Mannheim Maulhand at the Inn of Ill Omen, accept stolen goods.
12:37:46 <Vorpal> ah interesting. Now to find "Inn of Ill Omen"
12:38:13 <fizzie> "on the Green Road between the Imperial City and Bravil (quest-related). It is just along the road from the Faregyl Inn.
12:38:13 <fizzie> The publican, Manheim Maulhand, buys potions and food whilst only selling the latter. In addition, he will also buy your stolen goods, even if you aren't part of the Thieves Guild. This, however, is only useful after you have reached the Mercantile skill perks that allow you to barter anything with him and invest in him."
12:38:44 <fizzie> You can probably join the guild with not much ill effects and then just ignore their questline.
12:41:09 <fizzie> There's a few options for joining, but the most straight-forward one (the one I think I stumbled by accident) was to read one of the "wanted" posters of Gray Fox in the city, then talk about that topic with people.
12:46:19 <Vorpal> fizzie, hm. I'm confused about the skills in this game. It seems you level up them independently? No global level thingy like many other games?
12:50:07 -!- Lymia_ has joined.
12:50:53 -!- Lymia_ has quit (Changing host).
12:50:53 -!- Lymia_ has joined.
12:50:55 -!- Lymia has quit (Disconnected by services).
12:50:57 <Vorpal> fizzie, hm he isn't buying my stolen stuff. Must be wrong category of items
12:50:59 -!- Lymia_ has changed nick to Lymia.
12:53:10 <Vorpal> Phantom_Hoover, yes. You played it?
12:53:21 <Vorpal> Phantom_Hoover, how the hell do I swim?
12:53:33 <Vorpal> I just sink and walk on the bottom when I try
12:53:36 <Phantom_Hoover> Tried Morrowind, but failed due to Wine not working for some reason.
12:54:25 <Vorpal> Phantom_Hoover, how do I swim then
12:55:02 <Phantom_Hoover> Vorpal, you walk around on the bottom of the water, same as everyone else.
12:55:24 <Vorpal> Phantom_Hoover, so why does the athletics skill mention swimming?
12:55:50 <fizzie> I've forgotten completely. I suppose you tried the jump key though?
12:55:55 <fizzie> That'd be the most logical choice.
12:56:20 <fizzie> Either that, or just looking upwards and trying to move forward.
12:56:46 <Vorpal> hm didn't work with e before. Let me try again. Could it be heavy armour?
12:57:06 <fizzie> Yes, weight is a factor.
12:58:09 <fizzie> There's a quest (Mages Guild one maybe?) where they ask you to fetch a ring from the bottom of a well; but the ring is an "add few hundred stones of weight" ring, and it's a trick they play on you.
12:59:14 <fizzie> http://www.uesp.net/wiki/Oblivion:Cheydinhal_Recommendation
13:00:25 <fizzie> "It does not actually use a Burden enchantment, it just has its weight set very high." Yeah, it weighs 150 units.
13:00:42 <fizzie> Made out of some ultra-dense matter, I suppose.
13:00:46 <Vorpal> fizzie, btw, is there like any storage chest you could use. Buy an apartment or whatever or such. Or can I expect items to remain where they are if I drop them somewhere?
13:03:51 <Vorpal> fizzie, anyway jumping didn't work, and I switcher to light armour
13:04:21 <Vorpal> oh wait, light armour and looking up works
13:04:53 <fizzie> You can buy houses, and some questlines have you receiving places at the end of them.
13:05:09 <Vorpal> fizzie, ah. Are horses worth it btw?
13:05:24 <Vorpal> I managed to get a lot of gold from a panaroid madman
13:06:30 <fizzie> Most chests are unsafe, but some (mostly quest-related, and then the bought houses) are safe: http://www.uesp.net/wiki/Oblivion:Containers#Safe_Containers
13:07:35 <Vorpal> ah I'll use the chest in Weynon Priory for now
13:16:07 <Vorpal> fizzie, I like the scale of oblivion. The distances seems somewhat (though not completely) realistic. Unlike a lot of other games.
13:19:47 <Gregor> elliott, CakeProphet: All your ideas are terrible :P
13:19:59 -!- pikhq_ has joined.
13:20:05 -!- pikhq has quit (Ping timeout: 258 seconds).
13:20:23 <elliott> Gregor: I didn't give any more ideas :)
13:20:32 <elliott> Gregor: I'm waiting for your master idea :P
13:20:58 <Gregor> I'm implementing my grotty inelegant base+geyser mechanism :(
13:21:10 <elliott> That's grotty and inelegant?
13:21:16 <Gregor> Idonno, I feel like it is :P
13:21:17 <elliott> That's how I assumed things worked originally
13:21:24 <elliott> Your geyser is your power socket
13:21:29 <elliott> The base is, like, a short-circuiter
13:21:44 <elliott> Though possibly not for those reasons
13:23:16 <Gregor> My kitten needs mittens so she can STOP CLAWING THE FUCK OUT OF ME
13:24:14 -!- ais523 has joined.
13:25:23 <cheater> kitten mittens for sittin'
13:29:31 <elliott> getViewBytes :: Get (Vector Word8)
13:29:31 <elliott> bytes <- getBytes viewSize
13:29:31 <elliott> let (ptr, offs, len) = BI.toForeignPtr bytes
13:29:31 <elliott> return $ V.unsafeFromForeignPtr ptr offs len
13:29:32 <elliott> getView :: Get (Vector Cell)
13:29:34 <elliott> getView = V.unsafeCast <$> getViewBytes
13:29:37 * elliott sits back, waits for ais523's death by shock
13:29:48 <elliott> BI there stands for Data.ByteString.Internals by the way :P
13:30:00 <ais523> and now I've seen that sentence, I haven't looked just in case
13:30:08 <elliott> Only if you can stand ... the heat.
13:30:32 <ais523> wow, that is indeed insane
13:30:53 <ais523> my mind is refusing to work out what it actually does, other than a line-by-line translation of the individual lines
13:31:08 <ais523> is that some sort of type punning via unions/reinterpreting byte sequences, in Haskell?
13:31:44 <elliott> It reads viewSize worth of bytes as a ByteString, gets the underlying ForeignPtr storage (plus the offset into it and the length -- ByteString does efficient slicing this way), and creates an immutable Vector out of it
13:31:54 <elliott> (unsafely, because you could twiddle the ForeignPtr after and change an immutable value)
13:32:11 <elliott> it then casts the vector to have another element type which conveniently has the same Storable representation
13:32:44 <elliott> gotta do these kinds of things when your program has to read, parse, and make a decision based on that information in 0.06 seconds
13:32:58 <fizzie> Vorpal: There are some places where you can get inside the cities/towns from the "overworld" (jumping above the walls); if you manage that, you'll find out that they are just cheap low-resolution props, with clip-through walls.
13:33:13 -!- MSleep has changed nick to MDude.
13:33:54 <elliott> ais523: apart from that little performance trick, though, the whole program is not as bad as you might expect :P
13:34:27 <ais523> heh, TAEB uses the same trick
13:34:32 <fizzie> Vorpal: Also the same the other way around: if you climb out of a city without using a gate, you'll just fall through the ground and fall forever.
13:34:35 <ais523> although it's done purely in Perl, so not quite as bad
13:34:48 <ais523> there's a comment next to it commenting on how ugly it is, but it speeds it up 30%
13:34:54 <Vorpal> fizzie, that sucks badly.
13:34:58 <ais523> elliott: oh, it just breaks encapsulation of the way Moose actually stores objects
13:35:11 <elliott> those unsafe calls are actually totally safe in the context of what I'm doing, thankfully
13:35:13 <ais523> and instead of going via accessors to access tiles, it just does a sequence of dereference operations
13:35:19 <elliott> they just avoid needlessly reconstructing the same representation
13:35:26 <elliott> ais523: Moose is hideously slow, isn't it?
13:35:29 <ais523> which I think compile pretty much directly into C
13:35:46 <ais523> Moose is relatively bad, although it's getting better, it does all sorts of ridiculous speed tricks
13:35:48 <fizzie> Vorpal: It was a complaint occasionally made, given that in Morrowind there's just the one world with no nasty transitions.
13:36:29 <ais523> what's the etymology of the phrase "clip through"?
13:36:39 <ais523> I've known what it meant for ages, but am not sure why it means that
13:37:17 <fizzie> ais523: IDNOCLIP from Doom 2?-) (Though I suppose in reality the usage predates that.)
13:37:31 <elliott> Any procedure which identifies that portion of a picture which is either inside or outside a picture is referred to as a clipping algorithm or clipping.
13:37:31 <elliott> The region against which an object is to be clipped is called clipping window.
13:37:45 <elliott> Due to the use of the term 'no clipping' to refer to turning off collision detection, the two are often confused.
13:37:49 <ais523> ah, so the engine was using its clipping algorithm to calculate collisions?
13:38:09 <ais523> and so you turned off clipping to be able to walk through walls, as it turned off collisions as a side effect
13:38:36 <itidus20> If only they released the source code to doom, obsessive anoraks could grok these answers.
13:38:41 <Vorpal> ais523, uh, that seems to be extrapolating quite heavily from what elliott said
13:38:51 <Patashu> doom's been cloned at least twice
13:38:54 <Patashu> so I think people know how it works
13:39:03 <ais523> Vorpal: it's an educated guess, based on what I know and what's been said in the channel
13:39:10 <ais523> it's not quite the same thing as extrapolation
13:39:12 <itidus20> im not being sarcastic... something else
13:39:15 <ais523> it's... induction, or something
13:39:39 <itidus20> a sort of "emphasis through sarcasm"
13:39:49 <fizzie> ais523: That, or just general association with "no use of that thing which causes the player to be 'clipped' to stay within the allowed region".
13:40:09 <ais523> hmm, I find it hard to imagine a non-convex clipping region
13:40:13 <ais523> or at least, non-simple
13:40:29 <ais523> (in the sense that I expect clipping regions to be topologically equivalent to a circle/sphere)
13:40:37 <ais523> I'm not sure why, there's no inherent reason why they should work like that
13:41:03 <fizzie> It's because it's harder to cut holes in the middle of the paper, as opposed to just whittling down the edges.
13:41:24 <itidus20> is non-convex like with a dent in it?
13:42:27 <Patashu> there are clipping algorithms for concave polygons and clipping regions
13:42:59 <Patashu> it's more complicated because it can return multiply polygon pieces when given one polygon
13:44:26 <fizzie> SVG lets you clip with any path, text, or basic shape.
13:44:38 <Patashu> you can define a clipping region out of -text-?!?
13:45:09 <fizzie> The clip-path property of anything can refer to a text object.
13:46:16 <fizzie> The (presumably more efficiently implemented" 'clip' property can only be a rectangle, though.
13:46:57 <Patashu> is svg guaranteed to look the same no matter what the implementation is, like most of opengl's features?
13:47:53 <Vorpal> if you meet someone on a sidewalk, which side do you try to pass them on?
13:48:10 <Vorpal> Patashu, living in a left or right hand drive country?
13:48:47 <ais523> Vorpal: I pick a side according to where they and I are relative to each other
13:48:48 <Patashu> the fourth dimension collision resolution mechanisms I resort to do not have words in your english language!
13:49:05 <ais523> it's the easiest way to avoid collisions
13:49:15 <Gregor> OK, bases + flag geysers *grumble mumble*
13:49:19 <Vorpal> Patashu, do people usually pass on the left on sidewalks there? In Sweden, which is right hand drive, it is quite common that one person try to pass on the left and the other on the right. Leading to some swaying back and forth
13:49:21 <ais523> note that the sidewalks/pavements in the UK are typically on both sides of the road, so there's the added complication that we might be on either side of the road
13:49:27 <Patashu> Vorpal, almost always left
13:49:58 <fizzie> Patashu: That would I guess be the ideal, but I'm not sure how close it gets. It's not like OpenGL would guarantee you anything about cases involving floating-point rounding, either.
13:50:02 <Vorpal> ais523, well of course, but lets say it is a narrow enough sidewalk, not a broad one where 10 people could walk side by side.
13:50:23 <ais523> when walking along a road without pavements, the convention (it's enforced by the Highway Code, which isn't a law but if you don't follow it anything bad that happens is your fault by default) is that you walk on the right-hand side of the road, so there's no issue with passing other pedestrians because they're on the other side of the road already
13:50:27 <Patashu> floating point rounding is a bitch, but isn't it consistent across different implementations?
13:50:36 <Patashu> possibly not across different math libraries
13:50:48 <ais523> Vorpal: with enough room for two side-by-side, which is more or less universal, you pick whatever side you happen to be on relative to the other person, in the UK
13:50:59 <ais523> and if it's unclear, you guess and move that way a long time in advance, so the other person moves the other way
13:51:32 <ais523> the rules for pedestrian passing bicycle are more interesting, partly because they're completely different between the UK and Canada and I almost got run over as a result
13:51:55 <fizzie> ais523: Here it's the left side of the road, using the justification that then the lane immediately next to you (right-hand-side drive here) is the one where the approaching cars will come from the front, so you will notice them more easily; as opposed to walking on the right side and having a car surprise you from behind.
13:52:15 <ais523> fizzie: I think it's the same reasoning in the UK, just mirror-reversed
13:53:19 <Vorpal> ais523, and if you happen to be on a exact collision course?
13:53:22 <Gregor> elliott: Feel free to pull
13:53:35 <ais523> Vorpal: you can't tell that's going to happen, so you guess
13:53:45 <ais523> there's a 50% chance the two people make the same guess, and the situation resolves itself
13:53:53 <ais523> and a 50% chance you don't, in which case try again
13:54:14 <elliott> Gregor: But it'll break my code :P
13:54:15 <ais523> in fact, the odds are more favourable than that, because the two people probably won't guess at exactly the same time
13:54:26 <ais523> and the first person can observe the second person moving and choose the correct side as a result
13:55:35 <fizzie> Patashu: I don't think OpenGL defines the order of operations in e.g. matrix multiplication -- I mean, you'd want to leave room for optimization in the implementations -- and for example I'd assume something like z-fighting is allowed to look different on different display cards.
13:56:15 <Patashu> if matrix multiplication didn't have an order of operations, you'd have no guarantees as to which order your translates, rotates and so on were used in
13:56:33 <fizzie> Patashu: I mean the individual operations involved in multiplying two matrices.
13:56:53 <fizzie> Of course they define which side of the multiplication which matrix is on.
13:57:03 <Patashu> oh, I see - you're saying that depending on what order you do it in it might incur floating point errors differently
13:57:59 <Patashu> http://glprogramming.com/red/appendixh.html
13:58:21 <fizzie> We had a "multiply two matrices" exercise in one "object-oriented programming course", and the automated exercise checker was using stringwise comparisons with no tolerance for error.
13:58:33 <fizzie> So you had to get your floating-point errors in the same order as whoever made the model solution.
13:58:34 <Vorpal> fizzie, did you report that issue?
13:58:43 <fizzie> Vorpal: Yeah, I think it got fixed.
13:59:00 <fizzie> It was especially aggravating since the exercise checker in question featured a tolerance option out-of-the-box.
13:59:38 <fizzie> So, "not a pixel-exact specification". Sounds reasonable; I mean, it's usually more about speed than exactness.
14:00:43 <Gregor> Bleh, my flag rules are borked >_<
14:00:45 <ais523> GPUs only started doing exact floating-point recently
14:00:55 <Gregor> Flags CAN move lightspeed ._.
14:02:29 <elliott> help why am i sixteen in hours who made this mistake........
14:02:46 <elliott> im having fifth-life crisis
14:02:58 <fizzie> Didn't IEEE ad a "half-precision" (16-bit) float format to IEEE 754 recent-ishly, after it was used so widely in the graphics world?
14:03:22 <elliott> yes, that's a thing about to occur.
14:04:02 <Patashu> 20 = old geezer in internet years
14:04:10 <elliott> ais523: hey you're triple old geyser
14:04:15 <shachaf> elliott: Don't worry, you'll die by the time you're 32.
14:04:16 <elliott> making everything relevant
14:04:23 <elliott> to everything else... also I can't type right now :/
14:04:33 <elliott> shachaf: OK, who stored my age in an unsigned five-bit integer?
14:04:49 <elliott> I have to blame _someone_.
14:04:50 <shachaf> It was actually a signed six-bit integer.
14:05:06 <fizzie> One 6502-or-Z80-I-forget-which C compiler supported an 8-bit float format, I think.
14:05:55 <elliott> Why does that always happen to me?
14:06:21 <shachaf> I think there was a song that said that.
14:06:30 <Patashu> that sounds like a shitty idea I came up with once
14:06:35 <Patashu> and dropped when I realized how shit its precision was
14:06:38 <elliott> shachaf: Thanks for the CTCPs
14:06:45 <Gregor> The flag can form a surrogate tail for an electron, because its rules are basically identical to a tail >_>
14:07:16 <elliott> Gregor: Goes along for the ride
14:07:35 <Gregor> elliott: THIS GAME SUX :P
14:07:41 <fizzie> Patashu: http://en.wikipedia.org/wiki/Minifloat has a one-byte example, but doesn't list any notable use cases. I thought it might've been the CC65 compiler, but it's not.
14:07:46 <elliott> Gregor: Or do you just mean this revision
14:08:02 <elliott> Gregor: I still like the idea of flags hitching a ride, though.
14:08:12 <Gregor> elliott: I don't like the idea of lightspeed flags >_>
14:08:31 <Gregor> (Although of all the means of creating lightspeed flags, this is arguably the least offensive)
14:08:48 <elliott> Gregor: Just make a flag in tail position do something bad?
14:08:51 <elliott> Like turn the electron into a flag.
14:09:16 <Gregor> elliott: The electron DOES turn into a flag. Just like it WOULD turn into a tail. Hence "surrogate tail"
14:09:55 <elliott> Gregor: OK, what I mean is, no electron moves forward :P
14:10:25 <Gregor> elliott: Can't accomplish that without increasing neighborhood size.
14:11:09 <Gregor> Or, I suppose, the electron could turn into a tail instead of a flag if there's any open conductor around it ...
14:11:31 <Gregor> That also means you can't duplicate flags ...
14:12:01 <elliott> If you have two routes, one might be fast, one might be slow, you don't know which
14:12:04 <elliott> Just send the opponent's flag along both
14:13:40 <Gregor> Right, you can't (easily) do that.
14:13:58 <Gregor> (Actually you can do that, just not by duplication, you have to divide and conquer)
14:13:59 <Patashu> I don't get this: http://en.wikipedia.org/wiki/Exponent_bias Isn't the most significant place going to have the sign bit anyway?
14:15:30 <Gregor> Patashu: What do you mean "anyway"? This isn't a two's-complement integer, in principle they could put it anywhere.
14:16:33 <fizzie> Patashu: There's a sign bit for the value itself, but the exponent is logically speaking an unsigned integer, with that bias added.
14:16:35 <Gregor> elliott: Yeah, actually, it would be hard NOT to get the right effect with two branching routes, even without duplication.
14:16:59 <Gregor> elliott: If you just send electrons along both routes that don't interfere with one another, I think it'll work.
14:17:19 <fizzie> Patashu: Note that it has a range of e.g. -126 .. +127 and not -127 .. +126, which is what you'd get by treating the exponent as an equally-wide two's-complement signed integer.
14:17:28 <Gregor> Ohnowait, because once they merge they're pulling, so it'll just be a synchronization issue which gets the flag >_>
14:18:03 -!- pikhq_ has quit (Read error: Operation timed out).
14:18:45 <Gregor> elliott: Ohwait, there's a simpler rule to get what I want; for an electron to turn into a flag, it must first have a tail.
14:19:28 <fizzie> Patashu: And there's also that ordering-when-treated-as-an-integer guarantee. That probably wouldn't work for a regular signed binary exponent.
14:20:22 -!- pikhq has joined.
14:22:44 -!- Lymia has quit (Quit: Huggles for everybody~ ^_^).
14:23:35 <Gregor> elliott: Yup, that rule works :)
14:24:54 <Gregor> The only caveat I can see is that if you have tailless electrons next to flags, then BOTH dissipate. Which may be good or bad, but it's unexpected.
14:26:13 <Gregor> (Amongst the implications of this fact is that if you have a double-wire, flags will ALWAYS dissipate along it)
14:26:55 <Gregor> Err, that is, at the meeting of a single->double. I suppose if you had a double right up to the geyser, it'd work *shrugs*
14:29:02 <fizzie> Vorpal: Not related to anything, but in either Morrowind or Oblivion (I think Morrowind) I got my dude stuck in a piece of wall after jumping at it funnily, and he was *really* stuck. Some console commands finally got him extracted from that wall.
14:29:19 <Vorpal> fizzie, oh there are console commands? heh
14:30:02 <fizzie> It's bound to the standard key: where ~ is in US keylayout, the "§ or ½" key here.
14:33:50 <cheater> fizzie: what layout is that?
14:34:03 <fizzie> cheater: Finnish/Swedish.
14:35:55 <fizzie> Apparently Danish has a similar key there, except it swaps which is shifted (i.e. §/½ -> ½/§). Those Danes, always doing everything backwards.
14:37:38 -!- Patashu has quit (Quit: MSN: Patashu@hotmail.com , Gmail: Patashu0@gmail.com , AIM: Patashu0 , YIM: patashu2 .).
14:38:56 <fizzie> It also reverses the Norwegian "Ø, Æ" (to right of L; corresponds to the Swedish/Finnish "Ö, Ä") to be "Æ, Ø" for no apparent reason.
14:53:00 -!- copumpkin has joined.
14:54:29 -!- MDude has quit (Ping timeout: 258 seconds).
14:56:35 -!- NihilistDandy has quit (Read error: Connection reset by peer).
14:56:53 -!- NihilistDandy has joined.
15:20:43 -!- pikhq has quit (Ping timeout: 252 seconds).
15:20:45 -!- pikhq_ has joined.
15:35:44 <elliott> Gregor: Has it changed again yet :P
15:47:21 -!- sliddy has joined.
15:47:22 -!- oerjan has joined.
15:48:35 -!- sllide has quit (Ping timeout: 252 seconds).
15:56:07 -!- jix has joined.
15:56:28 <elliott> Gregor: I'll test the changes soon...
16:06:47 <oerjan> <ais523> when walking along a road without pavements, the convention (it's enforced by the Highway Code, which isn't a law but if you don't follow it anything bad that happens is your fault by default) is that you walk on the right-hand side of the road, so there's no issue with passing other pedestrians because they're on the other side of the road already
16:07:09 * oerjan makes a mental mark that britain has the opposite rule of norway
16:07:44 <oerjan> wait, that's of course logical
16:08:30 <oerjan> <elliott> help why am i sixteen in hours who made this mistake........
16:08:53 <fizzie> oerjan: Goat's mid-body?
16:09:39 <oerjan> somehow i'd mentally marked it as september...
16:10:21 <fizzie> So your lavish birthday present is still in the mail! How unfortunate.
16:10:38 <oerjan> fizzie: just god ettermiddag horribly misspelled according to my dialect, which accidentally makes it look like sami
16:11:34 <oerjan> based on a pun by my ex-collaborator
16:13:47 <oerjan> <elliott> im having fifth-life crisis
16:15:06 <oerjan> the real crisis comes when augur rings your doorbell at midnight
16:15:22 <augur> <sulu> helloooooooo
16:17:16 <ais523> hmm, the compose key has come in useful already
16:17:33 <ais523> retyping a Norwegian error message on a French website into Google Translate so I could figure out what it said
16:17:54 <oerjan> why didn't you just ask D:
16:18:04 <ais523> I don't know how to type å without using compose
16:18:27 <ais523> oerjan: because I'd still have had to retype it in order to tell you what it said
16:18:51 <ais523> the funny thing is, I'd actually guessed what it was purely from words that were almost the same in Norwegian and English
16:18:55 <ais523> like "software", which is identical
16:19:10 <oerjan> borrowing _does_ tend to do that.
16:19:50 <oerjan> the more official norwegian is "programvare"
16:20:11 <ais523> and even that's pretty English-looking
16:20:30 <oerjan> yeah that's obviously a translation borrowing
16:21:01 <oerjan> except with something more descriptive instead of soft
16:33:00 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
16:42:24 <Gregor> elliott: So, how's your warrior? 100% CHAMP?
16:44:32 <Gregor> elliott: Also, I'm thinking of adding your wire inventory to the outgoing message, so maybe protocol change weee :)
16:45:33 -!- zzo38 has joined.
17:13:39 <elliott> Gregor: There's wire inventories now?
17:14:06 <elliott> Gregor: I was never sure about them in the first place...
17:14:16 <elliott> Gregor: If destroying is slower than building, then building is basically hard-limited.
17:14:23 <Gregor> Oh ... that's a good point X-D
17:14:32 <Gregor> OK, they're gone again :P
17:14:36 <elliott> If it's not, then all hell breaks loose :P
17:15:57 <elliott> Has it been reverted to http://codu.org/projects/rezzo/hg/index.cgi/rev/3a6964850280, because if so I need do nothing :P
17:16:09 <elliott> How does the new agent-drawing work?
17:16:13 <elliott> Is it the TOTALLY AWESOME TAIL IDEA
17:16:55 <elliott> Still can't see 'em, but it's a start :P
17:17:04 <elliott> Would you accept a patch to add the trails?
17:17:40 <Gregor> wander was updated at some point, yes.
17:17:55 <elliott> Can't see 'em even with four :P
17:18:17 <Gregor> Did you ... recompile ...
17:18:39 <elliott> WHOA now this is different :P
17:18:52 <elliott> What's the white blocks at the centre of these hubs?
17:19:09 <elliott> And how come the warriors seems to pass through the hubs
17:19:47 <elliott> Hmm, I take it the colouring is just some sort of highlight then...
17:20:25 <elliott> Now to add n-w support to the Haskell
17:22:30 <Gregor> The coloring is just a highlight. The white blocks are the base and flag geysers.
17:22:45 <elliott> Any way to distinguish them?
17:22:56 <elliott> And, hmm, why would there be four blocks as opposed to two?
17:23:05 <Gregor> Prettier symmetry *shrugs*
17:23:21 <Gregor> (You start with two bases in front of you and two geysers behind you)
17:24:36 <Gregor> Is there some canonical list of distinct colors in order by decreasing distinctiveness? (e.g. the list you'd use to choose colors for teams or bar-charts)
17:24:52 <elliott> Gregor: It's called a colour wheel :P
17:25:01 <elliott> Oh my god, this program's behaviour is so awesome.
17:25:07 <Gregor> elliott: That's in order of INCREASING distinctiveness, and uninvertable.
17:25:20 <elliott> It's caused a SHITLOAD of electrons to attach to this path it's building :P
17:25:30 <elliott> Gregor: Dunno then; something with HSV? LSV or whatever?
17:25:34 <Gregor> Is that a metric shitload or an imperial shitload?
17:25:57 <elliott> Gregor: http://ompldr.org/vOXp0ag http://ompldr.org/vOXp0aw
17:26:06 <elliott> It's literally eating its own wire while they pulse away madly now :P
17:26:21 <Gregor> elliott: But can you beat wander???
17:26:29 <elliott> Gregor: Can you even beat anything at this point
17:26:36 <elliott> Does the software recognise such a state
17:26:57 <Gregor> But I can add that relatively quickly :P
17:27:01 <elliott> WTF at this blinking... electrons ca't exceed lightspeed.
17:27:16 <elliott> Might just be a zoom artefact
17:27:21 <elliott> Gregor: That would be good :P
17:27:25 <Gregor> Remember that thanks to you there's no synchronization between drawing and acting ;P
17:27:46 <elliott> Why, I agreed it was a good idea in the end :P
17:28:02 <elliott> I mean, your time limits only matter within a single turn; you can spend a second messing around drawing after that if you want to.
17:28:06 <Gregor> It was shockingly slow ...
17:28:20 <elliott> Gregor: Well what you really want is something COW
17:28:20 <Gregor> Besides, locking is for pussies.
17:28:32 <elliott> So that the CA can start modifying the world again while the display thread draws the original
17:28:37 <elliott> <Gregor> Besides, locking is for pussies.
17:28:43 <elliott> This line is doing something patently impossible and it's very noticable :P
17:28:54 <elliott> It's flickering on and off in its totality every tick.
17:29:25 <elliott> Is it just me or is the playfield mebbe a little oversized?
17:29:47 <Gregor> <elliott> It's flickering on and off in its totality every tick. That, uhh, shouldn't be a locking issue :P
17:30:03 <Gregor> Have your random seed and warrior? :P
17:30:05 <elliott> Sure it is; it's just reading the cells at the worst possible time.
17:30:16 <elliott> It's an electron/wire sequence.
17:30:22 <elliott> Well, electron/electron tail/wire
17:30:37 <elliott> elliott@katia:~/Code/rezzo$ ./rezzo ./wonder
17:30:42 <Gregor> The thing is, unless it's only managing to read one in every three frames, that shouldn't happen.
17:30:55 <elliott> compile with recent GHC and -O2
17:30:59 <Gregor> Err, even then ... that just makes no sense.
17:31:09 <elliott> Gregor: Oh, and it reported NoMessage
17:31:16 <elliott> It was a long run, but that's still some nondeterminism there :P
17:31:22 <elliott> (That means the server said it failed to send anything last turn)
17:32:10 <Gregor> elliott: HALP HOW DO I HASKELL
17:32:19 <elliott> Gregor: ghc --make -O2 wonder.hs
17:32:24 <elliott> Gregor: If you get an error, tell me the error
17:33:23 <Gregor> Could not find module `Data.Vector.Storable':
17:33:23 <Gregor> Use -v to see a list of the files searched for.
17:33:30 <elliott> Gregor: cabal install vector cereal
17:33:36 <elliott> (You're almost certainly lacking cereal if you're lacking vector :))
17:33:39 <Gregor> Already installed cereal
17:33:45 <elliott> Do the same for vector then :P
17:33:55 <Gregor> You should know your real dependencies GEEZE
17:33:59 <elliott> The Glorious Glasgow Haskell Compilation System, version 7.0.4
17:33:59 <elliott> For reproducibility purposes ;-)
17:34:16 <elliott> Oh, and bytestring but come on
17:34:18 <Gregor> <elliott> needs the cereal package
17:34:29 <elliott> Well yeah, it didn't occur to me that humans existed without cereal.
17:34:33 <elliott> True in every sense of the word.
17:34:40 <Gregor> <elliott> needs the cereal package <-- did not mention vector
17:34:54 <elliott> You don't mention your gratuitous libc dependency in the Makefile either
17:35:09 <elliott> Gregor: It occurs to me that rezzo might want something like ais' Secret Project... you need more than reproducibility of the map, you need reproducibility of an entire run :P
17:35:13 <elliott> Which is exactly what ais is doing.
17:35:19 <elliott> I don't know how fast it is though.
17:35:25 <elliott> It works without any kind of emulation I think so maybe not so slow.
17:35:43 <Gregor> Graphics look all good to me *shrugs*
17:36:01 <Gregor> Yeah, I know, the random seed is only a small part of repro, but *eh*, it's better than nothing.
17:36:09 <elliott> <Gregor> Graphics look all good to me *shrugs*
17:36:14 <elliott> Wait until it wraps around at least once
17:36:31 <Gregor> It's noming its own line right now.
17:36:41 <elliott> Wait until it gets about three/fourths up
17:36:43 <elliott> You should see the flickering
17:36:57 <elliott> Maybe it's just my display but the effect persisted on (badly smoothed) Compiz zoom
17:37:18 <Gregor> Oh, I see what's happening.
17:37:38 <Gregor> The electrons /next/ to that are happily attacking an empty conductor.
17:37:48 <Gregor> It totally fills up, then dissipates, then totally fills up again
17:37:56 <Gregor> Every cell has at least one electron next to it, in the next wire over.
17:38:53 <Gregor> (So no, no electrons are moving faster than lightspeed)
17:39:04 <Gregor> PS have we discussed how awesome the name for this software is?
17:39:42 <Gregor> Say it with an Italian accent
17:39:53 <elliott> Argh, I wanted to add SLIGHTLY non-trivial behaviour to wonder but I need a queue already
17:40:18 <elliott> You have to remember that I'm literally an idiot.
17:40:42 <elliott> Also my idea of an Italian accent is Mario.
17:40:43 <Vorpal> fizzie, any idea about this: I walked a long distance along a road and suddenly I started repeatedly falling through the road before being moved up again.
17:40:52 <elliott> Vorpal: You may be in Hell.
17:41:09 <Vorpal> elliott, not really no
17:41:58 <elliott> Gregor: I don't suppose I can piggyback my Haskell warrior crap into the repo on the grounds of having a bunch of example warriors, 'cuz it sure would be convenient to commit this :P
17:42:10 <Gregor> elliott: The name has no meaning.
17:42:10 <elliott> TAKE OVER EVERY REPOSITORY........
17:42:18 <Gregor> elliott: I actually have no idea why I called it that.
17:42:39 <Gregor> elliott: I had started work on a precursor a few days ago, then gave up, then found that directory again but can't remember why I called it that.
17:43:05 <elliott> I usually end up with directories in Code/ that I don't even know what they are.
17:43:38 <fizzie> Vorpal: Sounds more Minecrafty than Obliviony. :p
17:43:59 <Vorpal> fizzie, was definitely oblivion.
17:45:02 <oerjan> google seems to imply rezzo means "shade"
17:45:58 <elliott> Gregor: What am I waiting for?
17:46:07 <fizzie> Vorpal: It's a glitchy game, though. If you haven't, I may suggest http://www.uesp.net/wiki/Tes4Mod:Unofficial_Oblivion_Patch -- though it probably wouldn't fix a bug like that, it's very good in terms of avoiding really annoying "oh no the quest state got all confused and now I can't progress" problems. (1800 bugs and 70000 object placement errors are no joke.)
17:46:44 <Gregor> My latency is like a bazillion right now.
17:46:45 <Vorpal> fizzie, ah, didn't know that. Will get it
17:46:49 <Gregor> elliott: I'm setting up a warriors repo.
17:47:01 <Gregor> Which would be done if my latency wasn't a billion
17:47:18 <elliott> Gregor: Great, so I can dominate the hill with my ten Haskell warriors with the same underlying framework
17:47:20 <fizzie> Vorpal: As a word of warning, it does fix some exploitable-for-your-benefit bugs too, like the infamous floating brush one.
17:47:35 <Vorpal> fizzie, floating brush?
17:47:44 <elliott> Gregor: I have a feeling this game will be less popular than BF Joust, more thinking required :P
17:47:45 <Gregor> elliott: https://codu.org/projects/rezzo/warriorhg/
17:47:52 <Gregor> elliott: Username ehird, password whatever it was for Plof.
17:48:00 <elliott> Does hg have a submodule thing?
17:48:21 <Gregor> See google.com/search?q=hgsub :P
17:48:41 <elliott> Maybe I'll just clone this into a subdirectory of my clone
17:49:05 <fizzie> Vorpal: In the "stock" Oblivion, paint brushes aren't affected by gravity. You can place them in air, and they stay exactly where they were put. In addition, if you place enough of them, you can jump and stand on top of them. Combined with one of the item-duplication bugs you can pretty much go anywhere, as long as you have the patience to place a few thousand paint brushes to build a bridge.
17:49:44 <Vorpal> fizzie, how could they not officially patch this stuff
17:49:50 <elliott> That is just the best bug ever
17:49:58 <oerjan> i cannot really get a confirmation from outside google translate, though.
17:50:02 <elliott> Is that simpler than using the console to cheat :-)
17:50:33 -!- pikhq has joined.
17:50:42 <fizzie> elliott: Probably not, but of course a purist would only use in-game mechanisms. Plus I think the console's not available for people playing the console versions. (How ironic.)
17:50:45 <Vorpal> elliott, nope. But it isn't technically cheating. Just exploiting a bug
17:51:13 -!- pikhq_ has quit (Ping timeout: 264 seconds).
17:51:14 <oerjan> English words for the Italian word rezzo
17:51:16 <oerjan> breeze, coolness, shade
17:51:43 <fizzie> "The console is only available on the PC; there is no way to use the console on the Xbox 360 or PS3 platforms." Right.
17:52:05 <oerjan> also it's an italian place name
17:52:37 <Gregor> oerjan: Well I knew it was Italian. Even though I "made it up", it sounds too Italian not to be legit.
17:54:05 <elliott> Gregor: I'ma just clone it into a subdirectory :P
17:54:11 <elliott> Unless you want to "officially" make it a subrepo.
17:57:51 <Gregor> I don't at all want to make it a subrepo.
17:59:24 <elliott> SF(ret->damage, malloc, NULL, (w*h));
17:59:24 <elliott> memset(ret->damage, 0, w*h);
17:59:27 <elliott> Gregor: Isn't calloc standard?
17:59:51 <ais523> calloc's rarely used, but that fits the definition of calloc pretty much exactly
17:59:55 <ais523> multiplication and all
18:00:23 <ais523> (what /is/ up with calloc's API?)
18:01:08 <elliott> ais523: mimics arrays, I guess
18:01:15 -!- sliddy has changed nick to sllide.
18:01:25 <zzo38> I don't know, I have not used calloc in C
18:01:26 <fizzie> ais523: It does match fwrite/fread. Maybe they threw a d2 when deciding whether to do the multiplication inside or outside.
18:01:29 -!- sllide has changed nick to sliddy.
18:01:37 -!- sliddy has changed nick to sllide.
18:02:05 <ais523> I think someone pointed out that replacing calloc with malloc, a multiplication, and a zero is incorrect (the other way round is correct), but most stdlibs do anyway
18:02:16 <ais523> calloc(SIZE_MAX,SIZE_MAX) should probably fail
18:02:21 -!- copumpkin has joined.
18:02:28 <ais523> and definitely, shouldn't give you jus the one byte
18:03:08 <fizzie> Yes, I've always wondered if calloc impls bother to do the multiplication carefully.
18:03:14 <fizzie> Most callers of malloc certainly don't.
18:03:37 <ais523> fizzie: most impls in the wild don't either
18:03:48 <ais523> malloc callers probably know there can't be an overflow anyway, though
18:04:06 <ais523> or at least, that an overflow would break the program whether now or later
18:04:11 <Gregor> Yeah, I never use calloc, not sure why.
18:04:56 <ais523> because what it does is generally not a useful thing to do
18:05:21 <zzo38> How should Glk keyboard events be represented in Haskell, since using toEnum to convert invalid Unicode numbers to Char doesn't work
18:07:14 <CakeProphet> best malloc implementation: void *malloc(size_t size) {return realloc(NULL, size);}
18:07:31 <zzo38> Yes that would work. I don't know if it is best way though
18:07:36 <Gregor> Especially good if you implement realloc in terms of malloc.
18:07:49 <CakeProphet> exactly. then you don't even have to implement anything!
18:08:44 <zzo38> It can use toEnum with 0xFFFF and 0xFFFE to Char but I don't know if that is proper in Haskell, since those are not valid Unicode characters.
18:10:08 <CakeProphet> (unsafeCoerce 0xFFFF) :: Char --can't be more proper than this
18:10:59 <elliott> Gregor: Well, I have tails... they're inefficient, have an overflow problem, and are always red... but apart from that...
18:10:59 <fizzie> Heh, "man mallopt" on my system: "[In synopsis:] void *malloc_get_state (void); int malloc_set_state (void *ptr); [In description:] malloc_get_state() returns a ... malloc_set_state()" (the ellipsis is a literal quote).
18:11:06 <zzo38> The Haskell 2010 report just says "The character type Char is an enumeration whose values represent Unicode (or equivalently ISO/IEC 10646) characters". It doesn't say some numbers that are still in the range 0x0000 to 0x10FFFF are valid or not valid.
18:11:19 <elliott> zzo38: it also doesn't say that the type can't contain a pink banana
18:11:27 <elliott> zzo38: the values represent Unicode characters and therefore nothing else
18:11:28 <CakeProphet> fizzie: so you found a poorly documented piece of software?
18:11:28 <Gregor> elliott: Wait, you're implementing tails in rezzo???
18:11:38 <elliott> But I typo'd them as tails so NOW THEY'RE TAILS
18:11:42 <fizzie> CakeProphet: Not just any software, GNU software!
18:11:45 <zzo38> CakeProphet: Although, toEnum will also do that but only in range
18:11:50 <Gregor> elliott: If you commit that ... murder.
18:12:04 <elliott> Gregor: I don't have push access to the rezzo repository that I'm aware of.
18:12:11 <elliott> Gregor: But jeez, I was just writing it for you to take a look at :P
18:12:16 <zzo38> elliott: Does that mean GHC has a defect that allows (toEnum 0xFFFF :: Char) to work?
18:12:23 <Gregor> elliott: This is not snake, man :P
18:12:27 <elliott> Gregor: I don't see what's so inherently wrong about it; it only draws the colour when it would have been black.
18:12:32 <elliott> And no, but it provides much easier visibility of warriors.
18:12:44 <oerjan> > length [minBound .. maxBound :: Char]
18:13:00 <elliott> zzo38: I guess that's a bug, but a pretty low-priority one :P
18:13:13 <oerjan> > foldl1' seq [minBound .. maxBound :: Char]
18:13:21 <elliott> Gregor: BTW, by "tail", I mean it fades out the further away it is
18:13:31 <elliott> So it's basically just a SPEED LINE :P
18:13:55 <oerjan> zzo38: no sign there is anything empty in the range
18:14:14 <fizzie> oerjan: Except the documentation, which says "Unicode characters".
18:14:29 <elliott> oerjan: 0xFFFF isn't a Unicode character
18:14:33 <elliott> is it a Unicode codepoint, though?
18:14:36 <CakeProphet> older verions of malloc returned char *......?
18:14:43 <elliott> zzo38: I think the report really means codepoint and it just says character :-)
18:14:54 <fizzie> CakeProphet: Before the invention of "void *", that's probably the best you could do.
18:15:02 <elliott> CakeProphet: Like void * makes any sense
18:15:09 <elliott> sizeof(*p) where p is (void *) should be 0
18:15:18 <elliott> sizeof(*p) where p is (void *) should be 0
18:15:42 <fizzie> Undefined: it's an incomplete type, that can never be completed.
18:15:44 <elliott> void isn't actually a type, so no, (void *) doesn't make sense.
18:15:51 <CakeProphet> no type. it's a pointer. it pointers to a word of memory.
18:15:53 <elliott> CakeProphet: "it makes sense because it just means what it means"
18:16:12 <elliott> but i have more fun things to do
18:19:10 <fizzie> A bitfield can also never be sizeof'd at all (or pointed to, even), nor can functions. Everything else (that is not an incomplete type) should be fair game.
18:19:32 <CakeProphet> basically void* makes sense because memory addresses are inherently typeless.
18:20:44 <fizzie> This is also the silly:
18:20:46 <fizzie> !c size_t foo = sizeof printf("foo - "), bar = sizeof (char[printf("bar - ")]); printf("baz: %zu %zu\n", foo, bar);
18:21:09 <fizzie> Pre-C99 it was always clear, the sizeof'd expression is never evaluated. But nowadays if it's a VLA it suddenly will be.
18:22:34 <elliott> so that sizeof is resolved at runtime? nice.
18:22:48 <elliott> i suppose they have to be for vlas.
18:28:18 -!- azaq23 has joined.
18:29:51 <zzo38> I still think Unicode is badly designed in many ways though
18:30:25 -!- copumpkin has quit (Quit: Computer has gone to sleep.).
18:30:35 <elliott> Gregor: OK fine, no tails :P
18:30:41 <elliott> The psychological torture is too much.
18:33:02 <Gregor> I just added proper loss conditions.
18:33:10 <elliott> Gregor: I CAN;T TAKE IT ANY MOE
18:37:17 <Gregor> I daresay this game is starting to make sense.
18:37:36 <Gregor> I also daresay it will take all freaking eternity to FIND another player, let alone kill them.
18:38:06 -!- myndzi has joined.
18:38:55 <ais523> Gregor: isn't that the whole concept of Core Wars?
18:39:06 <ais523> well, except when you're playing against a paper-strategy program
18:40:43 <Vorpal> <Gregor> I daresay this game is starting to make sense. <-- what game is it?
18:41:22 <Gregor> Vorpal: Rezzo. It's a competitive programming capture-the-flag game played on a wireworld-derived CA.
18:41:39 <Gregor> Also, its documentation is awesome:
18:41:39 <Gregor> --help?! What's this nonsense!
18:41:51 <Vorpal> Gregor, so what does man rezzo do?
18:42:04 <Gregor> No manual entry for rezzo
18:51:45 <elliott> Gregor: hg import patch for you: http://sprunge.us/hIKf
18:52:32 <elliott> https://codu.org/projects/rezzo/warriorhg/index.cgi/file/2cf20f7fdf02/wander.hs
18:52:35 <elliott> Fewer lines of code than yours.
18:52:43 <elliott> If you whip out the dependency argument I'll point to wander.c's dependencies :P
18:59:52 <CakeProphet> elliott: the next thing to do seems to be use a data structure to keep track of the current known grid.
19:00:08 <elliott> No, the next thing is a queue, and then the next thing after that is a threading system :P
19:00:41 <CakeProphet> perhaps even make predictions about locations that are not in view by running the CA each step.
19:00:52 <CakeProphet> but keep the "predicted" grid seperate from the "last known" grid
19:03:25 <CakeProphet> also keep track of how long each predicted cell has deviated from the last known cell, so that the agent can make decisions on the likelihood of the predicted cells correctness.
19:05:46 -!- azaq23 has quit (Ping timeout: 260 seconds).
19:06:11 -!- azaq23 has joined.
19:08:27 <elliott> Gregor: Well, I've invented the most terrible one yet.
19:09:38 <elliott> Gregor: Pull warriors repo, make, then try rezzo on "tantrum" :P
19:10:30 <ais523> someone explain the rules of this game to me
19:10:36 <Gregor> elliott: Now that's what I call AI.
19:10:43 <elliott> ais523: WireWorld plus external influence
19:10:49 <Gregor> ais523: Do you know Wireworld? (If not, learn that first)
19:10:59 <ais523> well, I can't remember all the details
19:11:00 <Gregor> elliott: That arrow is throwing a FIT!
19:11:05 <ais523> but I knew them once, and I know the general concept
19:11:19 <elliott> ais523: bots can turn around, move forwards, move forwards and lay wire behind them (simultaneously), and hit the cell in front of them (four times to destroy)
19:11:38 <elliott> there's also bases and flag geysers, you have to attach the opponent's flag (travels with electron, comes from geyser) to your base
19:11:39 <ais523> ah, OK, four operations
19:11:44 <elliott> so it's CTF, WireWorld style
19:12:01 <Gregor> I should write down the CA rules :P
19:12:11 <ais523> and you can destroy each of wire/wire+spark/wire+tail back to no-wire by spending four turns?
19:12:13 <elliott> ais523: oh, and 0.06s per turn, realtime
19:12:29 <elliott> and you can turn exactly one cell to space by hitting four times, doesn't matter consecutive or not
19:12:38 <elliott> even agents i think?? Gregor?? :P
19:12:44 <ais523> what specifically's the victory condition?
19:12:44 <Gregor> No, not agents, bases or geysers.
19:12:55 <Gregor> ais523: Enemy flag next to your base.
19:12:55 <elliott> ais523: <elliott> there's also bases and flag geysers, you have to attach the opponent's flag (travels with electron, comes from geyser) to your base
19:13:09 <elliott> Gregor: tantrm's strategy is truly brilliant
19:13:21 <elliott> Gregor: it builds forwards; if it can't, it hits out in front of it, and then turns left and restarts
19:13:29 <elliott> so if it gets trapped, it just spins around hitting things until it escapes
19:13:51 <ais523> can there be more than one flag corresponding to the same player at a time?
19:14:04 <elliott> that's why you have a geyser of them :P
19:14:16 <ais523> I wasn't sure when the geyser generated a new one from the description so far
19:15:01 <Gregor> ais523: I'm writing up a README with a more useful description :P
19:15:02 <elliott> Gregor: Y'know, if both warriors respond in under their given time, you could avoid waiting the rest of the turn, and speed up perhaps the majority case massively...
19:15:37 <elliott> Gregor: Yeah, but, I mean, without disturbing the limit...
19:15:44 <Gregor> ... that's what -q does.
19:15:58 <ais523> I imagine the playfield has to be quite small to make this woek
19:16:12 <Gregor> ais523: We're not really sure what, if anything, works :P
19:16:13 <elliott> ais523: I'm starting to think that the viewport should maybe be bigger and the playfield smaller
19:16:20 <elliott> the big field seems a non-starter to me
19:16:26 <elliott> it's essentially the same challenge repeated a bunh of times
19:16:32 <elliott> which just = pointless slowness
19:16:40 <elliott> but you should have to explore a few areas before finding what you want
19:16:46 <elliott> so I'm not sure how big it should be
19:16:55 <ais523> what about a strategy of just building loads of wires connecting to your base
19:17:03 <elliott> I suspect that, modulo the time it actually takes to move, multiplying the viewport and board size by the same amount has no effect
19:17:06 <ais523> in the hope that a connection to the enemy's geyser ends up colliding with one
19:17:07 <elliott> on the overall slowness, I mean
19:17:27 <elliott> ais523: why would the enemy be connecting its geyser to anything?
19:17:40 <elliott> Gregor: Wow, tantrum is REALLY unproductive :P
19:17:44 <ais523> well, one of the wires you build might end up next to it eventually
19:18:11 <elliott> Gregor: I like how it's basically nondeterministically scribbling somehow...
19:18:35 <elliott> Gregor: OK, so new question: Why's -q not the default? :P
19:19:05 <Gregor> elliott: Because you should allow bots to use their spare time for thinking.
19:19:49 <elliott> Didn't think of that because my two bots so far are really dumb :P
19:19:53 <elliott> And one of them is stolen :P
19:20:00 <ais523> Gregor: if they want to do that, why don't they just delay their submission until right at the end of their timeslice?
19:20:22 <elliott> ais523: Might miss it because of nondeterministicness... but that's also a good point
19:20:35 <elliott> (Nondeterministicnes sbeing "IO")
19:20:46 <elliott> What, less than four hours :/
19:21:13 <elliott> Gregor: Tantrum produces really interesting patterns :P
19:21:17 <Gregor> ais523: Yeah, too much scheduling involved, you couldn't do it accurately.
19:21:45 <ais523> elliott: isn't tantrum a variant of langton's ant?
19:21:56 <elliott> ais523: hmm, you think it might literally be that?
19:21:56 <ais523> not exactly the same because of the four-hits thing and it doesn't turn right on success
19:22:04 <ais523> but those are the only differences
19:22:17 <elliott> that would explain why it's making interesting patterns spasmodically in its little corner :)
19:22:23 <elliott> when does it shoot away and become turing-complete?
19:22:42 <elliott> wait, does this mean that langton's ant can be decoded directly into rezzo?
19:24:50 <elliott> OK -> push ActionQ (Turn R) >> push actionQ Build
19:24:50 <elliott> InvalidAction -> replicateM_ 4 (push actionQ Hit) >> push actionQ Advance >> push actionQ (Turn L) >> push actionQ Build
19:24:52 <elliott> feels like it should be easier
19:24:59 <elliott> (InvalidAction = "you tried to build/advance but you bashed into a wall")
19:28:47 <Gregor> ais523: https://codu.org/projects/rezzo/hg/index.cgi/raw-file/4f41806a8067/README
19:29:16 <ais523> elliott: I don't think Langton's Ant has ever been proven TC
19:29:45 <ais523> in fact, nobody's yet proven or disproven that given a finitely-many-cells-set initial condition, it always goes off and builds a highway eventually
19:30:30 <elliott> Gregor: The universality of Langton's ant was proven in 2000.[2]
19:30:37 <elliott> http://www.dim.uchile.cl/~anmoreir/oficial/langton_dam.pdf
19:30:49 <elliott> ais523: also osmeone else from the seolang wiki got published in Complex Systems.......
19:31:14 <elliott> but they were a person who is not as good a person who could have been published as most because they are the person who argued a lot about TC and "practical machines" (User:Oleg) oops......
19:31:28 <ais523> Gregor: the CA there looks a little buggy; in particular, flags don't conduct along conductors
19:31:32 <elliott> Gregor: -w and -h change the protocol, right?
19:31:33 <ais523> or, wait, do flags replace electron /tails/?
19:31:40 <Gregor> ais523: Flags replace electrons.
19:31:53 <Gregor> ais523: If you send an electron current at a flag, it will drag the flag towards the source.
19:32:25 <ais523> ah, hmm, so flags aren't actually anything like electrons, because they move in the other direction, and don't move of their own accord
19:33:17 <Gregor> And actually you reminded me that I missed a condition in a rule :P
19:33:24 <Gregor> * if one or more neighbor is a flag or flag geyser and one or more neighbor
19:33:48 <ais523> what information do agents have about their surroundings? just whether their previous attempted move was legal?
19:33:55 <elliott> ais523: they also see their viewport
19:34:01 <elliott> and the damages of all cells within
19:34:15 <ais523> everything, including owners of flags, etc?
19:34:24 <elliott> those are part of the states, so yes
19:34:34 <elliott> it's just a notational convenience to consider them equivalent
19:34:43 <ais523> hmm, and flags can only be destroyed by sending an electron adjacent to two differently-colored flags at once
19:35:06 <Gregor> ais523: Or just hitting them.
19:35:16 <elliott> Hitting things: the best strategy.
19:36:03 <ais523> hmm, as far as I can tell it's completely obvious strategy to try to prevent any of your own flags being generated
19:36:31 <Gregor> ais523: That's obvious /strategy/, but it's not easily accomplished.
19:37:08 <ais523> against a single opponent, it's trivial; build a square of conductor (of any size, so long as you have room to move inside it) around your geyser
19:37:17 <ais523> that fits inside your viewport
19:37:26 <elliott> (conductor is a lame name)
19:37:31 <ais523> then whenever your opponent moves adjacent to it, you move to the other side of the same wire
19:37:48 <ais523> and repair it if they destroy it; repairing is faster than destroying
19:38:01 <elliott> Gregor: Writing a bot for this seems much more like a real AI task than BF Joust
19:38:08 <ais523> ah hmm, that only works if bots can't share a square
19:38:12 <elliott> Like, you want pathfinding pretty much immediately.
19:38:17 <ais523> but you can easily always be in a position to repair
19:38:18 <Gregor> elliott: Yeah, but you can write it in any language, not just BF :P
19:38:21 <ais523> elliott: simple enough, then
19:38:37 <ais523> can you see which way the opponent is facing?
19:38:44 <elliott> Gregor: Doesn't make it easier :P
19:38:48 <elliott> ais523: Nope, but I did suggest that to Gregor once.
19:38:50 <ais523> if you can, it's even more obviously trivial to create an impenetrable convex barrier
19:38:59 -!- azaq23 has quit (Quit: Leaving.).
19:39:29 <ais523> if you can't, the opponent could knock the whole thing to 1 hit left, and then random-walk along it until you guessed the wrong direction and couldn't catch up with it
19:40:00 <elliott> Gregor: help hes desrtroying our ofensives
19:40:43 <ais523> this suffers from the usual BF Joust problem of "it can't do anything else", of course
19:41:18 <Gregor> ais523: I'm hoping that the fact that the bots are in any language partially alleviates that :P
19:41:33 <ais523> Gregor: I mean, it's using all its actions defending
19:41:35 <ais523> and has no time to try to win
19:42:01 <Gregor> You can only stalemate.
19:42:13 <Gregor> And if there are >2 bots, lol
19:42:40 <ais523> I know that in the "golfed BF Joust" thing I was wondering about, I was going to add a rule that "if the game goes to timeout, whichever program did the longest sequence of waits in a row wins"
19:42:43 <Vorpal> Gregor, how many dimensions does the game world have?
19:42:56 <Gregor> Deewiant: User-specified.
19:43:05 <Gregor> Deewiant: Default 640x640 right now, which may be too big.
19:43:05 <elliott> <elliott> Gregor: -w and -h change the protocol, right?
19:43:14 <ais523> that rule basically makes defence programs and attack programs of similar qualities similar lengths
19:43:19 <Gregor> elliott: No, why would they?
19:43:22 <ais523> because you don't have to stick a whole full-tape clear in there
19:43:26 <Gregor> elliott: Only the viewport is part of the protocol.
19:43:28 <elliott> Gregor: Oh, viewport is still the same, duh...
19:43:38 <Vorpal> Gregor, is there a time limit for how long a bot is allowed for a turn?
19:43:50 <Gregor> Vorpal: 1/15th of a second, or as specified.
19:43:52 -!- azaq23 has joined.
19:44:34 <Vorpal> Gregor, the thing about allowing any language is good. Means you can do complex logic and tracking state of what the opponent did to a far greater level than in bfjoust
19:44:44 <Vorpal> Gregor, will egobot support tournaments for this?
19:45:10 <Vorpal> Gregor, view port? So the bots have a limited vision?
19:45:20 <Vorpal> makes everything a lot more interesting
19:46:01 <Gregor> Vorpal: EgoBot almost certainly won't :P
19:46:16 <Gregor> Vorpal: Yes, bots have a limited viewport. They also don't know their absolute location or orientation.
19:46:17 <elliott> Gregor: I'ma vote 338x338 for default size :P
19:46:31 <Gregor> elliott: That's ... a bit big, and not odd. Although I agree with increasing it.
19:46:40 <elliott> Deewiant: Viewport squared times tw
19:46:54 <elliott> At first I thought, viewport size of viewports
19:47:03 <elliott> You're likely to end up right next to your opponent
19:47:05 <ais523> do programs know the location of their own flag geyser and base?
19:47:11 <elliott> ais523: they spawn next to them, so yes
19:47:11 <Gregor> ais523: They start at them.
19:47:19 <ais523> oh, they're next to each other?
19:47:21 <zzo38> They have added some useful stuff in Glk although WinGlk is still using the old version of the specification.
19:47:35 <Gregor> ais523: Not /right/ next to each other, but close.
19:48:00 <Vorpal> <Gregor> Vorpal: Yes, bots have a limited viewport. They also don't know their absolute location or orientation. <-- assuming that the initial orientation and position is known then it becomes trivial
19:48:41 <Gregor> Vorpal: The initial orientation and position aren't known, but also aren't relevant, the point is just that you don't know what the server considers to be 0,0, you only know relative to your own starting position.
19:48:41 <zzo38> Including one thing I wanted to use, which is line terminator special keys. I sort of faked it in some of my own programs by adding keyboard shortcut resources to the Glk.dll file
19:48:48 <Gregor> Vorpal: Put differently, you have no compass.
19:49:21 <elliott> I dunno... three hundred is big already.
19:49:21 <Gregor> elliott: No. No I do not :P
19:49:31 <elliott> http://en.wikipedia.org/wiki/List_of_prime_numbers
19:49:39 <Vorpal> Gregor, how do you know when you hit a border of the world?
19:49:56 <Gregor> Vorpal: The world is a torus.
19:50:00 <Gregor> elliott: I'mma go with 33.
19:50:02 <azaq23> "This list is incomplete"
19:50:09 <elliott> Gregor: Wow, 277 is actually... good.
19:50:18 <Vorpal> elliott, why does it have to be prime?
19:50:21 <Gregor> elliott: (I'm also reducing the default world size)
19:50:34 <elliott> Gregor: I'm talking about world size...
19:50:46 <elliott> Gregor: http://ompldr.org/vOXp3bQ <-- 277x277 world
19:50:51 <elliott> That fits in well with a size-thirteen viewport
19:51:00 <elliott> And is a nice good size when zoomed
19:51:01 <Vorpal> elliott, whoa, so many sub-categories of primes.
19:51:03 <elliott> ais523: Your opinions on that size?
19:51:07 <elliott> <Vorpal> elliott, why does it have to be prime?
19:51:10 <elliott> If you want even you want power of two
19:51:11 <Vorpal> elliott, I know only of a handful of those
19:51:13 <Gregor> elliott: I thought you were talking about the VIEWPORT, not the WORLD.
19:51:14 <elliott> If you want odd you want prime
19:51:20 <elliott> Gregor: No, the viewport is good as-is, I'd say
19:51:26 <ais523> elliott: I don't really have strong opinions about the size
19:51:28 <elliott> Gregor: Any more and it's too much to really process at once
19:51:34 <ais523> because I'm not really into this game
19:51:43 <ais523> maybe I will be if it evolves into something interesting
19:51:51 <Gregor> ais523: The game is still very much in development, we're trying to figure out the right balance.
19:52:08 <Gregor> elliott: So, there's no reason at all for the world to be a prime numbered size :P
19:52:10 <elliott> And thirty-three isn't even prime at all
19:52:12 <Vorpal> Gregor, is there any implementation of any parts of it yet?
19:52:22 <elliott> Gregor: EVEN POWER OF TWO, ODD PRIME
19:52:23 <Gregor> Vorpal: Yes. For example, all parts of it.
19:52:37 <Gregor> elliott: But the world size doesn't need to be odd.
19:52:38 <elliott> Whoa, some flag action actually started happening.
19:52:38 <Vorpal> elliott, why does it have to be power of two or prime? I mean, I don't see any obvious reason here
19:52:42 <Gregor> elliott: In fact, it's currently even.
19:52:44 <elliott> And then it got obliterated.
19:52:47 <Gregor> Vorpal: Because we're computer scientists.
19:52:53 <Gregor> Vorpal: https://codu.org/projects/rezzo/hg/
19:52:54 <Vorpal> Gregor, so for vanity then
19:52:57 <elliott> Vorpal: OK, every number is either even or odd, right?
19:53:07 <elliott> And if you want an even number, you want a power of two, if you can pick a power of two, pick it, that's the rule in computing.
19:53:11 <elliott> You always go for powers of two.
19:53:14 <Gregor> elliott: So I'mma go with 320x320.
19:53:27 <elliott> Vorpal: For ODD numbers, like say HASH TABLE SIZE
19:53:32 <elliott> PRIMES generally perform unusually well
19:53:33 <Vorpal> elliott, I'm not agreeing with you on the even -> power of two, or odd -> prime
19:53:36 <Gregor> ais523: We're computer scientists, all numbers are integers :P
19:53:40 <Vorpal> elliott, it doesn't really matter here
19:53:47 <ais523> Gregor: that's not the case in AI
19:53:48 <elliott> Vorpal: Oh my god shut up you incredibly boring person.
19:53:55 <elliott> OBVIOUSLY I AM BEING ENTIRELY SERIOUS
19:53:59 <ais523> I know, because I was writing some floating-point AI code earlier today
19:54:00 <Vorpal> elliott, I'm fine with it if it is for vanity :P
19:54:03 <elliott> OBVIOUSLY I AM NOT JUST TRYING TO MAKE A COMPLETELY ARBITRARY CHOICE MORE FUN
19:54:19 <elliott> ais523: Hey, we need Secret Project
19:54:20 <ais523> you'd probably work out a good choice after some practice
19:54:22 <elliott> ais523: One important question
19:54:26 <elliott> ais523: How much does it slow down things running under it?
19:54:31 <elliott> We really want total repeatability of matches, y'see
19:54:44 <ais523> elliott: not very much if they're purely algorithmic, quite a lot if they make a lot of syscalls
19:54:58 <ais523> also, it isn't finished yet
19:55:00 <Vorpal> elliott, it should be a regular prime!
19:55:01 <elliott> For a heavy syscall program
19:55:02 <ais523> I implemented select a couple of days ago
19:55:05 <Vorpal> elliott, to make it even more "fun"
19:55:27 <elliott> Gregor: It sure is fun to specify a size smaller than the viewport.
19:55:32 <Vorpal> or a regular prime that is also a sophie germain prime.
19:55:38 <Gregor> elliott: It does, in fact, work :)
19:56:03 <ais523> elliott: I'm not sure; it multiplies context switches by a factor of 4 to 6, though, and those are probably going to be the most timeconsuming things
19:56:16 <ais523> for read and write, you have to multiply by another factor of 5
19:56:20 <elliott> Gregor: You should make sure every map has at least noe electron :P
19:56:24 <elliott> This map is TOTES UNWINNABLE
19:56:33 <ais523> because it has to work out if they're blocking or nonblocking first
19:56:40 <ais523> and change timing rules according to if they do, in fact, block
19:56:41 <elliott> ais523: I guess it wouldn't work out then
19:56:44 <Vorpal> ais523, isn't that just checking a flag?
19:56:59 <ais523> Vorpal: yes, but it's checking a flag that's not in either your program, or the program you're testing
19:56:59 <elliott> Deewiant: How long until we get Trains: the Rezzo Series
19:57:04 <ais523> so you have to make a syscall to get it
19:57:23 <Vorpal> ais523, uh. You could cache it for the given fd
19:57:29 <ais523> lstat on /proc works, but injecting a fcntl into the testing program is probably faster
19:57:32 <Deewiant> elliott: When rezzo's closer to done than not-done
19:57:39 <ais523> however, getting the flag is only one of the five calls
19:57:46 <ais523> you have to set it too
19:57:46 <Vorpal> ais523, just cache it on open or fcntl?
19:57:55 <ais523> in order to work out if the read/write would block
19:58:05 <ais523> you set the handle to nonblocking, then try to do the read/write
19:58:11 <ais523> if it worked, great, set it back to blocking and you're done
19:58:22 <ais523> if it didn't, set it back to blocking then repeat, and remember that that thread is blocked
19:58:29 <elliott> Deewiant: It's done insofar as it works and you can code things today
19:58:34 <elliott> The rules just might change a bit :P
19:58:44 <ais523> this would be so much simpler if I wasn't trying to make alternation of threads deterministic
19:59:02 <ais523> but you have to do that, as race conditions are a really common thing to happen in programs
19:59:17 <Deewiant> elliott: Yeah I don't count that as "done" :-P
19:59:23 <Vorpal> ais523, it is a bonus if you detect race conditions IMO
19:59:27 <elliott> Deewiant: You played BF Joust while its rules were still being tweaked
19:59:42 <Deewiant> elliott: Lower barrier of entry
19:59:44 <ais523> Vorpal: but you still have to make them reproducible
20:00:06 <elliott> Deewiant: https://codu.org/projects/rezzo/warriorhg/index.cgi/file/34d876dfc612/tantrum.hs
20:00:15 <elliott> Deewiant: The parts relating to the queue and the IORef are going into Rezzo.hs, hopefully :P
20:00:22 <Vorpal> ais523, I guess you provide a way to try different slicing of the threads?
20:00:23 <elliott> i.e., everything but reallyDecide
20:00:47 <ais523> that would be different, which means that it's not the same
20:00:52 <Vorpal> ais523, so there might be race conditions you can never try?
20:00:57 <Deewiant> elliott: hg clone and messing with Haskell is a bit more work than '!bfjoust foo bar' :-P
20:01:11 <ais523> Vorpal: and? all you're showing to me is that you don't know what Secret Project is for
20:01:12 <Vorpal> ais523, I'm asking about manually using some parameter or such to select a different slicing
20:01:21 <Vorpal> ais523, because you won't tell us!
20:01:40 <ais523> anyway, there are infinitely many different slicings
20:02:02 <elliott> Deewiant: https://codu.org/projects/rezzo/warriorhg/index.cgi/file/34d876dfc612/Rezzo.hs Look at all this nectar I carefully optimised for you
20:02:08 <elliott> 113 getViewBytes :: Get (Vector Word8)
20:02:08 <elliott> 115 bytes <- getBytes viewSize
20:02:08 <elliott> 116 let (ptr, offs, len) = BI.toForeignPtr bytes
20:02:08 <elliott> 117 return $ V.unsafeFromForeignPtr ptr offs len
20:02:10 <ais523> the one I've chosen is to context-switch at every syscall, with a different general rule for blocking syscalls, and a few specific exceptions (fork and exec are on that list)
20:02:11 <elliott> 119 getView :: Get (Vector Cell)
20:02:13 <elliott> 120 getView = V.unsafeCast <$> getViewBytes
20:02:14 <ais523> (also exit, for obvious reasons)
20:02:18 <Vorpal> ais523, actually wait. Not true. Given programs run for finite time there is a huge but finite number of slicings
20:02:46 <Gregor> I suppose the rezzo equivalent of an imp would be to wander around destroying every electron :P
20:02:49 <ais523> Vorpal: wrong, the length of time the program runs for could depend on how it was sliced
20:02:57 <Deewiant> elliott: Yeah, I was amused at the ^2 avoidance; how'd you pick up on that?
20:03:03 <CakeProphet> elliott: the flags, geysers, bases have parameters. THAT'S NOT HOW CA'S WORK BAAAAAW
20:03:26 <Vorpal> ais523, you can only slice between instructions on x86 right?
20:03:28 <elliott> Gregor: I wonder if anyone will win? http://ompldr.org/vOXp3eA
20:03:38 <Vorpal> ais523, possibly excluding the rep prefix
20:03:39 <Gregor> CakeProphet: The number of states is linear in the number of programs, not exponential.
20:03:44 <elliott> Deewiant: I think ^ (2::Int) might do it, but whatever
20:03:50 <ais523> Vorpal: that's not what I mean
20:03:54 <Deewiant> elliott: Right, so you actually went and properly optomized it
20:04:03 <ais523> I mean, a program could decide to terminate once it hit five detected race conditions in a row, or something
20:04:06 <elliott> Deewiant: The optimisation is maybe a little premature, but only because none of the current bots actually try to do anything at all :P
20:04:11 <elliott> Or, well, they DO, they just don't think.
20:04:18 <Vorpal> ais523, then what did you mean. A context switch has to happen at a specific point in the program code, no?
20:04:24 <CakeProphet> Gregor: true I suppose, but eventually the rules I came up with didn't involve any superimposing.
20:04:32 <ais523> Vorpal: I mean, the number of different ways the threads can be interleaved
20:04:38 <elliott> Deewiant: I should probably check whether the -funbox-strict-fields I have actually helps or not, but whatever
20:04:42 <ais523> at each point in the program, you can choose to context switch or not context switch
20:05:07 <elliott> <elliott> Gregor: I wonder if anyone will win? http://ompldr.org/vOXp3eA
20:05:09 <Vorpal> ais523, indeed. Lets say you have 2 threads running two instructions each. then you have: AABB ABBA ABAB BBAA BABA BAAB and so on
20:05:10 <elliott> EXCUSE ME THIS IS HILARIOUS
20:05:17 <elliott> They're still spinning around madly.
20:05:18 <ais523> I always context switch only at syscalls and syscall returns because it's a pain to hit any other moment in the program accurately
20:05:23 <CakeProphet> elliott: I guess eventually I'll need to a) get up-to-date on the current ruleset b) write a Perl player to destroy you. (muahahahahaha)
20:05:24 <Gregor> elliott: I'mma go with no :P
20:05:34 <Vorpal> ais523, which is finite, though it grows very quickly
20:05:38 <elliott> Gregor: EVENTUALLY they might rewrite the insane circuit to accidentally connect a flag and a base :P
20:05:44 <Gregor> CakeProphet: To be frank I totally didn't understand the last iteration of your rules.
20:05:47 <ais523> Vorpal: err, you have AABBABAB as well
20:05:47 <elliott> I like how there's still a hole left in the mess.
20:05:54 <elliott> CakeProphet: Perl? Good luck with that.
20:05:57 <ais523> nobody says that they have to interleave the same way each time round the loop
20:06:10 <Vorpal> ais523, I said for finite programs.
20:06:14 <Gregor> Yes, "do random shit" is surely the best strategy.
20:06:14 <elliott> Like, seriously, good luck with that, you might want to have long, hard talks with ais523.
20:06:17 <ais523> Vorpal: those are finite programs
20:06:31 <Vorpal> ais523, so where is the loop then? two instructions each and exit
20:06:31 <elliott> Who works under constraints of like, three moves per second, rather than FIFTEEN
20:06:37 <elliott> Is it fifteen? I don't even remember
20:06:48 <Vorpal> ais523, in this example that is
20:07:03 <Vorpal> ais523, I can't see where you get a loop in my example
20:07:05 <ais523> elliott: it's now up to about 5 per second regularly
20:07:17 <ais523> Vorpal: oh, I see, you want your programs to be finitely long and contain no loops
20:07:25 <Vorpal> ais523, yes that is what I said.
20:07:25 <elliott> Gregor: Bug report: -w 1 -h 1 doesn't start
20:07:29 <ais523> such a great thing that all programs in practice work like that, right?
20:07:40 <Vorpal> ais523, or the loops they contain are only run a finite number of times
20:07:47 <elliott> Gregor: Three causes a floating point exception
20:07:50 <ais523> Vorpal: that's a crazy assumption
20:08:08 <ais523> the vast majority of programs won't exit given suitable input
20:08:11 <Vorpal> ais523, there are such programs. /bin/cat is bound by length of input for example
20:08:24 <ais523> Vorpal: /bin/cat /dev/zero
20:08:31 <Gregor> elliott: If it's too small to make loops, it barfs, yes.
20:08:37 <elliott> Gregor: Eight is the minimum height it'll start at :P
20:08:38 <Vorpal> ais523, yes. That is an infinite input.
20:08:41 <elliott> And what a GLORIOUS mess eight is.
20:08:48 <ais523> Vorpal: and it's one you have on your computer
20:08:51 <Vorpal> ais523, but changing the file changes the conditions anyway
20:08:54 <CakeProphet> Gregor: the flags move like electrons, and cancel each other out on collision like electrons, but move slower. When an electron collides with a flag it becomes a death flag. when a flag collides with a death flag it becomes a victory for the non-death flag's owner. collision of flags other than flag + death flag result in a conductor (though electron + death flag could result in something interesting, but that's somethin
20:09:06 <elliott> "but move slower" <-- with MAGIC.
20:09:12 <ais523> Vorpal: do you see, anyway, that a flag to allow any possible interleaving of threads, and specifying which one, is insane?
20:09:18 <CakeProphet> elliott: yes, with rules, that you make. I don't care if it's not a CA.
20:09:18 <ais523> and really there's no reason for more than one anyway?
20:09:32 <elliott> CakeProphet: Considering the ENTIRE IDEA Gregor had was to do it based on CA...
20:09:35 <Vorpal> ais523, but I do see a reason to test many if you want to find bugs
20:09:52 <Vorpal> ais523, kind of fuzz testing
20:10:06 <ais523> so, it turns out that the Secret Project is not designed for fuzztesting multithreaded programs
20:10:07 <Vorpal> ais523, btw about blocking or not, that depends on outside factors no?
20:10:14 <elliott> elliott@katia:~/Code/rezzo$ ./rezzo -q -w 8 -h 8 -z 9 warriors/tantrum warriors/tantrum warriors/tantrum warriors/tantrum
20:10:15 <ais523> nor do I think I've said anything that would imply it would
20:10:15 <Vorpal> ais523, like if a file is cached from disk
20:10:30 <ais523> and the Secret Project definitely does try to get rid of caching effects
20:10:51 <ais523> by making the length of time the processor takes to actually do anything irrelevant
20:10:54 <ais523> that's obvious, isn't it?
20:11:02 <elliott> Bunch of InvalidMessages that one run there... blaming Gregor :P
20:11:10 <Vorpal> ais523, anyway if a read blocks or not is really up to the OS unless you emulate the entire file system and block layer. Or network layer or whatever.
20:11:11 <elliott> ais523: Yes, it is obviious.
20:11:24 <elliott> Gregor: $ ./rezzo -q -w 90 -h 90 -z 9 warriors/tantrum warriors/tantrum warriors/tantrum warriors/tantrum
20:11:28 <CakeProphet> elliott: hey it just means that CA has some limitations. You could add a notion of time to the formalization so that transition rules only occur in (g`mod`n)==0 generations. :P
20:11:30 <ais523> elliott: good, for a moment I was wondering if it was me or Vorpal being stupid
20:11:35 <elliott> Gregor: Run that for a while, you start getting InvalidMessage spewed a bunch
20:11:42 <ais523> Vorpal: whether a read blocks or not has nothing to do with cache effects
20:11:44 <elliott> Gregor: My understanding of the protocol is flawless so you have a bug :)
20:11:50 <Vorpal> ais523, I said *disk cache*
20:11:59 <zzo38> "For the purposes of derived instances, a newtype declaration is treated as a data declaration with a single constructor." No, I think that you should just be allowed to derive any class with newtype if the contained type has that class, and otherwise treat it as data with single constructor.
20:12:01 <ais523> Vorpal: whether a read blocks or not has nothing to do with disk cache
20:12:03 <Vorpal> ais523, as in, the file data loaded in to main memory
20:12:05 <elliott> Gregor: (-z 9 not necessary)
20:12:09 <zzo38> Why don't they do it like that?
20:12:10 <Vorpal> ais523, I thought it did.
20:12:20 <ais523> if it finishes in finite time without any other change to the system, it isn't blocking
20:12:32 <elliott> zzo38: they do, with GeneralizedNewtypeDeriving for GHC
20:12:34 <CakeProphet> elliott: and besides, what's the purpose of it being a strict CA (which it currently is not anyways) other than saying "hey this is a cellular automata in the strictest sense possible (except it's not really)"
20:12:35 <ais523> try reading from a slow hard drive with O_NONBLOCK set, you'll find it works
20:12:38 <Vorpal> ais523, so uh what does a non-blocking read on a busy device do? That would wait for a while
20:12:47 <elliott> zzo38: it makes the derived Show instance less obvious, which is one disadvantage
20:12:53 <elliott> CakeProphet: It is currently a strict CA, and you're blathering nonsense.
20:12:58 <Vorpal> ais523, what about nfs?
20:13:11 <ais523> there's a special case for that, IIRC, and I forget what it is
20:13:13 <CakeProphet> elliott: whose number of states is dependent on number of players. Is that how CAs wor?
20:13:20 <Vorpal> ais523, there generally is for nfs XD
20:13:23 <elliott> CakeProphet: Nope, there is a constant number of states.
20:13:23 <ais523> but the Secret Project controls all the filesystems you're allowed to access
20:13:58 <CakeProphet> elliott: so then the flags, geysers, and bases, agents aren't states?
20:14:09 <Vorpal> ais523, Hm reading /dev/random can block iirc
20:14:21 <elliott> CakeProphet: Dunno, how about you find out rather than being an ass about it
20:14:28 <ais523> Vorpal: /dev/random is an interesting special case
20:14:33 <CakeProphet> elliott: I'm not I don't see how that is a constant number
20:14:33 <Gregor> Gawd I love the conversations on this channel.
20:14:35 <ais523> because how do you make a reproducible /dev/random?
20:14:43 <Gregor> "Ur a dumbarse" "Ur mom!" "lul"
20:14:52 <elliott> Gregor: You seem to be mistaking conversations for not having the patience to deal with someone
20:14:59 <Vorpal> ais523, well, you replace it with your own algorithm.
20:14:59 <Gregor> CakeProphet: The number of states is linear in the number of programs, so constant for a given run.
20:15:05 <ais523> Vorpal: yes, and you can pick one that never blocks
20:15:09 <elliott> Gregor: The number of states is constant.
20:15:14 <elliott> There are always ten of each player-specific state.
20:15:16 <Vorpal> ais523, not really realistic
20:15:25 <ais523> Vorpal: so? it's /consistent/
20:15:29 <elliott> See also: ais523 dealing with Vorpal, the most amazing endurance feat ever.
20:15:40 <Gregor> elliott: Well, fair enough, there's a max number of players, so in fact it's constant (though many will be unused)
20:15:52 <CakeProphet> Gregor: so you have an infinite number of cellular automata that correspond to natural numbers.
20:15:53 <ais523> elliott: I think you understand the Secret Project Stage 1 much better than Vorpal does
20:15:56 <Vorpal> ais523, anyway what about reading /dev/psaux? You talked about getting X to run under the secret project before iirc?
20:16:07 <ais523> I can't mention much at all about Stage 2, though, or people would put 1 and 2 together
20:16:12 <elliott> ais523: Perhaps because I've stopped trying to guess the exact purpose
20:16:14 <ais523> Vorpal: I've never heard of /dev/psaux
20:16:18 <elliott> ais523: I think I have a good grasp of the workings, though
20:16:25 <Vorpal> ais523, the mouse, well the PS/2 mouse
20:16:27 <elliott> And I suspected that it'd do little to CPU-bound programs but slow down syscall-bound ones quite severely
20:16:30 <Gregor> CakeProphet: 0 and 1 are included, but sort of uninteresting. And as elliott points out, in fact it has a player # limit (10), so in that sense there's a limit.
20:16:32 <elliott> So I seem to have a working mental model of it.
20:16:33 <Vorpal> ais523, not sure where usb mice turn up
20:16:37 <ais523> Vorpal: oh, I'm going to support /dev/input/mice instead
20:16:50 <ais523> because all mice turn up there, and it's where programs tend to actually read in practice
20:16:56 <Vorpal> ais523, hm /dev/psaux seems to be legacy name for it these days. Go figures.
20:17:11 <elliott> psaux sounds like a squawk a bird makes
20:17:13 <ais523> also, because I finally figured out what format it was in
20:17:26 <ais523> which took several hours both experimenting and reading kernel sources
20:17:41 <zzo38> Is there anything like: derivable :: Name -> (Dec -> Q [Dec]) -> Q [Dec]; It would be useful to use in Template Haskell if you want to make up your own deriving of your own classes too, I would think
20:17:42 <elliott> Argh, I really need to figure out how feasible bidi parsers are
20:17:44 <CakeProphet> so yeah for this ruleset you could either 1) add a number of transitionary flag states to simulate the slow movement b) ditch that because it's awful and just change the rules because it's convenient.
20:18:02 <ais523> there are, but they don't describe the protocol
20:18:04 <elliott> You can't just "change the rules"
20:18:10 <Vorpal> ais523, anyway what will you do for the mouse input?
20:18:15 <elliott> this is what Perl does to people
20:18:17 <CakeProphet> elliott: right, the idea here is that I don't care and it's not a CA anymore.
20:18:20 <Vorpal> ais523, pre-recorded input?
20:18:24 <ais523> Vorpal: that involves Stage 2, so I'll stay silent on it
20:18:47 <Vorpal> ais523, when will you reveal that
20:18:53 <ais523> when Stage 3 is finished
20:18:57 <CakeProphet> elliott: it's a completely arbitrary thing to be concerned about. Also, it can still be modelled as a CA it's just slightly more tedious that way.
20:19:00 <Vorpal> ais523, and stage 3 is the last one?
20:19:13 <ais523> stage 3 is the purpose for which stages 1 and 2 exist
20:19:15 <Vorpal> so we won't hear any details about stage 2 or 3 until it is all done?
20:19:38 <Vorpal> you certainly do know how to build a hype though
20:19:45 <ais523> well, I need lots of help with stage 1
20:20:00 <ais523> and the hype is built to persuade people to help me with it
20:20:18 -!- monqy has joined.
20:20:21 -!- zzo38 has left.
20:20:59 <ais523> stage 2, it's much harder, because I have to ask the questions disguised in such a way that they're out of context (but have an obvious incorrect context so that people don't get suspicious), and I don't ask them in #esoteric either as it would be too obvious
20:21:12 <Vorpal> ais523, reveal details and you will get help.
20:21:23 <ais523> well, I don't need much help with it yet
20:21:28 <ais523> as I'm still trying to get stage 1 working
20:21:32 <elliott> Vorpal is really grumpy about this.
20:21:41 <ais523> anyway, I will say that being secret is a necessary property of the secret project
20:21:46 <Vorpal> elliott, certainly. Did you figure out what it was for yet?
20:21:59 <Vorpal> ais523, would it fail if not secret?
20:22:06 <ais523> it exists /for the purpose of being secret/
20:22:19 <Vorpal> ais523, oh I see. You are trolling us. Right.
20:22:37 <ais523> well, yes I probably am, but that's not the project's purpose
20:22:46 <ais523> it's just a fun side-effect
20:23:10 <elliott> if you're stupid enough to get annoyed about it
20:23:32 <ais523> well, it only trolls Vorpal, I think
20:24:40 <ais523> its purpose is not trolling Vorpal, anyway
20:24:43 <ais523> its purpose is to be secret
20:24:56 <ais523> why this is the case, is also secret, for the same reason that the original project is secret
20:25:00 <fizzie> I think the /dev/input/mice protocol is documented, because I remember reading about it. I mean, doesn't it speak the regular PS/2 mouse protocol with the MS Intellimouse extensions?
20:25:15 <ais523> bleh, this is actually quite a hard concept to express
20:25:37 <ais523> fizzie: it speaks PS/2, and two different incompatible extension
20:25:46 <ais523> depending on what's sent to it
20:26:15 <fizzie> Well, it speaks at least that Intellimouse thing.
20:28:25 <fizzie> MOUSEDEV_EMUL_PS2, MOUSEDEV_EMUL_IMPS, MOUSEDEV_EMUL_EXPS. Oh, right; basic Intellimouse, and Intellimouse Explorer, maybe?
20:28:44 <fizzie> I distinctly remember reading a document about this. But I suppose it was free-floating around the internet.
20:29:25 <elliott> hmm, this sure is hard when you're stubborn
20:33:31 <quintopia> "I just watched Source Code on DVD – it all seemed completely believable until I saw Jake Gyllenhaal using Bing as his search engine.
20:35:39 <Gregor> CakeProphet: OK, so even if we imagine that there's a proliferation of states associated with the flags such that they will "move slowly", I STILL don't get your idea.
20:35:48 <CakeProphet> It has been my observation in movie universe that Apple is the only PC manufacturer, so I woule assume so.
20:36:27 -!- ais523 has quit (Remote host closed the connection).
20:36:44 <NihilistDandy> CakeProphet: That's because they happen in the future, and in the future everything is white or aluminum
20:37:11 <CakeProphet> Gregor: The idea is that you want to electrify an opponent flag without electrifying your own.. I suppose that makes the win conditions somewhat chaotic but it means you could try to build trap circuits to make this possible.
20:38:09 <lambdabot> Text.Html text :: String -> HtmlAttr
20:38:09 <lambdabot> Text.PrettyPrint.HughesPJ text :: String -> Doc
20:38:09 <lambdabot> Text.XHtml.Transitional text :: String -> HtmlAttr
20:38:33 <lambdabot> http://hackage.haskell.org/package/text
20:38:46 <lambdabot> Source not found. Wrong! You cheating scum!
20:38:57 <lambdabot> forall a. (Read a) => Int -> String -> [(a, String)]
20:39:03 <CakeProphet> Gregor: also it makes you use a flag stream to win, instead of merely keeping it closed off from everything.
20:41:02 <CakeProphet> Gregor: with the addition of some extra circuit components (diodes, pressure plates, a conductor cell similar to the "trampoline" in befunge that would make flags/electrons jump over the next cell) it would make it kind of a circuit-building battle.
20:42:53 <NihilistDandy> You and lambdabot talking to each other about reading
20:42:56 <CakeProphet> so a basic "attack" circuit would be a cross with a horizontal stream of electrons, and two diodes above and below the point of intersection.
20:43:27 <CakeProphet> the flag would pass through the diode, become electrified, and continue forward, while the horizontal electron stream couldn't propogate through the intersection (I think...)
20:43:47 <Gregor> CakeProphet: The degree of control required to electrify the enemy flag and not your own seems ... intense.
20:44:15 <oerjan> hm could the secret project be an OS-level time-traveling debugger...
20:44:57 <CakeProphet> Gregor: I think it might benefit from a mostly empty grid but I'm not so sure about that.
20:45:11 <elliott> OH M;Y GOD IT MAY ALERADY BE TOO LATE
20:45:15 <elliott> oerjan: GET THE FIRST PLANE TO BIRMINGHAM
20:45:17 <elliott> ILL MEET YOUAT THE AIRPORT
20:45:31 <CakeProphet> Gregor: empty except for electron loops to use as source currents.
20:45:34 <Gregor> elliott: You're gonna be waiting a while :P
20:45:55 <elliott> things i would watch: a thriller where a bunch of nerds on irc have to band together real quicklike to stop someone going insane and releasing terrors unto the universe because of their research
20:46:09 <CakeProphet> Gregor: also it might benefit from being able to build faster than the current system allows. So that complex circuits can be built somewhat quickly.
20:46:12 <elliott> we need more films aimed at the lucrative irc nerd demographic
20:46:52 <olsner> like... non-interactive text adventures?
20:47:24 <Gregor> `addquote <elliott> we need more films aimed at the lucrative irc nerd demographic
20:47:26 <HackEgo> 613) <elliott> we need more films aimed at the lucrative irc nerd demographic
20:48:09 <CakeProphet> Gregor: also view radius could be increased potentially. These are all variables that could be tuned with testing.
20:52:02 <CakeProphet> Gregor: it is pretty complicated though. A top player would eventually need some pattern recognition abilities.
20:52:27 <Gregor> CakeProphet: I'm still digesting.
20:53:22 <HackEgo> 437) <oklopol> are there boobs you wack and squeeze around to move the mouse? [...] <oklopol> like those little nipples in laptop keyboards, but they'd be full-blown boobies
20:54:14 <HackEgo> 60) <apollo> What is there to talk about besides gay slang?
20:54:21 <HackEgo> 486) <monqy> it was a wonderful dream <monqy> i died in it <monqy> that's how it started
20:54:26 <HackEgo> 161) <ais523> cpressey: I have actually done a waterfall-model project that almost worked <cpressey> That's where you have a flexible kayak that bobs and weaves between the rocks as it plummets off the cliff
20:54:38 <HackEgo> 27) IN EINEM ALTERNATIVEN UNIVERSUM (WO DIE NAZIS WON): <ehird> So kann ich nur schliessen, dass es falsch ist, oder die Welt ist vollig BONKERS. Gegrusset seist du der Fuhrer Hitler!
20:54:48 <Vorpal> Phantom_Hoover, did you know the bot does PM?
20:55:02 <HackEgo> 219) <Gregor> elliott: My university has two Poultry Science buildings. <Gregor> Two!
20:55:03 <Vorpal> Phantom_Hoover, now you know
20:55:04 <HackEgo> 134) <oklopol> you move on the tape and shit
20:55:05 <HackEgo> 449) [on petrol] <ais523> oklofok: it's actually poisonous, so I advise against drinking it <Phantom_Hoover> ais523, also contains benzene, my carcinogen of choice.
20:55:05 <HackEgo> 20) <FireFly> Meh <FireFly> ._.
20:55:06 <HackEgo> 262) <j-invariant> 22:55 < qfr> How am I supposed to develop software in Haskell if I can't even prepare my projects in UML?! It seems like an impossible task. <j-invariant> HAHA [...] <j-invariant> this is amazing, like meeting a Mormon or something
20:55:48 <HackEgo> 614) <Phantom_Hoover> Vorpal, of course I knew, you idiot.
20:56:05 <Vorpal> that one isn't even funny. Why is it there?
20:56:19 <elliott> anything against Vorpal goes in
20:56:28 <elliott> i dont know how that got there though
20:56:48 <HackEgo> 614) <Phantom_Hoover> Oh come on isn't it obvious.
20:57:37 <fungot> olsner: oh i am here already. outside the soya tha
20:57:37 <elliott> Phantom_Hoover: Help I need a crash course on how to be sixteen. I am not prepared.
20:58:34 <olsner> elliott: I think you're supposed to be doing drugs and getting pregnant
20:59:42 -!- GreaseMonkey has joined.
21:01:11 <Gregor> elliott: I'm starting to think that tantrum isn't the best strategy.
21:02:01 <elliott> Can you give the SLIGHTEST bit of evidence for this slander?
21:02:17 <oerjan> if tantrum is not giving the results you want, you are not using enough of it.
21:04:59 <CakeProphet> obviously the best approach is to use a botnet to traverse massive decision trees.
21:06:37 <CakeProphet> what's the sanest way to clear out /tmp without breaking anything?
21:06:52 <CakeProphet> I have a lot of junk tmp files that I need to remove, but I have no way to single them out in a single rm command
21:07:37 <olsner> just remove everything, that's what I do
21:08:06 <oerjan> and CakeProphet was never heard from again.
21:08:31 <CakeProphet> well, didn't seem to solve my close-to-max-memory-usage problem.
21:08:49 <pikhq> Is /tmp even a tmpfs on your system?
21:09:14 <olsner> CakeProphet: hmm, you have checked what's using the memory haven't you?
21:09:19 <fizzie> Or a "prmfs", to be more consistently named.
21:09:27 <oerjan> the files system implemented in cuneiform
21:10:07 <olsner> is that the "cifs" thing?
21:10:08 <CakeProphet> chrome, java, chrome, chrome, chrome, chrome... I guess /tmp wasn't contributing much since I cleared it.
21:11:03 <elliott> CakeProphet: be careful not to go by virtual memory
21:11:04 <CakeProphet> lol obviously I should go with my random hypothesis first before doing the obvious.
21:12:26 <CakeProphet> being alive for a week or more, me causing tabxplosions everytime I work on my freelancing project.
21:13:16 <Vorpal> CakeProphet, ram usage?
21:13:33 <Vorpal> CakeProphet, how much did chrome use in MB?
21:14:02 <Gregor> elliott: I just made the graphics SO SEXY you have no idea.
21:14:08 <CakeProphet> hard to say there were many processes. each one had around .3 GB or so.
21:14:36 <Vorpal> CakeProphet, how much ram do you have in total?
21:15:00 <elliott> http://codu.org/projects/rezzo/hg/ help i dont see what you actually did
21:15:13 <Vorpal> CakeProphet, heh, not much these days
21:15:15 <olsner> if the chrome people did it right, I think most of that memory per process should be shared memory
21:15:20 <elliott> http://codu.org/projects/rezzo/hg/index.cgi/rev/9b44df78ea77 Gregor: Did you forget something?
21:15:26 <elliott> olsner: they did do it right
21:15:30 <Vorpal> elliott, maybe he didn't commit it yet?
21:15:34 <elliott> Gregor: so where is the sexy..........e......................
21:15:39 <olsner> but of course, if you have enough processes they'll use a lot in total anyway
21:15:39 <CakeProphet> Vorpal: it's sufficient most of the time. This was an exceptional circumstance of negligence to reboot chrome.
21:16:01 <Vorpal> CakeProphet, ah. I find anything less than 8 GB annoying these days. My desktop has 16 GB
21:16:01 <Gregor> Vorpal, elliott: http://codu.org/tmp/rezzo1.png
21:16:26 <Vorpal> Gregor, now it needs a shader, adding HDR.
21:16:27 <CakeProphet> Vorpal: that's insane I don't even know how I would reach 8 GB
21:16:34 <CakeProphet> other than intentionally writing memory leaks.
21:17:26 <CakeProphet> pikhq: also mount | grep "/tmp" yields nothing.
21:20:24 <elliott> Gregor: where are the arrowes
21:20:31 <Gregor> elliott: ... still there.
21:20:39 <elliott> im cnsn t see in that screenshot
21:21:03 <Vorpal> CakeProphet, I have like 220 tabs open in firefox. And I can still do make -j8.
21:21:30 <Vorpal> CakeProphet, that is how I use my ram
21:21:36 <CakeProphet> uh my brain doesn't have the attention span for that many tabs.
21:21:41 <olsner> oh, you use it for firefox
21:22:21 <Vorpal> olsner, I have to say firefox 5 uses quite a bit less ram than older versions though. Still a memory hog, but not quite as bad
21:22:33 <Gregor> elliott: Dood, run with random seed 657868118
21:22:38 <Gregor> elliott: With four wanderers.
21:22:41 <Vorpal> olsner, and I never really liked chrome
21:22:47 <Gregor> elliott: Blue and orange/brown are RIGHT NEXT TO EACH OTHER :P
21:22:58 <olsner> I remember the times when firefox was an awesomely lean version of mozilla, it was usable with only 128MB of RAM
21:23:11 <elliott> $ ./rezzo -r 657868118 warriors/{wanderer,wanderer,wanderer,wanderer}
21:23:23 <Vorpal> olsner, heh. Not with 220 tabs though
21:23:29 <Deewiant> The web was simpler in those times
21:23:31 <Gregor> Also apparently my ability to take a random seed is borked or something ...
21:23:33 <Vorpal> olsner, anyway wasn't it firebird back then?
21:23:49 <Vorpal> Deewiant, it was firebird at some point
21:24:04 <olsner> iirc phoenix was before firebird
21:24:06 <Vorpal> hm how did it grow so bloated.
21:24:43 <Deewiant> Darn, 0.6 was Firebird, 0.8 was Firefox
21:25:01 -!- oerjan has quit (Quit: Good night).
21:25:33 <Gregor> CakeProphet: Size specified at runtime, defaults to 320x320.
21:25:41 <Vorpal> CakeProphet, it makes sense though
21:25:55 <Vorpal> Gregor, which language are you coding it in?
21:26:12 <Vorpal> Gregor, why not haskell?
21:26:18 <Gregor> Because C is the best language for all porpoises.
21:26:27 <Vorpal> Gregor, tell that to elliott
21:26:44 <olsner> Gregor: but you're not a porpoise, are you?
21:27:16 <Gregor> olsner: HOW DO YOU KNOW?
21:28:39 <olsner> Gregor: I just... know.
21:28:43 <Gregor> elliott: Re InvalidMessage stuff, it's because you're dead.
21:28:51 <CakeProphet> though I'm tempted to represent the board as a string so that I can use terrible regex hacks to match patterns.
21:29:15 <elliott> Gregor: Shouldn't that terminate the program
21:29:21 <Gregor> elliott: It should, but it doesn't :P
21:29:24 <elliott> Not much to think about when yer dead
21:29:27 <olsner> CakeProphet: sounds like you want to write this in sed, not in perl
21:29:58 <olsner> CakeProphet: no you don't
21:30:39 <CakeProphet> I don't believe sed is a general purpose programming language.
21:30:54 -!- hagb4rd has joined.
21:31:16 <olsner> the same could be sed for perl
21:31:36 <elliott> CakeProphet: https://github.com/darius/awklisp/blob/master/awklisp
21:32:03 <CakeProphet> that's not really saying much I guess. I'll look at it.
21:32:33 <CakeProphet> olsner: as far as I know sed cannot interface to a network without the help of bash.
21:33:04 <olsner> that's true, sed has very poor communication skills
21:33:05 <hagb4rd> elliott: sorry elliot, didn't mean to bother yesterday..
21:33:13 <elliott> i don't remember any botheration
21:33:20 <elliott> which reminds me, i should sleep.
21:33:25 <CakeProphet> also, believe it or not, Perl allows you to like... structure code and stuff.
21:33:33 <Gregor> elliott: With four tantrums on seed 657868118, brown kills blue :)
21:33:42 <elliott> Gregor: Have you fixed seed reading yet?
21:33:58 <elliott> Otherwise not much help :P
21:34:10 <Gregor> elliott: It wasn't broken, I was imagining things.
21:34:19 <olsner> you either have to pipe in/out through something that does everything for sed, or you can call external programs to do everything (but then you need a set of external programs that match what you need done...)
21:34:22 <elliott> elliott@katia:~/Code/rezzo$ ./rezzo -r 657868118 warriors/{wanderer,wanderer,wanderer,wanderer}
21:34:23 <elliott> elliott@katia:~/Code/rezzo$
21:34:33 <pikhq> CakeProphet: Meh, who gives a fuck. C cannot interface to a network without the help of POSIX or Winsock.
21:34:40 <elliott> Gregor: Your error reporting SUCKS HARD
21:34:49 <Gregor> elliott: I actually have fixed that, just pushed :P
21:35:05 <CakeProphet> pikhq: it's a bit different how it goes about that though.
21:35:14 <CakeProphet> meaning in C it's actually part of the language.
21:35:31 <pikhq> Depends on your notion of "part".
21:35:42 <CakeProphet> invokable within the language via functions.
21:36:06 <CakeProphet> so that it abstractions can be made over it.
21:36:16 <pikhq> That's a poor notion.
21:36:27 <CakeProphet> it's still something that I can do with C networking that I cannot with sed.
21:36:31 <pikhq> Is zlib part of C?
21:36:50 <olsner> CakeProphet: what are you building btw?
21:37:09 <elliott> Gregor: Can't wait for red to die :P
21:37:27 <elliott> Gregor: Also, the arrows could do with being a little less translucent...
21:37:32 <CakeProphet> olsner: just toying with a Rezzo player in Perl, but I should really be doing more pertinent things.
21:37:32 <elliott> Hard to make them out in a sea of electrons.
21:37:41 <pikhq> Also, you can totally do networking from dc without bash.
21:38:43 <elliott> Gregor: Why does "-q -r ..." not seem to take notice of the -q...
21:38:52 <CakeProphet> hmmm, I'm kind of surprised that Perl has no prototype for regex arguments, so that you can use /.../ instead of qr/.../ in the style of grep and split.
21:38:56 <elliott> Or is it just that slow :P
21:39:15 <Gregor> elliott: It's that slow.
21:39:34 <Gregor> elliott: On my quadcore it's lightnin' though :)
21:41:08 <elliott> Gregor: I really love how chaotic tantrum is :P
21:41:37 <elliott> It's harder to see all the spinning with these too-translucent arrows though OOOH BRING IT BACK TO THE MAIN POINT :P
21:41:45 <elliott> Do I have three green contestants...
21:42:05 <Gregor> elliott: It only initializes the first four colors, beyond that it's whatever garbage malloc() gave 8-D
21:42:17 <CakeProphet> split /\d+/, $string instead of split qr/\d+/, $string even though in most other contexts the /.../ would result in an immediate match on $_
21:42:47 <Gregor> elliott: Err, five, rather.
21:42:52 <elliott> Gregor: Disappointed that -q without any warriors doesn't lock up my computer
21:47:07 <Gregor> elliott: Suggested colors for 6-10? :P
21:47:39 <CakeProphet> !perl sub bmap(&@){my$x=shift;map{map $x,$_}@_} $b = [map{[map 0, 1..5]} 1..5]; print @{(bmap {1} $b)->[0]}
21:48:26 <quintopia> looks like this game is going to be, like, done today?
21:49:03 <quintopia> where does the name of the game come from, Gregor?
21:49:21 <Gregor> *useless answer CITYYYY*
21:49:26 <hagb4rd> if we go fast enough we might be even get it done yesterday
21:49:46 <quintopia> Gregor Rezzo Richards. Guess it has a nice ring to it.
21:50:02 <elliott> Gregor: Chartreuse, octarine, mezoflouride, Rezzo Corporate Colour 9, autopsy red
21:50:22 -!- CakeProp1et has joined.
21:50:22 -!- CakeProphet has quit (Read error: Operation timed out).
21:52:59 <elliott> aha, then i'd never become sixteen.
21:53:21 <olsner> oh, is it your sweet sixteen tomorrow?
21:53:48 <CakeProp1et> !perl sub test{print "lol"} map \test, 1..4
21:54:30 <CakeProp1et> !perl sub test{print "lol"} map &{\test}, 1..4
21:54:31 <EgoBot> Not a CODE reference at /tmp/input.15020 line 1.
21:54:39 <Gregor> OK, my colors are now: red, blue, green, orange, magenta, teal, puce, cyan, purple, light green
21:55:58 <CakeProp1et> oh it's because bmap doesn't accept an arrayref. lame.
21:56:34 <Vorpal> elliott, have fun tomorrow then
21:56:51 <hagb4rd> that's nice..where can i get information on the egobot..is there a repo? could ya spend me a link? thanks
21:58:56 <hagb4rd> what time do you have btw?
22:00:02 -!- elliott has quit (Ping timeout: 240 seconds).
22:00:24 <CakeProp1et> !perl sub bmap([&$]+){my$x=shift;map{map $x,$_}@_} $b = [map{[map 0, 1..5]} 1..5]; print (bmap {1} @$b)[0]
22:00:24 <EgoBot> Malformed prototype for main::bmap: [&$]+ at /tmp/input.15502 line 1.
22:02:37 <CakeProp1et> !perl sub bmap(\[&$]+){my$x=shift;map{map $x,$_}@_} $b = [map{[map 0, 1..5]} 1..5]; print (bmap {1} @$b)[0]
22:02:38 <EgoBot> Type of arg 1 to main::bmap must be one of [&$] (not anonymous hash ({})) at /tmp/input.15758 line 1, near "} @"
22:03:53 <CakeProp1et> !perl sub bmap(\[&$]@){my$x=shift;map{map $x,$_}@_} $b = [map{[map 0, 1..5]} 1..5]; print (bmap 1, @$b)[0]
22:03:54 <EgoBot> Type of arg 1 to main::bmap must be one of [&$] (not constant item) at /tmp/input.15882 line 1, near "$b)"
22:04:01 <fizzie> If you have a \ in there, it's going to have to be a real thing that starts with & or $.
22:04:29 <fizzie> Well, no, it will be passed as a ref.
22:04:57 <CakeProp1et> so you can't emulate map's signature with prototypes.
22:05:43 <fizzie> (&@) possibly gets reasonably close.
22:06:04 <fizzie> It's what the docs use for an "almost exactly like" grep replacement, and grep's pretty close to map.
22:06:41 <CakeProp1et> yeah but that doesn't allow map 0, @list or grep /pattern/, @list
22:06:58 <CakeProp1et> the grep example being more common than the map one.
22:07:57 <CakeProp1et> I guess I'll just have to write {} and return with my map and grep like operators. the horror.
22:08:10 <quintopia> hagb4rd: looks like he was shot. alive but maybe not much longer?
22:08:33 <hagb4rd> quintopia: how can you tell?
22:08:53 <quintopia> http://twitter.com/#!/MalikAlAbdeh
22:14:58 -!- FireFly has quit (Quit: FireFly).
22:36:08 -!- CakeProp1et has quit (Ping timeout: 268 seconds).
22:38:46 <Vorpal> quintopia, is it confirmed he is killed? By dependable sources?
22:39:06 <quintopia> read the twitter feed vorpal. says he is probably alive.
22:39:27 <Vorpal> quintopia, says killed in the top tweet
22:40:03 -!- CakeProphet has joined.
22:40:05 <Vorpal> wait, did I call it "tweet"? I meant "post" of course. "Tweet" is a silly name.
22:40:07 <azaq23> somehow twitter doesn't work for me anymore, FF 3.5.19. It shows the top bar and then nothing.
22:40:08 <CakeProphet> ($self->{arr}, $self->{str}) = ($g, join "\n", map {join '',@$_} @$g) if $g;
22:40:24 <Vorpal> azaq23, tends to need js iirc
22:40:42 <quintopia> Vorpal: then it's still up in the air. i suspect he won't be alive tomorrow, either way.
22:41:02 <Vorpal> quintopia, is the shooting confirmed by reliable sources though?
22:41:03 <quintopia> also, tweet is correct. resistance to newspeak is futile.
22:41:14 <Vorpal> quintopia, such as NATO or whatever
22:41:20 <azaq23> Vorpal: JS is activated, otherwise this would be the easy reason. It still worked a month ago
22:41:30 <quintopia> the man is a journalist. he probably has sources that NATO doesn't
22:41:39 <Vorpal> quintopia, yes but are they reliable
22:42:23 <quintopia> the sources are anonymous. only the man doing the tweeting can be the judge of that
22:42:42 <quintopia> (anonymous to us, not to him, i mean)
22:42:47 <Vorpal> quintopia, so is there any other source than the man doing that posting on twitter?
22:42:50 <Vorpal> that is what I'm asking
22:42:58 <Vorpal> I don't know if I trust that man either
22:43:03 <Vorpal> I have never heard of him before
22:43:28 <Vorpal> quintopia, In other words I'm asking for reliable independent sources.
22:43:45 <Vorpal> quintopia, yes, tried google news
22:44:15 <quintopia> i don't think other news services are going to say anything until the confusion has died down and the end result is absolutely confirmed.
22:44:28 <hagb4rd> reliable and independent..yes
22:44:32 -!- CakeProphet has quit (Ping timeout: 240 seconds).
22:44:44 <Vorpal> hagb4rd, exactly what I asked for. Reliable, independent
22:45:36 <Vorpal> quintopia, tomorrow what timezone? It is just after midnight here
22:45:38 <hagb4rd> i'd like to know who really is
22:46:06 -!- Patashu has joined.
22:46:13 <quintopia> i bet they'll know for sure by then
22:46:13 <Vorpal> quintopia, you mean news paper
22:46:27 <Vorpal> quintopia, you live in US right?
22:46:37 <quintopia> also newspapers are printed much earlier than morning news is shot
22:46:39 <Vorpal> quintopia, in Sweden newspapers are still good quality, and common
22:47:12 <quintopia> wait until the morning tv news. i suspect newspapers wont have it yet
22:47:40 <Vorpal> quintopia, I don't even have a TV. So I'll check the radio then.
22:47:55 <Vorpal> quintopia, Sweden has public service on BBC quality level after all.
22:48:59 <Vorpal> quintopia, okay, still it is not like it is BBCs main target.
22:49:31 <quintopia> you are very familiar with US news services?
22:49:34 <Vorpal> quintopia, and based on the name that covers more than one country
22:49:47 <hagb4rd> there are all kind of journalists in all ´countries
22:49:49 <Vorpal> quintopia, enough to know that public service over there is fairly limited
22:49:58 -!- CakeProphet has joined.
22:49:58 -!- CakeProphet has quit (Changing host).
22:49:59 -!- CakeProphet has joined.
22:50:04 <Vorpal> and that newspapers are not as common as in Europe
22:50:22 -!- Phantom_Hoover has quit (Ping timeout: 240 seconds).
22:50:31 <quintopia> and newspapers are ridiculously common
22:50:43 <Vorpal> quintopia, you said no one reads them
22:50:46 <quintopia> its just that paper journalism is the past
22:51:18 <Vorpal> quintopia, you have nothing like BBC really. You do have a few public service networks iirc, but no single major player like that.
22:51:34 <quintopia> i dont think you know much about the news here though. nott enough to directly compare quality.
22:52:25 <Vorpal> quintopia, oh and of course they are very US centric. And Fox is horrible.
22:52:56 <quintopia> not like newscorp doesnt do horrible things internationally.
22:53:12 <quintopia> but i dont hear many people criticizing NYTimes
22:54:01 <Vorpal> maybe that paper have better quality?
22:54:40 <hagb4rd> they have the oldskool journalísts
22:55:58 -!- CakeProphet has quit (Ping timeout: 240 seconds).
22:56:07 <quintopia> does CNN have a bad reputation outside the US?
22:56:48 <quintopia> fox has a bad reputation IN the US. we call it an outlier.
22:56:54 -!- CakeProphet has joined.
22:56:55 -!- CakeProphet has quit (Changing host).
22:56:55 -!- CakeProphet has joined.
22:57:28 -!- CakeProp1et has joined.
22:57:31 <quintopia> but they are an opinion service, not a news service, so for delivering opinions they are pretty adequate
22:58:07 <monqy> good thing they certainly don't call themselves a news source
22:58:54 -!- CakeProphet has quit (Client Quit).
22:59:09 -!- CakeProp1et has quit (Client Quit).
22:59:26 <pikhq> Fox has a bad reputation in the US, except for its audience.
22:59:35 <pikhq> Which considers it a source of Truth.
22:59:37 -!- CakeProphet has joined.
23:02:26 <pikhq> A fairly large portion of the GOP base.
23:03:15 <Gregor> pikhq: dood u shud rezzo
23:03:43 <hagb4rd> but its the center of america..and the south ..right?
23:04:43 <Vorpal> <hagb4rd> but times will change <-- maybe, but here newspapers survive by doing investigating journalism to a much higher degree than before.
23:04:59 <pikhq> And the US's electoral system is biased against population density.
23:05:00 <Vorpal> at least the ones that are still breaking even do
23:05:26 <pikhq> Vorpal: Here journalism survives by spouting louder bullshit.
23:05:37 <Vorpal> pikhq, I think our way is better
23:06:51 <Vorpal> pikhq, especially for democracy. Investigative journalism is an important tool to battle corruption.
23:08:12 <Gregor> CakeProphet: https://codu.org/projects/rezzo/hg/
23:08:27 <pikhq> *Battle* corruption?
23:08:33 <Vorpal> pikhq, only reason I still subscribe to a newspaper is due to the really good quality journalism in it.
23:09:58 <Vorpal> pikhq, that newspaper won a shitload of international awards. Not only for their journalism, but also for the design, and good use of graphics for visualisation iirc.
23:13:49 <olsner> Vorpal: don't be so confident that journalism is all free and awesome over here, it's merely less bad I think
23:14:14 <CakeProphet> !perl sub id2base($) {(qw(1 q 2 w 3 e 4 r 5 t 6 y 7 u 8 i 9 o 0 p))){shift}} print id2base(1)
23:14:14 <EgoBot> syntax error at /tmp/input.22813 line 1, near "))"
23:14:14 <Vorpal> olsner, true, not free. I mean SvD costs money certainly.
23:14:25 <Vorpal> olsner, anyway SvD /is/ good.
23:14:27 <CakeProphet> !perl sub id2base($) {(qw(1 q 2 w 3 e 4 r 5 t 6 y 7 u 8 i 9 o 0 p)){shift}} print id2base(1)
23:14:27 <EgoBot> syntax error at /tmp/input.22903 line 1, near "){"
23:14:48 <olsner> Vorpal: I meant free as in freedom, freedom of the press to discover shit and write about it
23:15:07 <Vorpal> olsner, well, true, it could be getting worse. Who knows.
23:15:24 <CakeProphet> !perl sub id2base($) {tr/0-9/qwertyuiop/ =~ shift} print id2base(1)
23:15:32 <olsner> well, they are probably pretty free, but aren't very independent I think
23:15:37 <CakeProphet> I promise I'm not making like... a hilarious hack or anything.
23:16:11 <Vorpal> CakeProphet, if it doesn't print "just another perl hacker" I'm going to be disappointed
23:16:45 <CakeProphet> !perl sub id2base($) {shift =~ tr/0-9/qwertyuiop/} print id2base(1)
23:16:45 <EgoBot> Can't modify shift in transliteration (tr///) at /tmp/input.23127 line 1, near "tr/0-9/qwertyuiop/}"
23:17:06 <Vorpal> CakeProphet, but why not try it locally?
23:17:16 <Vorpal> just open a terminal emulator
23:17:43 <Vorpal> CakeProphet, show us the end result though
23:18:17 <Vorpal> CakeProphet, also I have nothing against you doing it here. It is low rate enough to not be spammy :P
23:18:33 <Gregor> http://codu.org/projects/rezzo/hg/index.cgi/raw-file/tip/README.agents Here we go, a simple README for writing agents.
23:19:03 <Vorpal> Gregor, typo "my respond"
23:20:11 <CakeProphet> !perl sub id2base($) {my $_=shift;tr/0-9/qwertyuiop/;$_} print map id2base, 0..9
23:20:12 <EgoBot> Not enough arguments for main::id2base at /tmp/input.23915 line 1, near "id2base,"
23:20:21 <CakeProphet> !perl sub id2base($) {my $_=shift;tr/0-9/qwertyuiop/;$_} print map \id2base, 0..9
23:20:21 <EgoBot> Not enough arguments for main::id2base at /tmp/input.23974 line 1, near "id2base,"
23:20:39 <Vorpal> Gregor, so the client needs to be recompiled to use a different view port size? Hm
23:20:40 <CakeProphet> !perl sub id2base($) {my $_=shift;tr/0-9/qwertyuiop/;$_} print id2base 5
23:20:57 <CakeProphet> if I say "not terrible" enough it becomes not terrible.
23:21:10 <Gregor> Vorpal: It was argued that since this is essentially a realtime application, it's more important to know the size statically than to be flexible.
23:22:30 <CakeProphet> Vorpal: the purpose is to map each agent ID to a unique character for the purposes of representing the game grid.
23:23:40 <CakeProphet> Gregor: bases and geysers are states, but agents are not right?
23:23:46 <CakeProphet> otherwise moving around would destroy things.
23:24:27 <Gregor> CakeProphet: Agents are states, but agents may only move on blank spaces. The "wall" concept was merged into circuits.
23:26:16 <Vorpal> Gregor, so not really a CA any longer. Since the agent doesn't follow any CA laws
23:26:38 <Vorpal> after all it is controlled by an external program
23:26:53 <CakeProphet> controlled by a predetermined input string. :P
23:27:05 <Vorpal> CakeProphet, open('/dev/random')
23:27:37 <Vorpal> CakeProphet, you can't describe the agent's behaviour anyway in terms of the state of it and the neighbours
23:27:54 <Vorpal> iirc that is what makes a CA a CA, as opposed to for example a bully automata
23:28:28 <Gregor> <Vorpal> Gregor, so not really a CA any longer. Since the agent doesn't follow any CA laws // the CA and the agents were always independent. The agent DOES follow CA laws, it just only does so during the CA update.
23:28:36 <Gregor> The agent was never a CA itself, that makes no sense :P'
23:29:08 <Vorpal> Gregor, that is less of an issue when the agent is not a state :P
23:29:43 <Gregor> Vorpal: This opens the possibility of e.g. hitting agents (which currently you can't do)
23:30:02 <Gregor> Besides, it makes agent visibility not be yet more extra data.
23:30:06 <Vorpal> Gregor, so how do you win currently?
23:30:12 <Gregor> Vorpal: It's capture-the-flag.
23:30:39 <Gregor> Vorpal: Did you read the README, or only README.agent? :P
23:30:47 <Vorpal> Gregor, link me to the readme
23:30:52 <Gregor> http://codu.org/projects/rezzo/hg/index.cgi/raw-file/tip/README
23:32:46 <Vorpal> Gregor, btw the time system currently is unfair. I suggest basing it on CPU time instead somehow. After all, who knows what other process suddenly decides to run
23:33:16 <Gregor> Vorpal: I have decided to instead write a system that's actually implementable.
23:33:26 <Gregor> (It's unfair, but it's equally unfair to all contestants)
23:34:02 <CakeProphet> Vorpal the benefit of representing each possible state as a character is that I can use regex to match patterns.
23:34:12 <CakeProphet> that's the theory anyways. We'll see how it works out.
23:34:26 <Gregor> Oh, that's interesting ...
23:34:28 <Vorpal> CakeProphet, .... less efficient if you do it from C or such :P
23:34:48 <Gregor> Why do people seem to think that 1/15th of a second is some super-tiny amount of time? Implement it in Perl, who cares X-P
23:34:51 <Vorpal> Gregor, uh. How is it not implementable to measure CPU time. You just have to run the processes under your control.
23:34:59 <Vorpal> try ais secret project XD
23:35:07 <Gregor> Vorpal: Yeah, I don't got that ;P
23:35:18 <CakeProphet> Gregor: you think I'll end up going over the frame rate?
23:35:55 <Gregor> CakeProphet: Everything I've done in C has been way, way, way faster than it needed to be, so it's not like it's cutting it close.
23:36:22 <Vorpal> Gregor, hm what is a good algorithm to do pathing here. Considering the moving electrons I mean
23:36:47 <Gregor> Vorpal: The moving electrons have very little relevance to player pathing ...
23:37:03 <Vorpal> Gregor, iirc you said players could only enter empty cells?
23:37:15 <Gregor> Vorpal: Yes, but ele--yeah.
23:37:22 <Vorpal> Gregor, how do you cross a conductor?
23:37:28 <CakeProphet> so far I've gone with the name "spartan" but I might change it once I actually have a strategy.
23:37:44 <Patashu> can you make a conductor go diagonally?
23:37:52 <Gregor> Patashu: Yes, you can.
23:38:01 <Gregor> Patashu: But you can't move diagonally.
23:38:07 <Gregor> CakeProphet: Destroying takes a while.
23:38:35 <Gregor> Cells have a damage value (which is completely independent of the CA)
23:39:04 <Vorpal> and the client can't see it
23:39:14 <Gregor> Vorpal: So you've read but not actually read both of the README files then.
23:39:17 <Patashu> oh no...not...limited information
23:39:27 <CakeProphet> Gregor: so you... sit on the conductor for a while before it goes away, otherwise it gets replaced by a conductor when you step off?
23:39:30 <Gregor> Seeing as that you think that you can't see it when actually you can and it says so RIGHT IN THE FUCKING README
23:39:36 <Vorpal> oh I missed the damage array
23:39:37 <Patashu> I demand a bfjoust variant where the player is told the status of the entire board
23:40:01 <Gregor> <-- much more polite in README form :P
23:40:25 <Vorpal> Patashu, go code it then
23:40:50 <Vorpal> Patashu, not that it will be interesting
23:41:10 <Patashu> bfjoust is only interesting because you don't know what the fuck is going on except whether you're on a 0 or not
23:41:13 <Vorpal> perfect play would always lead to a draw. And perfect play would be even easier than in tic-tac-toe
23:41:42 <CakeProphet> Gregor: rezzo warrior repo plz (sorry if it's in plain site but I can't seem to get it from google or the previous link)
23:41:58 <Gregor> CakeProphet: That one's not in plain sight, since only elliott uses it :P
23:42:04 <Gregor> https://codu.org/projects/rezzo/warriorhg/
23:42:54 <Vorpal> Gregor, anyway hm I would make my client for the game multi-threaded.
23:43:03 <Gregor> Vorpal: Then do that :P
23:43:12 <Vorpal> Gregor, if I was about to do one :P
23:43:37 <CakeProphet> Gregor: reading Haskell is almost like reading a spec so I'm using it as reference. :P
23:44:14 <Vorpal> Gregor, oh another good trick: scan /proc for the server and suspend it while calculating the move. Since the other bot would not expect that, it should be an advantage.
23:44:36 <Gregor> Vorpal: lol NO SIDE CHANNELS >_<
23:45:01 <Vorpal> Gregor, my next suggestion was using ptrace to modify the board :P
23:45:54 <Vorpal> Gregor, anyway a more borderline case would be busywaiting all the time you are not calculating
23:45:57 -!- hagb4rd has quit (Ping timeout: 252 seconds).
23:46:00 <Vorpal> I wonder what that would result in
23:46:15 <CakeProphet> heh, elliott and I used the same characters for the same states.
23:46:25 <Gregor> Vorpal: Probably snarfing up all the memory would be more valuable.
23:46:43 <Vorpal> Gregor, oh good point. But that would be tricky on linux.
23:47:20 <Vorpal> Gregor, due to overcommiting, and swap you will not get the result you want from that I expect
23:47:48 <Gregor> Vorpal: Swapping is /exactly/ what you want. Overcommitting shouldn't be an issue with malloc(), glibc still needs its bookkeeping.
23:48:11 <Vorpal> Gregor, probably more efficient to just mmap a huge range and write to the first byte in every page
23:48:22 <Gregor> Vorpal: Yeah, that'd do.
23:48:29 <Gregor> setrlimit to the rescue :P
23:48:40 <fizzie> That sounds like a good way to get the best possible score for the OOM killer.
23:48:42 <CakeProphet> !perl print join "\n", qr/a/, qr/b/, qr/c/
23:49:33 <CakeProphet> !perl print "a\nb\nc"=~(join "\n", qr/a/, qr/b/, qr/c/)
23:49:37 <Vorpal> Gregor, anyway filling up the ram of a modern desktop will take a while. I have 16 GB RAM.
23:49:52 <olsner> that'll take like several seconds
23:50:07 <Vorpal> olsner, yep. with 15 moves per second....
23:50:25 <Gregor> Vorpal: So, you're not gonna win in 45 moves *shrugs*
23:50:37 <CakeProphet> truly it is a glorious day when I can join regexes
23:50:42 <Vorpal> hm the first hdd I had was 3.2 GB iirc. That isn't a lot these days
23:50:43 <CakeProphet> though I suppose strings would have sufficed.
23:53:04 <Gregor> Vorpal: I could run the program under UMLBox with max (say) 64MB memory, and no more than one user process (which I /think/ still allows threads?)
23:53:35 <pikhq> It does with NPTL.
23:53:50 <Vorpal> Gregor, anyway 64 MB isn't much
23:53:57 <Vorpal> Gregor, not if you are using haskell
23:54:07 <pikhq> I at least think...
23:54:24 <Vorpal> Gregor, allow 1 GB or so. That would be more than enough. And not large enough to be problematic on a modern system.
23:54:30 <Vorpal> besides what is wrong with using fork()?
23:54:47 <Gregor> Vorpal: UML processes are processes, so you can still glut.
23:55:10 <Vorpal> as in the opengl related library?
23:55:45 <Gregor> Why does NOÖNE no what glut means today.
23:55:59 <Gregor> Verb: Supply or fill to excess: "the factories for recycling paper are glutted".
23:56:33 <Vorpal> Gregor, must be deprecated. Removed in English 2011.08
23:56:45 <fizzie> Gregor: It's because you keep using "no" for "know". The stupidity has retroactively spread.
23:56:59 <Gregor> fizzie: ... I seriously suck at English recently ...
23:57:17 <fizzie> I just got someone else's error message out of EgoBot via DCC, I think.
23:57:41 <Gregor> fizzie: Well, so long as /somebody/ gets them.
23:57:54 <Vorpal> Gregor, anyway 64 MB is tiny. 1 GB may be too much if you have many warriors
23:58:09 <Vorpal> Gregor, so, lets say 512 MB each? Sounds reasonable to me
23:58:11 <fizzie> http://p.zem.fi/yw0y -- wanted to check if it prints the other lines too, but it DCC-sent me someone's Haskell type problems.
23:58:28 <Gregor> Vorpal: My desktop has 1G 8-D
23:59:10 <Gregor> This desktop is from 2008.
23:59:13 <Vorpal> Gregor, anyway 64 MB each precludes many high level languages
23:59:28 <Gregor> Vorpal: It's my main computer.
23:59:30 <Vorpal> Gregor, I mean my laptop from 2008 has more ram
23:59:37 <Vorpal> I think it is from 2008
23:59:42 <Gregor> I think 2008 might be wrong :P
23:59:43 <pikhq> Uh, 4G cost like $40 in 2008.
23:59:49 -!- copumpkin has joined.
23:59:52 <Gregor> Somewhere 'round there.