--- Log opened Sat Nov 28 00:00:03 2009 |
00:07 | < gnolam> | I don't intend to distribute it. But it makes it a pain in the ass to transfer. :P |
00:10 | | * Derakon eyes Wikipedia. |
00:10 | <@Derakon> | I would assume that when they write "v^2", with v being a vector, they mean the squared magnitude of the vector. |
00:10 | <@Derakon> | Does that seem right to you? |
00:10 | <@Derakon> | Specifically I'm looking at http://en.wikipedia.org/wiki/Ray_tracing_(graphics)#Example |
00:12 | <@Vornicus-Latens> | I think so, yes |
00:18 | <@Derakon> | Hey presto, totally bogus shading. http://derakon.dyndns.org/~chriswei/temp2/out.png |
00:19 | <@Derakon> | Obtained by using the dot product of the surface normal and the cast ray as a multiplier on the color. |
00:19 | <@Derakon> | So in other words, it's the same as putting the light source on top of the camera. |
00:31 | | AnnoDomini [annodomini@Nightstar-e504a787.adsl.tpnet.pl] has quit [[NS] Quit: OUT OF THE NIGHT AND INTO THE FIGHT, IT'S BIXBY!!!!!] |
00:32 | | MyCatVerbs [mycatverbs@Nightstar-492e7e67.co.uk] has joined #code |
00:32 | | mode/#code [+o MyCatVerbs] by Reiver |
00:35 | <@Derakon> | I really wish Python flushed output more reliably. |
00:36 | <@Derakon> | Even when I call sys.stdout.flush() right after a print statement, the output doesn't appear in the file I'm tailing. |
00:47 | | Vornicus-Latens is now known as Vornicus |
00:48 | | You're now known as TheWatcher[T-2] |
00:53 | | You're now known as TheWatcher[zZzZ] |
00:54 | | Attilla [The.Attilla@FBC920.92E3D3.F76883.99588C] has quit [Client closed the connection] |
01:34 | <@ToxicFrog> | Derakon: does it include a newline? tail might do its own line-buffering. |
01:35 | <@Derakon> | Python includes a newline on the end by default. |
01:36 | <@ToxicFrog> | I've got nothing, then. |
01:36 | <@ToxicFrog> | While we're wishing, though, I wish icc didn't generate four-line-long warning messages for the stupidest of things. |
01:37 | <@Derakon> | ERROR: 2+2 = 4 |
01:38 | < SmithKurosaki> | hahaha |
01:38 | < SmithKurosaki> | Are you serkious? Also, what is icc? |
01:38 | < SmithKurosaki> | *serious |
01:38 | <@Derakon> | I was joking. |
01:38 | < SmithKurosaki> | kk |
01:38 | <@ToxicFrog> | icc is the Intel C Compiler. |
01:38 | <@ToxicFrog> | On the amdicluster, it's also the compiler mpicc uses. |
01:38 | < SmithKurosaki> | Ahh |
01:49 | <@Derakon> | Well, this might be a raytrace of a genuine 3D fractal! http://derakon.dyndns.org/~chriswei/temp2/out.png |
01:49 | <@Derakon> | It's a bit hard to tell. |
01:58 | <@Vornicus> | It... might be, yes. |
02:08 | | gnolam [lenin@Nightstar-38637aa0.priv.bahnhof.se] has quit [[NS] Quit: Z?] |
02:12 | <@McMartin> | icc does at least produce criminally efficient code. |
02:17 | <@ToxicFrog> | Granted. |
02:17 | <@ToxicFrog> | It also thinks that "this file-internal function was not forward declared in any headers" is worth four lines of terminal per function. |
02:19 | <@McMartin> | Heh. |
02:19 | <@McMartin> | Is it static? |
02:19 | <@McMartin> | Because it ought to be to avoid linker-level namespace pollution~ |
02:19 | <@ToxicFrog> | ..it's not. Good catch. |
02:22 | <@McMartin> | Not sure why that's four lines, but it should, indeed, be *one* line assuming you've got whole-program analyzers, and I know for a fact that icc does because my adviser's previous generation of grad students mostly went on to Intel. |
02:23 | <@ToxicFrog> | It's one line telling me where and what the warning is, then two more lines telling me where the warning is again, and then a blank line. |
02:23 | <@ToxicFrog> | In retrospect, I should have asked Dr. Gardner to ask the admin to install git-core on the amdicluster. |
02:24 | <@ToxicFrog> | On the plus side, luapilot is the first google hit for luapilot, which makes getting the tarball easy. |
02:28 | <@McMartin> | Heh |
02:32 | | * Derakon starts thinking about how to get the local surface normal for a 3D fractal. |
02:32 | <@Derakon> | I'd like to avoid having to sample 8 adjacent points or other such computationally-intensive work. |
02:34 | <@McMartin> | Incident edges if you can swing it. |
02:36 | | * Derakon tries to understand what the guy at http://www.gamedev.net/community/forums/topic.asp?topic_id=553643 is describing. |
02:39 | <@Derakon> | Another article says "Once the intersection point is found we need the surface normal (if such a thing existed for a fractal, but thankfully we are not rendering a real fractal, but just an approximation to it, a truncaged version). I found most people is using some sort of central differences method here, Sandin himself included. I rather prefer to compute the analytical gradient to the potential function, or to the distance field (as ca |
02:39 | <@Derakon> | lculated by the distance estimator mentioned above)." |
02:40 | <@ToxicFrog> | This project is resulting in a lot of messy command lines. |
02:41 | <@ToxicFrog> | find pisha -type f | env LUA_CPATH="./lib/?.so" mpiexec -c 2 bin/luapilot bin/lpisha |
04:14 | | SmithKurosaki [Smith@Nightstar-6450f657.dsl.teksavvy.com] has left #code ["Leaving"] |
04:14 | | * Derakon tries to determine the minimal number of points required to use sampling to get a local slope for a fractal volume. |
04:15 | | Tarinaky [Tarinaky@Nightstar-d26d6d9b.adsl.virginmedia.net] has quit [Connection closed] |
04:15 | <@Derakon> | Say I have a point <x, y>, whose value under my fractal function after some number of iterations is T. |
04:15 | <@Derakon> | Actually the point should be three-dimensional. Let's call it v_0, and its value T_0. |
04:16 | <@Derakon> | Now I look at v_0 + <Epsilon, 0, 0>; call this point v_1 and its value T_1. |
04:16 | | Tarinaky [Tarinaky@Nightstar-d26d6d9b.adsl.virginmedia.net] has joined #code |
04:16 | <@Derakon> | If T_1 == T_0, then I can assume that the local slope at v_0 is flat along the X axis. |
04:17 | <@Derakon> | If T_1 > T_0, though, then what can I determine? |
04:18 | | SmithKurosaki [Smith@Nightstar-6450f657.dsl.teksavvy.com] has joined #code |
04:19 | <@Derakon> | It seems like the degree of difference between the two should indicate the local slope in some way... |
04:36 | <@Vornicus> | You need three points to define a plane. |
04:42 | <@Vornicus> | If you have the point and 8 points surrounding it you can use a biquadratic to get a slope at the center point. |
05:17 | <@Derakon> | My main problem is finding other points on the surface of the volume. |
05:19 | <@Derakon> | Yes, if I have those, determining the normal is comparatively straightforward; just take some cross products. |
05:21 | <@Derakon> | Okay, time to go back to the sphere instead of mucking with the fractal function, I think... |
05:24 | | SmithKurosaki [Smith@Nightstar-6450f657.dsl.teksavvy.com] has quit [[NS] Quit: Leaving] |
05:27 | | SmithKurosaki [Smith@Nightstar-e2478917.cable.rogers.com] has joined #code |
05:28 | <@Derakon> | I guess I could fire rays at points near the intersection point... |
05:37 | <@Vornicus> | If you could, uh... shit. If you could figure out a way to get an actual intersection function for the surface some iteration of the fractal surface you'd be good. |
05:38 | <@Derakon> | Hell, yeah, if I had that... |
05:38 | <@Derakon> | I'm basically just approximating that right now. |
05:52 | | SmithKurosaki [Smith@Nightstar-e2478917.cable.rogers.com] has quit [[NS] Quit: I'm out, there's something else to do] |
06:02 | | Derakon [Derakon@Nightstar-90d553ba.ca.comcast.net] has quit [[NS] Quit: Leaving] |
06:59 | | SmithKurosaki [Smith@Nightstar-e2478917.cable.rogers.com] has joined #code |
07:48 | | Attilla [The.Attilla@FBC920.92E3D3.F76883.99588C] has joined #code |
07:48 | | mode/#code [+o Attilla] by Reiver |
08:02 | | AnnoDomini [annodomini@Nightstar-e504a787.adsl.tpnet.pl] has joined #code |
08:02 | | mode/#code [+o AnnoDomini] by Reiver |
08:57 | | Vornicus is now known as Vornicus-Latens |
08:58 | | Rhamphoryncus [rhamph@Nightstar-a62bd960.abhsia.telus.net] has quit [Client exited] |
09:19 | | AnnoDomini [annodomini@Nightstar-e504a787.adsl.tpnet.pl] has quit [Ping timeout: 121 seconds] |
09:19 | | AnnoDomini [annodomini@Nightstar-e504a787.adsl.tpnet.pl] has joined #code |
09:19 | | mode/#code [+o AnnoDomini] by Reiver |
09:50 | | gnolam [lenin@Nightstar-38637aa0.priv.bahnhof.se] has joined #code |
09:52 | | You're now known as TheWatcher |
10:23 | | MyCatVer1s [mycatverbs@Nightstar-492e7e67.co.uk] has joined #code |
10:25 | | MyCatVerbs [mycatverbs@Nightstar-492e7e67.co.uk] has quit [Operation timed out] |
12:02 | | gnolam [lenin@Nightstar-38637aa0.priv.bahnhof.se] has quit [[NS] Quit: If I return later today, please ignore everything I say.] |
12:30 | | You're now known as TheWatcher[afk] |
13:00 | | AbuDhabi [annodomini@Nightstar-045c1185.adsl.tpnet.pl] has joined #code |
13:02 | | AnnoDomini [annodomini@Nightstar-e504a787.adsl.tpnet.pl] has quit [Ping timeout: 121 seconds] |
14:41 | | You're now known as TheWatcher |
16:56 | < AbuDhabi> | I feel old. I've learned HTML like a decade ago, and MSVS is rubbing it in. |
17:30 | | You're now known as TheWatcher[afk] |
17:33 | | Derakon [Derakon@Nightstar-90d553ba.ca.comcast.net] has joined #code |
17:33 | | mode/#code [+o Derakon] by Reiver |
17:54 | | Rhamphoryncus [rhamph@Nightstar-a62bd960.abhsia.telus.net] has joined #code |
18:01 | <@Derakon> | Heyo, Rhamphoryncus. |
18:01 | < Rhamphoryncus> | yoho |
18:02 | | * Derakon adds one little print statement, increases his program's runtime from 7.6s to 19.8s. |
18:03 | < Rhamphoryncus> | hee |
18:06 | | Vornicus-Latens [vorn@ServerAdministrator.Nightstar.Net] has quit [Client closed the connection] |
18:07 | <@ToxicFrog> | Heh. Running my simulator normally: 1'40". Redirecting output to /dev/null: 50". |
18:07 | <@Derakon> | This was with redirecting to a file. |
18:08 | | Vornicus [vorn@ServerAdministrator.Nightstar.Net] has joined #code |
18:08 | | mode/#code [+o Vornicus] by Reiver |
18:08 | <@Derakon> | Hullo, Vorn. |
18:12 | | skyangel [..@687AAB.A24F5C.2B34BB.0548DF] has joined #code |
18:16 | | * Vornicus wavels |
18:17 | < skyangel> | *waves* |
18:17 | <@ToxicFrog> | 'morning |
18:17 | < skyangel> | lol morning =) |
18:18 | < skyangel> | although its at night by me |
18:19 | <@ToxicFrog> | Well, strictly speaking it's afternoon here, but who's counting? |
18:19 | | * ToxicFrog offers skyangel a function closure |
18:21 | < skyangel> | lol thanx |
18:29 | | You're now known as TheWatcher |
18:54 | <@Derakon> | Wait a second...why don't I just use the marching cubes algorithm again? |
18:54 | <@Derakon> | It'll give me a set of triangles that form the surface of the mesh at that point, and I can get the normal of a triangle easily. |
18:54 | <@Derakon> | I don't need to work with an actual mesh for this to be a valid approach. |
18:58 | < skyangel> | for an enjoyable chat join irc.skyirc.net 6667 hope to see you soon :) |
18:58 | | skyangel was kicked from #code by Derakon [No advertisements] |
19:00 | < Tarinaky> | For an enjoyable chat call [premium rate sex-line number here]. |
19:03 | < dmlandrum> | Call 1-900-HELL-CHAT for some real hotties... |
19:03 | < dmlandrum> | Sorry, best I could do on short notice. |
19:04 | < simon`> | how is it, in LaTeX align environments, you write notes in the margin? |
--- Log closed Sat Nov 28 19:05:45 2009 |
--- Log opened Sat Nov 28 19:06:05 2009 |
19:06 | | TheWatcher [chris@Nightstar-b4529b0c.zen.co.uk] has joined #code |
19:06 | | Irssi: #code: Total of 25 nicks [8 ops, 0 halfops, 0 voices, 17 normal] |
19:06 | | mode/#code [+o TheWatcher] by Reiver |
19:06 | < AbuDhabi> | Tricky. |
19:06 | <@Derakon> | Anyone know what the function is that gets called when you want to cast something to a tuple? |
19:06 | | Irssi: Join to #code was synced in 57 secs |
19:07 | <@Derakon> | E.g. I want to be able to do tuple(p) where p is an instance of my Vector3D class, and get out (p.x, p.y, p.z) |
19:07 | <@Derakon> | (This is Python, I should have noted) |
19:07 | < simon`> | lambda v3d: (v3d.x, v3d.y, v3d.z) |
19:08 | < simon`> | ohh |
19:08 | < simon`> | you mean something like __tuple__ or something like htat. |
19:08 | <@Derakon> | Right. |
19:08 | < simon`> | do you have an example of any type in python that has automatic conversion to n-tuples? |
19:08 | <@Derakon> | Except __tuple__ doesn't appear to be the right function name, or else my test implementation is wrong. |
19:08 | <@Derakon> | ...no. |
19:09 | < simon`> | so you don't have a control structure that tries to do this either, right? |
19:09 | <@Derakon> | Okay, so it may not be possible. |
19:09 | <@Vornicus> | __getindex__ I think |
19:10 | <@Derakon> | I'm looking for something that works like this: http://paste.ubuntu.com/330505/ |
19:10 | | skyangel [..@687AAB.A24F5C.2B34BB.0548DF] has joined #code |
19:11 | <@Vornicus> | __getindex__ all it does is it makes indexing work. |
19:12 | | mode/#code [+b *!*..@*.A24F5C.2B34BB.0548DF] by Derakon |
19:12 | | skyangel was kicked from #code by Derakon [Get out of here too.] |
19:14 | <@Derakon> | (Banned for a) advertising, and then b) using netspeak in another channel, in case anyone's wondering) |
19:14 | <@Derakon> | (Hence the "too") |
19:23 | <@Vornicus> | So in order to make a tuple you generally want to implement __len__ and __getindex__ or possibly __iter__ and next |
19:23 | <@Derakon> | Oh, I see, you're indicating what is needed to make Vector3D behave as if it were a tuple. |
19:24 | <@Vornicus> | no, no |
19:24 | <@Vornicus> | Well, yes |
19:24 | <@Vornicus> | but tuple() I think also does itthat way |
19:28 | <@Vornicus> | Ah. In order for tuple to work it must be iterable; __iter__ / next should work, as should __len__ / __getindex__ |
19:29 | <@Vornicus> | __getitem__ rather, not __getindex__ |
19:29 | <@Derakon> | Too much work for me. I'll just stick with Vector3D.tuple(). |
19:31 | | Derakon is now known as Derakon[AFKAgain] |
20:49 | | crem [moo@Nightstar-8ca3eea7.adsl.mgts.by] has quit [Client closed the connection] |
20:55 | | crem [moo@Nightstar-8ca3eea7.adsl.mgts.by] has joined #code |
21:05 | < AbuDhabi> | Guys, how do I use DCC with irssi? |
21:05 | < Namegduf> | The normal way. |
21:05 | <@TheWatcher> | /help dcc will give you a breakdown of options |
21:05 | < Namegduf> | /help dcc |
21:05 | < Namegduf> | Yeah. |
21:06 | <@TheWatcher> | /dcc send -passive Someone /path/to/file for example |
21:08 | < AbuDhabi> | Thanks. I wanted to receive, but thanks anyway. It works! |
21:11 | < AbuDhabi> | Where does it receive to, by default? |
21:12 | <@TheWatcher> | ~/ |
21:13 | <@TheWatcher> | /set dcc_download_path will tell you if it's different, but that's the default |
21:13 | < AbuDhabi> | This will do, for now. |
21:16 | | Attilla [The.Attilla@FBC920.92E3D3.F76883.99588C] has quit [Client closed the connection] |
21:16 | | Attilla_ [The.Attilla@FBC920.92E3D3.F76883.99588C] has joined #code |
21:22 | | Attilla_ [The.Attilla@FBC920.92E3D3.F76883.99588C] has quit [Client closed the connection] |
21:23 | | Attilla [The.Attilla@FBC920.92E3D3.F76883.99588C] has joined #code |
21:23 | | mode/#code [+o Attilla] by Reiver |
21:25 | | Attilla [The.Attilla@FBC920.92E3D3.F76883.99588C] has quit [Connection reset by peer] |
21:25 | | Attilla_ [The.Attilla@FBC920.92E3D3.F76883.99588C] has joined #code |
21:26 | | Attilla_ [The.Attilla@FBC920.92E3D3.F76883.99588C] has quit [Connection reset by peer] |
21:26 | | Attilla [The.Attilla@FBC920.92E3D3.F76883.99588C] has joined #code |
21:26 | | mode/#code [+o Attilla] by Reiver |
21:27 | | Derakon[AFKAgain] is now known as Derakon |
21:33 | | * Vornicus ponders procedural generation of certain kinds of buildings. |
21:50 | | crem [moo@Nightstar-8ca3eea7.adsl.mgts.by] has quit [Client closed the connection] |
21:56 | | crem [moo@Nightstar-8ca3eea7.adsl.mgts.by] has joined #code |
22:14 | <@Attilla> | It'd be like Diablo! :3 |
22:15 | <@Attilla> | Use a genetic algorithm! |
22:16 | <@Vornicus> | Attilla: Diablo... in malls and airports? |
22:16 | <@Attilla> | Well just replace like a demon with a security guard, and so forth. |
22:17 | <@Vornicus> | Wel, the thing about Diablo vs this is that in Diablo you don'treally have a large-scale architecture to worry about. |
22:17 | <@Vornicus> | Airports, the first thing you need to think about is "where are the planes?" |
22:17 | <@Attilla> | I think the problem with using procedural generation is that you'll need them to react to the site you are planning to place it upon, otherwise the building will be planned ex nihilo |
22:20 | <@TheWatcher> | ... sounds like Manchester Airport... |
22:21 | < Namegduf> | Haha. |
22:23 | <@Vornicus> | Well one of the nice things about airports is that you kind of /can/ plan ex nihilo - to build an airport you already need a square mile or two of flat ground. |
22:25 | < AbuDhabi> | The Iroquis have now officially discovered and colonized the Old World. |
22:27 | < AbuDhabi> | In Spain, no less. :D |
22:36 | < AbuDhabi> | Time to quit while I'm ahead. Struggling against the errors I made when I was just starting to get a handle on the interface is not fun. 30% inflation. :/ |
22:37 | <@Vornicus> | AbuDhabi: What game? |
22:40 | < AbuDhabi> | Europa Universalis 2. |
22:40 | <@Vornicus> | aha |
22:44 | < simon`> | the only constraint in Diablo is that you can't have two areas in the same location. |
22:49 | <@Vornicus> | Indeed. |
22:50 | < Rhamphoryncus> | Vornicus: I've seen procedural generation of an office building before. Completely lacked any usability, which was a major weakness |
22:52 | <@TheWatcher> | Was called "almost every office level of F.E.A.R"?~ |
22:56 | <@Attilla> | It might work better if there were specific requirements noted to put limits to the procedurality, rather than just lots of rooms and corridors all together |
22:59 | | Attilla [The.Attilla@FBC920.92E3D3.F76883.99588C] has quit [Client closed the connection] |
22:59 | | Attilla [The.Attilla@FBC920.92E3D3.F76883.99588C] has joined #code |
22:59 | | mode/#code [+o Attilla] by Reiver |
23:02 | | * Alek recalls the procedural generation of the Chrysler Building maps in Parasite Eve. >_> |
23:02 | < Alek> | so so simplistically sucky. |
23:05 | <@Vornicus> | Rham: you've seen Introversion's "It's All In Your Head..." series, right? |
23:06 | < Rhamphoryncus> | nope |
23:06 | <@Vornicus> | Procedurally generated terrain, cities, buildings, floor plans. Though the floor plans are kind of not quite right. |
23:08 | | Attilla [The.Attilla@FBC920.92E3D3.F76883.99588C] has quit [Ping timeout: 121 seconds] |
23:08 | | * Alek hasn't even heard of that. |
23:08 | | Attilla [The.Attilla@FBC920.92E3D3.F76883.99588C] has joined #code |
23:09 | | mode/#code [+o Attilla] by Reiver |
23:09 | < Alek> | speaking of procedural generation |
23:09 | < Alek> | how did Hellgate: London look? |
23:09 | <@Attilla> | It looked pretty good I feel iirc |
23:10 | < Alek> | too bad it's dead. I wanted to try it. |
23:10 | < Alek> | oh, speaking of procedural generation, who plays Spelunky? |
23:11 | < Alek> | I hate that the release version changed bombs so you can no longer just toss them into a corner if you're standing there - they bounce, and far. |
23:12 | < Alek> | dropping them ALSO rolls them a distance. -_- |
23:13 | | SmithKurosaki [Smith@Nightstar-e2478917.cable.rogers.com] has quit [[NS] Quit: I'm out, there's something else to do] |
23:14 | < Alek> | and unrelated to the bombs, my least favorite part of the generation: putting a closed-off area on the top level, behind a shop. you can't bomb up from below, and if you try to bomb through the shop, the shopkeep comes after you. -_- |
23:15 | | Orthia [Orthianz@Nightstar-31ee59e6.xnet.co.nz] has quit [[NS] Quit: ] |
23:16 | | SmithKurosaki [Smith@Nightstar-e2478917.cable.rogers.com] has joined #code |
23:17 | | Attilla [The.Attilla@FBC920.92E3D3.F76883.99588C] has quit [Ping timeout: 121 seconds] |
23:18 | | Attilla [The.Attilla@FBC920.92E3D3.F76883.99588C] has joined #code |
23:18 | | mode/#code [+o Attilla] by Reiver |
23:20 | | Attilla_ [The.Attilla@FBC920.92E3D3.F76883.99588C] has joined #code |
23:20 | | Attilla [The.Attilla@FBC920.92E3D3.F76883.99588C] has quit [Connection reset by peer] |
23:20 | | Attilla_ is now known as Attilla |
23:21 | | SmithKurosaki [Smith@Nightstar-e2478917.cable.rogers.com] has quit [[NS] Quit: Leaving] |
23:22 | <@Derakon> | Output from my raytracer's sampling-based normal calculation: http://derakon.dyndns.org/~chriswei/temp2/out.png |
23:22 | <@Derakon> | That is supposed to be a sphere...but it's getting the normals wrong for some reason. |
23:23 | | * AbuDhabi is tired, and this thing isn't cooperating. |
23:24 | | SmithKurosaki [Smith@Nightstar-e2478917.cable.rogers.com] has joined #code |
23:25 | < AbuDhabi> | I want to display a string variable from the code side of the page. Trying to access it from the markup side leads to a protection level error. Trying to put it somewhere on the markup side from the code side leads to objects mysteriously not existing. |
23:25 | <@Derakon> | You can't just do "print $foo" or something? |
23:27 | < AbuDhabi> | I'm trying to do just that. |
23:27 | < AbuDhabi> | Anyone familiar with ASP.NET? |
23:28 | <@Derakon> | Oh hey, reducing the precision with which I try to nail down the exact boundary of the sphere gave me a nicer result. |
23:33 | <@Derakon> | ...tsk. Doesn't seem to have transferred to the mandelbulb though. :\ |
23:42 | < AbuDhabi> | I think the problem is that the asp:Label is within an asp:Repeater, and it doesn't show up as a separate component. |
23:43 | < AbuDhabi> | The workaround is easy enough, by putting the asp:Label in the Content page rather than the User Control. |
23:43 | < AbuDhabi> | Jeez. This is becoming a mess. |
23:44 | < AbuDhabi> | I have a Master Page, with Web Parts Zones in it. The one Placeholder field is filled with Content pages which use User Controls I write in separate files. |
23:45 | < AbuDhabi> | It somehow works, and somehow looks reasonably pretty. |
--- Log closed Sun Nov 29 00:00:00 2009 |