code logs -> 2006 -> Sat, 09 Dec 2006< code.20061208.log - code.20061210.log >
--- Log opened Sat Dec 09 00:00:02 2006
00:31 AnnoDomini [~fark.off@Nightstar-28974.neoplus.adsl.tpnet.pl] has quit [Quit: Some people find sanity a little confining.]
00:50
< Takyoji>
Hmm.. I cant decide.. "PHP" by O'Rielly or "PHP Cookbook" by O'Rielly
00:53
< Takyoji>
or "Learning PHP 5"
00:55
< Takyoji>
erm, published by O'Reilly
00:55
<@ToxicFrog>
The cookbook will, AFAIR, be a set of useful programs, functions and algorithms for use by someone already fluent in the language.
00:57
< Takyoji>
just small code snippits, or like a +30 lined application?
00:57
<@ToxicFrog>
Unsure. It's been quite some time.
00:57
<@ToxicFrog>
However, as you are still learning PHP, it is unlikely to be of more use to you than the others.
00:58
<@ToxicFrog>
As Vorn and I said, O'Reilly is mainly reference materials for stuff you *already know*, not teaching materials.
00:58
< Takyoji>
ahh
00:58 * Vornicus doesn't know really of any books that are that useful for actually learning to program.
00:59
<@Vornicus>
But there's the Pragmatic Programmer, which is a heaping pile of best practices.
00:59
< Takyoji>
Because I understand all the primary commands, and all. But not the less common ones
00:59
<@ToxicFrog>
Vornicus: there's SICP.
00:59
< Takyoji>
PHP is quite simple
01:00
< Takyoji>
Well, I suppose both probably.. I'm not sure
01:00
<@Vornicus>
PHP is scary shit, IMO
01:00
< Takyoji>
xD and why'd that be?
01:01
<@ToxicFrog>
But, I don't really know either, I picked up programming from my dad. So.
01:01
<@ToxicFrog>
Yes.
01:01
<@ToxicFrog>
It combines all the worst elements of bash and perl.
01:01
<@ToxicFrog>
<ToxicFrog> It combines all the worst elements of bash and perl.
01:01
< Takyoji>
so its missing?
01:01
< Takyoji>
rephrase: So then what is it missing?
01:01
<@ToxicFrog>
...
01:01
<@Vornicus>
Missing? Nothing.
01:02
<@Vornicus>
It's not features
01:02
<@ToxicFrog>
Since you clearly aren't actually listening to me, I'm going back to FFX now. Ta.
01:02
<@Vornicus>
It's cleanliness, generality, usefulness in generic programming problems, readability...
01:02
< Takyoji>
*smacks head into desk* Then what's the worst elements of it?
01:03
< Takyoji>
ahh
01:03
< Takyoji>
and a suggested alternative would be?
01:03
< Takyoji>
(I don't have ASP)
01:03
<@Vornicus>
Ruby, Python
01:03
< Takyoji>
ahh
01:04
<@Vornicus>
Any of a hundred general purpose medium-to-high level languages.
01:04
<@ToxicFrog>
Vorn is all about the Ruby these days :P
01:04 ReivOut is now known as Reiver
01:04 * Vornicus likes Ruby.
01:04
< Takyoji>
heh
01:04 * ToxicFrog favours Lua for CGI programming, but by all accounts RoR kicks a whole mess of ass.
01:05
< Takyoji>
It's just that the company that hosts our website doesn't support Ruby on Rails I believe
01:05
<@Vornicus>
Having looked into RoR I am... not a great fan, mainly because it does a lot of magic.
01:05
<@ToxicFrog>
...and won't let you install it?
01:05 Janus [~Cerulean@Nightstar-10302.columbus.res.rr.com] has joined #Code
01:05
< Takyoji>
well.. in what way is it installed?
01:06
< Takyoji>
Does it have to be a running application with Apache
01:06
< Takyoji>
for the parser
01:06
<@Vornicus>
Do you have shell access, or just ftp?
01:07
< Takyoji>
FTP atm, but I can have SSL access
01:08
< Takyoji>
oh its though CGI?
01:08
<@ToxicFrog>
SSH access, you mean?
01:08
<@ToxicFrog>
And, yes, you've been working with CGI this whole time.
01:08
<@ToxicFrog>
Haven't you noticed?
01:09
< Takyoji>
erm
01:09
< Takyoji>
Just.. kill me
01:11
< Takyoji>
I've never looked into RoR
01:11
<@ToxicFrog>
o.O
01:12
< Takyoji>
Nobody tells me to
01:12
< Takyoji>
I'm just surrounded by people who rely on software rather than make it where I live
01:13 * ToxicFrog eyes these docs. Ruby has a "clean and simply syntax"? Ahahahahahahahahahahahahahahahaa
01:14
<@Vornicus>
It's getting cleaner. The block thing is insano though
01:14 Chalcedon [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has quit [Ping Timeout]
01:15
<@ToxicFrog>
(and, er...I seem to recall some effort at pointing you away from PHP when you started this project)
01:15
< Takyoji>
Would you say it parses faster? y/n?
01:15
<@Vornicus>
Ruby? It's probably the slowest serious language. Unless you're doing a lot of stuff, though, it's not too big a deal.
01:16
<@ToxicFrog>
...I have no idea, how is the parse speed relevant?
01:16
< Takyoji>
I am going to finish the e-commerce application in PHP of course, then play with other languages
01:16
< Takyoji>
I mean, like for saving to databases or something?
01:17
<@ToxicFrog>
I think we have a terminology problem here.
01:17
<@ToxicFrog>
"Parsing" is the process of taking a sequence of tokens and turning them into an abstract syntax tree or other code representation.
01:17
< Takyoji>
oh. Sorry.
01:18
<@ToxicFrog>
It's the second step in turning source code into bytecode or machine code, after lexing.
01:18
<@Vornicus>
lex -> parse -> compile -> run.
01:18
< Takyoji>
ahh
01:18
<@ToxicFrog>
A fast parser gives no benefit if the code runs slowly, and similarly, a slow parser isn't a problem if you can precompile your code.
01:19
<@Vornicus>
compile-> run is often replaced with interpret in high-level languages - PHP and Ruby
01:20
< Reiver>
Is there an explicit advantage to leaving out the 'compile' bit?
01:20
<@ToxicFrog>
You can't "leave it out"
01:20
<@ToxicFrog>
You can however defer it until runtime.
01:20
<@ToxicFrog>
Vornicus: those compile to bytecode and run in a VM, I thought.
01:21
< Takyoji>
I'm basically a mess about learning programing and such because: 1) Our local library lacks programming books, 2) I have NO classes I can choose from and I dont even think there's a damned college that teaches programming in this city
01:21
<@ToxicFrog>
It doesn't execute the AST directly.
01:21
<@ToxicFrog>
Or does it?
01:21
<@Vornicus>
Ruby executes its AST
01:21
< Takyoji>
3) None of my friends know how to program
01:21
<@ToxicFrog>
Aah. Ok.
01:21
<@ToxicFrog>
In that case, parsing is also compilation.
01:21
<@Vornicus>
There are something like /five/ projects to create a virtual machine; the current leader pulls off a tenfold increase in all but the most whack of situations.
01:22
<@Vornicus>
tenfold increase in speed, rather.
01:22
<@ToxicFrog>
Impressive.
01:23
<@Vornicus>
And that, I believe, is without actually doing any optimization on the output bytecode.
01:23 TakyojiClone [~Takyoji@Nightstar-25280.dhcp.roch.mn.charter.com] has joined #code
01:23
<@ToxicFrog>
Although this may say less about the speed of the VM and more about the speed of the AST executor.
01:24
<@Vornicus>
Well, yes.
01:24
<@Vornicus>
I think the executor is not done right in some ways, but I don't know.
01:25 Takyoji [~Takyoji@Nightstar-25280.dhcp.roch.mn.charter.com] has quit [Ping Timeout]
01:28
<@ToxicFrog>
Reiver: ok, so while it can be done, it doesn't appear to confer any benefit in the current implementations.
01:28
<@ToxicFrog>
Although I bet you could do some twisted things with self-modifying code in a 'terp that let you access the AST directly.
01:29
<@Vornicus>
One advantage is that if you don't compile it you don't need to write a damn virtual machine.
01:29
<@Vornicus>
Another is that you can do some twisted things with self-modifying code. See scheme.
01:29
<@ToxicFrog>
Well, you still need parts of one. It has to maintain state, etc.
01:29
<@ToxicFrog>
But yeah, you don't need a full-blown VM.
01:39 Janus [~Cerulean@Nightstar-10302.columbus.res.rr.com] has quit [Quit: Clair jouets voire]
01:39
< TakyojiClone>
So what are classes supposed to be?
01:40
< TakyojiClone>
in PHP and so on
01:40
< TakyojiClone>
(just curious)
01:40
<@Vornicus>
in PHP they're tacked on.
01:41
< TakyojiClone>
I mean, in general, what are classes?
01:41
<@Vornicus>
Oh
01:41
<@Vornicus>
A class is a specification of a /kind/ of object.
01:41 * ToxicFrog ponders how best to explain this
01:41
<@Vornicus>
All objects of a class look the same; they have the same variables, they have the same methods with the same signatures.
01:42
<@Vornicus>
A class encapsulates behavior and information into one coherent package.
01:43
< TakyojiClone>
What would be an example of what a class would be used for?
01:43
<@ToxicFrog>
Any time you need to have something that both "is" and "does".
01:43
<@Vornicus>
Here's one I wrote the other day:
01:44
<@ToxicFrog>
Ok, I was writing an example but let's go with Vorn's.
01:44
< TakyojiClone>
no, you can continue if you want to
01:44
<@Vornicus>
a player is the avatar a user has in a particular game.
01:44
< TakyojiClone>
ohh
01:44
<@Vornicus>
The player has a name, a turn order, a pawn color, a pile of resources...
01:44
< TakyojiClone>
I thin I know where you're going with this
01:45
< TakyojiClone>
think*
01:45
<@Vornicus>
A player may trade with other players; he may spend resources; he may...
01:46
<@Vornicus>
So I have a class, and it defines various attributes - the color of his pawn, the resources he has.
01:46
< TakyojiClone>
I see
01:47
<@Vornicus>
And it defines methods: ones that say "buy a road!" or something, ones that define the player's interaction with other players.
01:47
< TakyojiClone>
ahh
01:47
< TakyojiClone>
in general, a key thing for game programming?
01:47
< TakyojiClone>
And as another question what is "Object-Orientated Programming"
01:48
<@Vornicus>
Object-oriented programming is what you get when you use classes and objects properly.
01:48
< TakyojiClone>
ahh
01:49
<@ToxicFrog>
Some mention of inheritance should also be made here.
01:49
<@Vornicus>
It is an important thing for most modern programming. I used a game example because it's what I'm writing.
01:50
<@ToxicFrog>
You can define classes in terms of what other classes can do.
01:50
<@ToxicFrog>
So for example, you can say "An animal is a type of thing. An animal can attack." And then "A cat is a type of animal. A cat can purr." And since it's an animal, it can also attack even though you haven't explicitly said so.
01:50
< Reiver>
Question for folks that understand how IP addresses actually work. Mind if I butt in?
01:51
<@ToxicFrog>
Go ahead.
01:51
< Reiver>
I currently have a laptop that usually is jacked into an ethernet cable. However, as part of a fortuitous accident I currently have two Bluetooth dongles, and am using them to create a bluetooth wireless network thingy. (Why? Because I could, shut up already.)
01:52
< Reiver>
However, I wish to get it to connect to the internet via this. I can get to the settings to do so, but my question is - should I use the same IP address for the laptop in both ethernet /and/ bluetooth connections, or explicitly different ones?
01:52
<@ToxicFrog>
Correct me if I'm wrong, but isn't bluetooth for peripherals, not networking?
01:52
<@ToxicFrog>
You should, ideally, have them both set for DHCP.
01:52
< Reiver>
No DHCP server on the network.
01:52
< Reiver>
>.>
01:52
< Reiver>
And yes, it is, but it's able to give you a 1Mbps link anyway.
01:53
< Reiver>
This isn't an intentional network, this is a "I wonder if you can do that" hackjob.
01:53
<@Vornicus>
Technically you should be /getting/ multiple IP addresses if you have multiple network appliances.
01:53
< Reiver>
Vorn: I'm hand-typing the IP addresses, so
01:54
<@Vornicus>
I am not aware of a situation where you would get identical IP addresses from two locations and it would actually work.
01:54
< Reiver>
I'm just wondering how one configures IPs when you can have a computer connected two different ways simultaneously. Two IPs (One for each connection), or one IP for each, giving your computer two IP addresses?
01:54
<@ToxicFrog>
Those are the same thing.
01:54
<@ToxicFrog>
"one IP for each connection" and "one IP for each connection"
01:54
< Reiver>
Er
01:54
<@ToxicFrog>
Generally, each connection has a different IP.
01:54 Vornicus [~vorn@Nightstar-18307.slkc.qwest.net] has quit [Quit: ]
01:55
< Reiver>
One IP for each connection, or the same IP.
01:55
<@ToxicFrog>
Giving them the same IP means getting into bridging wackiness.
01:55
< Reiver>
I screwed up the syntax, sorry. >.>
01:55
< Reiver>
OK.
01:55
< Reiver>
Just checking. Thanks.
01:56
<@ToxicFrog>
...and, yes, as Tekkie said, how does the BT card talk to the modem?
01:58
< Reiver>
...Uh. Whoops. Yes. Er.
01:58
< Reiver>
It'll be trying to go via a different computer.
01:58
< Reiver>
I have my main boxen plugged into a switch plugged into the router. It has a bluetooth dongle attached.
01:58 Janus [~Cerulean@Nightstar-10302.columbus.res.rr.com] has joined #Code
01:59
<@ToxicFrog>
Aah. So you've set your main machine up as a gateway.
02:00
< Reiver>
... Not yet. It was only just Tekkie's query that reminded me that I'd need to. >.<
02:05
< TakyojiClone>
So in general, what's a good GUI driven programming language for Windows?
02:05
< TakyojiClone>
C#, C, C++, VB, ...?
02:07
< TakyojiClone>
well?
02:16
<@ToxicFrog>
Ok, first of all, what do you mean by "GUI driven"?
02:16
<@ToxicFrog>
If you mean "has good GUI libraries", there's no such thing.
02:17
<@ToxicFrog>
Probably the closest would be C++ using Glade.
02:17
<@ToxicFrog>
I favour Lua using GTK+ directly.
02:17
<@ToxicFrog>
Of note is that both glade and GTK+ are cross-platform.
02:18
<@ToxicFrog>
If you're after /graphics/ rather than a GUI, SDL is your tiny god.
02:19
<@ToxicFrog>
But, again, that's a library, not a language.
02:24
< TakyojiClone>
hmm
02:25
< TakyojiClone>
So basically Lua?
02:25
< TakyojiClone>
and so.. is GTK+ a library/extension to it?
02:25
< Vornicus-Latens>
For Windows specifically, you can probably use MS' Form Designer.
02:25
<@ToxicFrog>
It depends on what you're doing. As I said, I favour Lua.
02:25
< Vornicus-Latens>
But.
02:26
<@ToxicFrog>
GTK+ is a graphical interface library.
02:26
< TakyojiClone>
ahh
02:26
< Vornicus-Latens>
GTK+ is a GUI library with bindings to a lot of languages.
02:26
< Vornicus-Latens>
and it is cross-platform.
02:26
<@ToxicFrog>
It is Windows/Linux/OSX cross-platform, and has native bindings for C and C++ and additional bindings for lots of other stuff.
02:26
< TakyojiClone>
ahh
02:26
<@ToxicFrog>
Glade is a supplementary library, which lets you put together interfaces in a handy designer program and then load them into your GTK-and-Glade-based program.
02:27 Vornicus-Latens is now known as Vornicus
02:27
< TakyojiClone>
stupid question but, can you execute MySQL queries through it?
02:27
< Vornicus>
through... gtk?
02:27
<@ToxicFrog>
...no? GTK is a GUI library.
02:27
< Vornicus>
what?
02:27
< TakyojiClone>
Through Lua
02:27
<@ToxicFrog>
Yes.
02:27
< TakyojiClone>
woo
02:27
<@ToxicFrog>
Or rather, there is an SQL library for Lua.
02:27
<@ToxicFrog>
Called LuaSQL, oddly enough.
02:27
< TakyojiClone>
What is the compiler like, text only?
02:27 * Vornicus prefers Postgres to Mysql
02:27
< TakyojiClone>
ahh
02:28
<@ToxicFrog>
Vornicus: it supports both Postgres- and my-
02:28
< Vornicus>
awesomeland
02:28
<@ToxicFrog>
And, like, a dozen other database types as well.
02:28
< TakyojiClone>
ahh
02:28
< TakyojiClone>
Any good books on Lua?
02:28
<@ToxicFrog>
Lua is interpreted, not compiled. It does have a compiler you can use if you want to strip down the interpreter or speed up execution by skipping lex/parse/code generation.
02:28
<@ToxicFrog>
http://www.lua.org/manual/5.1/
02:29
< TakyojiClone>
ohh
02:29
< TakyojiClone>
So, for example, in order to run the application you'd have to load it through an intrepreter?
02:29
<@ToxicFrog>
Also, I have lying around a program (written in Lua) - you feed it Lua code, and it generates C code that loads that code into memory and executes it.
02:30
<@ToxicFrog>
In general, yes.
02:30
<@ToxicFrog>
If you don't want to do that, see above.
02:30
<@ToxicFrog>
You use the wrapper program to generate C code and then compile that into a binary, which you then distribute.
02:31
<@ToxicFrog>
Depending on how you use this this can either be "I have packaged my entire Lua program into a single executable binary containing all the Lua source", or "I am distributing my program with a standard Lua terp that is hard-coded to load program.lua when it starts", or anything in between.
02:32
<@ToxicFrog>
In truth, I am unsure whether Lua would work well for you.
02:33
< TakyojiClone>
brb
02:33 MyCatOwnz [~mycatownz@Nightstar-379.dsl.in-addr.zen.co.uk] has joined #code
02:35
< TakyojiClone>
So basically, you can choose to have it compiled, otherwise have it in an excutable which contains the interpreter and interpret it, right?
02:35
<@ToxicFrog>
No, no.
02:35
< TakyojiClone>
or is the interpreter a seperate application as well as the code?
02:36
<@ToxicFrog>
Ok. Under normal circumstances, you write Lua code, you run it through the interpreter /usr/bin/lua which executes the code.
02:36
<@ToxicFrog>
You can choose to compile it, but this compiles to Lua VM bytecode, not machine code.
02:36
< TakyojiClone>
oh
02:36
<@ToxicFrog>
So the compiled Lua code /also/ runs in the interpreter.
02:36
<@ToxicFrog>
It just does so faster and lets you create a smaller, custom interpreter.
02:36
<@ToxicFrog>
Now, Lua is meant to interact closely with C and C++ programs.
02:37
<@ToxicFrog>
Basically, it was originally envisioned as a way to add scripting support to such programs.
02:37
<@ToxicFrog>
So, you can write a C program that loads a block of Lua code into memory and then executes it using lua_pcall()
02:37
< TakyojiClone>
ahh
02:38
<@ToxicFrog>
The wrapper program blcgen simply automates this process: you feed it Lua code, and it spits out a C program that contains that code and lua_pcall()s it when run.
02:40
< MyCatOwnz>
...can the Lua interpreter be made to do JIT compilation? Or has that not been done by anyone (yet)?
02:40
<@ToxicFrog>
This has not yet been done. I am unsure it would be practical with the current codebase, but I haven't studied the terp guts much.
02:41 Reiver [~reaverta@IRCop.Nightstar.Net] has quit [Ping Timeout]
02:45
< MyCatOwnz>
Fair 'nuff. Out of curiosity, what linguistic class is Lua? LR(1), like C?
02:47
< TakyojiClone>
Give a couple primary examples of what you'd say Lua is good for, and a couple things that aren't the best to be made in Lua (if any)
02:49
< MyCatOwnz>
TakyojiClone: scripting engine for videogames.
02:49
< MyCatOwnz>
TakyojiClone: that's what is it brilliant for and precisely what it was designed for.
02:49
< TakyojiClone>
oh
02:49
< MyCatOwnz>
Bad: anything math-intensive that has to be done in real-time.
02:50
< TakyojiClone>
ahh
02:50
< TakyojiClone>
any suggestable alternatives?
02:50
< MyCatOwnz>
Also bad: anything which you'd need to use inline assembley for.
02:50
<@ToxicFrog>
I find that it's good for small-to-medium sized stand-alone programs, too.
02:50
<@ToxicFrog>
Basically, bad for stuff where low-level or high-performance is an isue.
02:50
< MyCatOwnz>
TakyojiClone: well, the canonical method for videogames is called the "alternating hard and soft layers" pattern.
02:51
<@ToxicFrog>
Both of these are what C/C++ is for.
02:51
< TakyojiClone>
ahh
02:51
< TakyojiClone>
Not like for making Maya 8 or something, right? ;P
02:51
< MyCatOwnz>
TakyojiClone: you write the high-level stuff, such as scripted sequences and so on, in a language that's cheap to write programs in, such as Lua.
02:52
< MyCatOwnz>
TakyojiClone: you write the mid-level stuff, such as your netcode and loading/saving code in something reasonably nippy, like C or C++.
02:52
<@ToxicFrog>
You write the low-level stuff, like the sound/graphics/physics/input subsystems, in a low-level, fast language like C++.
02:52
< TakyojiClone>
ahh
02:52
< MyCatOwnz>
TakyojiClone: you then profile the C stuff to see which bits the CPU spends most of its time in.
02:53
<@ToxicFrog>
That's optimization, not design.
02:53
< MyCatOwnz>
TakyojiClone: and then on the most heavily taxed bits (e.g. inner loops in the physics engine) you go absolutely balls-to-the-wall and do it in very thoroughly reviewed assembley.
02:53
< MyCatOwnz>
ToxicFrog: optimization is part of the design when realtime is involved. :/
02:54
< MyCatOwnz>
ToxicFrog: (though yes, all the usual warnings about premature optimization still apply)
02:54
<@ToxicFrog>
...
02:54
<@ToxicFrog>
"doing it in assembly" hasn't been the best way for quite some time.
02:54
<@ToxicFrog>
At least on modern processors, the compiler is much better at optimization that you are.
02:54
< MyCatOwnz>
Yes. Of course it is.
02:56
<@ToxicFrog>
So, keeping this in mind, you would use assembly for performance reasons...why?
02:56
< MyCatOwnz>
After all, there's no way on Earth you could ever do something crazy like, oh, I dunno, take the compiler's assembley output (-s or whatever equivalent flag), tweak it by hand, build the program, run a profiler to see if anything improved or not and thus be guaranteed as good as or better than runtime speed than the compiler.
02:56
< TakyojiClone>
Well, I suppose the question would be... "What is a good program for doing simple tasks that is bindable to MySQL for a considerable novice?"
02:56
<@ToxicFrog>
The "considerable novice" part rules out Lua.
02:56
<@ToxicFrog>
The "good" part rules out Perl ¬¬
02:56
< Vornicus>
Python and Ruby are both very nice to beginners.
02:57
< Vornicus>
And both have top-quality tutorials on the net
02:57
<@ToxicFrog>
Python might have easily acessible database bindings; talk to Vorn.
02:57
< MyCatOwnz>
ToxicFrog: because the compiler isn't very good at cache size optimization tricks, alignment tricks, usage of obscure opcodes, usage of bleeding-edge crap (e.g. many SIMD instructions).
02:57
<@ToxicFrog>
Bleeding-edge crap I will grant you, but the rest?
02:57
< MyCatOwnz>
There's lots of stuff if you take a peeksee at researchers' sites.
02:57
< Vornicus>
Ruby perhaps has the nicest db bindings of all, see ActiveRecord
02:58
<@ToxicFrog>
There's also the fact that even if, by some miracle, you manage to squeeze more performance out of it than the compiler could, you are making your code many orders of magnitude less readable and maintainable and completely nonportable for a trivial performance increase.
02:59
< MyCatOwnz>
e.g. people whine like crazy about the floating-point stack on x86 chips, because they're hard and their compilers tend to get poor results with them. But a very clever person with Asperger's Syndrome, a +5 Hat of Being Really Smart and a CPU scheduling cheatsheet can squeeze beautiful performance out of it.
03:00
< MyCatOwnz>
Trivial? We're talking gains of roughly twenty percent for a good compiler and a crap programmer, right up to performance doubling (or possibly better, much better if you have a cache-management God on your team) for a realistic compiler and a very good programmer.
03:01
< MyCatOwnz>
Of course it's nonportable. Taking advantage of your target chip's idiosyncrasies for the sake of performance is always nonportable,
03:02
< MyCatOwnz>
This is why you a) run unit tests to ensure that the assembley code always gives the same result as the readable, clean C version and b) surround the nonportable bits with scary looking #ifdefs.
03:03
< MyCatOwnz>
To be fair to you, though, I can quite easily see how a team might completely omit to do step a), as well as see the horrible problems that would inevitably result.
03:04 Reiver [~reaverta@IRCop.Nightstar.Net] has joined #Code
03:04 mode/#code [+o Reiver] by ChanServ
03:11
<@ToxicFrog>
Actual hard numbers with source code would be appreciated.
03:12 * Vornicus ponders the value of putting the game rules into the SQL component, over putting the game rules in the script and having it tell the SQL what to do.
03:12
<@ToxicFrog>
Along with an example of a situation where it is, in fact, better to run twice as fast one a single version of a single implementation of a single architecture, and poorly if at all on everything else, while being at least twice as hard to maintain.l
03:12
< Vornicus>
Aircraft
03:12 Reiver [~reaverta@IRCop.Nightstar.Net] has quit [Ping Timeout]
03:12
< MyCatOwnz>
ToxicFrog: does Quake I count?
03:12
<@ToxicFrog>
Vornicus: yes, but he's not talking about embedded systems.
03:13
<@ToxicFrog>
He's talking about game engines.
03:13 Reiver [~reaverta@IRCop.Nightstar.Net] has joined #Code
03:13 mode/#code [+o Reiver] by ChanServ
03:13
< Vornicus>
Quake I: designed to run full software 3d on a 30MHz computer.
03:13
< TakyojiClone>
holy crap
03:14
<@ToxicFrog>
It looked like ass, yes, but it was playable.
03:14
< MyCatOwnz>
ToxicFrog: Carmack took all the critical inner-loops and rearranged the machine code so that one floating point instruction would be emitted on every even cycle and one integer instruction would be emitted on every odd cycle.
03:14
<@ToxicFrog>
However, this does not prove that improved performance > improved portability, just that some designers choose to go that way.
03:14
<@ToxicFrog>
And it definitely doesn't say anything about the speed of the hand-optimized assembly vs the speed of compiler-optimized assembly using a modern compiler.
03:14
< MyCatOwnz>
ToxicFrog: thus handily making the thing fly on the P1, which had seperate one instruction wide FPU and CPU pipelines.
03:15
< MyCatOwnz>
ToxicFrog: ummm, does nobody buying your fucking game count? 'Cause nobody would've bought Quake I if it hadn't run on their shitty 66MHz P1 boxes.
03:16
< MyCatOwnz>
ToxicFrog: and yes, the principle still holds with modern compilers. The chips move faster than the compilers can keep up with. It's just that the cases optimized for nowadays are somewhat more difficult.
03:16
<@ToxicFrog>
You still have offered exactly no compelling evidence that the hand-optimization was in fact necessary to accomplish this, and even less to indicate that if it was, it would still be necessary today.
03:17
< MyCatOwnz>
ToxicFrog: "No C compiler on Planet Earth circa 1995 would've produced that interleaved microcode for him." That's the answer to point one.
03:18 Reiver [~reaverta@IRCop.Nightstar.Net] has quit [Ping Timeout]
03:18
< MyCatOwnz>
ToxicFrog: "Altivec on PPC chips, for example, lets FPU-bound code such as image processing apps gain about a 20% speed boost over pure-POWER5 implementations. Back when Apple was still using PowerPC chips, there were No C Compilers On Planet Earth which would take advantage of the Altivec instructions."
03:18
<@ToxicFrog>
Granted that it wouldn't produce that code, and even that what it did output wouldn't be as performant. The question is how much.
03:19
< MyCatOwnz>
Dude, we're not talking the whole fucking program here. Think four or five inner loops, at most.
03:19
<@ToxicFrog>
All you've been doing is waving your hands and saying "oh it's twice as fast" without actually backing it up. What if it was a 10% increase? 5%? 1%? Is it still worth it?
03:20
< MyCatOwnz>
ToxicFrog: fine. Gimme five minutes while I go dig up numbers from people who've tried it.
03:21
< Vornicus>
I can't count the number of computer architectures that use the i386 instruction set that are relevant today on all my fingers and toes.
03:22
< MyCatOwnz>
Vornicus: was there meant to be a, "don't," somewhere in that sentence?
03:22
< Vornicus>
Nope.
03:23
< Vornicus>
if I want to optimize my code for i386, there are dozens of architectures that I could reasonably end up on; 1 core, dual core, hyperthreading, 32 and 64 bit, dual processor...
03:23
< MyCatOwnz>
Vornicus: really? I can only think of about five chip manufacturers who use the i386 ISA, two and a half of whom aren't really relevant.
03:24
< MyCatOwnz>
Ah, I see. Yes, good point.
03:24
< Vornicus>
And each one requires different priorities for running your program at top speed.
03:25
< MyCatOwnz>
Not really. There's about three that're really worth optimizing for.
03:25
<@ToxicFrog>
This is why I said "one version of one implementation of one architecture" rather than "one architecture"
03:26
<@ToxicFrog>
Yeah, if you're doing embedded systems or console programming or the like, you know exactly what VIA you're developing for and there's no penalty for hand-optimizing except in maintainability and development time.
03:27
<@ToxicFrog>
(well, the IA at least, maybe not the V)
03:27
< MyCatOwnz>
Multicore, multi socket and hyperthreading all require precisely the same optimization techniques, for example. In all three cases, you're aiming to keep an appropriate quantity of threads all constantly busy for as long as possible, ideally with their datasets far out of each others' way as possible, with the least amount of locking that you can get away with - but no less than that!
03:28
< MyCatOwnz>
The only variable worth worrying about between the three is how far you'll want to keep the threads out of one anothers' ways.
03:41
< MyCatOwnz>
ToxicFrog: http://www.azillionmonkeys.com/qed/optimize.html#asmdebate
03:42
< MyCatOwnz>
ToxicFrog: the quoted programmer's experience was tested on, ah... VC++5, which was, AFAIK, reasonably speedy as far as C compilers go.
03:42
< Vornicus>
...eheh.
03:43
< Vornicus>
VC++5 is old enough that I have never seen it actually used
03:46
<@ToxicFrog>
I have. I wake up screaming, sometimes.
03:46
< Vornicus>
...woof.
03:52 * Pi falls asleep screaming sometimes. Boy does that annoy the kreely.
03:53
< Vornicus>
heh
03:57
< MyCatOwnz>
ToxicFrog: GMP's devs quote a factor of between two and ten for handwritten routines over gcc. Not sure which version.
04:31 MyCatOwnz is now known as MyCatBreaksHisComputer
04:37
< TakyojiClone>
http://2kinds.com/forum/viewtopic.php?p=84781#84781
04:37
< TakyojiClone>
A topic I wrote on a different forum, but though I'd send the link here too, so I could hear your thoughts from the IRC
04:37
< TakyojiClone>
thought*
04:40
< MyCatBreaksHisComputer>
I don't think. There's a gigantic cellular automaton between my ears.
04:40
< MyCatBreaksHisComputer>
Don't tell Steve Wolfram, but I've been trying to get rid of it with fungicides. Thus far, no luck.
04:41
< MyCatBreaksHisComputer>
TakyojiClone: it always starts from a common interest and slowly progresses into an emotional investment in the other people one has grown to know in that community.
04:42
< TakyojiClone>
true, it's just hard starting that community though, which is the problem
04:42
< TakyojiClone>
If there isn't enough, nobody will really join
04:42
< MyCatBreaksHisComputer>
TakyojiClone: there's a common symptomn on forums a handful of people will leave, breaking up some little clique or faction and, within a few months, large chunks of the rest of the board will slowly peel away in a cascade effect as their reasons for attending leave the place.
04:43
< TakyojiClone>
And plus we've JUST started our forum recently
04:43
< MyCatBreaksHisComputer>
TakyojiClone: not quite. The case is actually that communities won't just spontaneously form for no reason. You need to supply a common interest, otherwise your forum is essentially worthless.
04:43
< TakyojiClone>
ahh
04:44
< MyCatBreaksHisComputer>
People will join for a common interest. People will stay if their interest does not wane, or if they have made friends in a community.
04:44
< TakyojiClone>
And, basically the forum is on our business website of pond construction, so that may set a primary interest of the forum, right?
04:44
< TakyojiClone>
ahh
04:44
< MyCatBreaksHisComputer>
Joining a community for the community's own sake, without reference to any particular uniting factor, is about as common as environmentally friendly SUVs.
04:45
< TakyojiClone>
meh?
04:46
< MyCatBreaksHisComputer>
Nobody ever does it.
04:46
< TakyojiClone>
ahh
04:46 MyCatBreaksHisComputer [~mycatownz@Nightstar-379.dsl.in-addr.zen.co.uk] has quit [Quit: Needing to be using this keyboard and cat5 cable in another machine.]
04:53 * Janus spots VC++, reads backlog.
05:04
< TakyojiClone>
Stupid question: Is there a version of Macromedia Flash for Linux?
05:05 Reiver [~reaverta@IRCop.Nightstar.Net] has joined #Code
05:05 mode/#code [+o Reiver] by ChanServ
05:06
< Vornicus>
there are linux flash players.
05:06
< Vornicus>
I do not know how good they ar.e
05:10 * Janus finishes backlog, Lord save his soul.
05:23
<@ToxicFrog>
There is an official Flash player release for Linux. It works fine, except that it only works on 32-bit systems.
05:24
<@ToxicFrog>
If on 64-bit systems, there are various open-source reverse-engineering efforts, none of which support anything past Flash 4 reliably.
05:24
<@ToxicFrog>
Why?
05:24
< TakyojiClone>
Because apparently Firefox didn't have a pre-installed Flash Player on Ubuntu
05:25
< TakyojiClone>
As I've heard
05:25
<@ToxicFrog>
This does not surprise me. The official flash player is not free-as-in-freedom and thus not installed by default on Debian or Ubuntu.
05:25
< TakyojiClone>
I installed Ubuntu on a computer and gave it to my brother's girlfriend
05:25
<@ToxicFrog>
You have to explicitly tell it to install.
05:25
< TakyojiClone>
ahh
05:29
< TakyojiClone>
by downloading it, agreeing to the EULA, and installing it or?
05:30
<@ToxicFrog>
I don't know the details as I don't use Ubuntu, but I think you just enable the "nonfree" repo and tell it to install flashplayer.
05:30
<@ToxicFrog>
You can also install it by hand from Macromedia's website, yes.
05:30
< TakyojiClone>
ahh
05:30
< Vornicus>
multiverse is the nonfree repo
05:35
< Janus>
Could I ask a wacky question? What would be the next step in learning game development..?
05:36
< Janus>
(That wasn't as wacky as I envisioned it. :/ )
05:36
< TakyojiClone>
*shrugs* 3D modeling?
05:36
< Vornicus>
NETWORKING
05:36
< Janus>
Sounds important.
05:37
< Vornicus>
Also, design tools.
05:38
< Janus>
Design tools..?
05:39
< Vornicus>
You ever made a level for Starcraft?
05:39
<@Reiver>
Or Total annihilation, or Age of Empires, or...
05:39
< Janus>
If I did, it was one wild night I'll never remember.
05:40
< Vornicus>
There are special tools designed for building levels for many, many games.
05:41
< Janus>
I messed around with AoEII's editor, and, though it probably doesn't count, made some Roller Coaster Tycoon maps with rides that stretched to each corner of the map~
05:42
<@Reiver>
Janus: That is exactly what we are referring to.
05:42
<@Reiver>
Programming that sort of editor.
05:42
< Vornicus>
Your game, if you wish others to build things for it - be they mods or parts of your scenario - will need a way to make it easy to design levels.
05:43
< Janus>
Oh! I see, that would certainly make development on my end easier as well.
05:43
< Vornicus>
Indeed.
05:43
< TakyojiClone>
could make an extension for gMax for mods
05:43
< TakyojiClone>
for your application,
05:44
<@ToxicFrog>
Networking is only relevant if you plan to do multiplayer games, though.
05:44
<@ToxicFrog>
gMax?
05:45
< Janus>
Well... the layout for a multiplayer game wouldn't be a long stretch from how the game runs with only one player.
05:45 * Janus thanks goodness for inheritance and polymorphic functions.
05:45
< Vornicus>
gMax appears to have been a free version of 3dsmax; it also appears to no longer exist.
05:46
< Vornicus>
Janus: proper design makes it easy to extend programs to do more complex things.
05:46
<@ToxicFrog>
...Takyoji, mods are a lot more than 3d modeling and animation.
05:46
<@ToxicFrog>
You are perhaps thinking of "models"
05:47
< Janus>
Obtaining 3dsmax wouldn't be a huge undertaking with the help of mister Torrent, (I have Maya as well), but 3D models are far more labour intensive, and take paid studios to create.
05:47
<@Reiver>
Janus: Or dedicated fans~
05:48 * Reiver used to be a modeler for a TA mod.
05:48
< Vornicus>
(the advantage of 3d models is that it gives you essentially an infinite number of viewpoints and stances. The disadvantage? They're an incredible bitch to make)
05:49
< Vornicus>
(check ouf ff7 for use of 3d models)
05:49
<@ToxicFrog>
(and require additional computation power per unit detail)
05:49
< Janus>
Reiver: Heh, when I have a league or two of fans, I'll happily build a sweat-shop for them, but until then~
05:49
< Vornicus>
(though if you're on a modern computer, that's not too big a deal)
05:50
<@ToxicFrog>
(if by modern you mean cutting edge, yes. For now.)
05:51
<@Reiver>
Janus: By that I mean it is possible for 'energetic ametuer' to pull it off.
05:51
< Vornicus>
(unless of course you're going batshit with detail)
05:51
<@Reiver>
Especially if you cheat, and once you have a 'human' model, proceed to reuse variants of it like fifty times~
05:51
< Vornicus>
(my GF MX440 could run Far Cry at medium detail. I was extremely impressed)
05:52
<@ToxicFrog>
Vornicus: what I mean is, take any arbitrary 3d model. A sprite of that model as seen in this stance and angle costs exponentially less power, but is less versatile.
05:52
< Vornicus>
Sure.
05:52
< Vornicus>
It costs less power.
05:53
<@ToxicFrog>
Furthermore, it is possible to crank up the detail pretty much as far as you want without negatively impacting performance.
05:53
<@ToxicFrog>
A sprite derived from a six million polygon model has exactly the same impact as one scribbled in MS Paint by a six year old.
05:54
< Vornicus>
But you can't slow it down smoothly or turn it to an arbitrary angle without your render counts going wahooni-shaped.
05:54
<@ToxicFrog>
Yes. That's the problem.
05:54
< Janus>
Graphic quality isn't as big a focus as actual quantity. Also, if it's going to simply be a rendered out sprite, I have plenty of hand-drawn sprites that fit that bill more readily.
05:54
<@ToxicFrog>
However, in cases where this is not an issue, it's better to use 2d and crank the detail up the limits of your art team than to use 3d just for the hell of it.
05:55
< Vornicus>
Also there's a reason D2 requires hardware rendering for the "perspective" view.
05:56
<@ToxicFrog>
Anyways. We digress.
05:57
< Vornicus>
Yes.
05:58
< Vornicus>
(idly, I'd love to see polygon counts of a lot of the characters of the PSX/N64 era. Einhander, Snake, Cloud (in battle and on the field), JetMoto, Mario, Link)
06:00
< Vornicus>
(Einhander in particular; that's some really well-done model work)
06:00
< Janus>
It's a shame 3D resources aren't floating around like sprites are. (Apparently, doom and quake models are the sonic and megaman of the 3D scene.)
06:00
<@ToxicFrog>
Doom doesn't have models, it has sprites.
06:01
< TakyojiClone>
did you know the Nintendo could render 150,000 polygons per second
06:01
< TakyojiClone>
Nintendo 64*
06:02
< TakyojiClone>
Although, I'm assuming it could render that many with no textures
06:02
< Vornicus>
150,000 polys per second is... not that many
06:03
< TakyojiClone>
It's the N64
06:03
< Vornicus>
at NTSC speeds we're talking an anemic 2,500 per frame.
06:03
< Vornicus>
the PSX I think did more.
06:04
< TakyojiClone>
PS is 360,000 polygons per second
06:05
< Janus>
Yes, per-second rates are used for impressing people, as it's x per frames that really matters.
06:05
<@ToxicFrog>
Which is still fairly low; 60k polys/frame
06:06
<@ToxicFrog>
At least, low by modern standards.
06:06
<@ToxicFrog>
Err.
06:06
<@ToxicFrog>
6k polies/frame.
06:08 * Janus 's computer displays a baker's dozen polies per frame, which is impressive for an abacus built of wood and glue.
06:08
< Vornicus>
that's enough for a halfway decent heightfield and several somewhat detailed models
06:08
< Vornicus>
(for psx-level values of detailed)
06:09
<@ToxicFrog>
...how many seconds per frame, Janus? :P
06:10
< Janus>
I'm not sure, the clock only goes up to 5 minutes.
06:13 Stephenie [Safyra@Nightstar-25904.ok.ok.cox.net] has quit [Quit: ]
06:13
< Vornicus>
heh
06:13 Stephenie [Safyra@Nightstar-25904.ok.ok.cox.net] has joined #code
06:14 * Stephenie blinks
06:14 * TakyojiClone pokes
06:15 TakyojiClone is now known as Takyoji
06:20
< Janus>
Alright, I'll see to acquiring 3dsmax for educational purposes, toy around with model sculpture. Of course, the higher-level editor as well. It should be easy to keep it flexible and simple; if something's missing, I'll just have to add it to the basement as I go~
06:22
< Janus>
And now, bedibye
06:23 * Janus thanks Stephanie and Co. for the help
06:23 Janus [~Cerulean@Nightstar-10302.columbus.res.rr.com] has quit [Quit: clair jouets voire]
06:24
< Stephenie>
eerm huh?
06:24
< Stephenie>
and if he was talking about me... he spelled my name wrong
06:24 * Stephenie blinks
06:28 * Reiver giggles.
06:28 * Reiver gives Stephenie a cookie.
06:29 * Stephenie takes said cookie and munches happily
06:31 * Takyoji sits in the corner... cookie-less
06:37 * Vornicus fiddles, tries to decide if the game logic belongs in the db's stored procedures or in the scripts that talk to the db.
06:43
< Vornicus>
Chalaaaaiiiin, adviiiiise meeeeee
06:43
< Takyoji>
What could a person do with 1000Watts?
06:44
< Takyoji>
qwith 120 volts I believe
06:44
< Vornicus>
Run a microwave oven.
06:44
< Takyoji>
Would a laptop be able to work at that?
06:44
< Takyoji>
Or even, multiple?
06:45
< Vornicus>
...let me put it this way
06:45
< Vornicus>
your average PC power supply is 400W
06:46 Mahal [~Mahal@Nightstar-12600.worldnet.co.nz] has quit [Quit: It's hard to be mad at someone who misses you while you're asleep. ]
06:46
< Takyoji>
k
06:46
< Vornicus>
http://en.wikipedia.org/wiki/Orders_of_magnitude_%28power%29
06:47
< Takyoji>
http://www.northerntool.com/webapp/wcs/stores/servlet/product_6970_200313480_200 313480
06:49
< Vornicus>
...okay, /this/ is a big number.
06:49
< Vornicus>
http://en.wikipedia.org/wiki/Planck_power
06:50
< Takyoji>
xD geez
06:51
< Vornicus>
I love these Planck units.
06:52
< Vornicus>
"...modern science considers it nonsensical to consider anything hotter."
07:49
<@Reiver>
Why did they bother with it?
07:50
< Vornicus>
It is aparently the temperature of the big bang.
07:51
<@Reiver>
Yes.
07:51
<@Reiver>
Why'd they bother? >.>
07:52
< Vornicus>
because they felt like it
08:07 Vornicus is now known as Vornicus-Latens
09:31 Takyoji [~Takyoji@Nightstar-25280.dhcp.roch.mn.charter.com] has quit [Quit: Leaving]
10:30 AnnoDomini [~fark.off@Nightstar-28974.neoplus.adsl.tpnet.pl] has joined #Code
10:54 Reiver [~reaverta@IRCop.Nightstar.Net] has quit [Ping Timeout]
11:05 Reiver [~reaverta@IRCop.Nightstar.Net] has joined #Code
11:05 mode/#code [+o Reiver] by ChanServ
11:55 You're now known as TheWatcher
11:59 AnnoDomini [~fark.off@Nightstar-28974.neoplus.adsl.tpnet.pl] has quit [Ping Timeout]
11:59 AnnoDomini [~fark.off@Nightstar-29709.neoplus.adsl.tpnet.pl] has joined #Code
12:45 Reiver is now known as ReivSLEP
13:44 EvilDarkLord [althalas@Nightstar-15301.a88-115-211-62.elisa-laajakaista.fi] has quit [Ping Timeout]
13:54 EvilDarkLord [althalas@Nightstar-15301.a88-115-211-62.elisa-laajakaista.fi] has joined #code
15:06 EvilDarkLord [althalas@Nightstar-15301.a88-115-211-62.elisa-laajakaista.fi] has quit [Ping Timeout]
15:10 EvilDarkLord [althalas@Nightstar-15301.a88-115-211-62.elisa-laajakaista.fi] has joined #code
15:15 MyCatOwnz [~mycatownz@Nightstar-379.dsl.in-addr.zen.co.uk] has joined #code
15:35 MyCatOwnz [~mycatownz@Nightstar-379.dsl.in-addr.zen.co.uk] has quit [Quit: Makin' s'getti. Back in a few hours.]
15:57 MyCatOwnz [~mycatownz@Nightstar-379.dsl.in-addr.zen.co.uk] has joined #code
17:19 Vornicus-Latens is now known as Vornicus
17:20 You're now known as TheWatcher[afk]
18:11 Janus [~Cerulean@Nightstar-10302.columbus.res.rr.com] has joined #Code
18:22 You're now known as TheWatcher
20:04 MyCatOwnz [~mycatownz@Nightstar-379.dsl.in-addr.zen.co.uk] has quit [Ping Timeout]
20:48
< Vornicus>
Hm, interesting problem
20:49
<@jerith>
I'm up for one...
20:49
< Vornicus>
In order to figure out the longest road, the important bits are the longest road each person has and the point at which that person got that length road - the person who got the longest road the earliest has the longest road.
20:50
<@jerith>
Catan clone?
20:50
< Vornicus>
...except that it is possible for the longest road to get put away: if the person with the longest road has his road broken, and the people with less long roads are tied in road length (but not in time at which they got longest road)
20:50
< Vornicus>
jerith: yes.
20:50
< Vornicus>
Then neither of the people with the current longest road get it.
20:52
< Vornicus>
Now, my original system had the turn that each road segment was played as part of the data used as game state - so the person with the lowest maximum turn number on their longest road (ties broken by turn order) would have the longest road.
20:54 Fish [~Shemhazai@Nightstar-4203.vl20-cph.dhcp.clearwire.dk] has joined #Code
20:54
< Vornicus>
I am /very/ reluctant to use an actual Longest Road field; it seems to break the "don't keep what you can recalculate" rule of database maintenance.
21:11
< Vornicus>
So, I'm looking for a way to determine whether the longest road actually exist
21:11
< Vornicus>
s
21:17 * Vornicus fiddles
21:17
< Vornicus>
okay, that's kinda scary, it's technically calculable.
21:18
< Vornicus>
...now to see if I can figure out the right way to put the numbers together.
21:19
< EvilDarkLord>
What kind of database load are you looking at when you calculate it?
21:19
< Vornicus>
EDL: I'm not sure. It's not /very/ difficult, but I will be doing a lot of it. I'll see if I can make it memoize.
21:55 Mahal [~Mahal@Nightstar-12600.worldnet.co.nz] has joined #Code
21:55 mode/#code [+o Mahal] by ChanServ
21:56 Chalcedon [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has joined #code
21:56 mode/#code [+o Chalcedon] by ChanServ
21:57 ReivSLEP [~reaverta@IRCop.Nightstar.Net] has quit [Ping Timeout]
22:19 Thaqui [~Thaqui@Nightstar-13083.jetstream.xtra.co.nz] has quit [Ping Timeout]
22:20 EvilDarkLord is now known as Martivir
22:20 AnnoDomini is now known as Saurivir
22:21 Chalcy [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has joined #code
22:21 mode/#code [+o Chalcy] by ChanServ
22:22 Chalcedon [~Chalceon@Nightstar-869.bitstream.orcon.net.nz] has quit [Ping Timeout]
22:34 Thaqui [~Thaqui@Nightstar-1264.jetstream.xtra.co.nz] has joined #code
22:35 Reiver [~reaverta@IRCop.Nightstar.Net] has joined #Code
22:35 mode/#code [+o Reiver] by ChanServ
22:54 Reiver [~reaverta@IRCop.Nightstar.Net] has quit [Ping Timeout]
22:56 Reiver [~reaverta@IRCop.Nightstar.Net] has joined #Code
22:56 mode/#code [+o Reiver] by ChanServ
23:22 Takyoji [~Takyoji@Nightstar-25280.dhcp.roch.mn.charter.com] has joined #code
23:45 Takyoji [~Takyoji@Nightstar-25280.dhcp.roch.mn.charter.com] has quit [Quit: Leaving]
--- Log closed Sun Dec 10 00:00:02 2006
code logs -> 2006 -> Sat, 09 Dec 2006< code.20061208.log - code.20061210.log >