--- 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 |