Google Chrome dev 12.0.742.0 is Out

April 21st, 2011

This morning I saw that Google Chrome dev 12.0.742.0 was out with "stability and performance fixes". Sounds like polish to me - nothing wrong with that. Keep making it better, and while you're at it - throw back in the H.264 will ya?

It’s Very Telling How You Treat People

April 20th, 2011

attitude.jpg

I was in a meeting today with a parter at The Shop and was really stunned at his rudeness. This is a guy I've been in meetings with before - with other people, and he wasn't at all like this. Sure, the other people were other partners, but I had no idea that this guy's sense of professionalism was strictly dictated by the people in the room. Pretty amazing to me.

It says a lot about a person when they act entirely different around people who they see as "below" them as opposed to those that are their equals, or superiors. And I'm not being exceptionally picky here - this guy was arguing with me about why I should be listening to anyone other than him. I merely said that since there was a difference of opinion, that I thought he and this other person should get together and work out a consensus decision. He seemed offended at the idea.

He was totally uninterested in listening to my ideas - getting up and walking out on two occasions. I mean Really? This is how an adult acts? Holy Cow! I expect better from my 12 yr old daughter. This guy is supposed to be leading this company. I wouldn't follow him to Dairy Queen now. This guy has done nothing other than to breed contempt for him in my eyes.

Who knows... maybe they just killed his dog, but I'm pretty sure this guy is just an idiot and got to this position by spending so many hours here the people think he deserves the role "just because".

Who knows? Maybe he's really quite smart. But his immaturity today spoke so loudly it's hard to imagine that his brilliance would be heard by anyone in that room.

Writing Custom Iterators for Thread-Safe List

April 20th, 2011

Today I got around to writing the iterators on my thread-safe Instrument list - hadn't done that before, and it was actually fun. Geeky, yes. But fun nonetheless. I just needed to get the style of the header right, and a first cut at the basic iterator and they were coming pretty quickly.

I wrote a simple test program as well to make sure that they were working, and it was pretty impressive (to me) that they worked right away. No problems. Sure, they weren't all that hard, but still - for not having done any in the past, it was a treat to get them done so quickly and done well.

There's a ton more testing that these guys need in order to be sure they are going to perform under load, but I can pass that off to a junior developer that's got a decent eye for details and he'll expand the test app to be a testing monster.

Sweet!

NX Server Problem – File Permissions Solved It!

April 20th, 2011

Yesterday afternoon I had a hiccup on the networks and the NXMachine session I had from my desktop to one of the servers in the data center was disconnected. Unfortunately, attempting to get it back proved fruitless. No matter what I did, it was saying that there was an authentication problem. Yet just 10 mins ago I was connected and doing fine.

Reboot didn't help. I could SSH into the box, but I couldn't get the NXMachine session going. The UnixEng guy tried, but he wasn't all that good at debugging this software, so I had to work on another box for the rest of the day.

This morning I came in ready to try and solve this guy on my own. What I did was recheck everything. Make sure the box where it was working and the non-working box were set up right. I checked the scripts, the files - all seemed like it should work. Then I noticed the file owner in the /usr/NX/home/nx directory. It was owned by userID 999 and not the user nx. Oh... this couldn't have been it...

So I went through the entire /usr/NX directory comparing a working machine to a non-working machine. Every place I saw the userID 999 I did the chown nx and after I cleaned up those ownerships it worked! Sweet!

Lesson learned: check the file ownership and permissions.

Creating a Thread-Safe List with Iterators

April 19th, 2011

This afternoon I started work on the next component of the greek engine project - a list of pointers (instruments) that is thread-safe, and has iterators that are never invalidated. It's the combination there that's really tricky... how to make a list that has many iterators on it - none of which will be invalidated on an isert or removal operation on the list.

Yeah, that took some thinking.

My initial idea is to have a fixed-length list of nodes. Each node has a value, a 'valid' flag, and a spinlock. In order to add to the list, you need to scan the list looking for the first node that is not valid, but who's try_lock() is successful. You can then place the value into the table. Pretty simple, really. The locks don't effect anyone else, and things are pretty smooth.

The iterators are going to be something where I can step through all the valid values and optionally lock on that node to make sure it gets "stepped over" by the other iterators. It should make for just what I'm looking for.

Lots of coding to do, but I think it's all planned out and should work. I just need to actually do it.

Working Up InstrumentFactory and InstrumentMap

April 19th, 2011

This morning I wrote the skeletal InstrumentFactory and InstrumentMap for the Greek Engine to get some of the other guys in the team helping out. These two classes work together to construct and then hold the universe of Instruments that we'll be working with. It's a model I've used in the past, and it really seems to work pretty well. I just need to get working and figure out how to make a thread-safe, lockless, list with iterators so I can run through the stocks in this map for calculation purposes.

No rest for the weary...

Details About MacBook Pro Display Problems

April 19th, 2011

MacBookPro17.jpg

When I got my new MacBook Pro (early 2011), I got the program gfxCardStatus and it allows me to control the integrated/discrete graphics very nicely. What I noticed right away was that Unison and Twitterrific didn't like the discrete graphics, and so I emailed the respective authors and asked if they'd heard of this problem. Interestingly enough, they hadn't. Well... today I got a lot closer to figuring this out because one of the guys at Panic thought to ask about the console output.

Interestingly, it says:

4/19/11 3:47:05 AM Unison[1069]	unknown error code: invalid display
4/19/11 3:47:05 AM [0x0-0x20020] Tue Apr 19 03:47:05 peabody.local Unison[1069]
       .com.panic.Unison2[1069]  <Error>: unknown error code: invalid display

