Archive for June, 2009

iPod Touch OS 3.0 is Out at the iTunes Store

Thursday, June 18th, 2009

iPodTouch.jpg

Well... I'm not sure I'm going to see a ton of improvement in my iPod Touch, but it's an upgrade, and there's that little chance that I'm going to wish I had that one feature when I don't have access to the 'net - so for $9.95 I upgraded to OS 3.0 this morning.

If I end up getting the iPhone 3GS, then I'll probably give this guy to Liza or the kids, but if I don't, or it takes a while to get one, then I'd like to have it up to date for a while. So I got it.

I have to say that Apple makes it easy to upgrade these guys after the initial horrible sync/backup times of the original device. Yikes! I remember that. But no longer. It's nice and clean. Good job.

NeoOffice 3.0 Patch 4 is Out

Thursday, June 18th, 2009

NeoOffice.jpg

I don't worry about staying too up-to-date with NeoOffice because for the most part I don't use it. But every now and then I use it to read a file someone sends me that can't be read by the other apps I have to fake MS Word or some older word processor. It's been a while since I've updated, and so this morning when I heard about Patch 4 being released, I decided that today was the day to get up to date.

Good enough. I'm ready for the next time I need it.

Skitch Beta 8.2 is Out

Thursday, June 18th, 2009

Skitch.jpg

This morning, after my reboot for Safari 4.0.1, I found that Skitch's Beta had timed out, and that the new Skitch: Beta 8.2 was out with the following release notes:

Improved

  • Improved GIF and BMP support
  • Extended Skitch beta time-out

I can't imagine running without Skitch - had to upgrade. And if they start to charge for it, I'll be first in line - no question. It's the Post-It notes of my Mac -- didn't know I needed it until I had it and now I can't imagine working without it.

Safari 4.0.1 on Software Update

Thursday, June 18th, 2009

Safari.jpg

Well... I wish I didn't have to reboot my box, but again this morning, I didn't really have a choice. Software Updates had Safari 4.0.1 on it and the release notes say:

This update addresses incompatibilities between Safari 4.0 and certain features in iPhoto ‘09, including Places and Facebook publishing.

So in typical Apple form, it doesn't give any real details, but still... it's Safari, and that means it's time to agree to the update and reboot the system.

Helping Out and Making Progress

Wednesday, June 17th, 2009

cubeLifeView.gif

Today has been a pretty decent day. We figured out why my NVIDIA 8400 GS video card wasn't displaying 2560x1600 with RHEL5 x86_64 - turns out the 180.51 driver was too old - when updating to the latest (185.18.14), it worked fine. Big difference to see it all and it is a great view. I can see a lot more of the code and web pages. Nice.

I also helped out a bit as a co-worker started making another page in the webapp that I started. This one was a heat map from the Google Visualizations, and it was OK, but the limitations really made it hard to display the data the way she wanted. We talked a bit, and I looked at the other visualizations and the Magic Table was really a winner. It was HTML 5-based and that's great, but also it had all she was looking for. Hopefully, it'll be easy to retrofit the Magic Table for the Heat Map.

I needed to help one of the Q/A folks get the software of mine they were testing up and going. It's been a chore as I inherited the code from another developer and the set-up of new machines is not what you'd call very deterministic. Basically, it's a "clone a VM and go" type of thing, and that leads to difficult situations when you have to re-configure it for Q/A test points.

Still, we got that going, and hopefully, we'll get through Q/A quickly and I can deploy the latest release and start on the next.

Finally, tonight is Nina's first playoff game for the 2009 softball season. The Twins go into the playoffs a 12-0 favorite - the next-best team is something like 8-4, or something like that. Still... on any given evening someone can get hot and win. Here's hoping that the Twins win this evening and move on to the next round.

Incredible BBEdit 9 Font – Anonymous Pro

Wednesday, June 17th, 2009

I was reading Gruber today and he pointed to an article about a new free font - Anonymous Pro. It's very clean and nice, and at a 10pt Bold, it's perfect for BBEdit. It's dark enough to be very readable, but not too smashed to be unreadable. It's tight, has wonderful 'greater than' and 'less than' signs... it's just perfect for BBEdit.

BKSimpleScatterGraphApplet.java

I tried it in Xcode, but I have to say here, the rendering they use in Xcode is best served by Panic Sans. But still, it's not bad.

I tried it in MacVim, but again, Inconsolata was better here for how they rendered text. Still, not bad.

So it's going to depend on what app and what you want to see, but for a light background on BBEdit, this is amazing.

LaunchBar 5 Release Candidate 3 is Out

Wednesday, June 17th, 2009

LaunchBar5.jpg

This morning I saw that LaunchBar 5 had another small step towards "dot-O" with the release of Release Candidate 3. The release notes are a little sparse, which is good, possibly indicating that we're getting close to the final product.

I have to say, it's been rock solid for me, and I absolutely love the clipboard history. It's saved me a ton of time.

Facing the Way it Is, as Opposed to How You Want it to Be

Tuesday, June 16th, 2009

cubeLifeView.gif

