code logs -> 2012 -> Fri, 24 Aug 2012< code.20120823.log - code.20120825.log >
--- 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
code logs -> 2012 -> Fri, 24 Aug 2012< code.20120823.log - code.20120825.log >

[ Latest log file ]