iMovie 8.0.5 is on Software Update

October 14th, 2009

This morning I noticed an update to iMovie was out - with an interesting list of features:

  • Improved compatibility with camcorders using the iFrame video format
  • Improved compatibility with importing video captured on the iPod nano
  • Fixed problems with resizing the iMovie window during playback

looks like there was a bit of incompatibility on the importing fixed up this time. SOunds good to me.

Bumpy Rollout and Flex Licensing Issues

October 13th, 2009

Today was a rough day. Yesterday evening we rolled out new hardware for this application. Should have gone smoothly, but there were a few little glitches. Even so, it was all running and looking OK when I left last night and I had a good (but tired) feeling that things were going to be just fine.

Looking back, I have to giggle at my silliness.

Part of the rollout was a Flex component that I was given and needed to build. At the time, I was given the tools by the original author, and it all seemed to work. You can see it coming, can't you? Anyway, when I built things for this release, a few of the graphs had watermarks saying "Hey, this isn't licensed".

There was nearly a panic.

Did it work with the watermark? If not, then it's a rollback - but we've done hours worth of work, it'll take hours to get it all back. Nightmare! So I kept with my plan - push forward not slide back.

What I needed was to get the Flex license codes so I could build this app without the watermarks. Simple, right? Ha! Silly me. I had to chase things around to first find out if the watermarked graphs worked (they did), and that took the gun away from my head. It was ugly, but not inoperable.

Next, I got the install package, but the problem was that there was no directions for getting it installed on Linux. The public domain Flex compiler was on linux (my build/deployment platform) so I knew it had to work there, but how?

I ended up finding a place on the Adobe web site about the different locations for different OSs for this license.properties file. I put it in two of the locations on linux (just to be sure) and tried it again.

Sweet! It worked. I could just deploy the compiled SWF file to the web servers and be done. I showed the users and things were fine. Whew! That was nasty for a while.

[10/15] UPDATE: I just saw the PO for Flex Pro, which is what I need, and it's $699! Amazing. I can't believe it's that expensive. Maybe there's a ton of widgets that I don't see, but that seems like a lot for a few widgets as the rest is Open Source and works just fine. Well... it's what the customer will pay.

For the Children – Don’t be an Optimistic Coder

October 12th, 2009

For the love of the Children... or your favorite religion... don't be an optimistic coder. That's the worst thing you can possibly be. This evening I've been struggling with the rollout of a new application and hitting a problem that defied explanation for at least two hours. This wasn't the only problem I had this evening, it was just the one that delayed me the most.

To start off, I was in the middle of the roll-out (London done, ready to do NYC) when I got a little "prairie dog" from my manager: "Hey Bob, can you hold off on the roll-out for a bit. I just want to check on something." Well... sure... I was 4 mins until the time I was to do the second of three phases of the roll-out, and somethings were already done from an infrastructural point of view, but sure, I'd hold off.

So I held.

For 45 mins.

Then he said "OK, go ahead." Nice guy, but really... the time to say "Hold off" is before I start the roll-out, not between phases I and II. It's a little bit of a problem when you do it that way. Since I didn't have control of the DNS entries, I was already at a point that rolling back phase I was going to be hard, so what's up? Never found out, but that's OK. We went ahead with it.

Then I got to the problem that held me up for a few hours.

I'm not one to give up easily. In fact, for a roll-out, I can't remember ever backing it out as opposed to fixing the issues right then and there. So I had to figure out why two of the four boxes in NYC were giving us grief. I was able to skip it and roll-out Chicago, but I came back to the problem boxes soon enough and had to face the music. It was nasty.

I looked at the evidence in the logs and it was as if the code simply stopped. It did one request, started another and that was it. Dead. No crash... no core... just stopped.

We tried network issues, DNS resolution issues... everything that might be a problem. In the end, I was just thinking of all the steps the code was doing and the memory popped into my head. I increased the memory on the JVM, and BINGO! It worked.

So here's the thing I can't stand about production coding: Optimistic Coders. The original coder of this little app had used a try/catch block in the code and 'swallowed' the Exceptions. He didn't think they'd ever be needed, I guess. Well... he was wrong. Had I been able to see a Java OutOfMemory exception, this would have held me up for about 2 mins and I'd never have wondered what was wrong - it would have been telling me what was wrong.

No, by hiding the true cause, this coder has hurt the reputation of Java, the developers in the group, and certainly himself. It's sad that the JVM can't take an arg that says "up to the limit of the box" for memory usage. But it can't. You have to "size" the apps. So be it. But when you assume that everything is going to be OK, and never check return values, never check to see if the thing you asked to create was, in fact, created, then you leave yourself open to all kinds of problems. All kinds.

It's over now, but I've lived through this so many times, I don't even bother trying to educate the unaware. I'll say something, in passing, and if he's interested in really understanding his problems, he'll ask. But I'll bet you he won't. If he was interested in doing a good job, then he'd have thought of it already. But he hasn't. He'll be like this as long as he's coding. Too bad.

MacVim Snapshot 50 is Out

October 12th, 2009

