Archive for July, 2009

Miro 2.5 is Out

Friday, July 24th, 2009

miro.jpg

I'm still a bigger fan of the Hulu Desktop, but for the open source crowd, I'm guessing that Miro is the preferred choice as it's got the blessing of that organization. It's a sharp looking player, there's no doubt. And I really like the way it works - downloading without you having to get involved in the process... it's just the content that I'm not a huge fan of. I was looking for a place to watch House, M.D. and Hulu Desktop has it with limited commercial interruptions. Kinda hard to beat that.

But I like to see what Miro has to offer, certainly with an upgrade such as this.

Hammering Away Until the Rock Breaks

Thursday, July 23rd, 2009

cubeLifeView.gif

If someone asked me what I felt was the most important thing to have to be a successful developer, I'd say it was determination. I was beating my head against these production configuration problems today and when I finally got them figured out, a new problem of a JavaScript menu bar popped up to bang at until I got it working.

In the end, the JavaScript menu bar I was looking at didn't really work as nicely as I'd have hoped. It worked, but the style was just too different from what we'd been using. So I re-organized the menus and that gave me the room I needed to make the page render nicely.

I'm pooped. There's not doubt about it. But as with all the other things I've been tackling lately, it's about not giving up. Working and working at it from different angles, from different ideas, to come up with some little crack that you can exploit to get the system to do what you want. It's just plain effort.

Digging into Noisy Data

Wednesday, July 22nd, 2009

cubeLifeView.gif

I've been digging into this problem of 'noisy' data coming out of one of the systems I've inherited here, and at first I thought it was a problem of loss of significance due to subtraction, but that turned out to be part, but not all of the problem.

Today I was digging again, trying to find out what was possibly causing this. I was looking at trade flow... and greeks being sent in... nothing seemed to explain it. I talked to the original developer of the system for a while and together we didn't some up with anything.

I left thinking that the best I was going to do was to shotgun the problem and hope I hit something that might be close enough to the problem to point out the solution.

I sat down and started to look at the code again, and then it hit me. At least I think it hit me. I have a very plausible reason in mind, but in order to know for certain, I'm going to have to reconfigure some machines and run them tomorrow.

Basically, I think we're getting into a situation where the multitude of portfolios are feeding data into a single collector for P/L calculations. The problem might be that because several of these portfolios are normalized to the same contract, we're get an increased feed rate on that normalizing contract, and that is upsetting the calculations.

My limited understanding of the messaging of data might be off. That's why I need the isolation test. If the data from my test is smooth, and the data in Test and Production is noisy, then we'll know that we have a solution to the problem. The wrinkle here is that this solution is going to mean that we need to have a lot more hardware to run these portfolios than originally thought.

We'll have to wait and see tomorrow.

Utter Shock and Amazement

Tuesday, July 21st, 2009

cubeLifeView.gif

Today has been spent primarily on getting the PRIVMSG capability working on this custom-developed chat system. Because of the nature of the system, that is not allowing private chats, it was a lot more difficult than it needed to be. While I might have done things differently in the implementation, I wasn't involved and this system is in place and there's very little interest in really looking at this critically. It's "done", it "works", let it go.

I had to work with what I had.

That included the sum total of the code. It was a combination of C#, Python and assorted scripts and was virtually undocumented. It was a mess. But as far as messes go, it was something that I could dig into and get a few hints.

My primary debugging tool was the log of the socket data coming from the IRC server. It was literally invaluable. In the end, this is the interchange I discovered I needed to use in order to get person-to-person chatting, and therefore code-to-person chatting, working.

First, my code had to issue a special command to a particular "Overlord" bot that controlled the users on the IRC server. This in and of itself was interesting. They chose not to implement the rules in the server, but rather in a Bot that existed alongside the server.

When I send the appropriate command to this bot, I need to include the nick of the user I want to talk to. The Overlord then creates a channel just for the two of us with a special prefix, and the two user's names separated by a special character. Both users then get INVITEs to this new channel.

I have to wait for the INVITE, parse the channel invitation into the two user names, see which one is me, and which one is the "other guy", and then cache this data so that when I want to chat to the particular user, I can look up the special channel for this guy, and chat there, instead.

There were a ton of wrinkles with this scheme. First, because the process is asynchronous, I have to buffer my chats to this person if I need to create this channel. That is a pain, but doable with a little thought. Once I get the INVITE, I simply see if I have any buffered messages for this guy, and if I do, then I send them in order to the (newly JOINed) channel and we're back up to date.

Another one was the reconnection scheme - I simply took the point of view that on reconnection we'll do the minimum and each operation will ensure that everything is set up for that operation. It works, but it might be doing a little more "lazy" set-up than a different approach that would cache the channels, etc.

I have to say that everyone I've talked to in this place about these technical details is amazed that it has been done this way. The simplest way would have been to log everything in the server. Period. Database or flat files, or MySQL (combination of the two) would have worked. Then add in a simple authentication method on the server and you're done. Leave private chats as-is, but log them. Done.

It wasn't done this way, and I'm not sure what's going to happen in the long run. I've got this working, and that's the most important thing.

Who’s Really Keeping an Eye on This?

Monday, July 20th, 2009

cubeLifeView.gif

I've spent the day working on getting a decent chat interface into a custom-developed chat server that a vendor wrote for us in response to the compliance regulations. I certainly am no stranger to this, having worked with MindAlign in a previous position. These are all chat systems where the logging and authentication is such that you can't spoof being someone you're not, and all conversations are logged. It makes sense for a place moving money.

