--- Log opened Fri Aug 24 00:00:45 2012 |
00:01 | | Attilla [Obsolete@Nightstar-acede6c1.as43234.net] has quit [Ping timeout: 121 seconds] |
00:02 | | Attilla [Obsolete@Nightstar-9260ef47.as43234.net] has joined #code |
00:11 | | cpux|2 is now known as cpux |
00:23 | | Derakon[AFK] is now known as Derakon |
00:26 | < RichyB> | I would agree that Python is both awesome and horrific. |
00:26 | < RichyB> | I believe that we might disagree about which bits of Python are awesome and which horrific. |
00:27 | < Rhamphoryncus> | probably |
00:28 | < RichyB> | So I made a totally horrific thing today. |
00:28 | < Rhamphoryncus> | In this case I'd be happy enough to call python a decent language. That's not what's awesome and horrific. It's the fact that I have to go that far to add a property, but if I am going that far I can also mod the UI to have decent ways of manipulating it |
00:28 | < RichyB> | Someone whined on Twitter a few weeks back that they wished they had a single-byte x86 opcode that would dump all the CPU registers to stderr. |
00:29 | < RichyB> | So I wrote a thing that deliberately invokes illegal instructions in order to emulate such an instruction: https://github.com/RichardBarrell/snippets/blob/master/regprinting_illhandler.c |
00:29 | < RichyB> | I'm kind of proud of how violently unportable it is. |
00:30 | <&Derakon> | When you try to use it on the wrong platform, it will cause the hard disk to halt and catch fire. |
00:30 | < RichyB> | I mean I've heard of people deliberately inducing SIGSEGV in their own programs for lazy caching, virtual memory in userspace, diagnostics, automatically-growing stacks... |
00:30 | < RichyB> | I don't think I've ever heard of anyone using SIGILL on purpose before though. |
00:31 | <&McMartin> | Deliberately inducing SIGSEGV for those things is not an abuse of SIGSEGV |
00:31 | < RichyB> | Turns out, it's quite easy! |
00:31 | <&McMartin> | Also, hm |
00:31 | <&McMartin> | I wonder if SIGILL or something like it isn't used for paravirtual operations in VMs. |
00:31 | <&McMartin> | The other obvious entry point would be INT |
00:32 | < RichyB> | McMartin: I didn't call it an abuse, but I do kind of dislike that you can't do anything finer-grained than 4kB with SIGSEGV. |
00:32 | <&McMartin> | IIRC, VirtualBox runs its kernel code in Ring 1 and uses protection violation while in ring 1 for its paravirtual trap |
00:33 | < RichyB> | Oh, I tried invoking protection violation exceptions earlier, using instructions like INSB/OUTSB and so on that require ring 0. For some reason they raise SIGSEGV too under Linux, rather than SIGILL. |
00:34 | < RichyB> | At least on this Linux 3.2, Ubuntu 12.04, Intel/AMD64 laptop anyway. |
00:34 | <&McMartin> | nog |
00:34 | <&McMartin> | Well, SIG is an OS-level thing |
00:34 | <&McMartin> | The hardware trap will be something else |
00:34 | < RichyB> | Yeah. I have no idea what or even if I could change the hardware traps in a userspace program. |
00:34 | < RichyB> | s/what/how/ |
00:35 | < RichyB> | But SIGILL is definitely the easiest thing for faking an opcode - for one thing, unlike SIGSEGV, it's rather likely to not come up by accident! |
00:35 | < Rhamphoryncus> | rather, SIG* are user-level interfaces, which arbitrarily correspond (or not) to hardware traps |
00:36 | < RichyB> | I wonder if you could use SIGILL for a JIT. |
00:36 | < Rhamphoryncus> | how? |
00:37 | < RichyB> | Generate a trace of instructions, then for the paths that you don't feel like generating yet, put illegal opcodes in (rather than the normal thing, which is to write a jump into some subroutine of the JIT) |
00:38 | <&McMartin> | You're using the illegal opcode as a slow jump in such a case |
00:38 | < RichyB> | then assemble new code in the SIGILL handler |
00:39 | | You're now known as TheWatcher[T-2] |
00:39 | < RichyB> | Yes. A really compact one though! Normally jumping back into the JIT is like eight bytes of opcodes, I think? The thing that I wrote triggers SIGILL with one byte. :) |
00:39 | < RichyB> | (Couple of PUSHes or MOVs and a JMP) |
00:39 | <&McMartin> | Cycles are gonna hurt more |
00:40 | < RichyB> | Probably. Maybe as a code compaction step. |
00:41 | < RichyB> | Let the tracing JIT run for a bit, then during a GC run, shrink some of the existing traces by substituting JMPs that haven't been used yet with the shorter illegal-instruction form. |
00:41 | < Rhamphoryncus> | I can only see it being used as a SACF op, for assertion failures and such |
00:41 | < RichyB> | Stop, Abend, Catch Fire? |
00:41 | | You're now known as TheWatcher[zZzZ] |
00:41 | < Rhamphoryncus> | stop and catch fire |
00:42 | < Rhamphoryncus> | A branch is going to involve a conditional jump anyway, so you probably don't save that much |
00:42 | < Rhamphoryncus> | Perhaps avoiding the address itself |
00:43 | < RichyB> | Don't amd64 and ia32 have near- and far-branch opcodes with differing widths? |
01:18 | | himi [fow035@D741F1.243F35.CADC30.81D435] has joined #code |
01:18 | | mode/#code [+o himi] by ChanServ |
01:37 | <@Alek> | SACF is probably a real instruction in the Wiz Biz world. XD |
01:37 | <@Alek> | yeah, pretty sure I've seen it referenced there. |
01:38 | <&ToxicFrog> | I'm familiar with it as HMCF. |
01:38 | <&ToxicFrog> | Halt, Melt, Catch Fire |
01:38 | | * Alek grins. |
01:55 | <&McMartin> | 407 SQUIRREL JAM |
02:06 | <&ToxicFrog> | FEED ME A CAT |
02:07 | | celmin|away is now known as celticminstrel |
02:07 | <&McMartin> | Programmable printer messages are in fact the finest innovation of all office technology |
02:45 | | RichyB [richardb@Nightstar-86656b6c.cable.virginmedia.com] has quit [Ping timeout: 121 seconds] |
02:59 | | Kindamoody[zZz] is now known as Kindamoody |
03:33 | | Reivles [orthianz@3CF3A5.E1CD01.C6689C.33956A] has joined #code |
03:35 | | Orthia [orthianz@3CF3A5.E1CD01.C6689C.33956A] has quit [Ping timeout: 121 seconds] |
04:22 | | * Rhamphoryncus reads about 3d model formats |
04:25 | < Rhamphoryncus> | It's looking like I should cook up my own binary format and maybe use collada to store the models before compiling to the binary |
04:25 | <~Vornicus> | I don't even know what a model format looks like any more. |
04:28 | < Rhamphoryncus> | There's shitloads apparently |
04:28 | < Rhamphoryncus> | With collada being closest to a sane standard |
04:29 | < Rhamphoryncus> | Sane being a relative concept |
04:33 | < Rhamphoryncus> | My concern is in connecting the models together |
04:34 | < Rhamphoryncus> | Roads must be continuous even though their spacing isn't uniform. Large buildings may be constructed of multiple models. Stuff like that |
04:35 | < Rhamphoryncus> | Or matching with the terrain |
04:36 | | Kindamoody is now known as Kindamoody|gaming |
04:36 | < Rhamphoryncus> | Might involve something like skeletal animation |
04:40 | <&Derakon> | That kind of stuff makes me happy I stick to 2D games. |
04:40 | | * Vornicus found himself having a Show Them All moment this afternoon playing MInecraft. |
04:43 | | iospace is now known as iospacedout |
04:46 | < Rhamphoryncus> | Derakon: normally it's not nearly as bad. Most people don't go near spherical maps, for reasons just like this |
04:46 | <&Derakon> | I mostly just meant having to deal with 3D file formats and animations and so on. |
04:46 | < Rhamphoryncus> | Positioning on square or hexagonal tiles is much much easier |
04:47 | < Rhamphoryncus> | Yeah, but I don't actually mean animation. I just meant the skeleton part |
04:47 | < Rhamphoryncus> | So I can indicate which vertices get tweaked to line things up |
04:48 | < Rhamphoryncus> | *headdesk* Image search for "flexible coupling". Related searches include "flexible women" |
04:48 | <&Derakon> | Heh. |
04:49 | < Rhamphoryncus> | I'm not even going to try searching for "mating surface" |
04:49 | < Rhamphoryncus> | okay, yes I am :D |
04:50 | < Rhamphoryncus> | nope, nothing funny |
04:53 | <&Derakon> | Woo, Pyrel's broken 4k lines of code. |
04:55 | <~Vornicus> | woo |
05:05 | <&Derakon> | Now that the input rewrite is done, what do I tackle next... |
05:54 | <~Vornicus> | What have you got so far? |
05:56 | <&Derakon> | Uh. |
05:57 | <&Derakon> | Man, I don't really know how to start describing that. |
05:57 | <&Derakon> | I've basically been building up the engine, i.e. a framework into which the actual content can be stuffed. |
06:04 | <~Vornicus> | Okay. Got level generation? |
06:08 | | Kindamoody|gaming is now known as Kindamoody |
06:48 | | Attilla_ [Obsolete@Nightstar-c8035ff5.as43234.net] has joined #code |
06:50 | | Attilla [Obsolete@Nightstar-9260ef47.as43234.net] has quit [Ping timeout: 121 seconds] |
06:52 | | Attilla [Obsolete@FBC920.173C5E.A79230.E8FE3E] has joined #code |
06:52 | | Attilla_ [Obsolete@Nightstar-c8035ff5.as43234.net] has quit [Ping timeout: 121 seconds] |
06:54 | <&Derakon> | Sorry, got sidetracked. |
06:54 | <&Derakon> | I have basic level generation, yes. |
06:54 | <&Derakon> | It'll select level-appropriate creatures and items and plop them down into a very simple network of rooms and corridors. |
06:54 | <&Derakon> | I'm filing "detailed item generation", "proper monster AI", and "interesting level generation" as "content to be filled in once the game engine itself is working properly." |
07:01 | | Derakon is now known as Derakon[AFK] |
07:03 | <~Vornicus> | Can monsters actually /do/ anything? |
07:04 | <~Vornicus> | I mean, can you build a monster that can move, attack, ...answer prompts? |
07:05 | <~Vornicus> | I know you've made it so a prompt can be asked of the player - but can a monster AI answer a prompt that it would generate through its actions. |
07:06 | <~Vornicus> | (I don't care whether it can answer the prompt sensibly according to heuristics yet, that's another matter - but I do care whether the monster can aim an arrow or open a door.) |
07:11 | | celticminstrel [celticminst@Nightstar-05d23b97.cable.rogers.com] has quit [[NS] Quit: KABOOM! It seems that I have exploded. Please wait while I reinstall the universe.] |
07:23 | | * McMartin goes to find whoever wrote the Python library documents so that he might beat them with a cheese |
07:23 | <&McMartin> | "rfile: Contains an input stream, positioned at the start of the optional input data." |
07:23 | <&McMartin> | Not shown: failure to parse Content-Length and read that amount from rfile corrupting subsequent requests |
07:28 | | * Vornicus fails to parse McM's "not shown" thing |
07:29 | <&McMartin> | That's from the docs for the Python Library's HTTP Server object. |
07:29 | <&McMartin> | If you write an HTTP request processor, and you do not parse the headers, check for Content-Length, and read exactly that many bytes out of the "rfile" field, you will get the content of the previous POST operation you processed prepended to your next request |
07:30 | <&McMartin> | Which will probably fail with code 501 because there is no HTTP command named key-valGET. |
07:30 | <&McMartin> | Er |
07:30 | <&McMartin> | key=valGET. |
07:31 | | * McMartin has been tasked with building testcases for a client-server system and is using Python to build a mock-server to test the client against. |
07:31 | <&McMartin> | Which is now working, but that little detail cost me about 2.5 hours. |
07:31 | <&McMartin> | But that "optional" in the docs doesn't mean "it's something you can ignore" |
07:32 | <&McMartin> | It means "it might have data pending and if it does you must read it by hand, even though all other parts of the request are pre-read and pre-parsed" |
07:32 | <~Vornicus> | So in short, rfile isn't pulled from the actual stream. |
07:32 | <~Vornicus> | This isn't a documentation error, this is a library error. |
07:32 | <&McMartin> | Not only is rfile not pulled from the actual stream, trying to read *more* than Content-Length will block you |
07:33 | <&McMartin> | Does Python have stringstreams? |
07:33 | <~Vornicus> | StringIO/CStringIO |
07:34 | <~Vornicus> | I may have the casing wrong, but the former is pure python and subclassable and the latter is C and faster. |
07:37 | <~Vornicus> | I don't know if the same distinction exists in python3 |
07:38 | <~Vornicus> | Though whether it would actually be wise to use that on a... |
07:39 | <~Vornicus> | so here's the problem I'm seeing, and probably why this shit has to happen: I've uploaded files that were multiple hundreds of megabytes. |
07:39 | <~Vornicus> | And I certainly didn't choke either my computer or the server at the other end doing it! |
07:39 | <&McMartin> | There are also people that do Broken Things with HTTP 1.1 |
07:39 | <&McMartin> | That said |
07:39 | <&McMartin> | It's not a bug that it present input and output as file-like objects |
07:39 | <&McMartin> | That is fine |
07:40 | <&McMartin> | What is not fine is that when the handler function returns, it does not advance the file-like object. |
07:41 | <&McMartin> | (What is also not fine is people using multipart HTTP or similar other things to not only duplex a single request, but to hold a conversation within it.) |
07:43 | <~Vornicus> | wtfx |
07:44 | <&McMartin> | To clarify - we are not doing this |
07:44 | <&McMartin> | But it is a thing that is done, and the fact that people were doing this with HTTP 1.1 is the main motivator for the creation of "Web Sockets" |
07:44 | | Rhamphoryncus [rhamph@Nightstar-5697f7e2.abhsia.telus.net] has quit [Client exited] |
08:03 | <&jerith> | McMartin: The Python stdlib HTTP server is hilariously bad. |
08:03 | <&jerith> | (Also, I have some code in it.) |
08:03 | <&McMartin> | This'll never hit production, so actual quality is kind of irrelevant |
08:03 | <&McMartin> | It's there to provide convincing lies to the client to make sure that when hooked to a live server the client will ping and reply appropriately |
08:03 | <&jerith> | How are you getting multiple requests in a single stream, though? |
08:04 | <&McMartin> | I have no idea, tbh |
08:04 | <&McMartin> | The client is just making calls to libcurl |
08:04 | <&McMartin> | Maybe it's a side effect of the server being on localhost? |
08:04 | <&jerith> | Maybe libcurl is doing pipelining or something. |
08:05 | <&jerith> | Anyway, you can't trust content-length. |
08:05 | <&McMartin> | libcurl will definitely keep the connection going if you reuse your curl_easy_handles, and this is in fact considered a Best Practice |
08:05 | <&McMartin> | Well, I'm writing the client. |
08:05 | <&jerith> | Sure, but you can't trust it in the general case. |
08:05 | <&McMartin> | I'm going to make sure the client's Content-Length *can* be trusted, because if it lies, that's Bad (tm) |
08:05 | <&McMartin> | Yes, but messing with that is a job for the mock client, and for the *real* server to handle. |
08:05 | <&jerith> | So I wouldn't expect a generic server implementation to trust it. |
08:06 | <&McMartin> | This is *purely* as a standalone testcase for the client's side of the protocol. |
08:06 | <&jerith> | So it's reasonable for the stdlib server to leave that to you. |
08:06 | <&McMartin> | Maybe |
08:06 | <&McMartin> | But, uh, given that it appears to hang forever if you ask it to read data that isn't there... |
08:07 | <&jerith> | I'm not sure what the HTTP spec says about reusing connections, though. |
08:07 | <&jerith> | It might mandate an accurate content-length header, in which case the server is non-compliant. |
08:08 | <&jerith> | Hanging forever on an incomplete blocking socket operation is also kind of standard behaviour. |
08:09 | <&jerith> | It's one of the reasons I have a strong dislike for blocking socket operations. |
08:10 | | Vash [Vash@Nightstar-e8057de2.wlfrct.sbcglobal.net] has quit [[NS] Quit: I lovecraft Vorn!] |
08:11 | <&jerith> | Testing this stuff is kind of hard. :-/ |
08:11 | <&McMartin> | Yes |
08:11 | <&McMartin> | The principle I'm using to guide this is the standard "be generous in what you accept and rigorous in what you emit" |
08:11 | <&McMartin> | My responsibility is the client |
08:11 | <&McMartin> | It is thus perversely in my interest for the mock server I test the client against to be as fragile as possible |
08:12 | <&McMartin> | Tomorrow I'm going to mess around with making it give, e.g. deliberately wonky response headers to make sure it won't panic if someone redirects them |
08:12 | <&McMartin> | (shitty captive portals \o/) |
08:13 | <&jerith> | McMartin: I generally don't use an HTTP server to test my HTTP clients. |
08:13 | <&jerith> | I just read from the socket and assert on octets. |
08:14 | <&McMartin> | This is a multi-roundtrip protocol, that's more work than setting up a Python server -_- |
08:14 | <&McMartin> | (Also, someone else already set up the groundwork - they just didn't have POSTs in the previous stuff tested with data attached, and so didn't hit this) |
08:15 | < froztbyte> | nc -k -l -p 1337 |
08:15 | < froztbyte> | done/done |
08:15 | < froztbyte> | (stick a `while true` pipe on either side of that) |
08:16 | <&McMartin> | Automated testing, not hand-typing the stuff in. |
08:16 | <&McMartin> | And if you reply "so stuff here documents in", that's writing a web server *in bash*, and I'll stick with Python, thanks |
08:17 | < froztbyte> | what is this "bash" thing? is that like an exploding zsh? |
08:17 | < froztbyte> | but on a more absurd note: http://code.google.com/p/bashttpd/ |
08:18 | <&McMartin> | Both of those things are programs that don't exist on Windows by default, the platform for which this is primarily run. |
08:18 | <&McMartin> | So, again, Python is obviously indicated |
08:18 | < froztbyte> | McMartin: oh, right |
08:18 | <&McMartin> | Being better than shell and actually portable. |
08:18 | < froztbyte> | I forgot you actually have a working python on windows |
08:18 | < froztbyte> | and on top of that even get stuff done in it |
08:18 | <&McMartin> | And the various things that pretend to be cross-platform in other scripting languages actually work. |
08:18 | < froztbyte> | hehe |
08:19 | < froztbyte> | I wonder how much effort it is to open sockets in psh |
08:19 | < froztbyte> | (yes, I have a dread fascination with the horrible things in life) |
08:19 | < froztbyte> | oh, obviously: http://paws.codeplex.com/ |
08:19 | | himi [fow035@D741F1.243F35.CADC30.81D435] has quit [Ping timeout: 121 seconds] |
08:21 | <&McMartin> | The only time in Python I've ever had to do anything tricky and Windows-specific was when I needed to set stdout to binary mode. |
08:22 | <&McMartin> | Which requires a special module to be conditionally imported. |
08:41 | | * jerith sighs at these people. |
08:41 | <&jerith> | The main guy is great, but he's unavailable most of the time and I'm dealing with underlings. |
08:42 | <&jerith> | They keep telling me this connection is dropping because I'm trying to send "bind" messages while I'm already bound. |
08:42 | < froztbyte> | ask them for a GGSN trace, and the full running config |
08:42 | <&jerith> | I keep telling them that I'm only sending "bind" messages because /they/ sent /me/ a RST packet and I've opened a new TCP connection. |
08:43 | < froztbyte> | that should point out that you're not playing around ;) |
08:43 | < froztbyte> | (the config request will get that request escalated pretty quickly) |
08:43 | <&jerith> | I send them the tcpdump they asked for, which is when they told me I was trying to rebind. |
08:43 | < froztbyte> | ahaha |
08:43 | < froztbyte> | is this an african telco, or indian one? |
08:44 | <&jerith> | Except the wireshark screenshot they used as justification clearly had the RST highlighted in red just above the bind packet they were looking at. |
08:44 | <&jerith> | You're not cleared for that information. |
08:44 | < froztbyte> | ah |
08:44 | <&jerith> | (And I probably shouldn't even be mentioning it in here.) |
08:44 | < froztbyte> | maybe show them the TCP conversations screen snapshot? |
08:45 | < froztbyte> | and add arrows |
08:45 | < froztbyte> | "this is where I re-bind, given the RST from the GGSN in the previous connection" |
08:45 | <&jerith> | I spent the evening fixing homebrew and installing wireshark with GUI support. |
08:45 | <&jerith> | But it segfaults in the middle of GTK. |
08:45 | < froztbyte> | try tshark? |
08:45 | <&jerith> | What's a GGSN? |
08:46 | < froztbyte> | the GGSN is the core of a cell net |
08:46 | < froztbyte> | or are you working with the SMSC there? |
08:46 | <&jerith> | SMPP. |
08:46 | < froztbyte> | ah okay |
08:47 | <&jerith> | We have four active binds, and three of them are rock-solid. |
08:47 | < froztbyte> | yes, then you're likely speaking to an SMSC |
08:47 | < froztbyte> | jerith: that makes me think it could be a license issue on their side |
08:47 | <&jerith> | Yes, we're talking to one of their SMSCs. |
08:47 | < froztbyte> | max allowed connections or somesuch |
08:47 | | * jerith shrugs. |
08:47 | < froztbyte> | what happens if you drop an old connection, then bring up the problematic 4th? |
08:48 | <&jerith> | No, the four binds are to different places. |
08:48 | < froztbyte> | oh. |
08:48 | <&jerith> | Two of them are USSD. |
08:48 | | * jerith <3 their USSD people. |
08:51 | < froztbyte> | :) |
08:53 | <&jerith> | It's the first sane USSD API I've worked with. |
08:59 | < froztbyte> | except for your own, of course? :) |
08:59 | <&jerith> | We don't have our own. |
09:00 | < froztbyte> | eh, thought vumi had as USSD interface as well |
09:00 | < froztbyte> | my mistake :) |
09:00 | <&jerith> | vumi does. |
09:00 | <&jerith> | But the only way to get USSD is to talk to someone who has it already. |
09:00 | <&jerith> | And they all have their own APIs. |
09:01 | <&jerith> | We prefer SMPP if we can get it. |
09:02 | < froztbyte> | fair enough |
09:10 | | You're now known as TheWatcher |
09:49 | | Kindamoody is now known as Kindamoody|out |
10:23 | | Reivles [orthianz@3CF3A5.E1CD01.C6689C.33956A] has quit [Ping timeout: 121 seconds] |
10:28 | | Orthia [orthianz@3CF3A5.E1CD01.C6689C.33956A] has joined #code |
11:09 | | RichyB [richardb@Nightstar-86656b6c.cable.virginmedia.com] has joined #code |
11:44 | | iospacedout is now known as iospace |
12:18 | | RichyB [richardb@Nightstar-86656b6c.cable.virginmedia.com] has quit [Ping timeout: 121 seconds] |
12:35 | <@TheWatcher> | Ugh |
12:35 | <@TheWatcher> | System Complexity Mental Blocks, how I hate them |
13:06 | | Orthia is now known as Reiv |
13:11 | < gnolam> | ? |
13:25 | <@TheWatcher> | This project is sat at 26,390 lines of code, my brain's currently having trouble keeping track of some bits of it. Another thousand lines or so, and I'll weridly be fine with it again |
14:09 | <&jerith> | TheWatcher: That might indicate a structural issue. |
14:12 | <&jerith> | Programming is all about managing. |
14:13 | <@TheWatcher> | Nah, I always hit this about every 10k lines after the first 15. |
14:15 | < AnnoDomini> | jerith: Are you suggesting that programmers are prime candidates for management? :V |
14:16 | <&jerith> | Oops, ETOOMANYCONVERSATIONS |
14:17 | <&jerith> | Programming is all about managing complexity. |
14:17 | <&jerith> | But I need to head out now. |
15:20 | | himi-cat [fow035@Nightstar-5d05bada.internode.on.net] has joined #code |
15:50 | | celticminstrel [celticminst@Nightstar-05d23b97.cable.rogers.com] has joined #code |
16:37 | | * TheWatcher eyes javascript |
16:38 | <@TheWatcher> | this.buttons.length contains zero... but there are three elements in the array. How?! |
16:40 | <@TheWatcher> | Oh, it's an associative array, which doesn't have a length, of course! |
16:48 | < iospace> | heh |
17:07 | | celticminstrel [celticminst@Nightstar-05d23b97.cable.rogers.com] has quit [[NS] Quit: And lo! The computer falls into a deep sleep, to awake again some other day!] |
17:22 | <~Vornicus> | Shit. Now I'm imagining a program that decides where to put torches on the surface in Minecraft. |
17:23 | | Derakon[AFK] is now known as Derakon |
17:23 | <&Derakon> | Getting back to where we left off last night, Vorn. |
17:23 | <&Derakon> | Monsters currently are coded to wander at random. That's all they do. |
17:24 | <&Derakon> | I haven't yet decided if monsters should utilize the Command system. They can't answer Prompts since, as you so astutely pointed out earlier, Prompts are entirely a display-layer thing. |
17:30 | <~Vornicus> | Do you have other ways of filling in the missing information of a command? |
17:31 | <&Derakon> | Mm, currently each Command has a contextualize() function that gets all the information it needs to run (by generating Prompts), and an execute() function to actually do its thing. |
17:31 | <&Derakon> | I could have an AIContextualize() or something. |
17:41 | | Rhamphoryncus [rhamph@Nightstar-5697f7e2.abhsia.telus.net] has joined #code |
17:43 | | Kindamoody|out is now known as Kindamoody |
19:00 | | * Derakon eyes his code, extremely confused. http://pastebin.com/RqZkTDLM |
19:00 | <&Derakon> | How can you subtract 1 from 1 and have 1 left over? >.< |
19:01 | < iospace> | easy |
19:01 | < iospace> | you do [redacted] ^_^ |
19:10 | < Rhamphoryncus> | Derakon: My only guess is that one of them is a custom type that's misbehaving |
19:11 | < Rhamphoryncus> | So print the type() of each |
19:15 | <&Derakon> | Printing the type of each causes the program to work again. O_o |
19:16 | <&Derakon> | I wonder if I'm dealing with some kind of threading issue. |
19:18 | | Vash [Vash@Nightstar-e8057de2.wlfrct.sbcglobal.net] has joined #code |
19:18 | | mode/#code [+o Vash] by ChanServ |
19:38 | | Kindamoody is now known as Kindamoody[zZz] |
19:43 | | celticminstrel [celticminst@Nightstar-05d23b97.cable.rogers.com] has joined #code |
21:27 | | celticminstrel [celticminst@Nightstar-05d23b97.cable.rogers.com] has quit [Client exited] |
21:45 | | Vash [Vash@Nightstar-e8057de2.wlfrct.sbcglobal.net] has quit [[NS] Quit: I lovecraft Vorn!] |
22:32 | | iospace is now known as io|gone |
23:52 | | io|gone is now known as iospace |
--- Log closed Sat Aug 25 00:00:00 2012 |