Archive for July, 2009

WordPress 2.8.1 is Out

Friday, July 17th, 2009

wordpress.gif

This morning I was upgrading Firefox and I noticed that WordPress has been upgraded to 2.8.1 and I went over to HostMonster to see if SimpleScripts had the update - sure enough, it did. I'm not exactly sure why the availability of this update didn't generate an email like the previous one did, but no matter, I spent the few minutes updating the WordPress installs on my HostMonster account.

I do think this is a great thing - HostMonster and WordPress. Very nice.

Firefox 3.5.1 is Out

Friday, July 17th, 2009

Firefox3.5.jpg

This morning I noticed that Firefox 3.5.1 is out with the same suite of stability and security fixes inside. Not bad, it's been a week or two and so the attacks begin. I'm glad I don't write browsers or I'd get a serious case of paranoid coding. I'd be looking at all my code thinking how some 15 yr old idiot, sitting in his parent's basement, in Russia, is going to attack my code. Yikes. I can live without that.

MacVim Snapshot 47 is Out

Friday, July 17th, 2009

MacVim.jpg

They found a crashing bug that's been in the code for a while and so issued a fix for that right away - snapshot 47. Nice guys. Thankfully, the crashing bug isn't something I've run into, but it's nice that they are really pushing the envelope of user testing and finding these things.

Busy, Busy Day

Thursday, July 16th, 2009

cubeLifeView.gif

Today was a day where I was coding all day long. In the middle of the addition to the code so there wasn't a lot of design, and not really near the end where there were a lot of tests. It was a day where I was just heads-down coding.

There were a few tests in the middle - when I got to the point that I was able to send emails from my alert system. But those weren't nearly as interesting as the conditions I could check for were pretty simplistic and I knew there needed to be a lot more complex ways of looking at the data before I was done.

Not a lot to say... just coding.

iTunes 8.2.1 is on Software Update

Thursday, July 16th, 2009

iTunes.jpg

This morning Software Update let me know that iTunes 8.2.1 was ready for me, and so I installed it. The update notice said something about syncing with iPhone OS 3.0 devices, but that's already there, so I have a feeling it's either in anticipation of the iPhone OS 3.1 - or they are plugging a hole in the jailbreakers or Palm Pre syncing that they left exposed and wanted to plug.

In any case, it works great for me. Could not be happier.

UPDATE: Holy Cow! I could not have been more on the money: the update is confirmed to break the Palm Pre. This article points out the details, and while I can feel sorry for the Pre, they essentially used undocumented APIs and they got caught at it. Tough break.

Struggling with Ant Build Dependencies

Wednesday, July 15th, 2009

java-logo-thumb.png

Well... today I lost about an hour messing around with some code I had refactored to make a little factory of sorts so that it could be shared amongst two classes that had no common class ancestry. It was that or a lot of copy-n-paste, and there was just too much code to do that. So I did the refactoring and then a lot more coding and then hit the tests.

It wasn't the coding, but the testing that gave me fits. Specifically, because I did so many changes, I just did the standard Ant build and then deploy to the Tomcat server. There was a problem in setting this trigger on an H2 in-memory table, and for the life of me, I could not figure out why.

So I dug into the code, and what I found was that I was the victim of incomplete dependency checking by Ant. I should have rebuilt a few more classes that were effected by the refactoring, but Ant wasn't smart enough to do that. I'm not complaining, but when I look at Ant, I really see something made by a group of people that didn't like Makefiles.

I've used Makefiles for years and it's a far better system than Ant - even for Java, and while it doesn't claim to do dependency checking on it's own, there are tons of tools to create those dependency checks that are air-tight in their completeness.

So once I did a clean build, things started working again for me. It's something that I've had long conversations about with friends - the way the Java Lobby seems to be unsatisfied with the existing state of things, and rather than just make a 'makedepends' for Java, they have to XML-ize it, and make a new Java-based, Java-built tool that claims to do these things, when it really only does them slightly worse than the 20-year old tools that everyone else knows.

It's what I dislike most about Java. Not the language, but the people that are it's fanatical following. Spring, Faces, J2EE, the list goes on and on.

Cyberduck 3.2.1 is Out

Wednesday, July 15th, 2009

Cyberduck.jpg

This morning I noticed that the folks writing Cyberduck came out with a minor point release - and it's been a long time in coming. I can't remember the last time I saw an update from this crew, but then again, the software has been stable and hasn't needed updating.

It honestly looks more like a bunch of little feature enhancements as opposed to bug fixes, but that's just by count on the release notes. In any case, got it, and use it from time to time.

Another Start of Something Really Interesting

Tuesday, July 14th, 2009

cubeLifeView.gif