MacVim.jpg

This morning I noticed that Björn has released MacVim Snapshot 50 which is now Intel-only and 10.5 or later. I can understand his reasons, and completely agree - it's what most people have, it's the future, and the code still compiles on the older machines and OS versions, it's just not something that he's going to spend time building.

It's wonderfully fast on Snow Leopard on my laptop, and I have to say, if I only had one editor to use for the rest of my professional life, I'd be happy using Vim. It's just that good.

Apple Releases iPhone OS 3.1.2

October 9th, 2009

iPhone3GS.jpg

Interesting that this morning I read that Apple has released a new version of the iPhone OS: 3.1.2. The low-down on this update is that it adds no new features, but contains several bug fixes that were causing a lot of grief to some users:

The code adds no new features, and instead fixes bugs, such as one preventing sleeping iPhones from waking. Also targeted are crashes during video streaming, and a bug which interrupts cellular connections until a phone is rebooted.

The report I read goes on to say that I'm also getting an AT&T carrier update:

American iPhone owners are being given a parallel AT&T carrier update, v5.6; it is unknown what changes the code makes.

Interesting. Tethering?

iTerm 0.10 is Out – Long Time Coming

October 9th, 2009

This morning I noticed that iTerm 0.10 was finally out, and I have to say, it's been ages since a real update to this guy. It's nice, but they are still missing the ability to have workspaces, and the one thing they have that I like is the ability to remove the scrollbar. I've come to terms with this and Terminal.app seems OK to me. Wish I could turn off the scrollbar, though.

DrawIt 3.10.1 is Out with Snow Leopard Fixes

October 9th, 2009

I saw that DrawIt 3.10.1 is out and the big change is in how the files are saved. I've seen this on several other apps moving to Snow Leopard, so I'm guessing that this fact, combined with the micro release number means that it's just one little thing and yet it's important. Good enough for me.

Getting my App through QA and Migrating to New Hardware

October 8th, 2009

Today has been interesting, and even a little fun. I've been pushing my web app through QA and they have interestingly come up with some issues - primarily UI issues, but ugly nonetheless. Also, there were a few issues with the new sliding median filter on the data, and I needed to take care of that zippy pronto.

A Set Means Unique Elements

Seems obvious, no? But I forgot it. I was looking to make a clever median filter and rather than continually sort the array with Collections.sort(), I thought Hey! I'll use a TreeSet and then get the middle element. Clever idea, if it worked. But the TreeSet is, after all, a Set, and that doesn't allow for duplicate values. This meant that when I put in a new value that was the same, numerically, as one already in the list, I was loosing it as only unique members can be in the set. When I then removed a value from the set, I ended up removing the one value, but that might have stood for multiple originals. Nasty.

In the end, I needed to replace the TreeSet with a simple ArrayList and then after I added the new point and removed the old, I sorted the List<Double> using Collections.sort() and then picked out the middle value and that was the median.

When I did this, the data started making a lot more sense.

Big Duh on my part.

Migrating to New Hardware

It's not glamorous, and there's a ton of things that can go wrong, but I think they are all working put pretty well on the migration from the old linux VMs to the new linux hardware. Four servers in all at this time - one I did several weeks ago in London, but they all had to be phased in smoothly.

For the two web servers for my main visualization app, I also set up mod_proxy and proxy_ajp.conf on the apache servers for these boxes. It was a little time-consuming because I had to see the changes, tell the admins what to change, and then iterate. It took a few times, but that's not too bad. The advantage here is that I don't have to hassle with the maintenance, and can enlist them when things go south.

The vanity URLs that I set up are making the access to the sites a ton easier. The long, drawn-out URLs for a typical Tomcat app are just too clumsy for users to really remember. The vanity URLs are just what the doctor ordered.

Setting Down Broad Brush Strokes for Next Project

October 7th, 2009

I've been asked to re-write my coding nemesis. It needs to do a lot more in the next cut, and there's just no way the existing version is going to be able to "stretch" to fit these needs. What I needed to do was to get the broad brush strokes down... the main ideas... on paper so that I was sure things would fit together and I'd be able to get the project working in a reasonable timeframe.

That's why I was looking at the embeddable web servers, among other things.

There's a lot to do, and dividing up the work between myself and the other guy working on the project needs to be worked out as well. Again, just the big broad strokes.

On the Art of Programming

October 7th, 2009

I was reading the web this morning and ran across this post by Guy English, and it perfectly expresses my beliefs on the subject of coding:

Programming is an exercise in overcoming how wrong you’ve been in the past. At first you’ll overcome the syntax errors, then you’ll overcome the structural errors, and then you’ll come to align your code with the standards of a greater community and you’ll feel safe and like you’ve made it. You haven’t – you’re still wrong because you’re always wrong. You are playing a game you cannot win. And let’s face it – if it was a game you could win you’d not be playing at all.

I read that, and it's exactly what I feel. There's always a better way to do it. But the beauty of it is that you can always make it better. Spend the hour and make that method better. Spend the day and refactor that mess and make it clean. You can do it. Always.