Monday, October 26, 2009

Over the last few weeks, I've been pulled into numerous different projects. So I can't concentrate on any single one. I don't feel like I'm accomplishing much, as the coding for most of them is trivial. I don't know what the real priorities are, so I just work on whatever comes up.

One is the proof-of-concept demo that I recently wrote about. I can't get other pieces necessary for a full demo to work in the demo environment. The part I wrote seems to work sufficiently well, as far as I can tell. In the meantime, some horribly detailed requirements documentation on what the demo should be got written, which I'm ignoring.

Another is another part of a performance optimization that I've written about before. It seems the caching that was implemented took a lot more memory than anticipated, due to numerous keys keying into identical values. So I got pulled into a meeting where we came up with a scheme to check if a value being added to the cache was already in the cache under a different key, and then point the key at the value already there if possible, instead of another copy. Then, it had to be made to work in the initialization case, where lots of simultaneous threads would be trying to use and fill the cache. So then we decided that the first thread try to put a key in the cache would first put a lock object instead of the value in the cache, while holding the lock, and then construct the value, then replace the lock object with the actual value, so that other threads with the same key would block on the lock object instead of also constructing the value. Since nobody else working on it understood how to code locks, I wound up having to write the code handling the locking.

Another was some other demo that was not very interesting to me, and sounded kind of complicated. I didn't work on it. However, there was a meeting early one morning before I got to work where they decided on a very doable approach. When I was told what it was, I wrote the code in a few hours, tested it, and it seemed to work. As yet, I haven't heard anything more about it, so I'm just sitting on the code.

Another was some integration with some other site, with dragged out email exchanges in which I'm saying that I'm trying something and it doesn't work, but not getting any helpful responses. I've been letting it sit until some manager wants some progress, and I'll try the same thing and send another message saying the same thing to the other site. In the middle of this, the contact at the other site went on vacation for a couple of weeks.

Another was integration with yet another site, which seems to be working now. Months ago, I asked for the details of how to do it, but was told that it wasn't available. So I let it be. Then, some manager wanted to get it done, so I asked if it available now, and copied management on the email so that they could do the talking. Finally, they said it would be available the next day and sent some documentation, which didn't include what the hostname was. I was expecting it to be basically the same as the other things from them that we were integrating with, so that it would be just a matter of configuring a new instance of stuff we already had, but it was different. But at least it was simple. So I took an afternoon to write new code for it. Then, I guessed at the hostname, but I guessed wrong, so I couldn't test it until I got their reply the next day. After that, it seemed to work.

Another is some super secret project requiring high performance. So I looked into the java.util.concurrent and java.util.concurrent.locks packages. And I realized that I really didn't understand Java's volatile. I still don't think I understand volatile (or java.util.concurrent.atomic) well enough to know when to use it, so I'll probably just use locks. But I haven't heard more about this, so it's dropping in priority.

I'm also dealing with random bugs that get assigned to me.

No comments:

Post a Comment