Today I needed to get really busy on the next phase of my web server/services - intraday alerts. Basically, we need to have a system whereby it's relatively easy to configure multiple alerts based on the data we collect about the company during the day. The first test is a simple one - if the P/L of any portfolio jumps more than a $1 mil in one tick - either way, then it's something I need to know about because it's likely bad data.

You can think of a lot more business-useful cases where it's not the data that's wrong, as in this first case, but that is going to bring into focus the moving average code I wrote as well as a much more complicated set of rules than simple edge-triggering. So what I wanted to do was to make a system a lot like we had with InfoShop in my last job: basic tools all wired together, but not configured until they are put in place in a configuration file.

I like the Java Properties file format for this, but primarily in it's ability to dovetail nicely with the System Properties and overlay multiple files, one on top of the other. The idea is to have the property files specified in the web.xml file as a list where order matters, and the list is loaded and layered on top of the System Properties so that the complete configuration of any component can be parsed from this map.

Then, I'll have as one named property a list of names. These will then be added to the 'baseProperty' name - something used to keep the Property namespace clean, and these will then be parsed and created by the system. It's a pretty easy way to have a config file do all the building and running you need while not having it be as overly complex as say, Spring.

My initial file looks like:

  #
  # List all the named alerts to create
  #
  FC.Alerts=CrazyJump
 
  #
  # CrazyJump - send email on big jump
  #
  FC.Alert.CrazyJump.ClassName=com.chicagotrading.firecache.trigger.BasicAlert
  FC.Alert.CrazyJump.Portfolio=[*]
  FC.Alert.CrazyJump.AlertExpr=abs((pnlSumNet - lastPnlSumNet)*fxToUSD) > 1000000
  FC.Alert.CrazyJump.MailTo=robert.beaty@chicagotrading.com
  FC.Alert.CrazyJump.Message="Portfolio " + portfolio + " jumped"

And from this, it's pretty easy to see where the name is used, and that there are a few mandatory properties for each named alert - the ClassName for instance. But there can be a lot of optional ones as well - dictated by the class that is functioning as the alert.

This is where the BasicAlert comes into play - we needed to build it with all the capabilities a general alert would need. Like the ability to parse expressions... send emails... create messages. All these things will be needed by the subclasses that will be the far more interesting alerts to write with far more complex business logic.

Still, it'll be relatively easy. We have a simple init() method that will be called, and then an onUpdate() for each updated row to check. It's a pretty simple pattern that's been used a lot in Java, which is why I used it. There's almost no Java coder that won't recognize this when he sees it. Consequently, it'll be easy for just about anyone to pick up and make an alert.

It took me the majority of the day to get this to the point that I think it's ready to use. Lots of set-up for the uses I'm trying to see will need to be covered. Thankfully, I've done something like this a couple of times before and have a really good idea about what needs to be done for the vast majority of the cases, and a few little things that will make even the odd-ball case possible.

I'm tired, and that's the way I like it. Leave it all on the track. Hold nothing back.

Miro 2.0.5 is Out

Tuesday, July 14th, 2009

miro.jpg

This morning I saw that Miro 2.0.5 was out with important fixes for YouTube video downloads. I've not used Miro as much as I had hoped, primarily because it doesn't have the content that I'd like to watch - Hulu Desktop does. But in the spirit of supporting a good cause, I'm going to keep looking at Miro as it's all about the Creative Commons, and that's a cause worth supporting.

It's got content, and it looks good. Give it a run.

Continuing to be Amazed by the iPhone 3GS

Monday, July 13th, 2009

iPhone3GS.jpg

Well, this weekend I decided to see how my iPhone 3GS handled getting calls. I have to admit that I've yet to actually receive a call on the phone - sticking mostly to text messages, apps, email, and the other smartphone features. I wanted to hear the ring, see how it handles the calls, and then set up and check the usage of my voicemail.

Pretty much, it's Apple all the way - class, ease of use, and exactly what you'd expect. But then there was the Voicemail. I was totally blown away.

Maybe it's because I've been using corporate voicemail too long, or maybe it's the old answering machines - I don't know, but when I realized that the iPhone downloaded the voicemail to the iPhone so that you can easily see who it's from, play (or re-play) it over and over, save it or delete it - all with the ease of text messages or email, I was completely blown away.

This had never even occurred to me as a possibility. I was thinking I was stuck with the horrible "press 7 to listen to the message" for the rest of my existence. No longer. I have seen the absolutely beautiful way that these engineers and designers have looked into the way you'd use a smartphone and made this do just exactly that.

Stunning.

I have to tell people that this alone, is a good enough reason to get an iPhone. The rest is gravy, but the ability to deal effectively with voicemail is something that every technology device connected to the phone system should learn from.

Simply amazing.

I'll never have anything other than an iPhone as long as they make them. It's only been a few weeks and already it's a life-changing device. I didn't think it possible. Stunning.