Well now... isn's this interesting. Unison (and Twitterrific) are reporting that the AMD Radeon HD 6570M is an invalid disply. That's certainly something that you don't see every day. It also seems to remove the question of bad hardware from the table. If the libraries are seeing this as an invalid display, then it's the interpretation of what they are seeing that's the problem.

I sent this into both places, and we'll see what comes back. I'm hoping a fix for both of them.

[4/25] UPDATE: I got a response saying that an Apple engineer said it was the Flash Plugin. Since I'm not using Flash, that can't be it, but I did take a chance that it could be some plugin. So I removed the following plugins:

  • AdobePDFViewer
  • Cortona Plug-in
  • O3D
  • RealPlayer Plugin
  • freewrl
  • nsIQTScriptablePlugin.xpt

and when I restarted Safari, MarsEdit, and Chrome, the problem went away! So it's a plugin, allright, and one of these is bad. I don't really need any of these guys, so I'm leaving them all out, but it's nice to know I can find out the bad boy by putting it back in and seeing when things break.

Writing a Position Service Client

April 18th, 2011

Today I spent my own coding time building a client for the Position Service at The Shop. It's a TCP-based service that you can subscribe to and receive updates from. It actually looks to be pretty darn sane - which is a little unusual for the state of things here, but I'm willing to roll with it. The wonderful fact is that I've been working with boost asio enough now to be able to ship up a nice TCP-based client in just a few hours. It's pretty powerful stuff.

Throw in a little thread and memory block pooling and I have a client in very short order. The only problem I had was that a critical part of the functionality could only be tested during trading hours, and I didn't get enough of the code done to test that by 3:00, so I'm going to have to test that tomorrow and see what needs to be finished.

In all, though, a pretty decent day.

Having a Little Fun with 2D Grids and Interpolation

April 15th, 2011

Today I needed to tackle the 2-D grid and interpolation in as efficient and re-usable way as possible. In previous attempts, I've used special data structures to hold the data points because the interpolation was handled differently. This time, I wanted to take advantage of templates for the z-value so I could re-use the class for doubles as well as entire packages of greeks. In order to do this, I decided that it'd be better to use boost::unordered_map and have the key be the coordinate value, and the value be the function value. When I needed to handle two dimensions, the outer map values were really just axis/function values, and with a simple spinlock to protect the grid, we were done.

All this coded up pretty easily. We are going to stick with a four-point interpolation scheme so the code had to "locate" the four nearest grid points to any given point, and then allow the caller to ask for the interpolated value anywhere on the grid. It's just a few detail functions, and it worked out pretty nicely. The final point was having a templated function that took the (x,y) points and the z values, and then returned the interpolated value. This would allow me to make one of these for double values, and another for the greeks package.

Because it was completely isolated from the rest of the grid, I could change the interpolation from a simple linear to a Taylor Series at any time, and that's exactly what I have planned for the greek payload. After all, I know what the x- and y-axes are in this space, and I know that within the payload I have the derivatives, several powers worth, and that will make it a lot easier to space these points further apart and get reliable interpolated values.

All in all, I have to say I've enjoyed coding this up. Not everything today has been this fun, but at least this was a good note to end the week on.

Starting the Day Off with Conflict – Not So Great

April 15th, 2011

cubeLifeView.gif

It's always nice to start off the day nicely. A nice run, something fun on the computer, maybe a nice breakfast, but today I got all this and a little more - a manager who thinks he can code. But he can't. I've been placed in the position of Technical Lead pf this project, and I have to work within the management style of the team's existing manager. He's a decent guy, I suppose. He's not the kind of guy I'd have over for dinner, but I'm sure he means well, in his own way. But he fancies himself the coder. Maybe he was, in a different environment, but here and now, he's just so-so, and he doesn't approve of my technical management style. So he goes around it - he does whatever he wants, and thinks I'll have to accept it.

He doesn't know me as well as he should.

Well... he thinks he knows me pretty well, but this morning, he's learned that he really doesn't. I told him the work he's done was already done in another class, and over email he tried to convince me it hadn't. I told him it had, and asked him not to write any more code until I told him to. Because I'm putting this together on the fly, and on a very short timeline, there are things I haven't designed, and won't for a few days, but I'll get there, and when I do we'll write the headers and then flesh out the code.

If he's capable, then he might get a header to flesh out, but I've had too much trouble on this project, letting people write headers as they take far too long, and don't get the important ideas captured in the class. So I'm writing the headers, and they are fleshing them out.

This isn't ideal, but it's the best we can do on short-notice. If I had three months to finish this, I'd let them have more involvement in the writing of the headers - which is the fundamental design. But I don't. I'm supposed to be done today. But we won't be done today. We'll be on a rush until this is done. There's just no time to wait for the learning experience. I didn't make the deadline, I'm just trying to get the work done on time.

So I get to start off the day with conflict. It's a drag, really. I try to be nice. I try to be supportive, but if, as happened this morning, the person isn't really interested in listening or being reasonable, well... then there isn't a lot I can do other than be blunt and tell them to just stop coding. They don't like it because they believe themselves to be beyond the need for supervision, which is, of course, part of the problem. So it gets ugly, and I'm the "bad guy", and so it goes.

I'm asked to do an unreasonable job, and take it very seriously. I have to be a bit unreasonable to get the job done, and people get upset. Of course, they get upset at me because they don't see the cause-and-effect of the unreasonable request and my actions. But it's there. They just refuse to see it. They'd rather blame me.

And so it goes...

What a way to start a day.