code logs -> 2010 -> Thu, 18 Mar 2010< code.20100317.log - code.20100319.log >
--- Log opened Thu Mar 18 00:00:37 2010
00:02 Tarinaky [Tarinaky@Nightstar-c3db101d.adsl.virginmedia.net] has quit [Ping timeout: 121 seconds]
00:13 Tarinaky [Tarinaky@Nightstar-c3db101d.adsl.virginmedia.net] has joined #code
00:17 Orthia [orthianz@Nightstar-739c117b.xnet.co.nz] has joined #code
00:42 Attilla [Attilla@FBC920.0EA685.2404F0.127022] has quit [Connection reset by peer]
01:15
< Namegduf>
Alek: I've never observed a window "freeze", that'd be outside the sandbox, so yeah.
01:15
< Namegduf>
As for leaks, yer evidence?
01:15
< Namegduf>
I've noticed behaviour which goes away if I close certain tabs, only appears above a certain tab count, and only becomes apparant sometimes.
01:16
< Namegduf>
Which leads me to suspect the flaw in my FlashBlock solution; the domain whitelisting permits any page at all to embed YouTube videos without my approval, because I whitelisted that.
01:16
< Namegduf>
If you've signs of something else, that'd be interesting.
01:35 Reiv [NSwebIRC@Nightstar-1055e8af.waikato.ac.nz] has joined #code
01:40 * Reiv hunts a Vorn
01:41
< Reiv>
So, why would my tree not become a linked list, if we prime the node to start with?
01:41
< Reiv>
Unless we randomise it, they're going to go in a,b,c,d no?
01:42
<@Vornicus>
The tree "becomes" a linked list, but we still want it to behave like a tree as far as interface goes.
01:42
< Reiv>
Huh. Even if one of the legs is never used, we don't want to get rid of it?
01:42
<@Vornicus>
Right.
01:43
< Reiv>
Okay. Is this to make refactoring later easier?
01:43
<@Vornicus>
Interface consistency is always better than minor performance optimizations, especially when the performance optimization is all of one kb of saved space over the entire program.
01:44
< Reiv>
Okay, fair enough.
01:45
<@Vornicus>
(if this were not a Data Structures assignment, I would say "fuck all this, use HashMap and get it over with."
01:51
< Reiv>
...I have no idea if this is a data structures assignment or not. I should probably ask!
01:51
< Reiv>
Then again, that might count as flagging the 'cheater' flag, given it's not how we were told to do it.
01:57
<@Vornicus>
Can I see the assignment again?
01:58
< Reiv>
yes
01:59
< Reiv>
http://www.cs.waikato.ac.nz/~tcs/COMP317/Assignments/assign1-2010.html
02:01
<@Vornicus>
Oh, fun, all sorts of goodies I didn't actually do in my enc/dec
02:02
< Reiv>
Well, I'd be happy to just have the basic alograthm this week, worry about the Implementation Details next week~
02:02
<@Vornicus>
(specifically - the trie limiter)
02:03
< Reiv>
(I planned to worry about that once I /had/ a trie~)
02:03
<@Vornicus>
(right)
02:03
<@Vornicus>
Okay, could we look at your binary tree thingum?
02:04
< Reiv>
It's still yours, in a "My attempts to screw with it kept breaking it" sense
02:04
<@Vornicus>
Ah, fun.
02:04
< Reiv>
http://pastebin.starforge.co.uk/154
02:05
< Reiv>
I did have one with a Trie node and a way to ask what the trie node was, but I left it at home
02:08
<@Vornicus>
Okay. Let's first start by cleaning up the Add code.
02:08
<@Vornicus>
we'll be merging Add and New while we do this, it's cleaner that way.
02:09 Zed_ [Zed@Nightstar-d0088b95.or.comcast.net] has quit [Connection reset by peer]
02:10
< Reiv>
... OK
02:10
< Reiv>
And then we need to have a function that lets us... er... Traverse
02:10
<@Vornicus>
I didn't actually need that.
02:10
< Reiv>
ALA: Search down, ticking off all the letters as you go, then record where you ran out, then add a new child for the next letter in the list.
02:10
<@Vornicus>
so, by yagni...
02:11 celticminstrel [celticminstre@Nightstar-f8b608eb.cable.rogers.com] has joined #code
02:11
<@Vornicus>
(never write more code than you need. Your brain hurts less that wy.)
02:12
< Reiv>
OK, let's do this then
02:12
< Reiv>
I want to combine Add and New instead of keeping it as a function?
02:14
<@Vornicus>
Instead of keeping it as two functions.
02:14
<@Vornicus>
We do this to 1. reduce comparisons, 2. make it obvious what'sgoing on.
02:14
< Reiv>
Because Add is the only time we'll /ever/ need to make a new tree?
02:16
<@Vornicus>
Yep.
02:21
<@Vornicus>
Well, ever going to make a new tree as a left or right child. There's a tricky bit later that I am not sure how we're going to do it.
02:22
<@Vornicus>
So there's essentially five cases here: 1. we're at the node with this key.
02:22
<@Vornicus>
2. we're at a node greater than this key and there's something to the left.
02:23
<@Vornicus>
3. we're at a node greater than this key and there's nothing to the left.
02:23
<@Vornicus>
4. we're at a node less than this key and there's something to the left.
02:23
<@Vornicus>
5. we're at a node less than this key and there's nothing to the right.
02:23
<@Vornicus>
correction on 4, should say right instead of left.
02:25
<@Vornicus>
You'll notice that there's two vague conditions here: whether the node's key is less than, greater than, or equal to the input key, and whether the appropriate direction's node exists or not.
02:26
< Reiv>
hm
02:26
< Reiv>
Two of those directions get invalidated by a proper constraint though, right?
02:27
<@Vornicus>
We should start with the first one; the second depends on the result of the first.
02:27
<@Vornicus>
What do you mean, invalidated?
02:27
< Reiv>
Eg, 'Less than this key', we don't care if there's a right node.
02:30
<@Vornicus>
No, we care.
02:30
< Reiv>
Er. OK.
02:30
<@Vornicus>
If this node is smaller than the key we're trying to match, we have to go to the right.
02:30
<@Vornicus>
If this node is bigger, than we have to go to the left.
02:31
< Reiv>
Oh. Right, sorry, I missed the Clever Ordering of lefts/rights in yoru list
02:32
<@Vornicus>
So let's start by just putting together a function with those first-level conditions in there.
02:33
< Reiv>
OK
02:33
< Reiv>
Did the New function fufill these conditions?
02:34
<@Vornicus>
Vaguely, but it's missing one.
02:34
< Reiv>
1?
02:35
<@Vornicus>
1.
02:38
< Reiv>
... Do we want it to return a value if it does that?
02:38
< Reiv>
We currently have it going "Do nothing"
02:39
<@Vornicus>
We probably want it to return something -- I'd recommend returning the node we've created in most situations, and then null in this one.
02:39
< Reiv>
Hm
02:40
< Reiv>
Or possibly This, so that we can tell when we've hit the right node, and can then ask it for what index it held?
02:42
< Reiv>
http://pastebin.starforge.co.uk/158
02:43
<@Vornicus>
...okay here's the thing.
02:43
<@Vornicus>
YOu've got your indentation so cocked up right now that I can't tell what ends where.
02:43
< Reiv>
erk
02:44
< Reiv>
whoa, whu
02:44
< Reiv>
t
02:44
< Reiv>
http://pastebin.starforge.co.uk/159 - sorry about that.
02:45
< Reiv>
I forget that even if you just hit 'tab' in eclipse, you need to select 'correct indentation' so they don't go crazy when you past 'em plaintext.
02:45
<@Vornicus>
Much better.
02:45
<@Vornicus>
And you should be able to find a checkbox that says "automatically convert spaces to tabs"
02:46
<@Vornicus>
And that is how New should look, except it shouldn't be called New because that looks too much like certain reserved words and forTheLoveOfMikeMethodsLookLikeThis
02:47
< Reiv>
OK, sorry~
02:47
< Reiv>
So now we fold New into Add.
02:48
<@Vornicus>
and call it "add", and we don't need what was in add any more.
02:48
<@Vornicus>
Literally everything we had going on in add is now in new.
02:48
< Reiv>
...at all?
02:48
<@Vornicus>
At all.
02:48
< Reiv>
Huh. You're right. Awesome.
02:49
<@Vornicus>
Oh, and.
02:49
<@Vornicus>
We're not returning anything in certain branches of add now.
02:49
< Reiv>
So we need to ensure we have nulls for them?
02:49
<@Vornicus>
No, we have to ensure we're returning the right thing.
02:50
< Reiv>
OK
02:53
<@Vornicus>
Actually I should get in there and clean stuff up, there's a lot of style problems.
02:53
< Reiv>
Actually, query: Should the Left.add(val) functions have the 'else'?
02:54
< Reiv>
else if(val < value) { if(Left == null) Left = new Tree(val); else return Left.New(val); }
02:54
< Reiv>
... gah, bloody paste
02:54
<@Vornicus>
... you know, I think it would work all right if it didn't, but frankly I wouldn't do it that way.
02:55
< Reiv>
I was wondering if that else should be there. If you take it out, it checks if Left is present, if not, makes it, shoves the value in it, then calls add on it anyway - in this case, just to jump to the next node down and return /that/ one.
02:56
<@Vornicus>
It smells bad to me.
02:57
< Reiv>
OK
02:58
< Reiv>
So if I have a tree with no children, and its value is 5, what happens when it gets asked to Add value 4?
02:58
< Reiv>
Makes a new Tree object with value 4. Does anything get returned?
02:59
<@Vornicus>
That object with the 4.
02:59
< Reiv>
How? It never gets .add called on it, does it?
02:59
< Reiv>
The 4 went in via constructor.
03:03
<@Vornicus>
...
03:03
<@Vornicus>
You can't use the constructor directly except to make the root or from add.
03:04
< Reiv>
Well, it goes Left = new Tree(4)
03:04
<@Vornicus>
Trying to construct the 4 node does't tell you anything.
03:04
<@Vornicus>
Right
03:04
<@Vornicus>
so then we can just go return left
03:04
< Reiv>
OK, but we're not doing that yet. Correct?
03:05
<@Vornicus>
It's the last thing we do in that branch of add.
03:06
<@Vornicus>
if (left == null) {left = new Tree(val); return left;}
03:08
< Reiv>
We want to add that line in, then, right?
03:08
< Reiv>
In favor of merely deleting the 'else', for that is admittedly an ugly solution.
03:10
<@Vornicus>
Right
03:10
< Reiv>
OK, thank you
03:10
<@Vornicus>
Then when you've done that I'm going to do a lot of style cleanup.
03:11
< Reiv>
Sorry, I was getting confused and thinking you were arguing that our function already did that.
03:13
< Reiv>
http://pastebin.starforge.co.uk/161
03:13
< Reiv>
Done. Cleanup ftw!
03:13
< Reiv>
Note: If you want to do a lot of renaming, tell me what to rename and Eclipse has a nifty Refactor tool.
03:17
<@Vornicus>
Left -> left; Right -> right; value -> key; v -> k; GetVal -> getKey; Seek -> seek; val -> k.
03:17
<@Vornicus>
That I think is most of them.
03:17
<@Vornicus>
...it's actually practically all the names in the damn class.
03:18
<@Vornicus>
Oh, and Tree -> TreeNode
03:18
< Reiv>
>_>
03:19
<@Vornicus>
Oh, and move your variable decls above your constructor.
03:19
< Reiv>
Hrn. It was always taught to have it that way so you could visually distinguish the constructors from the functions.
03:19
< Reiv>
In a "OK, these things trigger /first/" sense.
03:20
<@Vornicus>
Huh. I always did it my way. Either way works, I guess
03:20
<@Vornicus>
(can't do it in C++ though)
03:23
<@Vornicus>
Okay. Now that we've done that, we should change it up so that we can insert another object in there. Actually, two, in this case.
03:26
< Reiv>
Add now throws an error
03:26
< Reiv>
Though it may have been 'compiler hadn't noticed it before'
03:26
< Reiv>
We have three if statements - if =, if <, if >
03:26
< Reiv>
No default response.
03:26
< Reiv>
Null?
03:26
< Reiv>
It wants /something/ to be returned if the three fail
03:27
<@Vornicus>
Remove the third "if" condition
03:27
<@Vornicus>
actually do this: else /* if (k > key) */ {
03:27
<@Vornicus>
or whichever order it is, not looking at it at the moment
03:28
< Reiv>
I think I would prefer to put in a return null, so if Something Breaks, we know it broke~
03:28
<@Vornicus>
No, don't do that
03:28
< Reiv>
OK.
03:28
< Reiv>
Could we have the if == be the one that is Else'd?
03:28
< Reiv>
If <, If >, Else /* == */
03:28
<@Vornicus>
...yes, it's the rarest case.
03:29
< Reiv>
Righto, excelent.
03:29
< celticminstrel>
Trichotomy dictates that there is no fourth option...
03:30
< celticminstrel>
...you would only need to worry about the fourth option if trichotomy is broken (ie the values are not linearly ordered).
03:31
< Reiv>
http://pastebin.starforge.co.uk/162
03:32
<@Vornicus>
value -> key, v -> k, val -> k
03:33
< Reiv>
Oh, missed that sorry
03:33
< celticminstrel>
Pity Eclipse can't do that on C++ code, though it's somewhat understandable...
03:33
< Reiv>
celtic: What, refactor? Should do.
03:33
< celticminstrel>
I don't believe so...
03:33
< celticminstrel>
...though admittedly I haven't used it recently.
03:35
< Reiv>
http://pastebin.starforge.co.uk/163
03:36 gnolam [lenin@Nightstar-38637aa0.priv.bahnhof.se] has quit [[NS] Quit: Z?]
03:38
<@Vornicus>
Okay, now we need to adjust it somewhat.
03:38
< Reiv>
Righto, let's do it
03:39
<@Vornicus>
we need members int index and Tree child;
03:39
<@Vornicus>
note that we haven't defined Tree yet. That's okay.
03:39
< Reiv>
Do we want Tree or Trie?
03:39
<@Vornicus>
Tree
03:39
< Reiv>
Okay, if you insist.
03:39
<@Vornicus>
We won't actually have an explicitly named Trie
03:40
< Reiv>
And we don't want one?
03:40
<@Vornicus>
Right.
03:40
< Reiv>
OK, will take your word for it
03:40
< Reiv>
What do we need these childs to do
03:41
<@Vornicus>
They need to be passed through add into the constructor; other than that we don't particularly care!
03:41
< Reiv>
OK
03:41
<@Vornicus>
oh, and they need gets.
03:41
< Reiv>
So, hm
03:41
< Reiv>
You have: key, child, index each, yes?
03:41
<@Vornicus>
Yep
03:41
< Reiv>
And every time you make a new TreeNode, it will be passed all three of these under all circumstances
03:42
<@Vornicus>
Yes.
03:42
<@Vornicus>
Actually I suspect that a better solution will be to /not/ pass child, and instead have the thing generate a new Tree all by itself for each TreeNode.
03:44
< Reiv>
Because when we prime the first Trie, it doesn't get any children until they're actually demanded, right?
03:44
<@Vornicus>
Each TreeNode has a Tree beneath it, but it starts empty.
03:46
< Reiv>
hm
03:46
< Reiv>
Does Seek need to deal with indexes also?
03:47
<@Vornicus>
If seek is returning complete nodes, then no.
03:47
< Reiv>
righto
03:47
<@Vornicus>
(it's returning complete nodes.)
03:47 celticminstrel [celticminstre@Nightstar-f8b608eb.cable.rogers.com] has quit [[NS] Quit: *hums* Can't stay now!]
03:47
< Reiv>
We seek by key, we Add both key and new index.
03:47
<@Vornicus>
Yep.
03:49
< Reiv>
http://pastebin.starforge.co.uk/164
03:49
<@Vornicus>
Onemore thing in the constructor.
03:50
<@Vornicus>
There's something we haven't initialized anywhere.
03:50
<@Vornicus>
(and we also need the getters for index and child)
03:50
< Reiv>
Tree is in the constructor too? I thought we were leaving it out, because it was not always needed.
03:51
< Reiv>
As a lot of TreeNodes get made without a child, thus we could default it to null just like we do left & right?
03:51
<@Vornicus>
It's always /needed/ - we just never need to tell anyone what it /is/
03:51
< Reiv>
So every time we call Add, we need to pass in 'null' until future reference?
03:51
<@Vornicus>
No, we're defaulting it to a new Tree(); this way we can just call add on the Tree and it will figure out whether it needs to make a new node.
03:52
<@Vornicus>
gah, no, let me show you.
03:52
< Reiv>
OK. Sorry.
03:52
< Reiv>
I had thought we only added new Trees when the LZW went "Hoi, new phrase here!"
03:52
< Reiv>
Wheras TreeNodes got created like crazy, because they were an internal thing.
03:52
<@Vornicus>
http://pastebin.starforge.co.uk/165 <--- I made a one-line change.
03:53
<@Vornicus>
The trick is this: when we start adding nodes to children, we don't want to have to care whether it's the first one or not.
03:54
<@Vornicus>
Tree will have a root member, which is the actual root of the tree; it will also know - in and of itself - whether to use new TreeNode(k,i) or root.add(k,i)
03:54
< Reiv>
...Oh, so I was on the right track, but with the wrong value.
03:54
< Reiv>
OK! That's a relief.
03:55
< Reiv>
Aha, so Tree is where the Clever Shit happens, ok
03:56
<@Vornicus>
A bit of it.
03:57
<@Vornicus>
We're reducing the amount of code inthe actual LZW routine by taking one of the more common decisions and giving it off to something that Should Know.
03:58
< Reiv>
http://pastebin.starforge.co.uk/167
03:58
<@Vornicus>
Oh, even more clever, I forgot you could do that.
03:58
< Reiv>
?
03:59
<@Vornicus>
Define what it turns into in the variable declares instead of the constructor.
03:59
< Reiv>
OK, no idea what you said but that's fine~
03:59
< Reiv>
Also, fixing slight error: return Tree; shoud be return child;
04:00
<@Vornicus>
Where did I tell it what child was, and where did you?
04:00
<@Vornicus>
and we need getChild too
04:00
<@Vornicus>
er, getIndex
04:00
<@Vornicus>
er, getKey
04:00
<@Vornicus>
er, no, they're just all over the place
04:00
< Reiv>
I told it was child in the variable decleration.
04:00 * Vornicus beats himself about the face and neck.
04:01
< Reiv>
We have it; it's at the top. I'll bottom it now.
04:01
< Reiv>
Or move the other two up. I think that's probably better.
04:01
<@Vornicus>
It is brtter
04:03
< Reiv>
http://pastebin.starforge.co.uk/168
04:03 * McMartin does UQM stuff!
04:04
< Reiv>
McM: I'm making a Tree!
04:04
< Reiv>
This is an Epic Achievement for me, alas~
04:04
< Reiv>
(For some reason it is a data structure that has /eternally/ eluded me.)
04:04
< Reiv>
(No idea why.)
04:05
< Reiv>
OK, Vorn: I must be gone, they're kicking me out
04:05
< Reiv>
I will return once I have had my car jumpstarted (Remember yesterday? Yeah~)
04:06
< Reiv>
(Thankfully I found my brother, who will drive me home and provide Vehicle for jumpstartery, wherein I will drive it to Orthias to plug it in [I need to get there anyway, and as she has a garage it makes using the charger +200% easier]...)
04:10
<@Vornicus>
I fought with teh B-Tree for like three weeks and then it hit me over the head and said "BWONG" and I felt like an idiot for missing it.
04:10 Reiv [NSwebIRC@Nightstar-1055e8af.waikato.ac.nz] has quit [Ping timeout: 121 seconds]
04:10
<@McMartin>
Does WinAmp still suck? I need a decent music player for Windows.
04:11
<@McMartin>
Audacious doesn't seem to have a Windows version
04:11
<@Vornicus>
I don't know any decent music players for Windows.
04:12
<@Vornicus>
I mean there's iTunes but that sucks, and VLC but that sucks, and WMP but that sucks.
04:12
<@Vornicus>
and WinAmp but that sucks.
04:12
<@McMartin>
On that list, WinAmp is the least bad. =(
04:13
<@Vornicus>
Yeah. :(
04:14
<@Vornicus>
They all suck in different ways.
04:14
<@McMartin>
Oh, hey, there is now a WinAmp "Lite"
04:14
<@McMartin>
Let's see how lite it really is
04:19
<@McMartin>
Answer: Installer tries to pull various bullshit things that I can disable, and after doing so it's under 10MB and has all the codecs I need
04:32
<@ToxicFrog>
...hasn't winamp had a light version, with those properties, for at least eight years?
04:34
<@McMartin>
Maybe!
04:34
<@McMartin>
I recall it being a lot more bloaty though.
04:34
<@ToxicFrog>
AFAIR, the choices have always been some set of variations on "small, full of codecs" and "bloated, full of Complete Multimedia Center Application"
04:35
<@ToxicFrog>
Except for Winamp 3.x, which was just terrible~
04:37
<@Vornicus>
My primary uses of media players include the "iTunes DJ" button on iTunes, and I don't think I've ever seen anything else get that right.
04:38
<@ToxicFrog>
What does that do?
04:39
<@Vornicus>
iTunes DJ: populate a list with some number of random songs. As each song gets played, remove it from the list and add another random song to the end. In addition, the user can add, rearrange, and remove songs from the list.
04:42
<@Vornicus>
(also you can set it so that it plays high-rated songs more often, but my library is mostly unrated so it doesn't work too well that way.)
05:01
<@ToxicFrog>
Aah. So a more polished version of Winamp's "randomize playlist" command.
05:38 Rhamphoryncus [rhamph@Nightstar-8931f88f.abhsia.telus.net] has quit [Client exited]
05:46
<@Vornicus>
Considerably more polished.
05:55 AnnoDomini [annodomini@Nightstar-fdc81046.adsl.tpnet.pl] has joined #code
05:55 mode/#code [+o AnnoDomini] by Reiver
05:58
< Orthia>
Well that took longer tha I had planned on
05:59
< Orthia>
McMartin: WinAmp remains sucky, but you can now disable 90% of it and make it reasonably non-horrible.
06:05
< Orthia>
So, Vorn
06:05
< Orthia>
Have I everything I need in the TreeNode class, and thus need to move onto the Tree?
06:07
<@Vornicus>
Yep.
06:07
<@Vornicus>
Tree is pretty damn simple.
06:07
<@Vornicus>
it has a root member whichis a TreeNode, and an "add" method which just checks to see whether root is null or not and uses root.add() or root = new TreeNode(k, i)
06:12
<@Vornicus>
as appropriate.
06:14
< Orthia>
hrm
06:14
< Orthia>
But we wanted this as a distinct object from TreeNode, which does the hard part
06:14
<@Vornicus>
Really Bloody Simple. one three-liner method, one field, no waiting.
06:14
< Orthia>
And it is the TreeNode that holds the index, not the Tree itself.
06:14
<@Vornicus>
Right - what we're doing in this is making it so the Tree knows how to take care of itself, so we don't have to teach LZW to add stuff to blank trees.
06:15
< Orthia>
Ah
06:15
< Orthia>
But we /will/ teach LZW how to add stuff to filled trees?
06:15
<@Vornicus>
We'll teachLZW how to add stuff to trees, filled or otherwise.
06:16
<@Vornicus>
Tree knows how to add stuff to blank trees and how to add stuff to filled trees, and knows which is which, so LZW doesn't care.
06:16
< Orthia>
Ah, ok.
06:16
< Orthia>
This is why We have Tree X = new Tree() - the Tree doesn't get told anything complicated at this point.
06:17
< Orthia>
That makes more sense. Hmm. OK.
06:17
<@Vornicus>
Right.
06:17
< Orthia>
And a Tree does not add a root to itself unless it's needed?
06:20
<@Vornicus>
Right.
06:25
< Orthia>
What do we pass to the new rootNode? We'd go Tree.add(char,index); when we need it?
06:25
<@Vornicus>
exactly
06:27
< Orthia>
http://pastebin.starforge.co.uk/170
06:28
< Orthia>
Do we want a Get command for Tree as well?
06:29
<@Vornicus>
Nothing in particular we need to get.
06:30
<@Vornicus>
I can't imagine a situation where we need to know what the root object is.
06:31
< Orthia>
But how do we get stuff /out/ of the Tree?
06:31
< Orthia>
We can't go Tree.root.seek or anything yet
06:31
<@Vornicus>
Oh, right, we'll need a seek.
06:31
< Orthia>
That's what I was wondering
06:31
<@Vornicus>
Proxy it through to Tree.root.seek, but add a null guard.
06:32
< Orthia>
null guard being when Tree has no root yet?
06:32
<@Vornicus>
Exactly
06:32 Orthia is now known as Reivthia
06:33
< Reivthia>
If the case, it returns... null?
06:33
<@Vornicus>
Yes
06:33
< Reivthia>
OK
06:33
<@Vornicus>
Oh, and don't forget to return the thing you get off of add, we're probably going to want that info.
06:35
<@Vornicus>
I need sleep.
06:37
< Reivthia>
http://pastebin.starforge.co.uk/171 - perfecto, before you go?
06:39
< Reivthia>
If so, I will be thrilled to have at least that much done. We then get to spend tomorrow working out what Craziness the LZW does >_>
06:41 GeekSoldier [Rob@Nightstar-e86e3e0d.ip.cablemo.net] has joined #code
06:43
<@Vornicus>
For the most part you can just steal my Python code from here out.
06:43
<@Vornicus>
Tree is just a dictionary.
06:46
<@Vornicus>
you'll have to be wordier.
06:47
<@Vornicus>
But oh well.
06:48 * Reivthia nods
06:48
< Reivthia>
Cheers, though
06:49
< Reivthia>
Nini! Thank you, vorny. :)
06:49 * Vornicus slep
06:49
<@Vornicus>
I recommend you play around with the binary tree, see what happens - my js binary tree is good for this because it can prettyprint.
06:50
<@Vornicus>
(note,mine is more complicated because it includes deletion and parent pointers)
06:51 Vornicus is now known as Vornicus-Latens
07:14 You're now known as TheWatcher
07:32 Tarinaky [Tarinaky@Nightstar-c3db101d.adsl.virginmedia.net] has quit [Operation timed out]
07:41 Tarinaky [Tarinaky@Nightstar-c3db101d.adsl.virginmedia.net] has joined #code
07:43 Thaqui [Thaqui@27B34E.D54D49.F53FA1.6A113C] has quit [Client closed the connection]
07:48 Tarinaky [Tarinaky@Nightstar-c3db101d.adsl.virginmedia.net] has quit [Ping timeout: 121 seconds]
07:49 Tarinaky [Tarinaky@Nightstar-c3db101d.adsl.virginmedia.net] has joined #code
08:09 You're now known as TheWatcher[afk]
09:50 Zed [Zed@Nightstar-d0088b95.or.comcast.net] has joined #code
10:26 AnnoDomini [annodomini@Nightstar-fdc81046.adsl.tpnet.pl] has quit [Ping timeout: 121 seconds]
10:28 AnnoDomini [annodomini@Nightstar-57b81212.adsl.tpnet.pl] has joined #code
10:28 mode/#code [+o AnnoDomini] by Reiver
10:31 You're now known as TheWatcher
11:18 Attilla [Attilla@FBC920.398CA6.E1414C.85D335] has joined #code
11:18 mode/#code [+o Attilla] by Reiver
11:18 Zed [Zed@Nightstar-d0088b95.or.comcast.net] has quit [Client closed the connection]
11:18 Zed [Zed@Nightstar-d0088b95.or.comcast.net] has joined #code
11:57 You're now known as TheWatcher[d00m]
13:50 You're now known as TheWatcher
14:23 Tarinaky [Tarinaky@Nightstar-c3db101d.adsl.virginmedia.net] has quit [Operation timed out]
14:36 gnolam [lenin@Nightstar-38637aa0.priv.bahnhof.se] has joined #code
14:37 Tarinaky [Tarinaky@Nightstar-277f357d.adsl.virginmedia.net] has joined #code
14:41 celticminstrel [celticminstre@Nightstar-f8b608eb.cable.rogers.com] has joined #code
14:47 You're now known as TheWatcher[afk]
15:08 Serah [Z@3A600C.A966FF.5BF32D.8E7ABA] has quit [Ping timeout: 121 seconds]
16:12 Serah [Z@26ECB6.A4B64C.298B52.D80DA0] has joined #code
16:19 Rhamphoryncus [rhamph@Nightstar-8931f88f.abhsia.telus.net] has joined #code
17:11 You're now known as TheWatcher
17:31 Reivthia [orthianz@Nightstar-739c117b.xnet.co.nz] has quit [Client closed the connection]
20:10 Tarinaky [Tarinaky@Nightstar-277f357d.adsl.virginmedia.net] has quit [Ping timeout: 121 seconds]
20:16 Tarinaky [Tarinaky@Nightstar-277f357d.adsl.virginmedia.net] has joined #code
20:26 Thaqui [Thaqui@27B34E.D54D49.F53FA1.6A113C] has joined #code
20:43 Vornicus-Latens is now known as Vornicus
21:01 Serah [Z@26ECB6.A4B64C.298B52.D80DA0] has quit [Ping timeout: 121 seconds]
21:11
<@McMartin>
God, finally
21:11 * McMartin finishes a 21-hour build.
21:21 GeekSoldier_ [Rob@Nightstar-e86e3e0d.ip.cablemo.net] has joined #code
21:23 GeekSoldier [Rob@Nightstar-e86e3e0d.ip.cablemo.net] has quit [Ping timeout: 121 seconds]
21:30
< gnolam>
... ow
21:30
< gnolam>
What kind of hellspawned system takes 21 hours to build?
21:32
<@McMartin>
Qt, full cross-compile, on a system that keeps hibernating in the middle of builds.
21:33
<@McMartin>
But still, even with the overnight part being a loss, that's still a good 8-10 hours.
22:11
< celticminstrel>
Can't you disable the hibernation?
22:14
<@AnnoDomini>
gnolam: Just about anything Java-based can reach obscene build times.
22:19 Thaqui [Thaqui@27B34E.D54D49.F53FA1.6A113C] has quit [Ping timeout: 121 seconds]
22:21 Thaqui [Thaqui@27B34E.3C6209.0DD6F0.754924] has joined #code
22:21
<@McMartin>
This is C++
22:21
<@McMartin>
celticminstrel: Yeah, but that still cost me 12 hours or so of time
22:22
<@McMartin>
Also, obscene Java build times almost always mean somebody's doing something retarded with make
22:29
<@AnnoDomini>
I had one situation when iterative builds of the same, but successively debugged project were increasing exponentially.
22:30
<@AnnoDomini>
1s, 5s, 30s, 2mins, lost_my_patience_at_30_minutes....
22:30
<@Vornicus>
yeah, I don't think java compilation is turing complete.
22:31 AnnoDomini [annodomini@Nightstar-57b81212.adsl.tpnet.pl] has quit [[NS] Quit: Sleep, now.]
22:36
<@Vornicus>
(C++ is, because of templates)
22:47
<@McMartin>
The issue with Java and make is that make starts a new instance of javac for every file, which means it spends 2-3 seconds per file dicking around with startup and teardown of the JVM, as well as replicating javac's own dependency trackers.
22:56
<@Vornicus>
...that seems to me a long time to start a vm.
22:59 Thaqui [Thaqui@27B34E.3C6209.0DD6F0.754924] has quit [Connection reset by peer]
23:01 Thaqui [Thaqui@27B34E.D54D49.F53FA1.6A113C] has joined #code
23:11
<@McMartin>
JVM startup/shutdown time is abominable and for non-service programs is probably the bulk of the actual execution time
23:12
<@McMartin>
Ahahahahahaha, oh man
23:12
<@McMartin>
You may recall, some months back, I was ranting about how the Windows binary distribution of OpenSSL was the least professional sociopathic self-righteous hack job I had ever seen in my life.
23:12
<@McMartin>
Because I cannot actually use some of his versions of these things, I decided to replicate his worth.
23:12
<@McMartin>
This involved...
23:12
<@McMartin>
*work
23:12
<@McMartin>
... running a perl script and two batch files.
23:13
<@McMartin>
Flawless victory
23:13
<@McMartin>
I'm seriously considering starting my own mirror.
23:14
<@McMartin>
I think it took me less time to build from source than it did to navigate his shitty embarassing-even-for-GeoCities website and disable all the shitware he packed into his installer.
23:36
<@TheWatcher>
And you weren't compiling from source >.>
23:36 * TheWatcher takes a moment to viciously stabbinate whoever is responsible for OpenSSL's build system
23:38
<@McMartin>
TheWatcher: ... yes I was?
23:38
<@McMartin>
It involved running one perl script and two batch files?
23:38
<@McMartin>
Which called nmake at some point?
23:39
<@TheWatcher>
You didn't run into their hilarious fuckup with the dlls?
23:39
<@McMartin>
Not in 0.9.8m, no
23:39
<@TheWatcher>
Or the fact that several files in engines/ didn't even build?
23:39
<@McMartin>
It passed the unit tests.
23:39
<@McMartin>
Nope, zero errors
23:40
<@TheWatcher>
I'm sodding astounded
23:40
<@McMartin>
Maybe they were disabled in my configure?
23:40
<@McMartin>
Now, iconv is a pile of fail because the GNU project actively gives bad instructions for building on any platform they don't control
23:40
<@McMartin>
Up to and including lying about licensing information for their own products
23:41
<@TheWatcher>
Well, if it built the .dlls, do they actually export any symbols? Because that's the problem I ran into with them
23:41
<@TheWatcher>
they built, they were just unusable until I changed the Configure to add the right stuff to the linker command
23:41
<@McMartin>
Hmmm
23:42
<@McMartin>
That sounds like the kind of thing that very easily *could* have been fixed in 0.9.8m, which is unusually recent for such things
23:42
<@McMartin>
And, I mean, I built the DLLs and a pile of test .exes and the test .exes all ran
23:42
<@TheWatcher>
Yeah, but are the exes linked statically or against the dlls?
23:43
<@McMartin>
Given that some DLLs actually exist, I don't think static is an option unless they've done some seriously deep magic with MSVC.
23:43
<@TheWatcher>
('course, I was using 0.9.8l, they might have actually had someone try to use their build script on mingw)
23:43
<@TheWatcher>
Oh
23:43
<@McMartin>
This is the MSVC buildpath, not the MinGW one
23:44
<@TheWatcher>
Right, probably a big difference, then
23:49
< gnolam>
One of the reasons I ditched MinGW for MSVC is because most things that claim to be buildable under MinGW just plain aren't.
23:49
<@McMartin>
I think it's adorable how the freetards can't bring themselves to write "Win32"
--- Log closed Fri Mar 19 00:00:38 2010
code logs -> 2010 -> Thu, 18 Mar 2010< code.20100317.log - code.20100319.log >