Problem is, the system we're working with here (which can remain nameless) is really pretty horrible. First, there's no documentation on the protocol at all. None. Zippo. There was nothing in the code either. I could not find a thing to help me.

Thankfully, someone else had been working on this and realized that there was an XML file for the client that had what was needed. Basically, a bot would send a challenge PRIVMSG and you had to respond with the proper response PRIVMSG to this bot. If not, the bot would kick you off the server. Effective, if a little trivial. There's no server-level authorization so that's a hole, and there's no changing of these challenge/response phrases so that's not very secure either.

But after this is done, you can send messages to IRC channels without any modification of an IRC client. Pretty easy. Sending PRIVMSGs is another thing entirely, and I didn't get this solved today. Hopefully tomorrow.

But Boy! would some documentation have really helped.

There seems to have been no one at the time asking for this. I can't imagine what they were thinking.

Rough Deployments Getting a Little Easier

Monday, July 20th, 2009

cubeLifeView.gif

This afternoon I had to deploy an inherited app again, and this time it was a little smoother, but the fact that database changes made in one site aren't also done to another really bit me in the behind.

I had asked one of the DBAs to build this stored proc for me, and he did a great job. What I failed to realize is that he stopped right there. He didn't put it on the London copy of the same database, assuming, I guess, that if I'd wanted that, I'd have asked for it.

Silly me.

Well... it was a little harried and hurried to get things in place, but in the end I put the stored procs where they needed to be. Lesson learned, Bob... make sure to do it yourself.

Amazon’s Removal of Orwell’s Books from Kindles

Monday, July 20th, 2009

Kindle.jpg

It's pretty big news today - Amazon received notice from the rights-holders of Orwell's 1984 and Animal Farm that forced them to remove the un-licensed copies from user's Kindle readers. I can certainly understand the folks saying that this is a serious blow to e-books: that they aren't the same as books... you can't sell them after you've read them, you can't donate them to a library, there are a lot of things you can't do. But they say now that you can't even really be sure that they ever really belong to you.

It's a fair critique. But Amazon's business is really the publishers and the customers. They are a middle-man. No way they could exist without both groups. Take one away and the other will leave. There's nothing they can do about it.

So they have to strike a compromise here. That compromise, it seems, is still developing, but it appears that the new compromise is going to be "if you have it, it's yours" - like the Apple AppStore. It's fair, but this also means you can't transfer it to another device - which can be a pain to many as devices fail and need to be replaced.

It's a tricky line to walk, and while I'm not interested in losing my books, I have to understand that when I buy them in this electronic state, where the laws have clearly not caught up to us, that I'm accepting a lot of the risk here. In 50 years the laws will have caught up and this will all be settled - one way or the other. Until then, it's a little bit of the buyer beware.

Sad, but true.

Developer Color Picker

Monday, July 20th, 2009

xcode.jpg

I've seen this pass around late last week, and finally decided that it wasn't a big issue to get it and see if it's as nice as they say. Certainly, it's more for ObjC developers, and boy do I wish I was one of them, but not today, and maybe not for a while (bad day today). It's nice to see the guys from Panic giving like this.

Anyway, it's here and probably worth getting even if you use it only occasionally.

Struggling Through the Day

Friday, July 17th, 2009

cubeLifeView.gif

Today has been a challenge for me. I haven't had a really good day, but I have to admit, in the grand scheme of things, it hasn't been the worst either. It's been a day where I've been fighting my instincts to do "more" - a kind term for stepping on people's toes. More VM problems - I've just had it with VMs for web servers - I've asked for dedicated machines for the web servers (UAT and Production).

I've also run into a most 'unique' situation with chat. Seems we had a custom chat system created - based on IRC, but extended to allow for all the compliance issues that might arise in a trading shop. No surprise there.

No, the surprise is that we have no documentation on the authentication system at all. It "just works", but if it stopped working someday, there's not a scrap of documentation to say what it should be doing as a place to start to see what's going wrong.

This lack of design docs bothered me - I just wanted to be able to code it up so that my web app with alerts could chat them to the users. It's a simple thing, really. But you would not believe the kind of run-around I seemed to get.

Some folks just said "don't use it". Well... it's a little late for that - it's in production, not going away, and I need to chat to something. Saying it's horrible is a judgement call, but I still have to work with it. I just want to know what it's doing!

Several hours have passed and I've just asked over and over to talk to someone at the shop that built this. I just need to know what it's passing around and I can take it from there. It's not magic, it's code. But rather than try to guess looking at the code, I wanted a simple design doc - or even just a protocol explanation.

Hours later and nothing. I'm guessing this won't be over soon. I have no idea why.

It's just very draining. Very. I'm tired and I want to go home.

iMovie ’09 Update (8.0.4) is on Software Updates

Friday, July 17th, 2009

iLife09.jpg

This morning I noticed that iMovie '09 is updated on Software Updates. The list of changes includes:

This update improves overall stability and fixes a number of other minor issues. The issues addressed include:

  • Fixed a problem with incorrect rotation when working with video created by iPhone 3GS
  • Resolved instability when adding multiple beat markers in some languages
  • Corrected an issue where iMovie could become unresponsive after using fine-tuning controls beyond the stabilized portions of a clip

The update is recommended for all users of iMovie ’09.

Well, with the mention of iPhone 3GS I had to get the update 🙂