code logs -> 2009 -> Wed, 04 Mar 2009< code.20090303.log - code.20090305.log >
--- Log opened Wed Mar 04 00:00:04 2009
00:08
<@gnolam>
Mmm, mockups.
00:13 AnnoDomini [~farkoff@Nightstar-29242.neoplus.adsl.tpnet.pl] has quit [Quit: There will come a time when diplomacy and tact will prove to be useless and your hand must be raised instead. This challenge prepares you to face another human, look him in the eyes, and know you may have to kill him.]
00:34 * Reiv decides to just jot down the current semi-promising formula, and work on it later. The whole Skill thing is interesting. Equally interesting would be implementing something akin to Capacity.
00:46 Reiv [~82d94c4d@Nightstar-29731.dsl.in-addr.zen.co.uk] has quit [Quit: CGI:IRC (EOF)]
00:47 Reiv [~82d94c4d@Nightstar-29731.dsl.in-addr.zen.co.uk] has joined #Code
00:48
<@Derakon>
Okay, new process.
00:49
<@Derakon>
When you click the "send scores" button, you're asked for your forum credentials. They're sent to the server. The server sends you a key, which is your forum name plus a randomly-generated string.
00:49
<@Derakon>
You save this key and send it with all of your future requests. The server looks up the key in the database to get your forum ID.
00:50
<@Derakon>
That way forum credentials don't have to be stored client-side.
00:53 You're now known as TheWatcher[T-2]
00:53
<@Derakon>
Night, TW.
00:54
< TheWatcher[T-2]>
So, essentially, a session key >.>
00:55
< TheWatcher[T-2]>
You might want to do some extra checks on it - partial ip checks, or the like - to try and cut down on spoofing or key capturing
00:58
<@Derakon>
Given that this is for a nonessential feature, I'm going to leave it fairly simple for now.
01:00
<@Derakon>
The main goal is to not have to store forum credentials in plaintext on the user's computer.
01:00 somnolence [~somnolenc@Nightstar-5762.hsd1.ca.comcast.net] has quit [Connection reset by peer]
01:00
<@Derakon>
Since I could easily see e.g. siblings causing trouble on a shared computer that way.
01:01 somnolence [~somnolenc@Nightstar-5762.hsd1.ca.comcast.net] has joined #code
01:03 You're now known as TheWatcher[zZzZ]
01:04
< Reiv>
Derakon: So don't store them plaintext.
01:05
< Reiv>
Not that encryption is /much/ better, given it can be cracked, but at this point you've got the 'no system will be hackproof' thing going on anyway.
01:05
<@gnolam>
Go go programmer's art: http://www.cyd.liu.se/~torha229/RadiaX/playerview-mockup.jpg
01:06
<@Derakon>
They're already not stored in plaintext. >.>
01:06
<@Derakon>
(As the key system is complete)
01:06
<@Derakon>
Hey nice, Gnolam.
01:06
<@Derakon>
Oh, that's RaDOS, not GlaDOS.
01:14 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has quit [Quit: <Insert Humorous and/or serious exit message here>]
01:16 Reiv [~82d94c4d@Nightstar-29731.dsl.in-addr.zen.co.uk] has quit [Quit: CGI:IRC (EOF)]
01:19
<@gnolam>
(Needed a quick mockup for the design document)
01:44
<@Derakon>
Okay!
01:44
<@Derakon>
Just need to revamp a few more patterns and beta 7 will be done.
01:51 * Derakon makes the mildly important discovery that courses that make use of high-speed bullets are incredibly abusable with the deflector.
01:51
<@Derakon>
To the tune of getting a multiplier of 120 on the first loop.
01:51
<@Derakon>
Now I have to decide if this is a bug or not.
01:52
<@Derakon>
(Problem is that the longer the bullets stay onscreen, the more sparks they make; each highspeed bullet flying right at the player's ship can make many sparks before disappearing and they're being fired every frame)
01:53
<@Derakon>
(1143 sparks collected~)
02:37 gnolam [lenin@Nightstar-1382.A163.priv.bahnhof.se] has quit [Quit: Z?]
02:43 * Derakon eyes his changelist.
02:46
<@Derakon>
% sh makeapp.sh
02:58 * Derakon twitches.
02:58
<@Derakon>
No wonder I could never find where .fusilladeconfig.txt was being stored!
02:59
<@Derakon>
The directory doesn't show up in cmd!
02:59
<@Derakon>
If you hit "cd App<tab>" then it'll autocomplete "Application Data" for you, but if you do 'dir', it's not there.
02:59 * Derakon froths quietly.
02:59
<@McMartin>
It's a hidden dir
02:59
<@Derakon>
Oh, fantastic, and if you go into it and try to list contents, you get an error.
02:59
<@Derakon>
Fuck you, Windows!
02:59
<@McMartin>
Um
02:59
<@ToxicFrog>
People actually use cmd?~
02:59
<@McMartin>
That's new.
02:59
<@Vornicus>
haet
03:00
<@McMartin>
My Windows box is CDed to Application Data *right now*.
03:00
<@Derakon>
McM: just got a "File Not Found" error.
03:00
<@Derakon>
Must be a Vista thing then.
03:00
<@McMartin>
... that means the directory is empty.
03:00
<@McMartin>
Or that all files in it are hidden
03:00
<@McMartin>
type "start ." and get it open in Explorer.
03:01
<@Derakon>
Access denied!
03:01
<@Derakon>
Can't even access my own users' stuff. Sheesh.
03:01
<@McMartin>
... yeah, that's a Vista thing
03:02
<@McMartin>
That said, if I'm mcmartin and I say ls ~bob/.ssh2, you'd better believe that doesn't work
03:02
<@Derakon>
Oh, sure, that's expected.
03:02
<@Derakon>
But not having access to your own files is novel.
03:02
<@McMartin>
How is this not exactly the same thing?
03:02
<@McMartin>
Are you sure that's actually you~
03:02
<@McMartin>
Run cmd.exe as admin and see if that persists
03:03
<@Derakon>
Ehh, I don't really care all that much.
03:04
<@McMartin>
The other wrinkle is that Vista probably uses AD for everything, which means it's the equivalent of trying to access "another user's" stuff via a network share, even locally
03:04
<@McMartin>
Which means without AD credentials even root won't get in.
03:06
< somnolence>
...
03:06
<@McMartin>
somnolence: This is what you want.
03:06
<@McMartin>
And it is, in fact, what NFS and friends do.
03:07
<@McMartin>
The fact that you have root on *your* box doesn't give you free reign on every network share you mount.
03:07
< somnolence>
linux perms are nice
03:07
<@McMartin>
Raw POSIX is kind of weak, really
03:07
<@McMartin>
ACLs are too fine-grained to deal with without massive headaches.
03:08
< somnolence>
+selinux
03:08
<@McMartin>
This is all why we pay IT people.
03:10
<@Derakon>
...damn, I don't know where this file would be on XP.
03:10
<@Derakon>
On Vista it's at \Users\username\AppData\Roaming.
03:10
<@Derakon>
Beta 7 is not backwards-compatible when it comes to config and score files.
03:12
< somnolence>
local settings?
03:12
<@Derakon>
I don't understand the question.
03:13
<@ToxicFrog>
/Documents and Settings/username/Local Settings/
03:14
<@Derakon>
Danke.
03:14
<@Derakon>
Do you see .fusilladeconfig.txt there?
03:14
<@Derakon>
Just to make certain.
03:14
< somnolence>
I was just offering up somewhere else to check...
03:15
<@Derakon>
Ahh. I don't know Windows at all well myself.
03:16
<@McMartin>
If you're using the APPDATA variable, on XP that should be /Documents and settings/username/Application Data/
03:17
<@Derakon>
Gotcha.
03:17
< somnolence>
(I assumed you already checked that =P)
03:18
<@Derakon>
I can't check it. I'm on Vista.
03:18
<@Derakon>
Anyway, I desperately need food. So while beta7 uploads, BRB~
03:18 Derakon is now known as Derakon[AFK]
03:29
<@Derakon[AFK]>
Potstickers on the oven. Beta 7 download: http://www.aegis-soft.com/games/fusillade/download/fusillade-beta7-win.zip and http://www.aegis-soft.com/games/fusillade/download/fusillade-beta7-osx.tgz
03:30
<@Derakon[AFK]>
Still not back yet.
03:36 Derakon[AFK] is now known as Derakon
03:42
<@Reiver>
Derakon: Obtaining it now.
03:42
<@Derakon>
Cool.
03:42
<@Reiver>
Will let you know if it explodes hilariously.
03:42
<@Derakon>
I could use a Windows user to test the "connected to the internet" stuff. >.>
03:42
<@Reiver>
Will do so in ~17 mins.
03:43
<@Reiver>
Which is when it finishes. ¬¬
03:43
<@Derakon>
Righto.
03:46
<@ToxicFrog>
Up and running, how do I test it?
03:46
<@Derakon>
You'll need an Aegis forum account.
03:46
<@Derakon>
http://www.aegis-soft.com/forum
03:47
<@Derakon>
Then go to Options -> Config and click on "send scores".
03:48
<@Derakon>
Also, there's no scores in the database yet. ¬.¬
03:49
<@ToxicFrog>
Pfft
03:50
<@ToxicFrog>
Well, if I enter bogus credentials, it successfully informs me that auth was rejected by the forums
03:50
<@Derakon>
You can thank TW for that.
03:50
<@Derakon>
He wrote the Perl module that interfaces with the forum DB.
03:50
<@ToxicFrog>
Also, my god I am terrible at this game ;.;
03:50
<@Derakon>
Hee.
03:51 Vornicus [~vorn@Admin.Nightstar.Net] has quit [Quit: ]
03:54
<@Derakon>
Changelist updated: http://www.aegis-soft.com/forum/viewtopic.php?f=3&t=2&p=2
03:56 * Reiver throws a non-stressed McM at it.
03:57 * Reiver waits to see if Derakon used int or double for his high scores. ¬¬
03:57
<@Derakon>
Depends on the field.
03:57
<@Derakon>
Survival time is a double.
04:01 * McMartin has his own gaming project for time off now
04:02
<@Derakon>
The DS retro game?
04:03
<@McMartin>
Nah, it's IF stuff
04:03 * McMartin has FotH notes now
04:04
<@ToxicFrog>
You know what I should do? Kick myself in the ass and get back to work on either Spellcast or ss1edit.
04:04
<@ToxicFrog>
Since I now have proper GTK bindings for the former and a proper (de)serializer for the latter.
04:10
<@Derakon>
Hrm...TF, did you finish a game of Fusillade?
04:10
<@Derakon>
I don't see your score in the scores list. :\
04:10
<@ToxicFrog>
I didn't actually register an account
04:10
<@Derakon>
Oh.
04:10
<@Derakon>
Oh, well.
04:10
<@ToxicFrog>
And I'm not sure I finished, either
04:10
<@Reiver>
OK, here gos.
04:10
<@ToxicFrog>
I made it to the end of the second loop...I think?
04:10
<@ToxicFrog>
There was a big explosion, I don't know if that was me winning or running out of lives.
04:10
<@Derakon>
Every time you get a score tally you finish a loop.
04:10
<@Derakon>
Heh.
04:10
<@Reiver>
Spellcast looked fun.
04:10
<@Derakon>
Big explosions are losing a life.
04:11
<@ToxicFrog>
No, like, screen-filling
04:11
<@Derakon>
When you run entirely out of lives you get a big Game Over text plastered across the screen.
04:11
<@Derakon>
Yes, I know.
04:11
<@Reiver>
What's ss1edit?
04:11
<@Derakon>
The screen-filling explosion is "you died."
04:11
<@Derakon>
Normal explosions are just getting hit. You can get hit several times per life.
04:11
<@Reiver>
yaybug
04:12 * Reiver spams Der's PM.
04:12
<@Derakon>
Got it. Damn.
04:12
<@Derakon>
Oh hoh.
04:12
<@Derakon>
You didn't delete your config file.
04:12
<@Derakon>
Scores file, rather.
04:12
<@Derakon>
The scores format changed to accomodate per-loop scoring, and unfortunately the old files are incompatible.
04:13
<@Derakon>
This is mentioned in the changelist.
04:13
<@ToxicFrog>
....
04:13
<@Reiver>
Eh?
04:13
<@Reiver>
I deleted it entirely.
04:13
<@ToxicFrog>
So, on a whim, I type "spellcast client server" into google
04:13
<@ToxicFrog>
http://www.funkplanet.com/spellcast/wxSpellcast.exe
04:14 mode/#code [-o ToxicFrog] by ToxicFrog
04:14 mode/#code [+o ToxicFrog] by ToxicFrog
04:14
<@ToxicFrog>
http://www.funkplanet.com/spellcast/
04:14
<@Derakon>
Reiver: .fusilladescores.txt is gone?
04:14
<@Derakon>
And it still breaks?
04:14
<@ToxicFrog>
Anyone up for a quick game?~
04:14
<@Reiver>
Derakon: Was it in the main folder, or are you doing evil things with Appdata?
04:14
<@Reiver>
TF: Me!
04:14
<@Reiver>
I'll lose.
04:15
<@Reiver>
Me!
04:15
<@Reiver>
:P
04:15
<@Derakon>
The changelist has the gory details. http://www.aegis-soft.com/forum/viewtopic.php?f=3&t=2&p=2
04:15
<@Derakon>
But in short, Appdata.
04:15
<@Derakon>
Sure, I'll give it a shot.
04:15
<@Derakon>
I don't remember the spell list at all.
04:15
<@Reiver>
Okay. So beta6 used it too? Hoo boy. *goes digging*
04:16
<@Derakon>
All the betas used it.
04:16
<@ToxicFrog>
There's a quick spell-list built in, although it doesn't work as well as the X11 version
04:16
<@Derakon>
It's just that beta7 changed the format.
04:16
<@ToxicFrog>
Give me a moment and I'll upload the real documentation
04:16
<@Derakon>
What's wrong with the built-in one?
04:16
<@ToxicFrog>
Sorts only by first gesture
04:16
<@Reiver>
TF: Server?
04:17
<@ToxicFrog>
In xspellcast, it would sort by first, last, or name depending on what mouse button you used
04:17
<@Derakon>
I'll work with the built-in for now.
04:17
<@Derakon>
Since I'll probably lose horribly anyway~
04:17
<@ToxicFrog>
orias.homeip.net 7007
04:17
<@Derakon>
Mind you, descriptions of the spells would also be handy. ¬.¬
04:17
<@ToxicFrog>
Yeah, that's what I was going to upload
04:17
<@ToxicFrog>
Although I can also fill you in from memory
04:18
<@Derakon>
Connection timed out.
04:18
<@Derakon>
"Connecting to Connecting to %s...(%d second%s)...(7 seconds)"
04:19
<@ToxicFrog>
http://www.funkyhorror.net/toxicfrog/projects/spellcast/SPELLCAST.6.txt
04:19
<@ToxicFrog>
Hmm
04:19
<@ToxicFrog>
Give me a moment, I haven't portforwarded to this machine in months
04:23
<@ToxicFrog>
Argh, what the hell
04:24
<@Derakon>
I'd forgotten that elementals are Doomsday Machines.
04:25
<@ToxicFrog>
Maybe one of you should host?
04:25
<@Derakon>
derakon.dyndns.org:7007
04:26
<@Derakon>
I'm hooked up directly to the Net so there's no forwarding to worry about.
04:26
<@ToxicFrog>
Yay
04:26
<@ToxicFrog>
Reiver: come, join us
04:27
<@Reiver>
hm, timing out
04:28 * Derakon facepalms.
04:30 * ToxicFrog facebulkheads
04:30 * Reiver just siiiiigh, makes a note to try and fiddle the router settings. Again.
04:31
<@ToxicFrog>
Why is your router futzing with outgoing TCP traffic ;.;
04:31
<@ToxicFrog>
(also, ss1edit is the set of System Shock editing tools I've been working on intermittently for the past few years)
04:32
<@MyCatVerbs>
ToxicFrog: because it sucks? Lots do.
04:33
<@ToxicFrog>
Fair point
04:34 * Derakon ponders a Spellcast card game.
04:34
<@Derakon>
It wouldn't be too hard to make.
04:34
<@ToxicFrog>
How would it work?
04:34
<@Derakon>
You'd need, say, 8 of each gesture, a cheat sheet for spells, and a set of tokens.
04:35
<@Derakon>
Each turn, everyone selects two cards in secret, then they simultaneously flip them over.
04:35
<@Derakon>
Then you resolve spells, monsters, etc.
04:35
<@Derakon>
You have a track of gestures you've made in the past.
04:35
<@Derakon>
As cards fall off the end of the track, they go back into your hand.
04:35
<@Derakon>
In the case of Time Stop, you'd insert the cards face-down (since nobody sees what you did), and only reveal them when they complete spells.
04:36
<@ToxicFrog>
Aah
04:36
<@ToxicFrog>
So, the same game, just using cards instead of pen and paper
04:36
<@Derakon>
Basically, yes.
04:37
<@Derakon>
Practical limitations would prevent you from, say, pointing at things with both hands ten times in a row, but otherwise it'd be basically the same.
04:39
<@Derakon>
Eee, one of the TASVideos guys posted a high score. <3
04:39
<@ToxicFrog>
Woot
04:40 * ToxicFrog gnaws on Reiver
04:40
<@ToxicFrog>
Derakon: want to just go ahead with the game and Reiv can join when able?
04:40
<@Derakon>
Sure, why not.
04:48 * Reiver groans.
04:48
<@Reiver>
Derakon: Where is this highscore file kept again?
04:49
<@Derakon>
Check the forum post: http://www.aegis-soft.com/forum/viewtopic.php?f=3&t=2&p=2
04:53
<@Derakon>
Hmm, a Spellcast card game would suffer the same problem that Bang does.
04:53
<@Derakon>
I.e. you can lose before the game ends.
04:54
<@Reiver>
Same problem in the paper one.
04:59
<@ToxicFrog>
Bang?
04:59
<@Derakon>
That was just mean.
05:00
<@Derakon>
Bang is a Wild-West style Mafia game.
05:00
<@Derakon>
Well, no voting.
05:00
<@ToxicFrog>
Hey, it was the fastest way to do a bunch of damage~
05:00
<@ToxicFrog>
It just happened to also be stylish.
05:00
<@ToxicFrog>
And cruel.
05:00
<@Derakon>
But you have a known sheriff, and a bunch of other unknowns who could be deputees, bandits, or renegades.
05:00 * Derakon facepalms.
05:00
<@ToxicFrog>
And it seems to have locked solid when I told it to save the log.
05:00
<@Derakon>
I should've had antispell ready to go.
05:00
<@ToxicFrog>
Counterspell.
05:01
<@ToxicFrog>
Well, depends
05:01
<@ToxicFrog>
Antispell me before I finished casting it, or counterspell yourself on the turn I finished
05:01
<@Derakon>
Antispell, because I technically knew when invisibility ends.
05:01
<@ToxicFrog>
The former would be more reliable, as you can hit me with it as I come out of invis and scramble anything I was working on while cloaked.
05:01 * ToxicFrog nods
05:02
<@Derakon>
Practically speaking, I was flailing.
05:02
<@Derakon>
(And I knew you like invisibility, too! And haste!)
05:02
<@ToxicFrog>
I note that there's no way that move works without invisibility or something similar; if you could have seen the gestures, ()<> and I either abort or take 10 damage
05:03
<@Derakon>
Well anyway, looks like you don't have to make your own version of Spellcast.
05:03
<@ToxicFrog>
This doesn't render that project defunct; my interface is much better than this.
05:03
<@ToxicFrog>
But it does reduce its priority.
05:03 * Derakon nods.
05:03
<@Reiver>
Derakon: What was wrong with wavecannon? I'd always been fond of it.
05:04
<@Derakon>
If you park yourself right in front of the emitter you rack up loads of points at no risk.
05:04
<@Derakon>
Until I can figure out how to patch it, it's out.
05:04
<@Derakon>
And I didn't want to have it delay the beta.
05:05
<@Reiver>
Oh.
05:05
<@Reiver>
Hum.
05:06
<@ToxicFrog>
Let's see if I can build the linux version.
05:06
<@Reiver>
Put a pretty flower of too-fast-to-inflect bombs circling it.
05:06
<@ToxicFrog>
It uses wx, so all bets are off~
05:06
<@Derakon>
That could work...
05:07
<@McMartin>
Wait, I thought that existed back when SDL Spellcast was still being written
05:07
<@ToxicFrog>
Did it?
05:07
<@McMartin>
Because it was written in wx and thus was merely a compiler exercise when we tried to build it ourselves
05:08
<@McMartin>
Well, *a* wxSpellcast did.
05:08
<@ToxicFrog>
An unfinished Java version did, but I don't recall ever finding this, or at least not in usable form
05:08
<@McMartin>
relink?
05:08
<@ToxicFrog>
This one totally doesn't build for me, though:
05:08
<@ToxicFrog>
Client.cpp: In member function 'void Client::OnSockEvent(wxSocketEvent&)':
05:08
<@ToxicFrog>
Client.cpp:134: error: request for member 'AsChar' in 'MemBuf::as_str(size_t, size_t) const(0u, -1u).wxString::<anonymous>.wxStringBase::c_str()', which is of non-class type 'const wxChar*'
05:08
<@McMartin>
It was, at the time, Windows binary only, wx-based, source available but noncompiling.
05:09
<@ToxicFrog>
http://www.funkplanet.com/spellcast/
05:09
<@McMartin>
Because, you know, wc
05:09
<@McMartin>
wx
05:09
<@ToxicFrog>
This is windows and OSX
05:09
<@ToxicFrog>
And there's a Makefile.unix, but, wx
05:09
<@McMartin>
Yeeeah
05:09
<@McMartin>
This doesn't look like the page I remember
05:09
<@McMartin>
But I do remember a wxSpellcast
05:09
<@McMartin>
Also, wx stops working once 10.6 is released~
05:10
<@ToxicFrog>
Joy~
05:10
<@ToxicFrog>
Anyways, I'll keep this around to take the edge off
05:10
<@Derakon>
What does 10.6 do?
05:10
<@ToxicFrog>
But I won't stop working on spellcast-net
05:10
<@McMartin>
Derakon: Removes the Carbon libraries
05:10
<@Derakon>
...oh.
05:10
<@McMartin>
This will also break GTK and Qt, but not SDL~
05:10
<@ToxicFrog>
(incidentally, the thing I did that was just mean to Der was come out of invisibility and hit him with Lightning Bolt from one hand and Fireball from the other two turns later)
05:10
<@McMartin>
In other news, TF, your dungeon is broken too
05:10
<@Derakon>
Yay SDL, too primitive to break~
05:11
<@McMartin>
Well, it *could* have
05:11
<@McMartin>
But they have a Quartz backend.
05:11
<@Derakon>
(That is, Lightning Bolt and Fireball on the same turn, two turns later)
05:11
<@Derakon>
When I had, uh, six health left.
05:11
<@ToxicFrog>
...oh, right
05:11
<@ToxicFrog>
I forgot about the monster damage
05:11
<@ToxicFrog>
I had it in my head that you had nine
05:11
<@Derakon>
Heh.
05:12
<@Derakon>
I made a number of lesser and greater foulups that game.
05:12
<@ToxicFrog>
I could have dualcast Cause Serious Wounds and won a turn earlier~
05:12
<@Derakon>
Including failing to notice that one of my planned spells was blocked by a two-handed portion of another, and then starting two spells on the wrong hands.
05:12
<@Derakon>
And, of course, letting you go invisible.
05:12
<@ToxicFrog>
I was rather proud of that, actually
05:13
<@ToxicFrog>
Counterspelling you as you cast Invisiblity, and then turning it into an Invisibility of my own
05:13 * Derakon shakes his fist.
05:13
<@Reiver>
What does wx stand for?
05:13
<@ToxicFrog>
"library for stress testing compiler error reporting"
05:13
<@Derakon>
Nice.
05:13
<@ToxicFrog>
(notionally, it's a GUI library and I have no idea what, if anything, it stands for)
05:14
<@ToxicFrog>
McMartin: I used Terrible Vermin twice, right?
05:14
<@McMartin>
Yeah.
05:14
<@ToxicFrog>
I noticed that, but it was 4am
05:14
<@ToxicFrog>
So
05:14
<@McMartin>
Not that it matters; the merged dungeon fills all squares
05:14
<@McMartin>
I may have to drop some items to make room for the bells, anyway
05:14
<@Reiver>
Terrible Vermin whut?
05:14
<@Derakon>
Presumably McM's LP.
05:14
<@ToxicFrog>
Reiver: McMartin is doing an LP of Lock and Key
05:14
<@Reiver>
Oh. Cool.
05:15
<@Derakon>
Link?
05:15
<@Reiver>
And TF helped?
05:15
<@ToxicFrog>
http://forums.somethingawful.com/showthread.php?threadid=3088209&pagenumber=4
05:15
<@McMartin>
TF voted an entire dungeon in.
05:15
<@ToxicFrog>
Audience interaction has us designing deathtrap dungeons.
05:15
<@ToxicFrog>
I submitted one.
05:15
<@ToxicFrog>
And then revised it twice because it was buggy and then fell asleep.
05:18 * Derakon gets to the end of the prologue, collapses laughing.
05:18
<@Derakon>
(Also, Manxome Bromide?)
05:18
<@ToxicFrog>
McMartin: I thought voting in entire dungeons was expected?
05:18
<@McMartin>
Kinda
05:18
<@Reiver>
TF: You're MB?
05:19
<@ToxicFrog>
(isolation between SA and elsewhere incarnations)
05:19
<@ToxicFrog>
Reiver: no, I'm ToxicFrog
05:19
<@McMartin>
No, I'm MB. He's TF.
05:19
<@Reiver>
Ah, good move
05:19
<@McMartin>
TF: It'll be a lot more obvious once Boldo actually gets into action
05:19
<@McMartin>
But the votes are going to be on ordering constraints more than full dungeons.
05:19
<@ToxicFrog>
Aah
05:19
<@McMartin>
Boldo is... extremely stateful
05:20
<@ToxicFrog>
Ooo
05:20 * ToxicFrog gets out his graph generator
05:21
<@McMartin>
By which I mean, by the end there will be about a dozen lines of new text and a screen or two of his evinced inventory and how we know we can affect it.
05:21
<@McMartin>
This is also why I'm deliberately having early dungeons suck, so that he can show off~
05:21
<@Derakon>
"Our first deathtrap is a WALL OF TEXT, demonstrated below!"
05:21
<@Derakon>
Hee.
05:21
<@ToxicFrog>
I wonder if it would be useful to treat him as a DFA where the edges are traps
05:22
<@McMartin>
Not really. You'll see.
05:22
<@Derakon>
I like how the INVINCIBLE GLADIATOR costs less than the FLOOR-SIZED TRAP DOOR.
05:22
<@ToxicFrog>
Anyways, automata aside, I eagerly await the next update and our humiliating failure.
05:23
<@McMartin>
Wait until we start actually buying them~
05:25
<@Derakon>
I nominate an entire dungeon filled solely with attack dogs.
05:26
<@Derakon>
A1->A4->D4->D1->C1->C3->B3->B1->A1.
05:26
<@McMartin>
You can't duplicate traps.
05:26
<@Derakon>
...awww.
05:26
<@McMartin>
You also, as you will see shortly, be subject to additional constraints.
05:26
<@Derakon>
Hmm...so I'm guessing that the way this works is that our escapee will abuse the various traps to let him deal with others.
05:27
<@Derakon>
E.g. facing an INVINCIBLE GLADIATOR, he steals the trident and net, which he can then use to jam the CLOSING WALLS TRAP.
05:27
<@McMartin>
At which point we'll be seeing a lot of votes for "right, THE PURPLE MIST goes after the Gladiator".
05:27
<@McMartin>
In fact, we're already seeing a bit of that
05:28
<@McMartin>
At the moment, though, "No, you idiots, THE PURPLE MIST goes before the Gladiator so he fights unarmed" is winning.
05:28
<@Derakon>
Hee.
05:28
<@McMartin>
At any rate, I have an email to send, and a rent check to pay, and then I'll get cracking on the second dungeon of the LP.
05:29 * ToxicFrog procures (cons bagel (cons cheddar pepper)) for midrats
05:34 * Reiver siiiigh, puts aside the textbook. Checks his timetable for a spot he can make an application to withdraw from one of his papers.
05:35
<@ToxicFrog>
Hmm.
05:35
<@ToxicFrog>
Problem: the game client needs to be able to respond to events from both the network and the UI.
05:35
<@Reiver>
Maybe next year, Artifical Intelligence Techniques. ;.;
05:35 * Reiver simply does not have the Java-fu needed.
05:35
<@ToxicFrog>
Possibly solution #1: select() with timeout on the network, while(gtk_events_pending()) gtk_main_iteration(); on the UI.
05:36
<@ToxicFrog>
Possible solution #2: run the UI in a seperate thread, talk to it over a socket
05:36
<@ToxicFrog>
(and select() on all of them)
05:36
<@ToxicFrog>
Leaning heavily towards #1 at the moment.
05:39
<@ToxicFrog>
Thoughts?
05:39
<@Derakon>
This is for Spellcast again?
05:39
<@Derakon>
Can't you set a callback when data is received on a socket?
05:40
<@ToxicFrog>
...yes, but it'll never get called if the program is spending all its time in gtk_main()
05:40
<@Derakon>
Why not?
05:40
<@ToxicFrog>
Because code needs to be executed to determine that data has arrived on the socket and dispatch it accordingly, and if the program is in the GTK event loop all the time that code isn't being run.
05:41
<@ToxicFrog>
Unless it's in a seperate thread, in which case we're back to #2 from the other direction.
05:41
<@Derakon>
Wouldn't you be spending some time sleeping in a normal main loop?
05:41
<@Derakon>
I mean, it's "Check for UI events; update game state; display; sleep" as a general rule, yes?
05:42
<@Derakon>
Can't you just insert "Check for socket data" in after the UI events?
05:42
<@ToxicFrog>
Hmm. I was thinking from the point of view of blocking on the sockets rather than explicitly sleeping
05:42
<@Derakon>
But then the UI becomes unresponsive.
05:42 * ToxicFrog checks the luasocket docs
05:42
<@ToxicFrog>
Yes, hence the timeout
05:42
<@Reiver>
Ho hum.
05:43 * Reiver tries to work out how the hell to learn enough java to do the two 3rd year papers that require it.
05:43
<@jerith>
Reiver: Java's easy. Install Eclipse.
05:43
<@ToxicFrog>
Aha
05:43
<@ToxicFrog>
Yes
05:43
<@ToxicFrog>
The client doesn't need multiple sockets, ergo I don't need select
05:44
<@Reiver>
jerith: Ha. You're funny.
05:44
<@ToxicFrog>
So you're right, I can basically go: check for UI events; check for socket data; update UI and client state; msleep(10)
05:44
<@jerith>
Reiver: Feel free to ping me for assistance any time I'm on irc or IM.
05:44
<@Reiver>
If it were that easy I would not be withdrawing from papers over it. >_>
05:44
<@ToxicFrog>
The server has n sockets to worry about, but doesn't have a UI, so it can just select() over them
05:45
<@ToxicFrog>
<jerith> Reiver: Java's easy. <-- aahahahahahahahahahahahahahahaha
05:45
<@Derakon>
Ahh, server's headless instead of being one of the clients?
05:45
<@jerith>
Reiver: What IDE are you using?
05:45
<@ToxicFrog>
The language proper is pretty easy, but to actually use it requires knowledge of a ridiculously huge library
05:45
<@jerith>
ToxicFrog: It's easy at the level Reiver's likely to encounter.
05:45
<@ToxicFrog>
Although it is at least very well documented
05:45
<@jerith>
Once classloaders become an issue...
05:45 * jerith shudders.
05:45
<@Reiver>
My real issue is that about two years ago I sat COMP209: Object Oriented Programming, which taught Java and the concepts of OO programming. Having passed this paper (A B+, it'll do), I was allowed to do my graduate diploma, and waive most paper pre-reqs 'cuz I knew how to program.
05:45
<@ToxicFrog>
Derakon: server is forked from one of the clients.
05:46
<@ToxicFrog>
Runs in a seperate thread.
05:46
<@Derakon>
Ah.
05:46
<@Reiver>
The slight flaw: 1) This was two years ago, and the papers I am doing tend to assume current fluency in it
05:46
<@ToxicFrog>
Seperate thread means seperate VM, so a headless mode would be trivial to implement as well.
05:46
<@jerith>
Reiver: What issues are you running into?
05:46
<@Reiver>
2) I did not do COMP 208: Programming Data Structures, which appears to be the bit where they taught you how to do leaf node trees and binary search trees and and and.
05:47
<@jerith>
Also, is this a proble with /Java/ fluency (which is easily remedied) or /programming/ fluency (which isn't)?
05:47
<@ToxicFrog>
(2) is almost without exception built into the Java standard library, so as long as you know what they do you don't need to know how to implement your own
05:47
<@jerith>
Yeah.
05:47
<@Derakon>
Though it's useful to know this to know when which structure is warranted.
05:47
<@Reiver>
Java, primarily. My coding is rusty from a full year last year of biology, though
05:47
<@ToxicFrog>
That said, this does seem to be a general programming thing, not Java specific; if you don't know how to build a BST, you won't be able to make it in, say, Python any more easily than Java.
05:48
<@Reiver>
So the papers are now telling me to write full complete programs, with file input and output, using leaf trees or whatever to demonstrate our proficiency in constructing search algorathms etc
05:48
<@Derakon>
That sounds like "Don't use the library objects" to me.
05:48
<@jerith>
Well, #code is at your disposal.
05:48
<@Derakon>
Indeed.
05:49
<@Reiver>
And TF: Yeah. I regret not taking that paper (Though at the time I wasn't really able to due to timetable clashes).
05:49
<@jerith>
As long as you realise we hand out fishing rod proxy factory factories instead of fish.
05:49
<@Reiver>
The worst bit: I can't now take it, because 208/209 have been folded into one year long paper... and I can't take it because I already passed 209, which counts as an equivalence. >_>
05:49
<@jerith>
*fishingRodProxyFactoryFactories
05:49
<@ToxicFrog>
Or functions (fishrod -> lake -> fish)
05:50
<@Reiver>
So yeah, I seem to have stuffed up on missing a reasonably fundamental chunk of compsci, and this is now crippling my dealings with higher-level stuff.
05:51
<@Derakon>
Do you have an advisor you could talk this over with?
05:51
<@Derakon>
Maybe let you audit the combined 208/209 course?
05:51 * Reiver finds this immensely frustrating, because he'd been hoping to graduate this year. It's now next year, assuming he can pull some form of self-taught java/data structure skills out of his ass.
05:51
<@Reiver>
Derakon: audit?
05:51
<@Derakon>
Attend without doing coursework.
05:51
<@Reiver>
And, er, what's an Advisor?
05:52
<@Derakon>
You show up at lectures, and do the work that you can do, but you aren't graded.
05:52 * Reiver is just checking nomenclature here. He knows what the word means~
05:52
<@Derakon>
Advisors are faculty who help you figure out how to navigate the courses and deal with prerequisites, as well as figure out how to deal with things when they go wrong.
05:52
<@Reiver>
Oh.
05:52
<@Derakon>
Typically every American college student has an advisor who is also a professor teaching normal courses.
05:52
<@Reiver>
Aha. We don't have those.
05:53
<@jerith>
Derakon: Here, only postgrads have those.
05:53
<@Reiver>
We just go ask administration, who point us at a suitable Professor Bigwig for course advice.
05:53
<@Derakon>
Ahh.
05:53
<@jerith>
Although most faculty are happy to help.
05:53
<@Reiver>
You gotta be postgrad to have that here-- what jerith said
05:53
<@jerith>
Usually one goes to the Head of School or something for that.
05:54
<@Reiver>
Associate Dean, at laest in the science department. (I understand that others have an actual Liason, but.)
05:55
<@jerith>
Speaking of which, does anyone know a good simpler-than-knuth data structures book?
05:55
<@jerith>
Or rather, more-accessible-than-knuth.
05:58
<@jerith>
Did Vorn ever LJ datastructures stuff?
05:58
<@Derakon>
He probably did something, but there's a lot to datastructures.
05:58
<@Derakon>
Did you have a specific one in mind?
06:02 Syloqs-AFH [Syloq@Admin.Nightstar.Net] has quit [Connection reset by peer]
06:05
<@jerith>
http://community.livejournal.com/cs_lectures/ <-- That's the place.
06:05
<@jerith>
We should resurrect it.
06:05
<@jerith>
And I should write some stuff.
06:05
<@jerith>
I don't think there are trees, but there are /some/ data structures.
06:05
<@jerith>
I seem to recall Vorn being really good at explaining that kind of thing.
06:10
<@ToxicFrog>
I've been considering writing some stuff for that comm
06:10
<@Reiver>
Nodes. ;_;
06:10
<@ToxicFrog>
...
06:10
<@Reiver>
Or more to the point, the whole bloody tree thing~
06:10
<@ToxicFrog>
That's, er
06:11
<@ToxicFrog>
It's kind of like the exchange: "What sort of animals did you have in mind?" "Vertebrae"
06:11 * Reiver actually understands the concept, just never got his head around how to code it
06:11 * Reiver finds this annoying, for he hasn't really hit this problem before.
06:11
<@Derakon>
A node is, fundamentally, a chunk of data and directions on how to find more data.
06:12
<@Derakon>
For example, in a linked list, a node is some data and a pointer to the next element in the list (and optionally a pointer to the previous element as well).
06:12
<@Derakon>
In a tree, nodes have pointers to their children.
06:12
<@ToxicFrog>
Derakon Explains It Better.
06:13
<@Reiver>
... okay, I clearly have a problem
06:13
<@Reiver>
Linked lists should not be hard, right?
06:13
<@ToxicFrog>
(more generally, nodes are what you build graphs out of; a node will have some information about the vertex it represents, and references to all the nodes it has edges to. Trees and lists are just special types of graph.)
06:13
<@Reiver>
Conceptually they're easy as pie. But they baffle me as much as trees do.
06:13
<@ToxicFrog>
Linked lists are pretty simple even in C, yes
06:13
<@Derakon>
Okay, what gives you trouble?
06:14
<@Derakon>
Let's see if we can't break this down a bit.
06:14
<@Reiver>
"Okay, I have this pretty diagram of boxes and lines linking the boxes to each other. Er. How do I make that into keywords on a screen?"
06:14
<@ToxicFrog>
If it's implementation specifically causing you trouble, I also recommend upshifting and trying to build one in a high-level language you're comfortable with
06:14
<@Reiver>
Ditto issue with trees.
06:14
<@ToxicFrog>
To make sure you have the concepts solid before you try to translate them into something more restrictive like Java
06:14
<@Derakon>
Ignore trees for the moment.
06:14
<@Derakon>
It's not worth bothering with them until you understand lists.
06:15
<@Derakon>
You know Python?
06:15
<@Reiver>
Only tentatively, really.
06:15
<@Reiver>
Keep meaning to learn it proper, but can't use it at uni so
06:15
<@Derakon>
What languages do you know?
06:15
<@ToxicFrog>
What languages are you comfortable with?
06:15
<@Reiver>
(Will run on uni linux boxen, but not windows)
06:16
<@ToxicFrog>
(carry an SSH client around, use the windows machines as terminals to the linux ones)
06:17
<@Reiver>
(Not much good when you hand it in and they're marking on an XP box, is it?)
06:17
<@ToxicFrog>
(...)
06:17
<@ToxicFrog>
(kill)
06:18
<@Derakon>
That is rather terrible.
06:18
<@Reiver>
(Now, 90% of the time they have linux boxen of their own. But if it's a tutor marking at home, bets are off.)
06:18
<@Reiver>
(Knowing my luck, I'll land on one of the 10%. ¬¬)
06:18
<@Derakon>
I'm writing up a quick bit of pseudocode here. Just a mo.
06:19
<@ToxicFrog>
Here, lab machines come in four flavours (linux, OSX, BSD, and XP), but marking is invariably done on the linux machines before fourth year
06:19
<@ToxicFrog>
(which are remotely accessible)
06:20
<@ToxicFrog>
Reiver: anyways, you never did answer the languages question
06:20
<@Reiver>
Oh, er
06:20 * Reiver digs it up from the buffer
06:20
<@Reiver>
Java is the one I'd learned most of; my biggest error was getting distracted into the Horrible World Of Biology last year instead of keeping up with it. And then failing to realise just how rusty I'd gotten till this week. >_>
06:20
<@Reiver>
Am currently learning Haskell.
06:21
<@Reiver>
Know enough to bugfix C# but not really /coded/ in it insomuch as driven SQL Server's backend with it. Have used VB before but not for data structure type things.
06:21
<@Reiver>
Tried to learn Python with Vorn at one point, but then he got distracted~
06:22
<@ToxicFrog>
Hmm.
06:22
<@ToxicFrog>
No high-level imperative languages ;.;
06:22
<@ToxicFrog>
Anyways, while Derakon's generating pseudocode, let's consider the concepts for a bit
06:22
<@Reiver>
Yeah. University tends to assume C# or Java, with a minor preferance for the latter.
06:22
<@ToxicFrog>
In brief, what is a linked list?
06:25
<@Reiver>
A series of [objects] that all hold a pointer to the previous one, the next one, and then actual data you wish to hold.
06:26
<@Reiver>
So that if you want to add or delete bits from the middle you just fiddle the pointers rather than having to physically move everything like in an Array.
06:26
<@ToxicFrog>
The link-to-previous isn't actually mandatory, but yes, pretty much.
06:26
<@Derakon>
Okay, take a look at this. http://paste.ubuntu.com/126150/
06:26
<@Derakon>
...aaaand you went and figured it out while I was typing. :\
06:27
<@ToxicFrog>
The individual [objects] - the ones holding the data+links - are the nodes you asked about.
06:27
<@Derakon>
Ack, and I forgot to update line 26. It should be looking for "C", not "bar".
06:27
<@ToxicFrog>
So. Let us postulate that you wanted to build a linked list.
06:27
<@Reiver>
(How those actual pointers are constructed, I am less certain of. Well, sort of. I assume it's a matter of passing this to the new object as an arguement, which it then stores from the constructor)
06:28
<@Derakon>
Yes.
06:28
<@Reiver>
OK! Go on.
06:28
<@ToxicFrog>
Yeah, pretty much.
06:28
<@Derakon>
There's other ways to do it, of course.
06:28
<@ToxicFrog>
For the simple case - pointer to next, pointer to data - it pretty much looks like what Der posted
06:29
<@ToxicFrog>
A node contains a pointer to a node (the next node in the list) and a pointer to data (the data for this list entry)
06:29
<@Derakon>
I see I was also inconsistent in my use of "next" vs. "nextNode". Apologies.
06:29
<@ToxicFrog>
To create a new list entry, you create a Node, and set Node.data to the data and Node.next to the formerly-first Node in the list (if adding to the start of the list)
06:30
<@ToxicFrog>
If adding to the end, you start the same; create a Node, set Node.data to the data. Then you grab the end of the list and set listEnd.next to the newly created Node.
06:31
<@Reiver>
By having a function that just iterates through the nodes till Node.getNext(); returns null?
06:31
<@ToxicFrog>
Yep
06:31
<@ToxicFrog>
Or you can store the list end seperately
06:31
<@ToxicFrog>
Er, store a pointer, that is
06:32
<@ToxicFrog>
So rather than having Node listHead; you have Node listHead, listTail;
06:32
<@Derakon>
The only pointer you must retain is the pointer to the head.
06:32
<@ToxicFrog>
As it's often useful to be able to jump to the end of the list without walking the entire list.
06:32
<@Derakon>
You can always find the tail by working your way through the list from the head.
06:32
<@ToxicFrog>
But as Der says, only the list head is mandatory; everything else can be found via it.
06:32
<@Derakon>
But since this list does not contain pointers to previous elements, if you lose the head pointer, it's gone.
06:32
<@Reiver>
Hrmn. I see. I think.
06:33 * Reiver downloads Eclipse. Vaugely wishes this issue had been realised, oh, three months ago. When he was on holiday. ¬¬
06:33
<@Reiver>
(I have until friday to withdraw or not. >.>)
06:33
<@Derakon>
You have my sympathy, for what it's worth.
06:33
<@ToxicFrog>
The doubly linked list has links to both next and previous in each node; the linked ring has the .next of the list tail point to the list head, turning it into a closed circle.
06:34
<@Derakon>
...I've not actually heard of rings befor.
06:34
<@Derakon>
s/for/fore/
06:34
<@Derakon>
Well, outside of an interview question, anyway, in which they were not actually called such.
06:35
<@Reiver>
I'm also aware of skiplists, where you can skip X nodes ahead in one pointer.
06:35
<@Derakon>
That sounds to me to be of dubious use.
06:35
<@Reiver>
As a primitive form of log-linear list searching.
06:35
<@Derakon>
Since it magnifies the amount of pointer work you have to do to modify the list, without improving your asymptotic runtime.
06:36
<@Reiver>
If the list is sorted, it let you skip X nodes ahead to find the data you want.
06:36
<@Reiver>
If you have /enough/ pointers, to skip, oh, every 2, every 4, every 8... nlog2 search times.
06:36
<@Reiver>
Not an efficient method, but a possible one~
06:36
<@ToxicFrog>
nlog2n, or log2n?
06:36
<@Derakon>
Heh.
06:37
<@Reiver>
Er
06:37
<@Reiver>
log2n
06:37
<@Reiver>
My bad.
06:37
<@Derakon>
Having pointers to everything in the list makes it into a very clumsy array.
06:37
<@ToxicFrog>
Really, though, this sounds like an ugly way to avoid having to construct a binary search tree~
06:37
<@ToxicFrog>
Or just use an array.
06:37
<@Reiver>
TF: I was taught it as being a precursor /to/ binary search trees
06:37 * Reiver got the concept, but never clicked how to implement the sodding thing.
06:38
<@Reiver>
(Of linked lists, skiplists, or trees.)
06:38
<@ToxicFrog>
Could be
06:38
<@ToxicFrog>
Anyways, given this conversation, do you think you could implement a linked list in Java (assuming for the moment that you remember all the Java class declaration syntax, etc)?
06:39
<@Reiver>
I... theoretically, yes. I'd probably need a few nudges a couple times, but
06:40
<@Derakon>
If you have the basic idea down, you can at least make a start.
06:40
<@Reiver>
Constructor passes this, store that via constructor in the new one, and you're alive.
06:40
<@ToxicFrog>
In that case...go for it!
06:40
<@Reiver>
Once I've finished the 68MB download, I will~
06:40
<@Derakon>
Heh. Priorities.
06:40
<@ToxicFrog>
Well, you can start it on the pastebin
06:41 * Reiver digs out the Java textbook from years back to help with Stupid Syntax Questions.
06:47 * ToxicFrog whips up a simple sample in Java - LinkedList.java, 33 lines, supports (new), add(Object), and get(n)
06:55
<@Reiver>
get(n)?
06:58
<@ToxicFrog>
Returns the n'th list element
06:58
<@ToxicFrog>
http://lua.pastey.net/109454, but you should have a go at it yourself first before peeking :)
06:58 * Reiver will be good. Damn your hide. :p
06:59
<@ToxicFrog>
Basic list operations are generally something like: put element at location; get location; remove location; length
06:59
<@ToxicFrog>
This example only supports the first two.
06:59
<@ToxicFrog>
Adding the other two is left as an exercise to the reader, and also because it's 2am and I hate Java.
07:00 * Reiver laughs.
07:00
<@Reiver>
Thank you for the help, TF.
07:00
<@Reiver>
I, er. Am still not sure if I'll stick with this paper, though.
07:01
<@ToxicFrog>
(I've also included two implementations of get: one is tail-recursive, which feels most natural to me, and the other is iterative, because ISTR Java doesn't have proper tail recursion)
07:01
<@Reiver>
If I'm needing to learn fundamentals like this when I'm expected to be handing in working software within two weeks... >_>
07:01
<@ToxicFrog>
Well, whether you keep the paper or not, this is useful stuff to know
07:01
<@Reiver>
Aye. Even if I drop it, I am in all likelyhood doing it next year
07:02
<@Reiver>
(Unless I have my math wrong or something, at which point I do the other paper which deals even /more/ with linked lists and trees instead...)
07:02
<@ToxicFrog>
I also highly recommend picking up a high level language to play with - return to Python, or break out SICP and learn Scheme, or read PiL and learn Lua
07:02
<@ToxicFrog>
These are all structurally typed, which is very handy for tossing together data structures and fiddling with them without spending twenty minutes on class declaration boilerplate.
07:02
<@Reiver>
Alas, I'm stuck with Java as my highest at university though; what degree of advantage would Python/Lua fluency grant me other than less Screaming Pain?
07:03
<@Derakon>
Appreciation for getting work done as opposed to wrestling with Enterprise~
07:03
<@McMartin>
Python can be plenty Enterprisey
07:04
<@McMartin>
In fact, it can be even worse about it if you invoke the King in Yellow too much
07:04
<@Reiver>
(Also, out of interest, why is it that Functional Languages are an evolution from Imperative Languages, that they've not really taken off?)
07:04
<@McMartin>
(That's not really true, first, and second, because they're historically very hard to compile)
07:04
<@Reiver>
(Most folks stopped digging around in assembly once the next level came about, afterall...)
07:04
<@ToxicFrog>
(...are they an evoluation? They've always struck me as just a fundmentally different way of doing things)
07:04
<@McMartin>
(LISP is about as old as FORTRAN.)
07:04
<@Reiver>
Hrm. I was taught it was abstracting one step further
07:05
<@McMartin>
The key feature of functional programming is that side effects do not exist.
07:05
<@McMartin>
This means, among other things, no variables.
07:05
<@McMartin>
In the extreme, it means no print statements or other I/O
07:05
<@McMartin>
Though Haskell gets around this by having functions that take The Entire Universe as an argument.
07:05
<@Reiver>
... er. I think at that point the 'side effects' start influencing the 'actually useful' portion of the code?
07:06
<@McMartin>
Side effects means things like "produces an image on the screen" or "writes to a file" or "reads from a file" or "assigns a memory location"
07:06
<@McMartin>
And i'm not kidding about functions taking The Entire Universe as an argument; Haskell's type system goes through some pirouettes to avoid making time travel expressible.
07:06
<@McMartin>
And the type theory for that took some decades to work out.
07:07
<@Reiver>
*snrk*
07:07
<@McMartin>
Most "functional" languages have an imperative subsystem, including LISP and the ML languages.
07:07
<@Reiver>
... Hrm. So they're a beautiful and pretty way to do complex computational concepts, but they abstract to the point that they Fail Utterly at being useful?
07:07
<@ToxicFrog>
They don't Fail Utterly.
07:07
<@McMartin>
That's the accepted opinion.
07:07
<@McMartin>
It's not true, though.
07:07
<@ToxicFrog>
And they often aren't beautiful, either~
07:08 * ToxicFrog points and mutters at ML
07:08
<@McMartin>
Using them well is an entirely different skill from dealing with imperative stuff, though, and imperativeness is often what you want in the first place.
07:08
<@Reiver>
AKA: Make this appear on-screen?
07:08
<@McMartin>
"Modify this database in this way"
07:08
<@McMartin>
etc
07:08
<@McMartin>
There are a few obvious real-world applications where you can cast it functionally
07:08
<@McMartin>
I could see a web-server doing that, for instance.
07:08
<@McMartin>
Request X -> Response Y
07:09
<@ToxicFrog>
Reiver: fundamentally, the difference is that imperative languages say "to do <thing>, do <this list of smaller things>". Functional languages say "<thing> is <this expression of smaller things>"
07:09
<@Reiver>
TF: Which is nice, but not terribly practical?
07:09
<@ToxicFrog>
It depends on what you're doing!
07:09
<@Derakon>
It is quite practical for very specific problem spaces.
07:10
<@McMartin>
ML in particular is absolutely unmatched for most things involving parsing.
07:10
<@Derakon>
These problem spaces tend to be academic in nature, is all~
07:10
<@Reiver>
Aha. Okay den.
07:10 * Reiver ponders. Suspects a large part of his confusion is the book he's learning from decided that Haskell is a brilliant and powerful language for... multimedia.
07:11
<@McMartin>
... that strikes me as improbable.
07:11
<@Derakon>
O_o
07:11
<@ToxicFrog>
whut
07:11
<@McMartin>
Though it's likely better at it than Erlang would be
07:11
<@ToxicFrog>
There is foam
07:11
<@ToxicFrog>
in my brain
07:11 * Reiver , after the current conversation, has suddenly had the book swim into a new, slightly more cynical focus of "Look! Haskell can be useful! Honest!" ~
07:11
<@Derakon>
Heh.
07:12
<@McMartin>
So, Erlang, which I just mentioned, was used to write the control software for the phone switchboards for most of Eastern North Americfa
07:12
<@McMartin>
This was after a misplaced "break;" statement in the older C code disabled phone service across a third of the continent for a week.
07:12
<@Reiver>
(You now see where my confused bias comes from?~)
07:12
<@Reiver>
... O.o
07:12
<@McMartin>
Apparently they thought break; would get you out of an if block but not the entire loop the if statement was in.
07:13
<@Reiver>
...no.
07:13
<@Reiver>
I mean, I know that
07:13
<@Reiver>
And I've done a years worth of C.
07:13
<@McMartin>
You probably haven't done 2,000 lines of code for a hot patch in the middle of the night though~
07:13
<@ToxicFrog>
(Having used Erlang myself, I can confirm that it's pretty sweet)
07:14
<@Reiver>
McM: I will grant you this fact freely~
07:15
<@McMartin>
There's a particularly brain-dead C error that's exceedingly common in production code anyway that no student ever believes is possible~
07:15
<@ToxicFrog>
Also, to answer your earlier question ("what benefits will I get by learning a HLL") - first of all, it gives you another language in your toolbox for non-schoolwork, new ways of looking at things, and a broader experience to draw on when learning the language after that.
07:15
<@McMartin>
It boils down to "if (x == NULL) { return x->y; }
07:15
<@ToxicFrog>
It will also give you a language with which you can quickly prototype and experiment before translating into the more laborious languages expected by the profs.
07:17
<@Reiver>
TF: ... HUm.
07:17
<@Derakon>
Or, in my case, a language in which you can quickly prototype and then say "You know what? I don't need to reimplement this; Python's fast enough."
07:18
<@Reiver>
I am tempted now to go through with the paper withdrawl (Given if I don't do it by friday I'm down NZ$1500 if I later get swamped out)
07:18
<@Reiver>
And then spend the rest of this semester learning the bloody languages.
07:18
<@Derakon>
When I came out of college...
07:18
<@Reiver>
Java and Data Structures, along with either Python or Lua.
07:18
<@ToxicFrog>
Derakon: well, yes, that's how it usually plays out for me too, but when you have to turn it in in a specific language you can't do that ;.;
07:19
<@Derakon>
I knew C/C++ pretty well, Java kinda, and a smattering of SML/Prolog.
07:19
<@ToxicFrog>
Unless you can convince your prof to remove the language constraints, which I've done on a few occasions!
07:19
<@ToxicFrog>
(some of them probably regretted it~)
07:19
<@Reiver>
(Why, what did you feed them?~)
07:19
<@Derakon>
I picked up Perl really solidly once I hit the Real World (and solidified Java a bit, too).
07:19
<@Derakon>
And then Python once I started working with pygame.
07:19
<@Derakon>
TF found the Right Language for the problem.
07:19
<@ToxicFrog>
(well, I used Erlang to take my Distributed Systems course to the cleaners)
07:20
<@ToxicFrog>
(I also did some perverse things with Postscript in first and second year)
07:20
<@ToxicFrog>
(more recently, using Lua in combination with C has made Compilers much easier)
07:21
<@Derakon>
Oh, yeah, I learned a bit of Lua for Niobium.
07:21
<@jerith>
Reiver: It seems your problem is more with programming than Java.
07:21
<@Reiver>
jerith: A little of column a, a little of column b
07:21
<@jerith>
And most of that boils down to inexperience.
07:22
<@Derakon>
It sounds to me like he missed the one class that covered the topics he needed to know, namely Java and data structures.
07:22
<@jerith>
(Which is most decidedly not a bad thing.)
07:22
<@jerith>
(Although it's not a good one either.)
07:22
<@Reiver>
Derakon: Yes, that would have been the twelve week course called COMP208~
07:22
<@Reiver>
(I was told I wouldn't really need it.)
07:22
<@Derakon>
Right.
07:22
<@jerith>
I speak from the background of being almost entirely self-taught.
07:23
<@Reiver>
(Every bloody Java-based paper since then has thrown data structures around and dissallowed the relevant libraries since.)
07:23
<@Derakon>
Libraries exist to make jobs easier.
07:23
<@jerith>
So, an unfamiliar and uncomfortable language is a contributing factor.
07:23
<@Derakon>
Not homework.
07:23
<@Derakon>
Mind you, using Java and disallowing the libraries is madness.
07:23
<@jerith>
Disallowing the relevant libraries is stupid.
07:24
<@Derakon>
The only reason you use Java is for the massive support libraries.
07:24
<@Reiver>
That would be the issue, yes~
07:24
<@Derakon>
Well, and I guess for a reasonably performant semi-cross-platform language.
07:24
<@jerith>
Unless the point is to teach those structures.
07:24
<@ToxicFrog>
<Reiver> I am tempted now to go through with the paper withdrawl (Given if I don't do it by friday I'm down NZ$1500 if I later get swamped out)
07:24
<@ToxicFrog>
<Reiver> And then spend the rest of this semester learning the bloody languages. <-- from here, this sounds like the best course
07:24
<@Reiver>
And the discomfort is because I was foolish and had forgotten how badly my skills had atrophied after a year of Sodding Biology.
07:24
<@ToxicFrog>
jerith: yeah, but from what Reiv said, they disallow this not only in the courses that teach these structures but in subsequent courses as well, which is a big bucket of wtf
07:24
<@Reiver>
TF: Ah, but will I drive you lot insane by my doing so?~
07:24
<@Derakon>
Unlikely.
07:24
<@ToxicFrog>
Reiver: unlikely.
07:25
<@Derakon>
Anyway, I need sleep. Night, all.
07:25
<@ToxicFrog>
Personally, I enjoy teaching.
07:25 Derakon is now known as Derakon[AFK]
07:25
<@Reiver>
Ni, Dera!
07:25
<@Derakon[AFK]>
Whatever your choice, good luck, Reiver.
07:25
<@ToxicFrog>
Or, well, I enjoy tutoring: one on one transfer of information.
07:25
<@Reiver>
Thank you. :)
07:25
<@ToxicFrog>
'night, Der
07:25
<@jerith>
Reiver: You have demonstrated the two fundamental properties that will cause me to go out of my way to assist.
07:26
<@jerith>
Willingness (even eagerness) to learn and the ability to actually absorb information.
07:26
<@Reiver>
TF: Okay. I'll keep that in mind. And I'll get Eclipse set up; I'm Going To Bloody Well Learn Java, Damnit(tm).
07:27
<@jerith>
Reiver: Very Important Note: don't procrastinate on this and do all the relevant exercises.
07:27
<@jerith>
Two notes, actually.
07:27
<@Reiver>
Clarify 'this' so that sentence makes sense
07:27
<@jerith>
That's a sin I'm guilty of frequently.
07:28
<@jerith>
Reiver: Learning the Java and datastructures stuff you need.
07:28
<@Reiver>
OK.
07:28
<@jerith>
Whether you drop the paper or not, you've said you'll need it later.
07:28
<@Reiver>
I will get a linked list working. After that I demand a... hm...
07:29 * Reiver has a bright idea, steals the homework assignments for the next couple weeks off the course page so he can practice them once he gets his hand in ¬¬
07:29
<@jerith>
Also, pester me. I'm not good at prodding people and offering unsolicited support.
07:33
<@jerith>
And on that note, I must flee workwards. Hit me up on IM -- There's just too much going on on IRC for me to have it up at work, but more focused stuff is fine.
07:34
<@Reiver>
Nini
07:36
<@ToxicFrog>
I should get some sleep also
07:38
<@Reiver>
Nini, TF.
07:38
<@Reiver>
Thanks, folks.
07:38
<@Reiver>
I just wish this had come up a month ago. I get the feeling I'd have known what I was doing by now~
07:38
<@Reiver>
(Note to self: Doublecheck coding literacy every january.)
07:43
< EvilDarkLord>
Reiver: You can poke me on IRC too with the usual caveats of being present.
07:46
<@ToxicFrog>
As far as specific languages go - I regrettably had to refamiliarize myself with Java last semester, so I can help there, and McMartin routinely puts Java through horrible contortions. Vorn and Der both do Python, and I can supply Lua help.
07:47
<@McMartin>
In recent months I've grown more skilled with C++, but I can only recommend fleeing in abject terror from it
07:47 * Reiver , uh, tends to be a little intimidated by McM. No fault of his at all, but his questions tend to be Really Stupid.
07:48
<@Reiver>
Er. The word 'his' there is a bit overloaded, but I think it parses
07:48
<@McMartin>
(Also, I'm pretty good at Java, but it's not what I wrote the book on)
07:48
<@Reiver>
My questions tend to be Really Stupid; I dislike bugging poor McM With them~
07:48
<@McMartin>
(I wrote the book on the JVM.)
07:49
<@Reiver>
... Yeah, see, that's why I feel bad about asking which class I should be using~
08:17 AnnoDomini [~farkoff@Nightstar-29242.neoplus.adsl.tpnet.pl] has joined #Code
08:17 mode/#code [+o AnnoDomini] by ChanServ
09:28 * TheWatcher[zZzZ] readsup
09:28 You're now known as TheWatcher
09:29
< TheWatcher>
Every time I think of posting something to cs_lectures I hit this "ergh, but this is so basic it probably isn't worth posting" thing and move on
09:30
< TheWatcher>
Reiv: Also, I do perl c, c++, php, java, lua, (and python if I really have to) if you need help and others aren't around
09:42
<@Reiver>
TW: I know, but you also tend to be so overworked that I hate to ask >_>
09:42
<@Reiver>
And TW: Sometimes, the basics are Really Really Good.
10:06 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has joined #code
10:06 mode/#code [+o Attilla] by ChanServ
10:41 Reiver [~reaverta@Admin.Nightstar.Net] has quit [Ping Timeout]
10:42 Reiver [~reaverta@Admin.Nightstar.Net] has joined #Code
10:42 mode/#code [+o Reiver] by ChanServ
11:10 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has quit [Ping Timeout]
11:11 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has joined #code
11:11 mode/#code [+o Attilla] by ChanServ
11:59 Rhamphoryncus [~rhamph@Nightstar-7184.ed.shawcable.net] has quit [Quit: Rhamphoryncus]
12:13 GeekSoldier [~Rob@Nightstar-8573.midstate.ip.cablemo.net] has quit [Ping Timeout]
13:02 gnolam [lenin@Nightstar-1382.A163.priv.bahnhof.se] has joined #Code
13:02 mode/#code [+o gnolam] by ChanServ
13:34 ToxicFrog [~ToxicFrog@Admin.Nightstar.Net] has quit [Operation timed out]
13:37 You're now known as TheWatcher[afk]
13:50 ToxicFrog [~ToxicFrog@Admin.Nightstar.Net] has joined #code
13:50 mode/#code [+o ToxicFrog] by ChanServ
14:33 You're now known as TheWatcher
15:11 KBot [AnnoDomini@Nightstar-29159.neoplus.adsl.tpnet.pl] has joined #Code
15:12 KarmaBot [AnnoDomini@Nightstar-29242.neoplus.adsl.tpnet.pl] has quit [Ping Timeout]
15:13 AnnoDomini [~farkoff@Nightstar-29242.neoplus.adsl.tpnet.pl] has quit [Ping Timeout]
15:13 AnnoDomini [~farkoff@Nightstar-29159.neoplus.adsl.tpnet.pl] has joined #Code
15:13 mode/#code [+o AnnoDomini] by ChanServ
15:14 KBot is now known as KarmaBot
15:38 Vornicus [~vorn@Admin.Nightstar.Net] has joined #code
15:38 mode/#code [+o Vornicus] by ChanServ
16:03 Syloq [Syloq@Admin.Nightstar.Net] has joined #code
16:04 Syloq is now known as Syloqs-AFH
16:05 You're now known as TheWatcher[afk]
16:44 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has quit [Ping Timeout]
16:50 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has joined #code
16:50 mode/#code [+o Attilla] by ChanServ
17:13 Derakon[AFK] is now known as Derakon
17:17 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has quit [Quit: <Insert Humorous and/or serious exit message here>]
17:32 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has joined #code
17:32 mode/#code [+o Attilla] by ChanServ
17:55 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has quit [Connection reset by peer]
17:55 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has joined #code
17:55 mode/#code [+o Attilla] by ChanServ
17:59 * gnolam snerks.
18:02
<@gnolam>
Our computer graphics project specification just got approved. With the "Bring about world peace" item in the "might-do" list and all. :)
18:05
<@Vornicus>
Heeee
18:06 GeekSoldier [~Rob@Nightstar-8573.midstate.ip.cablemo.net] has joined #code
18:06 mode/#code [+o GeekSoldier] by ChanServ
18:11
<@ToxicFrog>
hmm.
18:11
<@ToxicFrog>
I'm using a library here which I remember writing, but can't find.
18:13
<@ToxicFrog>
Aah, there it is
18:22 You're now known as TheWatcher
18:32
<@gnolam>
And on a completely different topics, TN panels /suck ass/.
18:33
<@gnolam>
-s
18:35
<@gnolam>
I'm going to have to re-color correct half the textures. :P
18:36
<@gnolam>
But...
18:36
<@gnolam>
YES!
18:36 * gnolam dances a happy dance.
18:36
<@gnolam>
At least I survived the Purge. :D
18:37
<@Derakon>
Bunch of layoffs?
18:48
<@gnolam>
Replacements.
18:49
<@gnolam>
We're losing our quality coordinator instead. Which, to be honest, is no great loss. :)
19:04 * TheWatcher eyes this code
19:04
< TheWatcher>
... how did this ever work? O.o
19:11 * TheWatcher also eyes perl, tries to work out constructur chaining
19:11
< TheWatcher>
*or
19:17
<@gnolam>
Heh, I've had that WTF a couple of times.
19:17
<@gnolam>
You go over some old piece of code that works fine, but when you actually read it you discover that no, /it never should have/.
19:18
<@Derakon>
At which point it promptly stops working.
19:19
<@gnolam>
Yup.
19:25 * gnolam stabs Audacity.
19:27
< simontwo>
sounds like the universe had cached a compiled version that was working that updated when you observed it.
19:32
<@gnolam>
Terry Pratchett's "Hex" is /real/.
19:35 Rhamphoryncus [~rhamph@Nightstar-7184.ed.shawcable.net] has joined #code
20:02
<@McMartin>
The act of observing it collapses it into the nonworking state.
20:15
<@Derakon>
...okay, yeah, that's a bug. http://derakon.dyndns.org/~chriswei/temp/bulletmlscreen40c.png
20:20
< TheWatcher>
Um, yeah
20:24
<@McMartin>
What am I looking for here?
20:26
< Molgorn>
1st, 4th, 3rd, I think
20:27
<@McMartin>
Aha, yes.
20:27
<@McMartin>
I missed that because the second score was clearly larger than the third.
20:33 Attilla [~The.Attil@Nightstar-9147.cdif.cable.ntl.com] has quit [Quit: <Insert Humorous and/or serious exit message here>]
20:34
<@Derakon>
Eee, TW posted a score. <3
20:37
< Molgorn>
mine is ded, Dera ;_;
20:37
<@Derakon>
You need to delete your old scorefile.
20:37
<@Derakon>
Details here: http://www.aegis-soft.com/forum/viewtopic.php?f=3&t=2&sid=75f17e3ea5fbe81eb67101 180f357799
20:38
< Molgorn>
I don't have a fusilladescores.txt, I note.
20:38
<@Derakon>
There's a period on the front, note.
20:39
< Molgorn>
oh, but I do have bmlscores
20:39
<@Derakon>
That is ancient.
20:39
<@Derakon>
Like, three-four betas ago.
20:39
< TheWatcher>
Dera: yeah, I need practice ;)
20:39
< Molgorn>
That's the last version I had
20:39
<@Derakon>
Hrm.
20:39
<@Derakon>
Okay, so that isn't the issue then.
20:39
<@Derakon>
What happens when you start the game?
20:39
< Molgorn>
The error I PMd you
20:39
<@Derakon>
Oh, I missed that. D'oh.
20:40
<@Derakon>
Hm. That's a new error.
20:41
<@Derakon>
How did you install the game?
20:41
<@Derakon>
Did you copy it over your old copy, maybe?
20:41
< Molgorn>
Unzipped it to the old dir, so as not to lose the testing regcode which I have now forgotten :P
20:42
<@Derakon>
Yeah, okay, you merged the new data directory with the old one.
20:42
<@Derakon>
And there's some crap in the old one that's breaking things.
20:42
<@Derakon>
BTW, your regcode is in .fusilladeconfig.txt...or rather, .bmlconfig.txt, which you'd have to rename.
20:42
< Molgorn>
Oh, I've got fusilladeconfig.txt
20:43
< Molgorn>
and bmlscores.txt >_>
20:43
<@Derakon>
You have the config file because it gets written before all the images get loaded.
20:43
<@Derakon>
But it shouldn't have your regcode in it.
20:43
<@Derakon>
S'okay, I can make a new one for you.
20:44
<@Reiver>
You can't retrieve the old one?
20:44
<@Derakon>
If I knew the exact name he registered under, I could re-make it.
20:44
<@Derakon>
But I haven't recorded the casual "Here, have a code" ones.
20:44
< Molgorn>
I didn't ¬¬ You said to use 'alpha' and 'asfjkdfkghsdjk bdgdfgbsdfg'
20:44
<@Derakon>
Oh, geeze, that one.
20:44
<@Derakon>
That's not even usable any more.
20:45 * Reiver laughs
20:45
<@Reiver>
Mol needs a slight update, methinks
20:45
<@Derakon>
Just a bit.
20:45 * Molgorn merrily breaks everything by not updating enough
20:47 * TheWatcher patpats Mol
20:48 * TheWatcher pokes at code, suspects he's being too clever for his own good here
20:49
< EvilDarkLord>
I know that feeling.
20:55
<@Derakon>
Argh, it's not reproducing on devo. >.<
20:58
<@gnolam>
TheWatcher: Kernighan's Law. Live by it. :)
20:59
<@Derakon>
Okay, that should fix that~
20:59
<@gnolam>
(Of course, it's much too /fun/ to be clever to avoid writing code like that altogether)
20:59
< Molgorn>
hm, I am in second and fifth with the same score
21:06
<@Derakon>
Yeah, I'm working on that.
21:07
<@Derakon>
It's partly fixed with a new server-side script, but there's also a bug in the client.
21:13
< simontwo>
how does one sensibly index a hexagonal grid?
21:14
<@Derakon>
By rows.
21:14
<@Derakon>
Every other row is visually indented.
21:15
<@Derakon>
...aww, I was going to show off my Settlers of Catan map generator, but Vorn's map icons aren't online so it's just a mess. :\
21:33
<@gnolam>
simontwo: what Derakon said.
21:33
<@gnolam>
It's just like a regular tilemap.
21:33
< simontwo>
yup. made fine sense.
21:33
< simontwo>
thanks Derakon, gnolam.
21:36
<@gnolam>
Hexmap handling only differs from regular square tilemap handling when you start doing stuff like area effects.
21:37
<@gnolam>
Well, anything related to a norm really.
21:44
<@gnolam>
(Movement goes without saying, and the physical layout doesn't matter to pathfinding anyway)
21:45
<@gnolam>
(Also, hexmap connectivity is actually unambiguous unlike square maps)
21:49
< simontwo>
connectivity?
21:49
< simontwo>
do you mean whether or not you're allowed to move diagonally?
21:51
<@gnolam>
Yes.
21:51
<@gnolam>
4-connectivity VS 8-connectivity.
21:51
<@gnolam>
And once that's decided, movement still isn't entirely unambiguous in 8-connected maps.
21:52
< simontwo>
how so?
21:54
< simontwo>
do you mean if the cost of moving horizontally/vertically is the same as that of moving diagonally?
21:55
<@gnolam>
Well, that is a separate issue. I'm talking about ambiguity that occurs in situations like this:
21:55
<@gnolam>
**..
21:55
<@gnolam>
*.**
21:55
<@gnolam>
....
21:55
<@gnolam>
Map for some civ-style game.
21:56
<@gnolam>
* is land, . is water.
21:56
<@gnolam>
Now, should land units be able to move from 2,0 to 3,1?
21:56
<@gnolam>
And should sea units be able to move from 3,0 to 2,1?
21:56
< simontwo>
ah.
21:57
<@gnolam>
Note that allowing one type to move should logically disallow the other.
21:57
<@AnnoDomini>
Unless there's like a bridge over a channel.
21:57
< simontwo>
unless land units *or* water units are infinitely thin
21:57
<@gnolam>
But you see the point. :)
21:57
<@AnnoDomini>
Civ allows both movements.
21:57
< simontwo>
which complicates matters, because if land units are infinitely thin, won't they fall through as they walk onto ships?
21:57
<@AnnoDomini>
At least the ones I've played.
21:57
< simontwo>
err, just ignore me. ;-)
21:58
<@gnolam>
:)
22:28
<@gnolam>
Hack your VCR: http://www.youtube.com/watch?hl=en&v=MGx-3t8CJ-k
22:44 You're now known as TheWatcher[T-2]
22:48 You're now known as TheWatcher[zZzZ]
22:59 AnnoDomini [~farkoff@Nightstar-29159.neoplus.adsl.tpnet.pl] has quit [Quit: Our spaceship is pulled through the aether by the outrage of honest politicians.]
--- Log closed Thu Mar 05 00:00:15 2009
code logs -> 2009 -> Wed, 04 Mar 2009< code.20090303.log - code.20090305.log >