code logs -> 2010 -> Fri, 08 Oct 2010< code.20101007.log - code.20101009.log >
--- Log opened Fri Oct 08 00:00:12 2010
00:06 Anno[Laptop] [annodomini@Nightstar-dc98e0f1.adsl.tpnet.pl] has quit [[NS] Quit: leaving]
--- Log closed Fri Oct 08 00:18:37 2010
--- Log opened Fri Oct 08 06:15:56 2010
06:15 TheWatcher[zZzZ] [chris@Nightstar-b4529b0c.zen.co.uk] has joined #code
06:15 Irssi: #code: Total of 22 nicks [6 ops, 0 halfops, 0 voices, 16 normal]
06:15 mode/#code [+o TheWatcher[zZzZ]] by Reiver
06:16 Irssi: Join to #code was synced in 48 secs
06:16
<@Vornicus>
which will actually be the expression that we wish to tear open and work with.
06:20 celticminstrel [celticminst@Nightstar-f8b608eb.cable.rogers.com] has quit [[NS] Quit: And lo! The computer falls into a deep sleep, to awake again some other day!]
06:21
<@Vornicus>
And then the first thing we'll do is strip the string and reassign it to the same name. We'll do this a lot in this function.
06:22
< kaura>
So, basically, something to take a string, break it down, and label the individual components.
06:22
< kaura>
Sounds kinda similar to what we did with the command() function in the deck mangler.
06:23
<@Vornicus>
This is kinda the start of the command function, yeah
06:24
<@Vornicus>
We won't really be labeling the components here though, cuz there's too many. We're just gonna stuff 'em into a list.
06:29
<@Vornicus>
And then we're going to repeat a bunch of operations until we're out of string (a string evaluates to true unless it's completely empty)
06:30
<@Vornicus>
(oh, and. import re, we're going to need it)
06:31
< kaura>
What's re? Also... got up to here, then got stuck. http://pastie.org/1207017 Split by what value? Just put x there?
06:32
<@Vornicus>
re is "regular expressions"
06:32
<@Vornicus>
Don't split.
06:32 Ortiha [orthianz@Nightstar-82673a60.xnet.co.nz] has joined #code
06:33
<@Vornicus>
And this function will not call raw_input either; it will take a string as a paremeter.
06:33
<@Vornicus>
only spelled right.
06:33
< kaura>
Heh
06:34
<@Vornicus>
What we /do/ want to do is strip the string that it gets and put it back into the same variable (which is local, so it won't stomp the string outside)
06:35
< kaura>
So just leave it as command = str(len(x)) then?
06:35 Orthia [orthianz@Nightstar-45b5aa10.xnet.co.nz] has quit [Ping timeout: 121 seconds]
06:36
<@Vornicus>
No?
06:36
<@Vornicus>
What?
06:36
< kaura>
...
06:36
< kaura>
Right, hold on. Backtracking.
06:36
<@Vornicus>
that str(len(x)) is a vestige of when we were putting the number of cards left in a deck into the request string.
06:36
<@Vornicus>
We don't need it.
06:37
< kaura>
Right, silly me.
06:37
<@Vornicus>
This code, despite talking to the user through raw_input, has very very little to do with it.
06:40 Derakon is now known as Derakon[AFK]
06:40
<@Vornicus>
So anyway: define a function that takes in a string, then assigns the result of split to the original name.
06:42
<@Vornicus>
WHen you think you've got that we can move on.
06:43
< kaura>
Wait, I thought you said not to use split?
06:43
<@Vornicus>
Er, not split. Strip.
06:43
<@Vornicus>
stupid s-names
06:43
<@Vornicus>
(strip if you'll recall strips off whitespace from the front and back of a string.)
06:45
< kaura>
Ah... hm.
06:46
<@Vornicus>
(this is pretty simple, but you have to tell it what you're doing and where you're putting it and these things are kind of separate and it makes it look... strange.)
06:47
< kaura>
So just "string = string.strip()" or something like that, right?
06:48
<@Vornicus>
It is, in fact.
06:48
< kaura>
Ah, good.
06:48
<@Vornicus>
though don't call your input "string" cuz it's kinda a silly - "expr" is what I'd call it.
06:50
<@Vornicus>
(we do this first so that we're always in the same place at the start of the loop: a stripped string, set up for the next symbol-finding pass.)
06:51
< kaura>
Right, so we don't need to strip it every time we pass it.
06:51
<@Vornicus>
well, we will - at the end of the pass.
06:52
<@Vornicus>
Because there can be spaces pretty much anywhere!
06:52
<@Vornicus>
And so after we pull out each symbol we have to eat up any spaces that's between it and the next symbol.
06:54
<@Vornicus>
but first, start up a while loop, and have it end when the string is empty.
06:54
<@Vornicus>
Actually before that we need a list of symbols, that'll start out empty.
06:57
< kaura>
So "symbols = []"
06:57
<@Vornicus>
right
06:58 Zed [Zed@Nightstar-556ea8b5.or.comcast.net] has joined #code
07:00
<@Vornicus>
Now, in the loop we're going to do several things. 1. do an re.search using our regex from up above and expr
07:00
<@Vornicus>
(actually, trick here - fix the re so that in front of everything there is a ^)
07:03
<@Vornicus>
This will give us, ideally, a regex match object which represents the result of hunting up the regex in expr.
07:04
<@Vornicus>
We're gonna need to hang onto that, because we need to do several things with it.
07:04
< kaura>
This is in the while loop? Or separately?
07:05
<@Vornicus>
Inside the loop. Each time through the loop we must find and extract a symbol.
07:08
<@Vornicus>
and show me that when you've got it.
07:17
< kaura>
Right, actually really stuck here. Not quite sure how to close that while loop when string's empty, to start with. Just "Else: return expr"?
07:18
<@Vornicus>
Don't else it; just return symbols.
07:19
<@Vornicus>
(expr, being empty, isn't very useful.)
07:19
< kaura>
Ah, right. Actually had it as so the first time around. Need to stop overthinking, especially in the wrong direction. >_>
07:20
< kaura>
Right, now the re.search bit.
07:21
<@Vornicus>
If you don't know how to use it (which of course you don't), look it up in the python documentation. Google is pretty good with that.
07:21
< kaura>
What did you mean by fix the re so that everything has the pow symbol in front? Literally append ^ in front of everything after r"?
07:23
<@Vornicus>
Yeah. This says "only look at the start of the string"
07:23
<@Vornicus>
(Lots of special characters in regex, which is why it's often so hard to read.)
07:23
< kaura>
^ has been used once before, though. Would that muck with its comprehension, or does it just check once after seeing ^?
07:24
<@Vornicus>
Show me how you fixed it.
07:25
<@Vornicus>
And it knows what it's doing. You don't know how it works yet though
07:25
< kaura>
This is what I've got so far. http://pastie.org/1207076
07:26
<@Vornicus>
Gah, not what I meant by "in front of everything"
07:28
< kaura>
Yeah, probably not~ Right, comprehension failure.
07:28
< kaura>
I think you meant... this? r"^[-+*/%^d()]|\d+"
07:30
<@Vornicus>
Indeed.
07:30
< kaura>
Fix'd.
07:32
<@Vornicus>
http://docs.python.org/library/re.html#re.search <--- now, re.search takes not only a pattern (which is what you gave it already) but a string. that string should be expr.
07:34
<@Vornicus>
...doh, flibble, I missed a spot in the regex.
07:34
< kaura>
so re.search ought to look like re.search(r"^[-+*/%^d()]|\d+", expr)
07:35
<@Vornicus>
yeah. Assign that to something.
07:36
<@Vornicus>
Also, correct it to r"^(?:[-+*/%^d()]|\d+)"
07:36 Anno[Laptop] [annodomini@Nightstar-926ff7b8.adsl.tpnet.pl] has joined #code
07:37
< kaura>
so "foo = re.search(r"^(?:[-+*/%^d()]|\d+)", expr)"
07:37
<@Vornicus>
(the (?:...) says "this is a subpart of the regular expression, but I don't want it to behave specially when we look at it." The reason I need that is so that the pipe, which says "or", doesn't say "a particular symbol at the start of the string... or a number anywhere.)
07:39
<@Vornicus>
(regex will bite you in the ass if you don't know exactly what you're doing. This should be clear by now.)
07:39
<@Vornicus>
And yeah, but I'd call it something cooler than "foo" -- something like, oh, idunno, "match"
07:41
< kaura>
regex is like a swiss army knife of explodium, huh?
07:42
<@Vornicus>
It's the most efficient tool out there - period - for futzing with strings. But it's also very, very, very picky.
07:43
< kaura>
So definitely something to learn. In a controlled, separate environment, far from any programs I'm working on excepting A. a guiding hand, and B. until I personally master it.
07:45
<@Vornicus>
One of the reasons I'm introducing it to you by giving you working ones -- or at least trying to -- is to show you that they exist and to keep you from trying to use them as a hammer.
07:47
<@Vornicus>
ANYWAY
07:47 * simon_ read the wikipedia article on Perl 6 "rules" (formerly regexes) which said that since Perl 5 regexes haven't described regular expressions for a long time, the documentation consistently referred to them as "regexes" and not "regular expressions".
07:49
<@Vornicus>
Okay, so we've got our match. First things first we want to see that it worked in the first place: MatchObjects happen to always be true, and search returns None (which is false) when it doesn't work. And if it doesn't work we want to raise a ValueError, "Unrecognized symbol: " + expr[0]
07:49
<@McMartin>
It's true; actual regular expressions can be matched in linear time. Solving PCREs is NP-Complete, IIRC.
07:50
<@Vornicus>
McM: I've seen FACTORS written in PCRE.
07:51
<@Vornicus>
SO if it's not NP-complete, it's pretty close.
07:52
<@McMartin>
Vorn: I don't remember if it's NP-complete or NP-hard and quite possibly not even in NP.
07:52
<@Vornicus>
Factors is NP.
07:52
<@McMartin>
"it" being PCRE.
07:53
<@Vornicus>
Right, so PCRE can do NP problems.
07:53
<@McMartin>
Right.
07:53
<@McMartin>
NP-Complete has two requirements: (1) everything in NP reduces to it (NP-Hard) and (2) is itself in NP.
07:53
< kaura>
So... if match = False: return ValueError, etc?
07:53
<@McMartin>
I don't recall if PCRE is in NP all by itself
07:53 Stalker [Z@3A600C.A966FF.5BF32D.8E7ABA] has quit [Ping timeout: 121 seconds]
07:53
<@Vornicus>
just "if not match: raise ValueError"
07:55
<@Vornicus>
Oh, you're saying that it may not be NP in the other direction.
07:56
< kaura>
Ah.
07:56
<@McMartin>
Vorn: Right
07:57
<@Vornicus>
kaura: also, your while loop needs a condition. Try "while expr:" And then you don't need an else down there; just unindent the return.
07:58
< kaura>
Alright.
07:59
<@Vornicus>
So show me what you've got.
08:02
< kaura>
http://pastie.org/1207159 This looks about right so far?
08:04
<@Vornicus>
It does.
08:04
<@Vornicus>
Now we need to do two things with our match (outside the if, still in the while)
08:04
< kaura>
\o/
08:05
<@Vornicus>
(and after the if, too, cuz if it's not a match object we want to raise a sensible exception, not "'NoneType' object has no attribute 'group'"
08:06
<@Vornicus>
First thing we want is we want to append match.group() to symbols
08:07
< kaura>
So symbols.append(match.group())
08:07
<@Vornicus>
The second thing we want to do is to mangle expr again, this time by replacing it with expr[match.end():]
08:08
<@Vornicus>
This will slice off the entire match from expr, leaving us with a string that is the stuff that we /haven't/ matched yet.
08:09
<@Vornicus>
And the third thing we want to do is strip expr again, the same way we did earlier. though actually we can use lstrip, which is probably slightly faster. (actually we can do this even for the first time, thinking about it.)
08:11
<@Vornicus>
And then show me that, and if we're good, then we can throw a couple test strings at it and see how it handles them.
08:12
< kaura>
What, exactly, is lstrip?
08:13
<@Vornicus>
Strips from the start -- left side -- of the string only.
08:13
< kaura>
Ah.
08:13
<@Vornicus>
(there's also rstrip)
08:14
< kaura>
Which, once we know what lstrip is, is self-explanatory.
08:14
<@Vornicus>
indeed
08:14
< kaura>
http://pastie.org/1207169 Like so?
08:15
<@Vornicus>
Yep. actually, looking at that we can merge 9 and 10 in that thing, so we go expr[yadda].lstrip() all at once.
08:16
< kaura>
Efficient!
08:16
< kaura>
Right. Done so.
08:16
<@Vornicus>
"Use Pastie in your quest to save humanity, not in your evil plots to take over the world!" ... dammit!
08:17
<@Vornicus>
I was hoping that pastie would be useful for my secret plans for global domination!
08:17
<@Vornicus>
Okay, so now that you've got that defined, run the file in IDLE and try it: lex("2+2")
08:18
< kaura>
Spits out ['2', '+', '2'] Yay list!
08:18
<@Vornicus>
lex("3d6 + 4"
08:18
<@Vornicus>
...with the close paren in there.
08:19
< kaura>
['3', 'd', '6', '+', '4']
08:19
<@Vornicus>
See how the spaces got killed?
08:19
< kaura>
Yep. Good ol' strip.
08:19
<@Vornicus>
lex("+-*/%^(123)")
08:20
< kaura>
...huh. ['+', '-', '*', '/', '%', '^', '(', '123', ')'] Treats "123" as a separate string.
08:20
<@Vornicus>
As one number.
08:20
<@Vornicus>
That's the point: numbers need to stick together.
08:20
< kaura>
Good.
08:21
<@Vornicus>
"1d6 + 2d8 + 1b4"
08:22
< kaura>
ValueError: Unrecognized Symbol: b
08:22
<@Vornicus>
Precisely as expected.
08:23
<@Vornicus>
Now, you'll notice: it doesn't know anything about what an expression is supposed to look like as "correct" - just that these are the symbols you can find in it.
08:23
<@Vornicus>
Next time, we'll begin making the thing that starts doing math.
08:25
<@Vornicus>
This is the hard part, and I have to remember the process, cuz it's a doozie.
08:26
< Anno[Laptop]>
Are you making a dice expression parser?
08:26
<@Vornicus>
We are.
08:26
< Anno[Laptop]>
Cool.
08:26
< Anno[Laptop]>
With regexes, no less, it seems.
08:26
<@Vornicus>
One regex.
08:27
< kaura>
Math is always the hard part. ._.
08:27
<@Vornicus>
kaura: do you remember your order of operations?
08:27
< kaura>
Yes, thankfully~
08:28
<@Vornicus>
Good! It'll come in handy. The bad news is that computers are Really Fucking Dumb, so you have to explain everything to them.
08:28
<@Vornicus>
The first time I did this it took me about a day and a half to figure out all the rules. And I'm a mathematician.
08:28
< kaura>
Heh
08:29
< Anno[Laptop]>
My parsers interate over characters in the string, and if they encounter something that's an operator, they substring out the stuff so far, throw it an the single expression parser (which separates out die amount and die size and returns the result of a roll, or returns the value if it's just a number), get the result, paste it onto a new string, append the operator, set it as the new origin point, and continue until there's no ...
08:29
< Anno[Laptop]>
... more string left.
08:31
<@Vornicus>
Yeah, we're doing this with a bit more separation.
08:31
<@Vornicus>
Mostly because your thing ignores ooo.
08:31
< Anno[Laptop]>
I think it would spit out '0' as the result of 'ooo'.
08:32
<@Vornicus>
order of operatoins, silly
08:32
< Anno[Laptop]>
Hehe.
08:32
< Anno[Laptop]>
It is eval'd somehow. I'm outsourcing ooo to built-in functions.
08:34
<@Vornicus>
except you're not, as far as I can tell. try "3 + 4 * 5" and see what happens.
08:34 PainBot [painbot@Nightstar-4a2a30fa.elitter.net] has joined #code
08:35
< Anno[Laptop]>
!roll 3+4*5
08:35
< PainBot>
[Anno[Laptop]] rolled "3+4*5": 3+4*5. Total: 23.
08:35 * Vornicus tilts his head. That's... not doing what you described.
08:36
< kaura>
...well, unless he just told painbot to roll a 23-sided dice and hit 23 on the first try.
08:36
<@Vornicus>
No, that's not quite it. Order of operations says do the multiplication first, then the addtion.
08:36
< Anno[Laptop]>
http://pastie.org/1207187 <- Here's the pertinent parts of this.
08:37
<@Vornicus>
But if you just scan from left to right doing operations as you go, that expression would give you 35.
08:37
< kaura>
Oh, so something in it's actually telling it to do it by orders of operations.
08:37
<@Vornicus>
Yeah, but I don't see it. Doesn't help that I don't know... that's... perl, right?
08:38
< Anno[Laptop]>
Yes, it's Perl.
08:39
< Anno[Laptop]>
Like I said, after I get the final parsed string, I feed it into eval().
08:39
<@Vornicus>
Oh, oh, I see.
08:39
<@Vornicus>
The only thing /you/ do is rolls.
08:39
< Anno[Laptop]>
Yeah.
08:40
< Anno[Laptop]>
You guys are doing math parsing the hard way?
08:40
<@Vornicus>
Yeah. Eval is evil.
08:41 PainBot [painbot@Nightstar-4a2a30fa.elitter.net] has left #code []
08:42
<@jerith>
Pyparsing. Ply.
08:42
<@Vornicus>
jerith: doing this the hard way to demonstrate several things.
08:43 kwsn is now known as kwsn\t-2
08:43
<@Vornicus>
Not that it's ...really all that hard a way.
08:45
<@Vornicus>
(for problems of this size anyway. If you wanted to write something that did a full programming language, you wouldn't want to do it like this.)
08:46 You're now known as TheWatcher
08:48 RichardBarrell [mycatverbs@Nightstar-689c9c54.cable.virginmedia.com] has quit [Connection closed]
08:53
<@Vornicus>
Anyway, bedtime. Tomorrow I try to remember the rules for futzing with infix expressions.
08:56
< kaura>
G'night!
08:58 Vornicus is now known as Vornicus-Latens
09:25 kwsn\t-2 [kwsn@31356A.5FD175.2259B6.DFACD4] has quit [[NS] Quit: poof]
10:05 Anno[Laptop] [annodomini@Nightstar-926ff7b8.adsl.tpnet.pl] has quit [[NS] Quit: leaving]
11:24 gnolam [lenin@Nightstar-38637aa0.priv.bahnhof.se] has joined #code
11:45 Thaqui [Thaqui@27B34E.D54D49.F53FA1.6A113C] has quit [Client closed the connection]
12:27 kaura [kaura@Nightstar-fd82400d.snfc21.sbcglobal.net] has quit [[NS] Quit: I love my HydraIRC -> http://www.hydrairc.com <-]
12:33 celticminstrel [celticminstre@Nightstar-f8b608eb.cable.rogers.com] has joined #code
12:38 cpux [chatzilla@Nightstar-c978de34.dyn.optonline.net] has quit [[NS] Quit: ChatZilla 0.9.86 [Firefox 3.6.10/20100914125854]]
13:38 Zed [Zed@Nightstar-556ea8b5.or.comcast.net] has quit [Ping timeout: 121 seconds]
14:03 Tarinaky [Tarinaky@Nightstar-f349ca6d.plus.com] has joined #code
14:54 celticminstrel [celticminstre@Nightstar-f8b608eb.cable.rogers.com] has quit [[NS] Quit: And lo! The computer falls into a deep sleep, to awake again some other day!]
15:03 Rhamphoryncus [rhamph@Nightstar-473f8685.abhsia.telus.net] has quit [Client exited]
15:22 Anno[Laptop] [annodomini@Nightstar-926ff7b8.adsl.tpnet.pl] has joined #code
15:53 Stalker [Z@3A600C.A966FF.5BF32D.8E7ABA] has joined #code
15:56 Tarinaky [Tarinaky@Nightstar-f349ca6d.plus.com] has quit [Client closed the connection]
15:59 Zed [Zed@Nightstar-556ea8b5.or.comcast.net] has joined #code
16:41 gnolam [lenin@Nightstar-38637aa0.priv.bahnhof.se] has quit [Ping timeout: 121 seconds]
16:41 Tarinaky [Tarinaky@Nightstar-f349ca6d.plus.com] has joined #code
16:43 Stalker [Z@3A600C.A966FF.5BF32D.8E7ABA] has quit [Ping timeout: 121 seconds]
16:44 gnolam [lenin@Nightstar-38637aa0.priv.bahnhof.se] has joined #code
16:52 * jerith tries to figure out how to work around the child.setSelected() bug in android.widget.Gallery.
16:55 celticminstrel [celticminstre@Nightstar-f8b608eb.cable.rogers.com] has joined #code
17:01 Zed [Zed@Nightstar-556ea8b5.or.comcast.net] has quit [Ping timeout: 121 seconds]
17:07 Stalker [Z@26ECB6.A4B64C.298B52.D80DA0] has joined #code
17:17 Attilla [Some.Dude@Nightstar-c2833f3b.threembb.co.uk] has joined #code
17:17 mode/#code [+o Attilla] by Reiver
17:27
< simon_>
hmm
17:27
< simon_>
when is folding (in terms of functional programming) insufficient?
17:27
< simon_>
I can use folding to generate structures, but I can't use it to generate all structures
17:29
< simon_>
I was making a function that folded a tree, and I used it to generate some averages from the content of the tree.
17:29
< simon_>
but then I wanted to generate another tree based on the input tree, which turned out problematic
17:30
< simon_>
since the function I specified for fold to use could not differentiate between where in the original tree it had gotten its value from, and thus where to re-insert it.
17:31
< simon_>
hmm..
17:33
< simon_>
I suppose I could annotate my tree with labels so that folding would be unambiguous. but then could the annotation be accomplished with folding?
17:34
< simon_>
if not, then I assume that there are some outputs that a fold cannot generate by itself, and some outputs that it can. then how is that difference between the two types of output most easiest expressed?
17:47
<@jerith>
A fold is basically an accumulator function run over a list.
17:49
<@jerith>
sum([1,2,3]) is a fold over addition and [1,2,3].
17:50
< simon_>
yes
17:50
< simon_>
so if I want the sum, fold (+) 0 [1,2,3] should work
17:50
< simon_>
and if I want to insert elements from the list into an ordered, binary tree, fold insert EmptyTree [1,2,3] should work
17:51
< simon_>
but let's say I've got a non-ordered binary tree and I want to remove an element and its subtrees from it, producing yet another non-ordered binary tree with all the elements in the same position, except the element and its subtrees, then folding leaves me a little helpless.
17:53
< simon_>
(sorry... assume that fold also works on trees. I was told earlier today that Haskell has a typeclass for things that can be folded over, which is Applicative)
17:53
< simon_>
(I don't program Haskell that well yet, but I'll leave the gory details of Standard ML syntax out of the picture)
17:56
< simon_>
jerith, so the accumulated value doesn't carry information of where in the applicative structure it was derived from (if there is more than one option, which there isn't with lists, but there is with trees)
17:57
<@jerith>
The accumulated value can hold whatever you want it to hold.
17:58
< simon_>
ok
17:59
< simon_>
so my folding function for trees is insufficient in telling my accumulator function from where its iterated value comes.
17:59
< simon_>
I wanted a trivial folding function for trees that basically took a function (x,acc) and some fixed assumption about tree traversal. but that's not enough.
18:00 Attilla [Some.Dude@Nightstar-c2833f3b.threembb.co.uk] has quit [[NS] Quit: ]
18:01
< simon_>
so I figured, for a binary tree I could simply have my treefold function ask for two functions and call one when traversing left trees and one when traversing right trees, and those functions could e.g. reconstruct the tree properly.
18:01
< simon_>
then I thought, that may not extend well for n-ary trees.
18:02
< simon_>
so maybe there is a better approach than asking for a shitload of functions. I have an idea!
18:02
<@TheWatcher>
Also, latest from the moron who was trying to mix assembler and python, after I explained such things as ABIs, compiled modules, inline assembler in gcc if he really insists on it? "I don`t want the correct way as I am an experimenter to see what I can get every ounce from using various languages."
18:02
<@jerith>
You need to serialise the tree into a sequence of items to fold over.
18:03
<@TheWatcher>
Yeah, I've got a new entry in my killfile. >.>
18:03
<@jerith>
TheWatcher: Beat him to death with a FORTRAN compiler.
18:04
<@TheWatcher>
That would require effort. I think he's doing a good enough job of causing himself problems.
20:00 celticminstrel [celticminstre@Nightstar-f8b608eb.cable.rogers.com] has quit [[NS] Quit: And lo! The computer falls into a deep sleep, to awake again some other day!]
20:14 Syloqs-AFH [Syloq@NetworkAdministrator.Nightstar.Net] has quit [Ping timeout: 121 seconds]
20:15 Syloqs_AFH [Syloq@NetworkAdministrator.Nightstar.Net] has joined #code
20:16 Syloqs_AFH is now known as Syloqs-AFH
20:34 aoanla [AndChat@Nightstar-4c8924ef.range81-129.btcentralplus.com] has joined #code
21:05 Stalker [Z@26ECB6.A4B64C.298B52.D80DA0] has quit [Ping timeout: 121 seconds]
21:15 kwsn [896875f7@Nightstar-992d69e3.mibbit.com] has joined #code
21:15 kwsn is now known as kwsn\DJ
21:16 Tarinaky [Tarinaky@Nightstar-f349ca6d.plus.com] has quit [Client closed the connection]
21:43 Stalker [Z@2C3C9C.B2A300.F245DE.859909] has joined #code
21:49 aoanla [AndChat@Nightstar-4c8924ef.range81-129.btcentralplus.com] has quit [[NS] Quit: ]
22:07 Thaqui [Thaqui@27B34E.D54D49.F53FA1.6A113C] has joined #code
22:27 kaura [kaura@Nightstar-fd82400d.snfc21.sbcglobal.net] has joined #code
23:22 celticminstrel [celticminstre@Nightstar-f8b608eb.cable.rogers.com] has joined #code
23:26 kwsn\DJ [896875f7@Nightstar-992d69e3.mibbit.com] has quit [[NS] Quit: bailing here anyway]
23:30 ToxicFrog [ToxicFrog@ServerAdministrator.Nightstar.Net] has quit [Connection reset by peer]
--- Log closed Sat Oct 09 00:00:13 2010
code logs -> 2010 -> Fri, 08 Oct 2010< code.20101007.log - code.20101009.log >