Today I spent a good bit of time planning out the changes I need to make in this one project I'm taking over. It's not the way I'd build it, but that's really beside the point... it is and I have to work with that. Plain and simple.

So I'm looking at why a strike for an option that should be 1.34 is really 1.34000003674 - I've run into this before in my previous job: rounding in the format change from string to float or double. It's just the way things are. So I needed to see how things were being converted and then see where I might be able to put in code to properly round to something like 1.0e-4, or something.

I found the data in the database was stored as a real, and that's not a good sign right off the bat, as I think that's going to be mapped into a Float by JDBC as opposed to the Double that might have prevented this. But the problems didn't end there. The code I found mapped the value to a String and then later, it was mapped to a Double and then used. By then, I'm not at all surprised that it had the extra digits. Too many conversions. Way too many.

But again, in order to minimize the impact to the code, it was smarter to look at where the options were being created and insert the rounding on the strike at that point. It's not what I'd have wanted to do, but again, I had something that was close to right, and so it wasn't really worth the risk of changing all the mapping and database code when the problem could be addressed very simply in the setter code of the new option:

  public synchronized void setStrike(Double value) {
    _strike = Math.rint(value * 1.0e4)/1.0e4;
  }

with this, we'll get the strike rounded to the nearest 1/100th of a cent. Easy to do, and it'll wipe out all the "problem digits" that we're seeing.

But I wasn't done yet. There was more code that needed fixing on the strikes. There was a place in the code where they were trying to create the "short-hand name" of the option and it had the following code to display the strike:

  double   decimal = strike - Math.floor(strike);
  int      strikeInt = new Double(strike).intValue();
  ...
  if (decimal > 0.)
    shortName.append(strike);
  else
    shortName.append(strikeInt);

where the goal is to render the Double 1.5 as "1.5" and the Double 95.0 as "95". Basically, if there's no fractional part, then don't show the decimal point. Seems good, but this is a horrible way to do it. A far better way would be to say:

  DecimalFormat  fmt = new DecimalFormat("0.####");
  ...
  shortName.append(fmt.format(strike));

where the formatter will properly round to four decimal places and also drop the entire decimal part if there isn't one to display.

Sure, the DecimalFormat isn't thread-safe, but I'm not expecting it to be. Make one, use it, drop it. They are meant to be very lightweight classes - which is why they aren't thread-safe. But in this case, they are perfect for the occasion.

Then I got into another problem that I needed to tackle and realized that I didn't see where the original author had made any allowances for the feature. I looked more and still found nothing. I then shot off an email as I dug even further. By the time I talked to him, I was convinced that he simply didn't have any modeling of this particular business rule in the code. It was all based on configuration files that duplicated these business relationships he didn't want to include.

I talked to him and he fessed up about not making any allowances for this because he thought it was wrong. I pointed out that all he did was to push it into static config files in the server, and he agreed.

Right or wrong, a business rule is a business rule. It's not about "correctness". It's about how the users think of things. If they choose to think of things as "colors" then model the colors - just as they think of them. Don't make the quality judgement on the way things are - just use them.

I had done this with his code - from the get-go, but he wasn't as accommodating of the users. I told him what I needed to do and why, and was very nice about the judgement, but in the end, we need to add in this concept as it's critical to being able to do several things that are globally important, even if they aren't important to him.

It's important to understand that there's a time to correct something because its wrong, and leaving it as-is is going to cause more problems in the future, and when it's time to let it flow over you and work with the imperfect system that you've been given.

Interesting Alternative to Google Visualizations

Tuesday, June 16th, 2009

GoogleVisualization.jpg

I've been using the Google Visualization AnnotatedTimeLine for quite a while. It's a pretty nice tool, and it's got the backing of Google, for all that means. Good and Bad. This morning I was pointed to the Chronoscope web site where they seem to have built something on top of the GWT that can replace the AnnotatedTimeLine pretty much completely. It even has a 'compatibility' skin where it looks like the AnnotatedTimeLine (or so the docs say).

I'm always on the lookout for something that's better, faster, and cleaner than the stuff I'm using. This certainly has a lot of things to like. Right now, my biggest concern for the AnnotatedTimeLine is the fact that it 'flashes' on all updates. It's not fast but part of that is the fact that I have to give it the entire dataset at each update. It'd be great if the dataset was able to be augmented, and in doing that, it only redrew the parts that changed.

I'm not sure that Chronoscope is the answer. It's no faster than the AnnotatedTimeLine for similar dataset sizes, but it's something to keep and eye on. Maybe it'll post some specs on speed and size and give me more reason to investigate it further.

Hulu Desktop 0.9.4 is Out

Tuesday, June 16th, 2009

HuluDesktop.jpg

I noticed this morning that Hulu Desktop has been updated to 0.9.4 - no mention of the changes in this release, but there's no reason not to update. I did hear a rumor that Hulu is considering charging for video streams. It's certainly possible given the new desktop client, but it's not in keeping with the way Hulu started. It's already got adds - targeted adds, even. So why ask us to pay? Maybe to get rid of the ads, that's something that folks might pay for.

Who knows. We'll have to see how things unfold in the coming weeks and months.