--- Log opened Fri Apr 23 00:00:55 2010 |
00:02 | <@Derakon> | Seeya, TW. |
00:03 | | You're now known as TheWatcher[zZzZ] |
00:04 | | Derakon [Derakon@Nightstar-1ffd02e6.ucsf.edu] has quit [[NS] Quit: Leaving] |
00:44 | | * Orth appears, having slept in. Oops. |
00:56 | | * Orth hunts Derakon or Vornicus, for he is attempting to make sense of Map. |
00:56 | < Orth> | Or TreeMap, specifically, because that one apparently autosorts. |
01:19 | <@McMartin> | It does indeed |
01:19 | <@McMartin> | What about it? |
01:25 | < Orth> | Trying to figure how to retool my program to go from ArrayLists to TreeMaps without destroying my brain in the process. |
01:25 | <@McMartin> | What's inside the ArrayList? |
01:25 | < Orth> | A set of objects that are more or less tuples of (reliability,cost) |
01:26 | < Orth> | I wish to use reliability as the key for the TreeMap. |
01:27 | <@McMartin> | Right, so that's a TreeMap<ReliabilityType, CostType>. ReliabilityType needs to implement Comparable. If it's, say, Integer, or String, you're covered |
01:27 | < Orth> | So in this specific case, it would be TreeMap<Double, Device>? |
01:27 | <@McMartin> | Right. |
01:28 | < Orth> | Aha |
01:28 | <@McMartin> | And instead of list.add(tuple) you do map.put(reliability, dev) |
01:28 | <@McMartin> | And to look up by reliability, that's map.get(reliability) |
01:28 | < Orth> | Aaaah |
01:28 | < Orth> | um, hm |
01:28 | < Orth> | Is there a way to iterate through the map? |
01:28 | <@McMartin> | The assumption here, though, is that there is exactly one device with any given reliability |
01:29 | <@McMartin> | map.entrySet() is an iterator over (key, value) tuples |
01:29 | < Orth> | Yeah, that -may- be a problem. I hope not, but I cannot gurantee it will not be the case. |
01:29 | < Orth> | This a showstopper? |
01:29 | <@McMartin> | Then you may need to use maps as the basis for multimaps. |
01:29 | <@McMartin> | Well, map.put() will replace the earlier device if so. |
01:29 | < Orth> | Uhoh. |
01:30 | <@McMartin> | This brings us to our next question |
01:30 | <@McMartin> | Why do you want to use a map here? |
01:30 | | * Orth pauses. Decides to explain the issue in full rather than the specific reason he came up with for this solution. |
01:31 | < Orth> | OK, I have a list of values of (Reliability, cost). I want to be able to go through the list, and eliminate all those for whom there is a better reliability at lower or equal cost. |
01:32 | <@McMartin> | OK. Multimaps won't be necessary |
01:32 | <@McMartin> | But you'll have to be clever about constructing the map. |
01:33 | <@McMartin> | Basically, you'll want to only replace if the cost is lower, so at any given reliability there's a "best cost for this exact reliability". |
01:33 | < Orth> | If the list is sorted by reliability, this is wonderfully easy. If it is not, it is an n^2 operation to sort... which feels sort of wrong, if only the list could be sorted as I made it, y'know? |
01:33 | < Orth> | ... that would work pretty good, actually! |
01:33 | <@McMartin> | In this case, the map will live alongside the list. |
01:33 | < Orth> | hm, howso? |
01:34 | <@McMartin> | The map won't have all the options the list has... |
01:34 | <@McMartin> | ... but then, you're removing from the list anything that won't be in the map, so. |
01:34 | < Orth> | yeah, that was why I was wondering |
01:34 | <@McMartin> | So yeah, a map, but conditional replace |
01:34 | <@McMartin> | That said |
01:34 | < Orth> | This is a Dynamic Programming solution; I'm trying to cache the good results and scrap the crap ones anyway. |
01:34 | <@McMartin> | Even if it's sorted, you still have to check an average of n/2 elements to make sure |
01:35 | <@McMartin> | Otherwise you'll need some cache of "lowest cost of *anything* above X", and with doubles, that's hard to partition |
01:35 | < Orth> | Better than n^2~ |
01:35 | <@McMartin> | Still n^2. Constant factor improvement. |
01:35 | <@McMartin> | Deciding "do I add this?" is still an O(n) operation either way |
01:36 | < Orth> | hm, ok |
01:36 | < Orth> | So, then, uh |
01:36 | <@McMartin> | Do you have a known range on reliabilities? |
01:37 | < Namegduf> | Earlier today, I saw a comment in a Python program. |
01:37 | < Orth> | Probably, but beyond 0.0-1.0 it'd take math to figure out. |
01:37 | < Namegduf> | /* O(n^2) */ |
01:37 | < Namegduf> | Above a loop, with another loop inside. |
01:37 | < Namegduf> | Accurate, yes. |
01:37 | < Namegduf> | But the highest n was 6. |
01:38 | < Orth> | Hey, it's a fair point! Someone might want to increase it to 60 one day. :p |
01:38 | < Namegduf> | In its original context, dear god, I hope not |
01:38 | <@McMartin> | If that's a concern, the best way to comment it is: # TODO: replace with scalable algorithm if we need to scale |
01:38 | < Namegduf> | Oh, right, it was in JavaScript |
01:38 | < Namegduf> | But right. |
01:39 | < Namegduf> | Except it wasn't a concern and never would be. |
01:39 | <@McMartin> | Orth: I ask because if there's a sharply finite range like 0.0-1.0, you could split it up into, say, 10 buckets and keep a local best in each bucket |
01:39 | <@McMartin> | That would let you check at a glance if you even needed to iterate through the list |
01:40 | < Orth> | hm. Tempting, but I'll leave that as "An optimisation" for now |
01:40 | < Orth> | I will try to get the Map working at all, first. |
01:40 | < Orth> | So, uh, how does one iterate through the TreeMap with, eg, a for loop? |
01:40 | <@McMartin> | If the expectation is that most elements will not be filtered by this, you gain very little |
01:40 | <@McMartin> | You loop through its entrySet(). |
01:40 | <@McMartin> | Which operates very much like a list, except you can't index it. |
01:41 | <@McMartin> | And it gives you Map.Entry<K, V> objects. |
01:41 | <@McMartin> | The thing is, I don't think you can start the iteration at arbitrary points |
01:41 | < Orth> | I used to use (int i = 0; i < foo.length(); i++) { foo.get(i); bar; } |
01:41 | <@McMartin> | So I don't think this buys you anything. |
01:42 | < Orth> | hm |
01:42 | <@McMartin> | Oh. You should have been using for (DeviceTuple dt : foo) { ... } |
01:42 | < Orth> | I tried that and it was giving me a buttload of errors |
01:42 | < Orth> | So I gave up on it entirely in the sake of Getting It Done. |
01:42 | <@McMartin> | What does javac --version say? |
01:44 | < Orth> | Windows cannot find javac (Presuming that was meant to go in Run or cmd) |
01:44 | <@McMartin> | OK, how are you compiling your programs in the first place |
01:44 | < Orth> | Eclipse~ |
01:44 | <@McMartin> | OK, there should be some about window somewhere that says what version of Java you are using |
01:46 | <@McMartin> | In particular, if you are using Java 6, TreeMap has a method "tailMap" that actually does let you do the necessary iterations. |
01:47 | < Orth> | hrm |
01:47 | < Orth> | jre6 |
01:47 | <@McMartin> | Right then |
01:48 | < Orth> | http://pastebin.starforge.co.uk/264 - the core code. The supporting classes: Device: http://pastebin.starforge.co.uk/265 Stack: http://pastebin.starforge.co.uk/266 |
01:48 | <@McMartin> | You'll want to iterate over the values of the tailMap(keyToInsert), and only do the insert if there is some value in it (the values() method returns a Collection<V> you can iterate over) and its minimum is greater than your value to insert. |
01:48 | < Orth> | Also, my mistake: I will be storing <Reliability, Stack>, rather than Device |
01:49 | < Orth> | (Stacks are a class that stores the total results for a bunch of Devices piled in together.) |
01:49 | <@McMartin> | OK |
01:49 | <@McMartin> | Does Stack implement Comparable? |
01:50 | < Orth> | No, but it probably should. |
01:50 | < Orth> | Stack.price() returns an integer, if that helps. |
01:51 | <@McMartin> | It should implement Comparable<? extends Stack>, and then it should define |
01:52 | <@McMartin> | public int compareTo(Stack o) { return price() - o.price(); } |
01:52 | <@McMartin> | I think. |
01:52 | < Orth> | Returns 0 if identical? |
01:53 | <@McMartin> | x.compareTo(y) is less than zero if x < y, greater than zero if x > y, and 0 if identical. |
01:53 | < Orth> | Huh. Cool. |
01:53 | <@McMartin> | That's the contract for compareTo; the "<? extends Stack>" is so that if you subclass Stack, it's still meaningful to compare those subclasses to ordinary Stacks. |
01:54 | <@McMartin> | (It's also possible to write Comparator<T> classes for special-case comparisons like "case-insensitive string" or whatnot) |
01:55 | < Orth> | Odd. public class Stack extends Comparable <? extends Stack> gives me "The type Stack cannot extend or implement Comparable<? extends Stack>. A supertype may not specify any wildcard" |
01:56 | | Derakon[AFK] is now known as Derakon |
02:00 | | GeekSoldier_ [Rob@Nightstar-e86e3e0d.ip.cablemo.net] has quit [Ping timeout: 121 seconds] |
02:01 | | GeekSoldier_ [Rob@Nightstar-e86e3e0d.ip.cablemo.net] has joined #code |
02:01 | <@Derakon> | Behold! GIANT SPACE COLLAGE (10%-normal-size version)! http://derakon.dyndns.org/~chriswei/temp/spacecollage2.png |
02:05 | <@McMartin> | Orth: in that case, it extends Comparable <Stack> |
02:05 | < Orth> | OK, just checking |
02:11 | < Orth> | gnnh |
02:11 | < Orth> | It demands I implement CompareTo(Object foo) instead of CompareTo(Stack foo) |
02:12 | < Orth> | But of course you can't call .cost() on a generic object, only a stack. |
02:14 | <@McMartin> | Well, you can downcast |
02:14 | <@McMartin> | However, Comparable<T> is supposed to let it be <T> |
02:14 | <@McMartin> | Are you sure you aren't in some sort of weird 1.4 compatibility mode or something? |
02:15 | < Orth> | I don't think so |
02:15 | | * McMartin is looking at http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html here. |
02:15 | < Orth> | oh wate nevermind~ |
02:15 | < Orth> | Got it. |
02:16 | < Orth> | Stack is not stack you dumbass >.< |
02:16 | < Orth> | Funky error to throw for it, though. |
02:16 | <@Derakon> | Hee. |
02:16 | < Orth> | (Actually, even better: Stack is not sTack~) |
02:16 | <@Derakon> | I've given up on expecting compilers and interpreters to reliably give accurate error messages. |
02:16 | <@Derakon> | Generally, I just check the code around the location of the failure and look for things that look wrong. |
02:16 | < Orth> | OK so |
02:17 | < Orth> | Now that I have a comparable Stack |
02:17 | < Orth> | I get to refactor this code from ArrayList<Stack> to TreeMap<Double, Stack> correct? |
02:17 | <@McMartin> | Hmm. I guess? |
02:17 | <@McMartin> | Where's that Double coming from, again? |
02:18 | < Orth> | Reliability is a Double |
02:29 | | * Orth does battle with errors, errors everywhere. |
02:30 | < Orth> | (Funny how radically changing types will do that~) |
02:36 | < Orth> | OK, going to duck out to grab a sandwich. BRB. |
02:50 | | * Derakon eyes Preview, which is crashing reliably if I replace the image it's viewing while its back is turned. |
02:50 | <@Derakon> | I have to completely re-generate the image to fix the crash; otherwise it just keeps crashing on startup. Weird. |
02:50 | < Rhamphoryncus> | Derakon: have you seen some of the errors clang puts out? |
02:50 | <@Derakon> | What's clang? |
02:50 | < Rhamphoryncus> | llvm's C frontend |
02:51 | <@Derakon> | No, I haven't. |
02:51 | < Rhamphoryncus> | http://blog.llvm.org/2010/04/amazing-feats-of-clang-error-recovery.html |
02:51 | | * Derakon looks up llvm. |
02:54 | <@Derakon> | Interesting, and a distinct improvement. |
02:57 | | * Vornicus returns. |
03:02 | <@Derakon> | "C++ is a power tool that gives you plenty of rope to shoot yourself in the foot as well as mix your multi-paradigmed metaphors." |
03:04 | | GeekSoldier_ is now known as GeekSoldier |
03:05 | < Orth> | That took longer than planned. *nroms* |
03:14 | | Orth [orthianz@Nightstar-8865e808.xnet.co.nz] has quit [Client closed the connection] |
03:16 | | * Derakon mutters at ImageMagick, which isn't floodfilling his borders for him. |
03:16 | <@Derakon> | convert -draw 'color 1,1 floodfill' -fill "#000000" 30dor_hst_big.jpg tmp.jpg |
03:16 | <@Derakon> | I can see it make a black pixel in the upper-left corner, but the white pixels around it remain stubbornly unchanged. |
03:18 | | * Vornicus returns. |
03:18 | <@Derakon> | You just did that 21 minutes ago... |
03:19 | | Orthia [orthianz@Nightstar-8865e808.xnet.co.nz] has joined #code |
03:20 | < Orthia> | Hm, so when adding stacks to the new set, I want... hm |
03:34 | < Orthia> | HA if(currentStackSet.get(newStack.reliability()) != null){} |
03:44 | <@Vornicus> | so I did. |
03:51 | < Orthia> | hum |
03:52 | < Orthia> | What do I do if I have two sets with the same reliability and same value? |
03:53 | < Orthia> | Does it matter which I keep? |
03:53 | <@Vornicus> | Keep the one with the fewest of the most recent set; I'm reasonably certain that's the only situation where it would matter. |
03:53 | <@Vornicus> | (because the one with fewer has more opportunities for improvement. |
03:55 | < Orthia> | whyso? |
03:55 | < Orthia> | It will not be touched again until we have another entirely different set. |
03:56 | < Orthia> | A3B2 vs A1B3, assuming they both had reliability .5 and cost 10, will both not be looked at again until I'm adding C. |
04:09 | <@Vornicus> | oh. well, in that case, then no, no need to distinguish. |
04:10 | < Orthia> | OK, just checking |
04:11 | < Orthia> | So how do I use this tailMap to iterate? |
04:15 | <@Vornicus> | I don't know, what's a tailMap? |
04:18 | < Orthia> | er. |
04:18 | < Orthia> | McMartin~ |
04:18 | < Orthia> | http://java.sun.com/j2se/1.5.0/docs/api/java/util/TreeMap.html - I'm using this anyway |
04:18 | < Orthia> | I need to get it so I can iterate over the blasted thing now. |
04:22 | <@Vornicus> | my_map.keySet().iterator() gives you an iterator over the keys of the map. |
04:29 | < Orthia> | so... for(Stack foo : my_map.keySet().iterator()) { foo.dostuff } will do the trick? |
04:32 | <@Vornicus> | I don't remember if foreach requires an iterator or an iterable; if the latter, remove the .iterator() and you'll be good. |
04:33 | < Orthia> | OK |
04:34 | <@McMartin> | Iterable, I believe. |
04:34 | <@McMartin> | You can also use EntrySet() if you want just the entries, and values() for a Collection of the values. |
04:34 | < Orthia> | McM: OK, how do you use EntrySet? |
04:35 | <@McMartin> | EntrySet can be iterated like any other collection, and it returns a bunch of Map.Entry objects, which you should find described under java.util |
04:35 | <@McMartin> | Basically, pre-made pairs |
04:36 | <@McMartin> | Now, as I understand it, you really are carrying the key inside the values themselves, right? |
04:36 | <@McMartin> | So you could just iterate over values() instead. |
04:36 | < Orthia> | right |
04:36 | <@McMartin> | I think you'll still get them in order of key |
04:36 | | celticminstrel [celticminstre@Nightstar-f8b608eb.cable.rogers.com] has left #code [] |
04:36 | < Orthia> | That would be ideal yeah |
04:36 | <@McMartin> | Also, if you want to make sure that you're only looking at keys greater than or equal to X, you can instead iterate over foo.tailMap(X).values() |
04:37 | < Orthia> | Oh, is /that/ what you meant by that, ok |
04:37 | < Orthia> | Sorry, I'd misunderstood the usage there |
04:37 | <@McMartin> | Hm. |
04:38 | <@McMartin> | I guess the fact that you can do a short-circuit if you find a disqualifier means you shouldn't instead compute Collections.min(foo.tailMap(X).values()) |
04:38 | <@McMartin> | And then see if the minimum's price (since price is the natural ordering on Stack now) is in fact less than or equal to the proposed Stack's price. |
04:39 | <@McMartin> | (Incidentally, notice how I'm building up all these operations on collections and nesting them ever deeper? That's how you can tell I think more in terms of functional programming) |
04:42 | | Thaqui [Thaqui@27B34E.D54D49.F53FA1.6A113C] has quit [Connection reset by peer] |
04:57 | | * Orthia likes functional programming, but avoids it in Java because Java is awful enough to begin with~ |
04:57 | < Orthia> | McM: That function looks fascinating, but trying to implement it in my code is causing a headache. |
04:57 | < Orthia> | Maybe I should be sticking with the Simple If Stupid approach >_> |
05:03 | <@McMartin> | I assume the "that function" there is tailMap |
05:03 | <@McMartin> | min is pretty simple, it takes a collection and gives you the smallest element~ |
05:05 | | Thaqui [Thaqui@27B34E.D54D49.F53FA1.6A113C] has joined #code |
05:06 | | * Orthia tries to think, mumbles |
05:20 | | Alek [omegaboot@Nightstar-7ff8f4eb.il.comcast.net] has quit [[NS] Quit: ] |
05:22 | | Alek [omegaboot@Nightstar-7ff8f4eb.il.comcast.net] has joined #code |
05:36 | < Orthia> | blarg |
05:36 | < Orthia> | for(Stack currentStack : oldStackSet.entrySet()) { |
05:36 | < Orthia> | Type mismatch: cannot convert from element type Map.Entry<Double,Stack> to Stack |
05:36 | < Orthia> | I have done something wrong, I presume. What I'm not sure of is how I did it wrong. |
05:36 | <@McMartin> | Yeah, if you want just the values, use values() instead of entrySet() |
05:36 | < Orthia> | aaah |
05:37 | <@McMartin> | If you want both but need the Stack right now, you need to call .getValue() on the Map.Entry (which has a similar getKey().) |
05:37 | < Orthia> | whoa, ConcurrentModificationException |
05:37 | <@McMartin> | You're not allowed to change a map while you're iterating through it. |
05:38 | < Orthia> | Oh. Er. That could be a problem then. |
05:40 | < Orthia> | http://pastebin.starforge.co.uk/267 |
05:41 | <@McMartin> | Build up a separate list of Changes You're Going To Make on your way through. |
05:42 | < Orthia> | The problem is, I thought I /was/ doing that |
05:42 | < Orthia> | I had an oldStackSet (The old one I'm looking through) and a currentStackSet (The new one I'm building up) |
05:42 | < Orthia> | (The names could probably do with work but hey) |
05:43 | < Orthia> | I appear to have done something wrong somewhere? |
05:43 | <@McMartin> | If those are both based on entrySet or whatever they're actually secretly the same object |
05:44 | < Orthia> | ... I hope not |
05:44 | < Orthia> | Oh. Eh. Hm. |
05:44 | <@McMartin> | tailMap, entrySet, values(), and keySet() all are "views" - they're backed by the same underlying map, so changes to one will affect all of them. |
05:50 | < Orthia> | wate, hm |
05:50 | < Orthia> | It's getting most of the way through the loop |
05:50 | < Orthia> | So whatever it is doing is not inherently bad. |
05:51 | <@McMartin> | My guess is that you're calling add at some point when a condition is true? |
05:51 | <@McMartin> | Or recycling iterators, that'd do it too |
05:53 | < Orthia> | Now hang on a second, um, hm. |
05:53 | < Orthia> | Early on: oldStackSet = currentStackSet; |
05:54 | < Orthia> | I don't think I am managing to clear currentStackSet to a totally new Map anywhere. |
05:54 | < Orthia> | So that'd mean it's erroring when I try to add to the new currentStackSet, but that's actually just a pointer to the same object as the oldStackSet I am iterating through? |
05:56 | < Orthia> | HA NO MORE ERROR |
05:56 | < Orthia> | OK, now for the cleaning function, and where the hell I put it, hooray~ |
05:56 | < Orthia> | Prrrretty sure I want to clean up the currentStackSet before I pass it off to oldStackSet, yes? |
05:57 | < Orthia> | But after I've added everything to the list - and I can't do it before then because I won't yet know what the next value is. |
06:07 | < Orthia> | doh, this is not so good |
06:07 | < Orthia> | I iterate over oldStackSet to create currentStackSet; I then iterate over currentStackSet. Er. So I need to copy stuff that's valid over to newStackSet, yes? |
06:09 | <@McMartin> | Or remove invalid stuff with iterator.remove() |
06:10 | < Orthia> | Doesn't that break the Concurrent thingy? |
06:11 | <@McMartin> | Iterator.remove() is the only thing that doesn't. |
06:12 | < Orthia> | huh. Cool. OK. |
06:12 | | AnnoDomini [annodomini@Nightstar-2e5d6563.adsl.tpnet.pl] has joined #code |
06:12 | | mode/#code [+o AnnoDomini] by Reiver |
06:14 | < Orthia> | So. After the main construction loop, I have a for(Stack foo : tailMap(currentStackSet).values()) { } loop. How would I craft the .tailMap(foo).values() so I check foo vs foo.next(), and in a way where it won't break on the last item? |
06:16 | <@McMartin> | currentStackSet.tailMap(foo).values() is a collection; you want to iterate through that to see if there's anything in it that's cheaper than you. If there is, you can stop iterating and you know that foo can go away. If foo is *in* currentStackSet, you should probably make sure that it isn't foo |
06:17 | < Orthia> | Hm |
06:18 | < Orthia> | So I have a for loop within my for loop? I had hoped that if everything was sorted by reliability, you could just check if(foo cheaper than the next most reliable) keep foo; else remove foo; continue iterating. |
06:19 | < Orthia> | This may have been a logic flaw in my program, however? |
06:19 | < Orthia> | 'cuz if everything is sorted by reliability, your goal is to end with everything being sorted by price, too. |
06:25 | < Orthia> | Is this flawed? Is this /possible/? It requires me to ask just for The Next Item In The List, rather than iterating through the whole thing. |
06:27 | <@McMartin> | Hmm |
06:27 | <@McMartin> | Are you starting with an empty list? |
06:27 | < Orthia> | No, but I could |
06:27 | < Orthia> | I have currentStackSet, which is the current set of Stacks. They are theoretically going to be iterated through in order of lowest reliability to highest. |
06:28 | <@McMartin> | Because if you're filling it up, then filtering it, you have no guarantee that the guy next to you isn't going to be eliminated even though there's one better five elements down. |
06:28 | < Orthia> | Well, I'm doing all this /after/ the list has been populated |
06:30 | < Orthia> | I'm taking the list and (hopefully) doing a quick houseclean on currentStackSet before passing it to oldStackSet, and resetting currentStackSet to be repopulated with the next set of items |
06:30 | | * Orthia shall post it up so you can see where he's poking |
06:42 | < Orthia> | ... Is http://pastebin.starforge.co.uk/268 visible? |
06:43 | | Derakon is now known as Derakon[AFK] |
06:48 | | Orthia [orthianz@Nightstar-8865e808.xnet.co.nz] has quit [[NS] Quit: BRB, resetting router] |
06:49 | | Orthia [orthianz@Nightstar-5ba4dbb1.xnet.co.nz] has joined #code |
06:54 | < Orthia> | McMartin: http://pastebin.starforge.co.uk/268 |
06:57 | < Orthia> | If it is going to do what I hope it does, all I need is a .nextInList() command and I'll be laughing. |
06:57 | < Orthia> | If it is not going to do that I am in trouble. |
07:00 | | * Orthia also pokes Vornicus, is kind of worried about something in his code output, needs someone with Math to ensure his code is doing what he thinks it is. |
07:03 | <@Vornicus> | ? |
07:07 | <@Vornicus> | What're you worried about? |
07:08 | <@McMartin> | I'm not fully sure what I'm looking at here, I'm afraid. |
07:09 | < Orthia> | oh, sorry |
07:09 | < Orthia> | McM: The highlighted line; is there any way to get a .nextItem() for the iterator? |
07:09 | < Orthia> | The equivalent of comparing the current item of Set[i] to Set[i+1] |
07:10 | < Orthia> | Vornicus: http://pastebin.starforge.co.uk/269 |
07:11 | < Orthia> | Line 34 is supposed to be calculating the reliability for adding N items of reliability Y to a stack of items with reliability (already calculated) X. |
07:13 | <@Vornicus> | Orthia: the usual way to do this with an iterator is to store the /previous/ as you're walking through the iterator. |
07:14 | < Orthia> | ... that could work. Ha! |
07:15 | < Orthia> | Also solves the "What about the last item" issue. Hmm. |
07:15 | | * Orthia tries to figure out how you prime it. |
07:17 | | Serah [Z@3A600C.A966FF.5BF32D.8E7ABA] has quit [Ping timeout: 121 seconds] |
07:18 | <@McMartin> | Orthia: I think you may be better off caching the previous item, tbh |
07:18 | <@McMartin> | With "null" for previous meaning "this was the start" |
07:21 | < Orthia> | And just an if statement to skip over that iteration? |
07:23 | < Orthia> | arg, concurrentModificationException |
07:23 | < Orthia> | Maybe it does not like me using remove() on an item I have already moved past? |
07:25 | < Orthia> | Stack prevStack = null; |
07:25 | < Orthia> | for(Stack stack : currentStackSet.values()) { if(prevStack != null) { //Checking for 'is this the start' |
07:25 | < Orthia> | if(prevStack.compareTo(stack) >= 0) { currentStackSet.remove(prevStack.key()); } |
07:25 | < Orthia> | } prevStack = stack; } } |
07:25 | < Orthia> | er |
07:25 | <@McMartin> | Oh, that's not how you remove |
07:26 | <@McMartin> | You have to remove from the iterator itself, probably with an exposed one |
07:26 | <@McMartin> | it takes no arguments; it means "me, the dude you just got from next()? Gone." |
07:26 | < Orthia> | Aaaah. OK. Er. So once I've found the one I want to remove... |
07:29 | < Orthia> | Does this still work if I swap the operators around? |
07:29 | < Orthia> | "If this thing is worse than the previous" instead of "If this thing is worse than the next one"? |
07:54 | | * Orthia hates to be a nag, but sorta worried this is due in five hours >_> |
08:01 | < Orthia> | (I've been doing fairly well, then getting stuck on annoying logic errors~) |
08:03 | < Orthia> | Erk. "If the current one has a higher reliability" is not valid |
08:04 | < Orthia> | If I want to delete the current one, I need the key to be based on cost. |
08:04 | < Orthia> | So then I can go "If the cheaper one is more reliable..." |
08:04 | < Orthia> | damn, damn. |
08:05 | < Orthia> | wait, what's this CeilingEntry? |
08:05 | < Orthia> | Returns the key of the next item that's better? |
08:06 | | Thaqui [Thaqui@27B34E.D54D49.F53FA1.6A113C] has quit [Connection closed] |
08:24 | < Orthia> | Good news: It mostly worked. |
08:24 | < Orthia> | Bad news: It revealed that I have some impressive bugs. |
08:24 | < Orthia> | For one, I'm taking 4 devices, and ending up with a list of /six/ |
08:24 | < Orthia> | Which means it's doing something wrong somewhere, which is frankly baffling. |
08:29 | < Orthia> | AHA |
08:29 | | * Orthia should have checked that ages ago. >_> |
08:29 | < Orthia> | No wonder the math is wrong, the loop isn't behaving as it's intended. It's adding one of each device to each stack then moving onto the next. |
08:53 | < Orthia> | aha |
08:53 | < Orthia> | McMartin, Vorn: If I am going Stack newStack = currentStack; |
08:53 | < Orthia> | And then I do things to newStack |
08:53 | < Orthia> | Is it going to be altering the values of currentStack at the same time? |
08:54 | < Orthia> | Or is it making a new copy of the item? |
08:58 | <@McMartin> | Pointer copy |
08:58 | <@McMartin> | After the = both variables refer to exactly the same object until currentStack is itself reassigned. |
08:59 | < Orthia> | OKay, that'd do it. |
08:59 | < Orthia> | Um. |
08:59 | < Orthia> | How do I fix this? |
09:00 | < Orthia> | I want a copy of currentStacks data in newStack, preferably without having to screw around with yet /more/ constructors everywhere |
09:00 | <@McMartin> | You really don't want to be making copies of your whole data set all the time if you can help it |
09:00 | <@McMartin> | Ideally you have some way of mutating it along the way |
09:00 | < Orthia> | Hrm |
09:01 | < Orthia> | But I want to hold currentStack as the current baseline Stack |
09:01 | < Orthia> | And then have newStack populating my one-dimensional array with Stacks with the extra item added. |
09:02 | < Orthia> | The idea being that I have two one dimensional arrays - the previous collection of valid component combinations for N items, and the new one, which is filling up with the valid combinations of N+1 items. |
09:02 | <@McMartin> | Mmm |
09:03 | <@McMartin> | That sounds to me like you're allocating one map for each i (so there are two live at this point)... |
09:03 | < Orthia> | correct. |
09:03 | < Orthia> | Well, sorta. |
09:03 | < Orthia> | I'm supposedly allocating one map for the latest two i |
09:04 | <@McMartin> | ... but while that's going on the N+1 one should be set up so that it's adding things one at a time. For each candidate, you decide "do I add this?" and if no, then you continue |
09:04 | <@McMartin> | And if yes, you add it and possibly also have to annihilate anything both weaker and more expensive than it |
09:04 | <@McMartin> | Which could be a lot |
09:04 | < Orthia> | Yeah, so I do that later, once it's all populated. |
09:05 | < Orthia> | Thus giving me a collection of the 'best' options for N+1 items, which I then store and use as the baseline for coming up with the combinations of all the N+2 items. |
09:05 | <@McMartin> | Mmm |
09:05 | < Orthia> | This is what is /supposed/ to be happening, anyway. |
09:05 | <@McMartin> | I'm not off the top of my head convinced that a post-filter is wise |
09:06 | < Orthia> | A during-filter involved searching through the thing every time you added one |
09:06 | < Orthia> | I figured one pass at the end is a hell of a lot more efficient. |
09:06 | < Orthia> | (Also it was the way I was doing it by hand: "Figure out the combinations, cross off the ones that are no good, use the remaining as the baseline for the next row") |
09:07 | < Orthia> | So. Even if it's not technically ideal, is there a Stack newStack = copyOf(currentStack) command somewhere? |
09:07 | < Orthia> | Because newStack promptly gets altered, stored into a map, and then ignored until later. |
09:08 | <@McMartin> | Yes |
09:08 | <@McMartin> | You can say new TreeMap(anyOtherMap) and it does a copy |
09:08 | <@McMartin> | Or you can do it on the fly with, I believe, putAll(otherMap). |
09:08 | < Orthia> | Hrm |
09:08 | < Orthia> | But if I want to do that for Stack, I need to handcraft a constructor? |
09:09 | < Orthia> | (I'm copying constructors, not Maps at this point.) |
09:09 | < Orthia> | (The map interaction, AFAICT, is acting as intended. I'll find out soon~) |
09:17 | | You're now known as TheWatcher |
09:19 | < Orthia> | ... haha, java is unable to do it |
09:19 | < Orthia> | I shall have to handcraft a clone command for Stack. O.o |
09:21 | | Thaqui [Thaqui@27B34E.D54D49.F53FA1.6A113C] has joined #code |
09:22 | < Orthia> | Haha |
09:22 | < Orthia> | fixed that, got an infinite loop~ |
09:25 | | AnnoDomini [annodomini@Nightstar-2e5d6563.adsl.tpnet.pl] has quit [Ping timeout: 121 seconds] |
09:27 | | AnnoDomini [annodomini@Nightstar-8fe0558b.adsl.tpnet.pl] has joined #code |
09:27 | | mode/#code [+o AnnoDomini] by Reiver |
09:28 | | * Orthia sets it on fire. |
09:29 | < Orthia> | Why are you going Device 1: 1; Device 2: 2; Device 3: 3; instead of going Device 1: 1; Device 1: 2; etc? |
09:44 | < Orthia> | fffffffffffff |
09:46 | < Orthia> | My clone function did not work. Why the heck not? |
09:47 | < Orthia> | currentStack is still getting crap added to it! |
09:48 | <@Vornicus> | Sounds like you might have made a shallow copy. |
09:48 | < Orthia> | butbutbut |
09:49 | < Orthia> | but /how/ |
09:49 | < Orthia> | OK, stabbity. |
09:50 | < Orthia> | http://pastebin.starforge.co.uk/271 is where I am trying to remove the chance of a shallow copy |
09:51 | < Orthia> | http://pastebin.starforge.co.uk/272 - and how I'm trying to create a deep copy. When you pass it a Stack as the constructor, it /manually copies over the variables/. Why is this not working? |
09:53 | < Orthia> | ... wait, WAIT |
09:53 | < Orthia> | OK |
09:53 | < Orthia> | I am using Integer, Double, etc |
09:54 | < Orthia> | Don't tell me that Integer foo = bar; is coping the pointers for the integers as well |
09:54 | < Orthia> | Is there /any/ way to just get the raw number out? ;_; |
09:57 | <@TheWatcher> | My brain is far from actually awake yet, but tried using s.cost().clone() ? |
09:57 | <@TheWatcher> | etc |
09:58 | < Orthia> | Doesn't appear to exist. |
09:58 | < Orthia> | This is hilarious. |
09:59 | < Orthia> | In a 'shoot me now' kind of way, anyway... |
10:00 | <@TheWatcher> | Buh, Integet inherits clone() from Object though, what |
10:00 | | * TheWatcher decides tea is needed |
10:06 | | Alek [omegaboot@Nightstar-7ff8f4eb.il.comcast.net] has quit [Ping timeout: 121 seconds] |
10:08 | < Orthia> | Yeah, this is pretty crazeh |
10:10 | | Alek [omegaboot@Nightstar-7ff8f4eb.il.comcast.net] has joined #code |
10:12 | | Rhamphoryncus [rhamph@Nightstar-8931f88f.abhsia.telus.net] has quit [Client exited] |
10:39 | < Orthia> | Awesome, fencepost error |
10:39 | < Orthia> | This is a /good sign/ |
10:41 | <@Vornicus> | Better than most |
10:41 | | Vornicus is now known as Vornicus-Latens |
10:51 | | Orthia [orthianz@Nightstar-5ba4dbb1.xnet.co.nz] has quit [Client closed the connection] |
10:57 | | Orthia [orthianz@Nightstar-5ba4dbb1.xnet.co.nz] has joined #code |
10:59 | < Orthia> | Damnit. |
10:59 | < Orthia> | Now all I need is a for loop that acts as a do_while ;_; |
10:59 | < Orthia> | I cannot seed it. I cannot initialize it to 0 or null or anything. Failing to add anything at /all/ is just about as bad. Hmm... |
11:00 | < Orthia> | I just need something in the list for the first for loop to start populating everything /with/. |
11:00 | <@TheWatcher> | Java has do { .... } while(condition); |
11:00 | <@TheWatcher> | Or ar you meaning something else |
11:02 | < Orthia> | http://pastebin.starforge.co.uk/273 - yellow line down for a bit, till you see the second for loop. |
11:04 | <@TheWatcher> | line 54? |
11:04 | < Orthia> | right |
11:07 | < Orthia> | It's going down the rabbithole until the last loop, where it adds the first Device. Trouble is, this means it's adding Device 0. But the Stack tracks Devices by list position too - and they track each new one by going "Oh, new device? DeviceCount.add(n)" |
11:07 | < Orthia> | But the stack had already been given a Device 0, so everything gets thrown off by one, because the first thing it sees was a dummy. |
11:09 | | * TheWatcher eyes, apologises but is unable to allocate the time to decypher just what that's doing, as he needs to finish off this entrant certificate generator code |
11:09 | < Orthia> | No problem. |
11:10 | < Orthia> | Mostly I just need my for loop to behave differently on the first, and only the first, iteration. This is Fun. |
11:12 | <@TheWatcher> | if(i == 0) in a few places? ¬¬ |
11:12 | < Orthia> | ... heh, um, hm |
11:12 | < Orthia> | ... gods, that's an ugly, /ugly/ hack, but it would /work/ |
11:14 | <@TheWatcher> | Make it work first, then make it work fast/clean/whatever. |
11:28 | | * TheWatcher pulls his hair out at this |
11:45 | <@TheWatcher> | Why is GD::Image -> stringFT() dying with no error message, damnit?! |
11:46 | < Orthia> | nope, that didn't work. |
11:46 | < Orthia> | This is excitingly baffling. |
11:47 | < Orthia> | I mean, I'm /that close/ |
11:47 | < Orthia> | I just need it to not count the first item added. Ha. |
11:47 | < Orthia> | And I can't even shift things to /do/ that. |
11:47 | < Orthia> | Which is the maddening bit. |
12:06 | < Orthia> | Wonderful. |
12:06 | < Orthia> | An hour before deadline, I have gone from "Fencepost error" to "Program will not run". |
12:08 | | cpux is now known as shade_of_cpux |
13:22 | | Thaqui [Thaqui@27B34E.D54D49.F53FA1.6A113C] has quit [Client closed the connection] |
14:07 | | Orth [orthianz@Nightstar-2833f659.xnet.co.nz] has joined #code |
14:08 | <@ToxicFrog> | Orthia: that's what version control is for. (Please tell me you had it versioned so that didn't kill your project?) |
14:10 | | Orthia [orthianz@Nightstar-5ba4dbb1.xnet.co.nz] has quit [Operation timed out] |
14:37 | | Serah [Z@3A600C.A966FF.5BF32D.8E7ABA] has joined #code |
14:44 | | celticminstrel [celticminstre@Nightstar-f8b608eb.cable.rogers.com] has joined #code |
--- Log closed Fri Apr 23 15:10:04 2010 |
--- Log opened Fri Apr 23 15:17:29 2010 |
15:17 | | TheWatcher [chris@Nightstar-b4529b0c.zen.co.uk] has joined #code |
15:17 | | Irssi: #code: Total of 22 nicks [7 ops, 0 halfops, 0 voices, 15 normal] |
15:17 | | mode/#code [+o TheWatcher] by Reiver |
15:18 | | Irssi: Join to #code was synced in 56 secs |
15:32 | | RichardBarrell [mycatverbs@Nightstar-3b2c2db2.bethere.co.uk] has joined #code |
15:38 | | Serah [Z@3A600C.A966FF.5BF32D.8E7ABA] has quit [Ping timeout: 121 seconds] |
17:07 | | Orth [orthianz@Nightstar-2833f659.xnet.co.nz] has quit [Connection reset by peer] |
17:21 | | Orthia [orthianz@Nightstar-2833f659.xnet.co.nz] has joined #code |
17:28 | | Orthia [orthianz@Nightstar-2833f659.xnet.co.nz] has quit [Connection reset by peer] |
17:34 | | Orthia [orthianz@Nightstar-2833f659.xnet.co.nz] has joined #code |
17:40 | | Orthia [orthianz@Nightstar-2833f659.xnet.co.nz] has quit [Client closed the connection] |
17:46 | | Orthia [orthianz@Nightstar-2833f659.xnet.co.nz] has joined #code |
18:21 | | Orthia [orthianz@Nightstar-2833f659.xnet.co.nz] has quit [Client closed the connection] |
18:27 | | Orthia [orthianz@Nightstar-2833f659.xnet.co.nz] has joined #code |
18:31 | | Vornicus-Latens is now known as Vornicus |
18:34 | | RichardB_ [mycatverbs@Nightstar-3b2c2db2.bethere.co.uk] has joined #code |
18:35 | | RichardBarrell [mycatverbs@Nightstar-3b2c2db2.bethere.co.uk] has quit [Connection closed] |
18:40 | | RichardB_ [mycatverbs@Nightstar-3b2c2db2.bethere.co.uk] has quit [Ping timeout: 121 seconds] |
18:40 | | Orthia [orthianz@Nightstar-2833f659.xnet.co.nz] has quit [Client closed the connection] |
18:47 | | Orthia [orthianz@Nightstar-2833f659.xnet.co.nz] has joined #code |
19:12 | | Orthia [orthianz@Nightstar-2833f659.xnet.co.nz] has quit [Client closed the connection] |
19:20 | | Orthia [orthianz@Nightstar-2833f659.xnet.co.nz] has joined #code |
19:21 | | Rhamphoryncus [rhamph@Nightstar-8931f88f.abhsia.telus.net] has joined #code |
19:31 | <@jerith> | Aarghdammit! |
19:31 | | * jerith stabbystabs Java in the Interfaces. |
19:33 | <@jerith> | I have a ResourceRepository interface. |
19:34 | < PinkFreud> | woah! watch whose interface you're aiming at, there. |
19:34 | <@jerith> | Some ResourcesRepositories are read-write and others are write-only. It's theoretically possible to have read-only repos as well. |
19:35 | <@jerith> | So I want three interfaces. One for the base common stuff, one for the read stuff and one for the write stuff. |
19:36 | <@jerith> | Except that makes it really hard to construct stuff and pass it around. |
19:50 | < celticminstrel> | Have the read and write inherit from the base one? |
19:51 | < celticminstrel> | Then read-writable ones would inherit both from the read interface and from the write interface. |
19:51 | < celticminstrel> | ...well, implement not inherit from. |
19:51 | <@jerith> | Yeah. |
19:51 | <@jerith> | Except I have to pass them around by interface. |
19:52 | <@jerith> | And I construct them by reflection. |
19:53 | <@jerith> | So I'll have to cast them all over the place. |
19:53 | <@jerith> | And then deal with the cast exceptions. |
19:54 | <@jerith> | Because I'm pretty sure I can't see what interfaces something implements at runtim. |
19:54 | < celticminstrel> | Can't you? |
19:54 | < celticminstrel> | I would think you'd be able to. |
19:56 | <@jerith> | Ah, I can. |
20:00 | <@jerith> | I don't think that helps me at all, though. |
20:02 | <@jerith> | Hrm. Apparently interfaces can do multiple inheritance. |
20:02 | <@jerith> | At least, Eclipse isn't complaining when I do it. |
20:02 | < celticminstrel> | Yes, they can. |
20:03 | < celticminstrel> | I'm pretty sure. |
20:03 | < celticminstrel> | Since, after all, interfaces are Java's nerfed form of multiple inheritance, right? |
20:03 | <@jerith> | Maybe I should just add a ReadWrite interface that pulls in both. |
20:03 | < celticminstrel> | You could do that. |
20:04 | <@Vornicus> | Interfaces, because all they give is function signatures, can do MI - what it's trying to prevent here is conflicting implementations. |
20:04 | | * jerith nods. |
20:20 | <@McMartin> | You can in fact do that |
20:21 | <@McMartin> | And instead of checking for cast exceptions, you can always use instanceof. |
20:21 | <@McMartin> | That said, you should be casting these things exactly once during main program setup and exposing a factory that generates the interface type thereafter |
20:24 | <@jerith> | McMartin: I'm not quite sure how to structure this. |
20:25 | <@jerith> | The config can /theoretically/ change at runtime, so I read it and construct the objects whenever they're required. |
20:26 | <@McMartin> | That sounds incredibly alarming from a state consistency standpoint |
20:26 | <@McMartin> | But maybe I'm missing the larger structure |
20:26 | <@jerith> | They don't keep state. |
20:27 | <@jerith> | The application is a file-store-in-the-sky. |
20:27 | <@McMartin> | You should always strive to keep the reflection-based code walled off into its own little corner of the app, of coure |
20:27 | <@jerith> | You can get, put and existance-check files in it. |
20:28 | <@jerith> | There are multiple backends for storage. Local filsystem, various cloud storage providers, etc. |
20:28 | | Serah [Z@26ECB6.A4B64C.298B52.D80DA0] has joined #code |
20:29 | <@jerith> | The actual file storage backends are read/write. |
20:29 | <@jerith> | There are also a couple of "queue for processing later" backends, which are write-only. |
20:29 | <@McMartin> | Yeah, I would not want to rebuild the backend on every operation. |
20:30 | <@jerith> | Oh, wait. It isn't done on each operation. |
20:31 | <@jerith> | Only when I ask for a repository that it has not yet loaded. |
20:32 | | * jerith hasn't looked at this code in several months. |
20:47 | < Alek> | "The next superhero movie should be called 'Root Man'. I even know the slogan - 'only root can do it'." |
21:10 | | * jerith decides this isn't worth the pain, and doesn't make it less messy anyhow. |
21:10 | | Zed [Zed@Nightstar-d7ade99d.or.comcast.net] has quit [Connection reset by peer] |
21:10 | | Zed [Zed@Nightstar-d7ade99d.or.comcast.net] has joined #code |
21:11 | <@jerith> | It just moves the messiness around. |
21:12 | | Serah [Z@26ECB6.A4B64C.298B52.D80DA0] has quit [Ping timeout: 121 seconds] |
21:45 | | celticminstrel [celticminstre@Nightstar-f8b608eb.cable.rogers.com] has quit [[NS] Quit: *whistles* Did you hear something?] |
21:46 | | celticminstrel [celticminstre@Nightstar-f8b608eb.cable.rogers.com] has joined #code |
21:46 | | Zed_ [Zed@Nightstar-d7ade99d.or.comcast.net] has joined #code |
21:47 | | Zed_ [Zed@Nightstar-d7ade99d.or.comcast.net] has quit [Client closed the connection] |
21:47 | | Zed_ [Zed@Nightstar-d7ade99d.or.comcast.net] has joined #code |
21:48 | | Zed [Zed@Nightstar-d7ade99d.or.comcast.net] has quit [Ping timeout: 121 seconds] |
21:52 | | Serah [Z@2C3C9C.B2A300.F245DE.859909] has joined #code |
22:07 | < PinkFreud> | argh. openoffice is pissing me off. |
22:08 | < PinkFreud> | one would think that changing the format of cells would be easier than this. one would also be wrong, if one were to use openoffice. |
22:09 | < Namegduf> | One would think that... easier... openoffice. |
22:09 | < Namegduf> | I would not. |
22:17 | < PinkFreud> | heh |
22:17 | < Namegduf> | Seriously, I would pay for and run MS's stuff in a VM first. |
22:17 | | * Vornicus agrees with namegduf. |
22:17 | | * Vornicus eyes namegduf's name. |
22:18 | < PinkFreud> | I open a spreadsheet containing timestamps of the format MM/DD/YYYY HH:MM:SS |
22:18 | <@Vornicus> | Is it actually /intended/ to spell "fudgeman" backwards? |
22:18 | < Namegduf> | Yeah, I named myself after a food I like. |
22:18 | < Namegduf> | It was supposed to look like a valid name forwards, too. |
22:18 | <@Vornicus> | asweome |
22:18 | < PinkFreud> | oo tells me they're of standard text format. fair enough. |
22:19 | < PinkFreud> | I change the formatting of the cells to a timestamp format. oo says 'sure, but I'll insert a "'" in each cell to force them to text format first!' |
22:19 | < Namegduf> | Ah. |
22:20 | < PinkFreud> | If I delete the ' by hand, oo *finally* recognizes the cell as containing a valid timestamp. |
22:20 | < PinkFreud> | the problem is, I'm not going to do that for 500+ cells. |
22:21 | <@Vornicus> | uh...huh. |
22:21 | < PinkFreud> | yeah |
22:21 | < Namegduf> | Even for handling an MS spreadsheet, that's bad. |
22:21 | <@McMartin> | Re: Fudgeman: I completely failed to notice that ever. Well played. |
22:21 | < PinkFreud> | this should be a simple format change. nothing more. |
22:22 | <@Vornicus> | McM: I just noticed it right now. |
22:22 | < PinkFreud> | instead, I've been banging my head against this brick wall for three fucking hours. |
22:22 | < Namegduf> | Haha. Thanks. :P |
22:23 | < Namegduf> | PinkFreud: Can you export to CSV from the original format, and import? |
22:23 | < PinkFreud> | the original format *is* csv |
22:23 | < Namegduf> | Ah. |
22:25 | < PinkFreud> | now you see why this is so maddening |
22:25 | < Namegduf> | Yeah... |
22:26 | <@jerith> | PinkFreud: Copy the timestamps, clear the cells, change the format, paste them back? |
22:27 | < PinkFreud> | jerith: ' |
22:27 | <@jerith> | So much for guile and cunning. :-/ |
22:27 | < PinkFreud> | I have plenty of that. |
22:27 | < PinkFreud> | unfortunately, oo was apparently written by complete idiots. |
22:28 | < PinkFreud> | idiocy ALWAYS outdoes guile and cunning. |
22:28 | <@jerith> | No, you're confusing it with lame. |
22:28 | < PinkFreud> | I have that, too |
22:28 | < Namegduf> | OO was written by mad programmers |
22:28 | < Namegduf> | THat's my theory. |
22:28 | < Namegduf> | Who else would WANT to touch its codebase? |
22:32 | < PinkFreud> | heh |
22:32 | <@jerith> | So, you're all smart people. |
22:33 | <@jerith> | Can anyone tell me what I'm doign at the office at nearly midnight on a Friday? |
22:33 | < Namegduf> | "Your office has awesome flexible hours." and "You're an incredible geek." |
22:34 | <@jerith> | Except I stopped working about a page and a half up the scrollback. |
22:34 | < Namegduf> | I mean, I'm on IRC, but that's only because there's someone I want to talk with. Also, I'm not going away from this last enchilada until I'm hungry enough to eat it again. *delicious* |
22:34 | < Namegduf> | I should be fair, I'm on IRC other Friday's, too. :P |
22:34 | <@jerith> | I'll need to find a purveyor of supper on the way home. |
22:35 | <@jerith> | A vendor of fine (or maybe coarse) foodstuffs. |
22:35 | < PinkFreud> | jerith: it's 5:30 pm here, and I'm still at the office banging my head against a brick wall named openoffice. |
22:36 | | Orthia [orthianz@Nightstar-2833f659.xnet.co.nz] has quit [Ping timeout: 121 seconds] |
22:36 | <@jerith> | PinkFreud: I stopped banging my head against Java a little after 10pm. :-) |
22:37 | < Namegduf> | I've concluded that all the Java I've written this year requires refactoring again to be maintainable due to each bit of work adding major new architectural requirements on the earlier, and is actually quite ugly as a consequence. |
22:38 | <@jerith> | Namegduf: That's what I'm running into here. |
22:38 | <@jerith> | The cleanest solution would be to treat my two different kinds of repos as two different kinds of repos completely and configure them separately. |
22:39 | < Namegduf> | I'm relatively lucky, I've got a solution you don't. |
22:39 | <@jerith> | I /could/ fake this to some extent. |
22:39 | < Namegduf> | "Sure, it's ugly, but it *looks good* enough to pass a brief marking, so I don't care any more, this is the last piece of work with it." |
22:40 | <@jerith> | This has been running in production with no major issues for nearly a year. |
22:40 | <@jerith> | There isn't a category for it in the bug tracker, because nobody's ever filed a bug for it. |
22:40 | <@jerith> | I count this as a major success. |
22:40 | < Namegduf> | That's nice. |
22:40 | < PinkFreud> | and now my boss has left for the weekend. considering he has a piece of data I needed this spreadsheet for... |
22:41 | < PinkFreud> | Thank you, openoffice, for being such a brain-dead piece of shit. |
22:41 | | * jerith finds his shoes and prepares to pack up. |
22:41 | | * jerith hugs PinkFreud, offers him VisiCalc. |
22:41 | < Namegduf> | See you. |
22:43 | < PinkFreud> | ok, since I've wasted this much time, now I just *have* to see if Office 2007 is just as brain dead. |
22:46 | < PinkFreud> | nope. it handles the cell conversion just fucking fine. |
22:51 | | GeekSoldier_ [Rob@Nightstar-e86e3e0d.ip.cablemo.net] has joined #code |
22:51 | | GeekSoldier [Rob@Nightstar-e86e3e0d.ip.cablemo.net] has quit [Client closed the connection] |
23:17 | | EvilDarkLord [jjlehto3@Nightstar-f1ccbb45.hut.fi] has joined #code |
23:37 | | shade_of_cpux is now known as cpux |
23:39 | | Alek [omegaboot@Nightstar-7ff8f4eb.il.comcast.net] has quit [[NS] Quit: ] |
23:41 | | Alek [omegaboot@Nightstar-7ff8f4eb.il.comcast.net] has joined #code |
23:48 | | AnnoDomini [annodomini@Nightstar-8fe0558b.adsl.tpnet.pl] has quit [[NS] Quit: Enough.] |
23:51 | | Derakon[AFK] is now known as Derakon |
--- Log closed Sat Apr 24 00:00:17 2010 |