code logs -> 2012 -> Mon, 20 Aug 2012< code.20120819.log - code.20120821.log >
--- Log opened Mon Aug 20 00:00:44 2012
00:12 You're now known as TheWatcher[T-2]
00:15 himi [fow035@Nightstar-5d05bada.internode.on.net] has quit [Ping timeout: 121 seconds]
00:21 You're now known as TheWatcher[zZzZ]
00:25 Nemu [NeophoxProd@Nightstar-e1d9a987.asahi-net.or.jp] has quit [Ping timeout: 121 seconds]
01:39 himi [fow035@D741F1.243F35.CADC30.81D435] has joined #code
01:39 mode/#code [+o himi] by ChanServ
02:58
<&McMartin>
Oh hey
02:58
<&McMartin>
A 100% Java reimplementation of Git
02:58
<&McMartin>
This is possibly the best thing that could have happened to it -_-
03:14
<&Derakon>
What was Git originally written in? Perl?
03:16
<&ToxicFrog>
A mix of perl and bash, mostly
03:16 * Derakon winces.
03:17
<&Derakon>
Changing the subject, I'm working on rewriting how Pyrel handles inputs.
03:17
<&Derakon>
The goal is to make it easy to serialize/deserialize commands so that they can be readily chained together / repeated.
03:18
<&Derakon>
For example, I want to have an object that represents "fire an arrow from this stack at this target".
03:18
<&Derakon>
Or "cast Magic Missile from this spellbook at this target", etc.
03:18
<&Derakon>
I have a pretty good handle on how all that should be implemented, I think.
03:18
<&Derakon>
But it conflicts with my original input-handling design.
03:18
<&Derakon>
In that design, every object in the game is allowed to say "I'm interested in user input".
03:19
<&Derakon>
And then react to it as it sees fit.
03:19
<&Derakon>
The problem here is that I'm pretty sure the new design requires there to only ever be one Command at a time, since the UI layer and engine layer need to be communicating with each other on how to contextualize the Command.
03:20
<&Derakon>
As it stands, only the Player currently listens to input anyway, so I could just assume that only the Player cares about input.
03:21
<&Derakon>
The reason I went with the any-object-can-listen-to-input system in the first place was because I imagined that there could be objects which would require the user to e.g. answer riddles (like the Mastermind puzzle in NetHack). But I suppose those could be handled via custom Prompts instead of custom Things...
03:21
<&Derakon>
I grant I may not have described this clearly, but anyway, what are your thoughts?
03:22
<&Derakon>
I should describe how the new system is planned.
03:22
<&Derakon>
Basically, user inputs map to Command subclasses. Each one, broadly speaking, represents a verb.
03:22
<&Derakon>
The Command determines what context it needs to execute itself (direct/indirect objects, mostly).
03:23
<&Derakon>
It creates Prompts to obtain that information.
03:23
<&Derakon>
Once it is fully contextualized, it executes, modifying the game state as appropriate.
03:24
<&Derakon>
So e.g. the "fire arrow" example earlier would be a FireCommand, which generates an ItemPrompt("Fire which ammo?") and then a TargetPrompt("Shoot at which target?") before executing.
03:43
<&Derakon>
No thoughts?
03:48 Kindamoody[zZz] is now known as Kindamoody
03:48
< rms>
That seems a bit overkill
03:48
< rms>
But might be due to Python not having a way to swap functions dynamically
03:48
< rms>
So I can't really comment
03:50
<&McMartin>
Python can in fact do that on objects - "monkey patching" - but it's kind of one of those summon-the-old-gods techniques
03:51
<&Derakon>
I'd rather not be inserting functions into class objects at runtime, no.
03:52
<&Derakon>
Also, various Commands may have different logic for assuming parts of their context.
03:52
<&Derakon>
For example, targeting the same thing that the player last targeted.
03:52
< rms>
Even something like C's function pointers or PHP's variable functions would be fine (as that's what I was thinking of)
03:52
<&Derakon>
Explain more?
03:52
<&Derakon>
How are you imagining using these?
03:53
< rms>
You basically want a class per command, IMO that's a bit overkill
03:53
<&Derakon>
Not quite
03:53
<&Derakon>
You can map multiple inputs to the same command.
03:53
<&Derakon>
For example, all movement-related inputs use the same command.
03:54
<&Derakon>
Part of the context of the Command object is the input used to create it.
03:54
<&Derakon>
So it knows which direction to move in.
03:55
<&Derakon>
In any event, that logic needs to be somewhere. Why would a class be inherently worse than a function? Sure it's marginally memory-inefficient, but not so's you'd notice, especially since typically only one will be active at a time.
04:01
<&Derakon>
(I note that currently all that logic is stuck inside the Listener subclass of the Creature class, and it's a moderately nasty snarl of if/elif/.../ and callback chains)
04:02
< Rhamphoryncus>
I'm confused. Is FireCommand a factory function? A callback?
04:02
<&Derakon>
It's a class.
04:02
<&Derakon>
Its job is to acquire the necessary information to fire something.
04:02
<&Derakon>
(Specifically, what to fire, by whom, and at whom)
04:03
< Rhamphoryncus>
Where's the potential monkey patching?
04:03 * Derakon shrugs.
04:03
< Rhamphoryncus>
Or is it the fact that you'll only have one instance of each class?
04:05
< Rhamphoryncus>
Or maybe one instance and just one method too, so you want a simpler way to declare it?
04:05
<&Derakon>
Currently-planned methods for Command subclasses are __init__, contextualize(), execute(), and [de]serialize().
04:06
<&Derakon>
Mm, the need to serialize them is one of the big arguments for making separate subclasses for 'e.m
04:06
<&Derakon>
Er, 'em.
04:07
< Rhamphoryncus>
Why?
04:07
<&Derakon>
Why serialize them? Or why is serializing a good reason to make classes out of them?
04:08
<&Derakon>
The serialization is necessary for hotkeys and a command history.
04:08
< Rhamphoryncus>
The latter.. or why are you considering not making subclasses?
04:08
<&Derakon>
Angband has a "repeat the last command" hotkey, and a macro system to do more complicated stuff.
04:08
<&Derakon>
I am making subclasses!
04:08
<&Derakon>
FireCommand is a subclass of Command.
04:08
<&Derakon>
More layers would be used if they were appropriate, of course.
04:10
<&Derakon>
What kinds of subclasses did you have in mind, though?
04:29
< Rhamphoryncus>
I've no idea. I still don't understand what you're debating
04:30
<&Derakon>
Mostly just wondering if I have a good reason for keeping the old input-handling system around. But I think I talked myself out of it.
04:41 iospace is now known as iospacedout
04:45
<~Vornicus>
By "summon-the-old-gods techniques", by the way, McM means that if I catch you doing it, I will find you.
04:48
<&Derakon>
Hee.
04:49 Kindamoody is now known as Kindamoody|breakfast
04:50
<&Derakon>
Hm, okay, movement is working again, except that I get a warning about a memory leak every time I take a step.
04:50
<&Derakon>
'scuse me, every time I attack a creature.
04:50
<&Derakon>
"2012-08-19 20:50:30.405 Python[25806:4c07] *** __NSAutoreleaseNoPool(): Object 0x1050eee90 of class NSCFLocale autoreleased with no pool in place - just leaking"
04:51
<~Vornicus>
Wow, um
04:51
<~Vornicus>
...what libraries are you using?
04:51
<&Derakon>
Something to do with the receiveAttack() method on attackable entities.
04:51
<&Derakon>
wxPython is the only non-builtin library.
04:52
<&Derakon>
Ah, found it.
04:52
<&Derakon>
I'm not supposed to be modifying the UI outside of the main thread.
04:52
<&Derakon>
receiveAttack() generates messages.
04:53
<&Derakon>
Easily fixed.
04:54
<&Derakon>
wxWidgets has a CallAfter() function that says "Invoke this function, with these arguments, in the main thread, next chance you get."
05:13 Kindamoody|breakfast is now known as Kindamoody
05:18 Kindamoody is now known as Kindamoody|out
05:23
<&jerith>
Why are you using wxWidgets?
05:23
<&jerith>
It's the horriblest ever.
05:23
<&jerith>
(Except for most of the others.)
05:23
<&Derakon>
Heh.
05:23
<&Derakon>
Because it's what I'm familiar with.
05:24
<&Derakon>
And I didn't want to spend time on learning another UI widget library when I had much more interesting problems to work on.
05:24
<&jerith>
That's not a bad reason.
05:24
<&Derakon>
I fully expect that if Pyrel takes off, someone (possibly even me) will write a Qt UI layer.
05:24
<&jerith>
A good one, even.
05:24
<&Derakon>
It shouldn't even be very hard.
05:24
<&jerith>
Qt is always hard.
05:24
<&jerith>
What is Pyrel?
05:25
<&Derakon>
The project in question; a reimplementation of Angband, in Python.
05:25
<&jerith>
And does it have wings yst?
05:25
<&Derakon>
...?
05:25
<&jerith>
To take off with.
05:26
<&Derakon>
Ah.
05:26
<&Derakon>
One dude's submitted a couple of patches fixing some cross-platform issues.
05:26
<&jerith>
Nice.
05:33
<&Derakon>
Gameplay-wise, the game is technically winnable if you don't mind using an unenchanted weapon to poke Morgoth to dead, one hit at a time, while he wanders around like a drunken idiot with 20000HP.
05:33
<&Derakon>
Not that the game will recognize your achievement.
05:34
<&Derakon>
s/dead/death/
05:36
<~Vornicus>
heh
05:37
<&Derakon>
(When I mentioned this on the Angband forums, I got the response "So, it's ready for a competition, then.")
06:32 Derakon is now known as Derakon[AFK]
07:08 You're now known as TheWatcher
07:10 ToxicFrog [ToxicFrog@ServerAdministrator.Nightstar.Net] has quit [Operation timed out]
07:11 ToxicFrog [ToxicFrog@ServerAdministrator.Nightstar.Net] has joined #code
07:28 Vash [Vash@Nightstar-e8057de2.wlfrct.sbcglobal.net] has quit [[NS] Quit: I lovecraft Vorn!]
07:28 ToxicFrog [ToxicFrog@ServerAdministrator.Nightstar.Net] has quit [Operation timed out]
08:08 You're now known as TheWatcher[afk]
08:14 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!]
09:22 himi [fow035@D741F1.243F35.CADC30.81D435] has quit [Ping timeout: 121 seconds]
09:58 You're now known as TheWatcher
11:23 You're now known as TheWatcher[d00m]
11:58 iospacedout is now known as iospace
12:14 Nemu [NeophoxProd@Nightstar-7b79ce4f.asahi-net.or.jp] has joined #code
12:24 himi [fow035@Nightstar-5d05bada.internode.on.net] has joined #code
12:24 mode/#code [+o himi] by ChanServ
12:35 You're now known as TheWatcher
12:56 You're now known as TheWatcher[d00m]
13:02 iospace is now known as iofficespace
13:53 You're now known as TheWatcher
14:01 celticminstrel [celticminst@Nightstar-05d23b97.cable.rogers.com] has joined #code
14:30 gruber [lenin@Nightstar-ccbf4b44.cust.bredbandsbolaget.se] has joined #code
14:30 gnolam is now known as NSGuest63873
14:30 gruber is now known as gnolam
14:32 NSGuest63873 [lenin@Nightstar-ccbf4b44.cust.bredbandsbolaget.se] has quit [Ping timeout: 121 seconds]
14:36 You're now known as TheWatcher[afk]
14:46 Kindamoody|out is now known as Kindamoody
15:15
< Rhamphoryncus>
Woo, article posted with a date of 12/11
15:15
< Rhamphoryncus>
You might say 2011 is the most likely, but on some sites that'd actually be a day and a month with no year
15:16 ToxicFrog [ToxicFrog@Nightstar-858b8f6f.eng.wind.ca] has joined #code
15:17 mode/#code [+ao ToxicFrog ToxicFrog] by ChanServ
15:20
< gnolam>
Which is why everyone should go ISO 8601 already. :P
15:21
< Rhamphoryncus>
yup
15:22
< gnolam>
Also, ob. illustration: http://graphjam.files.wordpress.com/2012/02/united-states-vs-the-rest-of-the-wor ld.jpg
15:24
< Rhamphoryncus>
heh
15:24
< Rhamphoryncus>
Celsius is fairly arbitrary too
15:25
< Rhamphoryncus>
But at least it's an arbitrary based on very specific physical properties
15:25
< Rhamphoryncus>
Whereas fahrenheit uses as the top end the temperature of the guy's wife
15:30
< Rhamphoryncus>
hrm. Wikipedia has a different story
15:32 JBeshir [namegduf@Nightstar-5c10d129.beshir.org] has joined #code
15:32 McMartin_ [mcmartin@Nightstar-99166553.pltn13.sbcglobal.net] has joined #code
15:32 Netsplit *.net <-> *.split quits: Vornicus, Namegduf, @Tamber, Syloq_Home, @McMartin, Reiv, @ToxicFrog
15:32 FurryHelix [tamber@furryhelix.co.uk] has joined #code
15:32 Netsplit over, joins: Reiv
15:32 Vornotron [vorn@ServerAdministrator.Nightstar.Net] has joined #code
15:36 ToxicFrog [ToxicFrog@Nightstar-8cc826e0.eng.wind.ca] has joined #code
15:46
< Rhamphoryncus>
yeah, there's no consensus on the history
15:49 Syloq_Home [Syloq@NetworkAdministrator.Nightstar.Net] has joined #code
15:54 FurryHelix is now known as Tamber
15:54 mode/#code [+o Tamber] by ChanServ
16:32 Vornotron is now known as Vornicus
16:32 mode/#code [+qo Vornicus Vornicus] by ChanServ
17:25 Kindamoody is now known as Kindamoody|out
18:48 Kindamoody|out is now known as Kindamoody
18:50
< iofficespace>
"Why are you on IRC?" "Testing script" "Oh, carry on."
19:00 Vash [Vash@Nightstar-e8057de2.wlfrct.sbcglobal.net] has joined #code
19:00 mode/#code [+o Vash] by ChanServ
19:12 Kindamoody is now known as Kindamoody[zZz]
20:37 xeode [xeode@FEE8B2.A109E0.D3ED6F.80F408] has joined #code
20:37
< xeode>
hi, anyone about?
20:37
< gnolam>
Yes.
20:38
< xeode>
how you doing? any good at vb?
20:38
< gnolam>
I've... tried to avoid it.
20:39
< xeode>
me too (but not in preference of other languages, because it's complicated)
20:40 * Tamber shudders at the memories of VB.
20:40
<@Tamber>
...it could be /worse/, though.
20:40
< xeode>
any better at dos or cmd ? ; )
20:41
<@Tamber>
If it helps any, I vaguely remember they exist. ;)
20:41
< xeode>
have a bat/vbs bodge that im trying to get to handle foreign chars properly
20:41
<@Tamber>
Oh.
20:41
< xeode>
lols
20:41
<@Tamber>
Whelp, doomed! :p
20:41
< xeode>
bad start
20:41
< xeode>
how about purely VB
20:42
< xeode>
had to stick VB in to replace vertical bar delimiter that DOS couldnt escape
20:42
<@Tamber>
To be honest, I have no idea. I last used VB back in college, and then only because I wasn't allowed any other option.
20:42
<@Tamber>
I just have some not-so-fond memories of it~
20:42
< xeode>
I want to move on to powershell or something but all i have is bat and windows script host
20:43
< xeode>
it's basicly to reformat a delimited interface file
20:43
< gnolam>
<xeode> had to stick VB in to replace vertical bar delimiter that DOS couldnt escape
20:43
< gnolam>
Could you elaborate?
20:44
< xeode>
well as set out a little already I was writing a bat file to reorder a delimted interface file
20:44
< xeode>
source is delimited by vertical bar char and when NULL filed was back to back ||
20:45
< xeode>
dos for loop doesnt see this as a null field but rahter a double delimiter
20:45
< xeode>
changing the positions of following fields
20:46
< xeode>
so 2 line vbs s = Wscript.StdIn.ReadAll 'Wscript.Echo Replace(s,"||","| |")
20:47
< xeode>
would be good to rewrite it in VBS but put a bit of effort into the batch version, only really want some off the shelf VB code to repalce foreign e with english e
20:49
< xeode>
no luck on tinternet, there's a PHP function to transliterate but cant see a function or sample code that does it in VBS
20:50
< xeode>
could use a 3rd language lol, not sure how to run PHP code from a script lol
20:51
<@Tamber>
Surely the only running should be *from* something that ends up like that?
20:51
< gnolam>
And you're locked to windows console/VB?
20:52
< gnolam>
(Because while I hate to Apollo 13 someone, this is the point where I have to recommend Python)
20:52
< xeode>
ill do whatever it takes, got packages going to séméac ending up saying sNmNac
20:53
< xeode>
i could install python no problem, it's just one terminal
20:57
< Rhamphoryncus>
gnolam: apollo 13 someone?
20:58
< gnolam>
Rhamphoryncus: http://www.xkcdb.com/?5088
20:59
<@Tamber>
hehe
21:00
< Rhamphoryncus>
heh
21:00
< Rhamphoryncus>
wrong analogy, but still :)
21:00
< Rhamphoryncus>
Better would be repairing an old car vs buying new
21:00 xeode [xeode@FEE8B2.A109E0.D3ED6F.80F408] has quit [Client closed the connection]
21:00 xeode [xeode@FEE8B2.A109E0.D3ED6F.80F408] has joined #code
21:00 xeode [xeode@FEE8B2.A109E0.D3ED6F.80F408] has quit [Client closed the connection]
21:00 xeode [xeode@FEE8B2.A109E0.D3ED6F.80F408] has joined #code
21:01
< xeode>
soz, tried to click the link and cause it's IE it reset the session
21:01
< xeode>
could you resend
21:01
< Rhamphoryncus>
You can always repair an old car, but eventually the "cost" (in whatever form) will exceed that of buying new
21:02
< Rhamphoryncus>
But only if you look at the long term costs. If you only look at "right now" you'll just keep repairing
21:02
< xeode>
I dont mind starting from the ground up, it would be a good little project to starrt off in any language
21:03
< xeode>
just looking for one with a good transliterate function to replace foriegn chars with the english equivilents
21:03
< Rhamphoryncus>
Which is why it pisses people off. They just need to get to work tomorrow, they don't want to spend $15,000 on a new car
21:04
< xeode>
get the bus
21:05
< Rhamphoryncus>
In some cases that's a good solution, yes
21:05
< xeode>
thnking outside of the......car
21:06
< xeode>
any good at python rhamphoryncus
21:06
< Rhamphoryncus>
a little :)
21:06 * Rhamphoryncus hides his fork
21:06
< xeode>
im a little stuck trying to transliterate text files
21:06
< xeode>
replace séméac with semeac and the like
21:08
< Rhamphoryncus>
Okay. I have to ask why first. What's being stupid with the existing encoding and why can't it be fixed?
21:08
< xeode>
well trying it in dos is a non starter, it just messes up all the foreign chars
21:09
< Rhamphoryncus>
I want to know why you're transliterating
21:09
< xeode>
have changed codepage and it still sucks, so looking to replace the proper ones with english ones, for compatibility with my existing script (written and working well with english chars)
21:10
< Rhamphoryncus>
Why not fix your existing script?
21:11
< xeode>
looking to replace them with the base ascii char so it works in dos
21:11
< xeode>
as I say, my dos scrip seems to translate the foreign chars badly
21:11
< xeode>
séméac becomes sNmNac etc etc
21:12
< Rhamphoryncus>
Translate to where?
21:12
< Rhamphoryncus>
Just outputting on the windows command prompt?
21:13
< xeode>
well I am currently using 'type' to send to the standard out and into the VBScript that inflates null fields which DOS for loop doesnt understand ( || in my case)
21:14
< xeode>
i could set my vbscript to read the file rather than the output of type but then I still need a VB method of transliterating the fancy french letters to base ascii ones
21:14
< Rhamphoryncus>
Back up here. What is the *overall* goal? Not the various little problems, but the ultimate purpose of the entire thing?
21:15
< xeode>
sorry, I wrongly assumed you saw the whole thing,
21:15
< xeode>
im reordering a delimited file
21:15
< xeode>
changing the field order
21:16
< Rhamphoryncus>
And the encoding of the original file isn't problematic? Just the order of fields?
21:16
< xeode>
my batch script did the job in english for a year or so but french chars screw it up and looing to change them to the base ascii chars
21:17
< xeode>
no, I think the encoding on the input is quite flexible
21:17
< xeode>
just trying to reorder the files without adulterating them with unprintable chars and other translation errors
21:17
< xeode>
have tried other codepages in dos but to no avail
21:17
< xeode>
oh and cmd /u for force unicode
21:17
< Rhamphoryncus>
If it's only *your* stuff that can't handle the encodings then you can definitely do it properly and leave the encoding untouched
21:18
< xeode>
I could import them as binary values and transpose them verbatim, I just dont know the best way of doing so
21:19
< Rhamphoryncus>
Your python code would look something like this:
21:19
< Rhamphoryncus>
with open("foo.tmp", "wb") as output:
21:19
< Rhamphoryncus>
for line in open("foo", "rb"):
21:20
< xeode>
string processing in dos doesnt seem to get foreign chars so looking for a quick way of translating
21:20
< Rhamphoryncus>
part1, part2, part3, part4 = line.split('|')
21:21
< Rhamphoryncus>
output.write('|'.join([part3, part1, part2, part4]))
21:21
< Rhamphoryncus>
mv("foo.tmp", "foo")
21:21
< Rhamphoryncus>
oh, newlines need better handling than what I gave, unless part4 stays at the end (it includes the linefeeds)
21:23
< xeode>
one line files so should be fine, let me just copy this for tomrrow ; )
21:23
< Rhamphoryncus>
heh
21:23
< xeode>
do you know how the line split command handles double delimited
21:23
< Rhamphoryncus>
properly :)
21:24
< Rhamphoryncus>
Once you've got python installed fire up IDLE and play
21:25
< xeode>
great so one|two|three||five gives what when output.write('|'.join([part4,part3,part2,part1]))
21:26
< xeode>
with a part5 naturally....donh
21:26
< Rhamphoryncus>
>>> 'one|two|three||five'.split('|')
21:26
< Rhamphoryncus>
['one', 'two', 'three', '', 'five']
21:27
< xeode>
result
21:27
< McMartin_>
One, two, five
21:27
< McMartin_>
(three sir!)
21:27
< Rhamphoryncus>
splitting actually returns a list, so unpacking to separate variables is entirely optional. It seems the easiest here though
21:28
< xeode>
ok will have to go get me some python tomoz
21:29 * Rhamphoryncus feels like he's handing out "free samples" of crack ;)
21:30
< xeode>
'and the number of the counting shal be......'
21:34
< McMartin_>
The tutorials on the official python.org site are actually pretty good for learning the language
21:41 You're now known as TheWatcher
21:43
< xeode>
so they are, will give it a go, we use a fair bit of other people's python but not made any of our own
21:43
< xeode>
it's a bit of a pita that you have to install the stuff but it's a million times more flexible
21:44 xeode [xeode@FEE8B2.A109E0.D3ED6F.80F408] has quit [Client closed the connection]
22:30
<~Vornicus>
The official python tutorials are literally how I learned to program
22:30
<~Vornicus>
They're better than pretty good~
22:32
<~Vornicus>
also this channel at some point became the third largest public channel on the network.
22:38 iofficespace is now known as io\gone
22:43
< ToxicFrog>
Time to learn how to be a certificate authority.
22:48
<@TheWatcher>
Kinda scary to think that python is older than vorn programming. And makes me feel bloody old.
22:49
<~Vornicus>
TW: I've only been programming since about 2001
22:49
<~Vornicus>
Shit now I feel old.
22:49
<~Vornicus>
Java and Python both came out in 1993.
22:50
<@TheWatcher>
Yeah, I've been programming since about 1988 >.<
22:50
< AnnoDomini>
Vornicus: You make *me* feel old.
22:50
<~Vornicus>
shit man
22:51
< AnnoDomini>
I was programming on C64 around the mid-90s.
22:52
<~Vornicus>
I had a C64 and "could program" it which basically meant that I could string print statements together. I never did anything even vaguely useful with it.
22:52
<~Vornicus>
Oh, and I could copy programs out of Compute's Gazette, but that hardly counts.
22:53
< AnnoDomini>
I didn't do anything useful with it, either, but I did modify programs from the manual so they displayed things differently.
22:55
<@TheWatcher>
I was programming 68k assembler on my A500 back then
23:00
<~Vornicus>
On the other hand in the 90s the things I could do with Excel and a decent search/replace were amazing.
23:34 ToxicFrog [ToxicFrog@Nightstar-8cc826e0.eng.wind.ca] has quit [Ping timeout: 121 seconds]
23:37 ToxicFrog [ToxicFrog@ServerAdministrator.Nightstar.Net] has joined #code
23:53 mode/#code [+ao ToxicFrog ToxicFrog] by ChanServ
--- Log closed Tue Aug 21 00:00:00 2012
code logs -> 2012 -> Mon, 20 Aug 2012< code.20120819.log - code.20120821.log >

[ Latest log file ]