Tuesday, November 02, 2010

Another OpenGamma OpenHouse on 17 November 2010

Yep, it's that time again. The days are shorter, the nights are longer, there's a chill in the air, and it's time for OpenGamma to throw open its doors.

Beer; Food; Demos; Whiteboard sessions; Tech talk; Victorian warehouse conversion; Startup vibe. Honestly, if you're going to be in London on 17 November, why haven't you clicked the link and signed up?

Monday, October 18, 2010

I'm Hosting The Financial Track at qCon London 2011

As astute and long-term readers would no doubt be aware, I presented on RESTful Approaches to Financial Systems Integration at qCon London 2009 in the Financial Technology track. Then qCon London 2010 came, and I attended, and I was a little bit frustrated that in the city of the world most known for innovation in Financial Technology, there was no Financial Technology track.

Well, the masses have spoken. qCon London 2011 will have a Financial Technology track.

Even more humbling for me, I've been recommended as the host of the track, and I've accepted. I will be the Finance War Stories track host for qCon 2011.

I plan on making sure that this track follows on from the 2009 track, which was one of the highest rated and most oversubscribed tracks in the whole conference. Moreover, I plan on making sure that the track presentations are approachable and interesting for developers from finance as well as from people trying to learn from the financial technology industry.

I've long been of the opinion that the rest of the world, particularly web-scale industries, have a lot to teach the relatively insular community of financial technologists. I am also of the opinion that many problems people outside finance face are being reinvented by people who aren't familiar with the technologies, techniques, and architectures that have been second nature to financial industry professionals for years. I hope that we can continue breaking down the boundaries between financial technology professionals and the industry at large.

If you're interested in giving a talk, please feel free to contact me: kirk at opengamma dot com or a comment on this blog post is the best way to to the head of the list. In addition, if there's someone you really want to see presenting in this track, or something you want to see a talk about, please don't hesitate to contact me as well.

Tuesday, September 21, 2010

Back in New York City Next Week

Yes, it's only been a month since I was last in the city so nice they named it twice, but I'm coming back again.

I'm sure at some point this will be a frequent enough occurrence that I won't need to blog about it, but after the last post, I ended up having some very interesting meetups and conversations with people, so I'm trying the experiment again.

So that being said, on Monday the 27th of September I arrive in the sordid little burg on the other side of the pond. Hit me up if you want to talk about:

  • OpenGamma, in particular if you're thinking of using it
  • Fudge Messaging, in particular all the bits that we've done that aren't well documented yet
  • Startups, funding, or what a giant jerk I am on the internet (and in real life)

As usual, bonus points if you can give me a desk and get me out of the Ace Hotel when I'm not at customer/client/partner meetings!

kirk at kirkwylie dot com or kirk at opengamma dot com. You know what to do.

Monday, September 13, 2010

Cartoon Characters Discuss Web-Scale Asynchronous Communications

I couldn't resist joining in on the MongoDB/MySQL/DevNull Xtranormal meme. Many of these things I've blogged about before. But now with cartoon characters!

Thursday, September 09, 2010

Slow Clap for Item Moves in Basecamp

I follow SvN. I'm not entirely sure why at this point, as I very rarely actually see anything of merit on it anymore, but I've not gotten disappointed enough to drop it from my Google Reader.

Yesterday the Basecamp team decided to pat themselves on the back for allowing movement of items in between projects.

I look at the list of super-duper extra hard stuff that's going on, and I see one of two cases that could possibly be true:

  • They've sharded their databases to the point that even trivial operations require superhuman effort. Well-done in that case.
  • They've designed their database schema in the most completely insane way ever.

My suspicions? A little of column A, a little of column B.

Love this gem:

Is it a to-do list? It might contain to-do items that have associated time tracking entries. Move those time entries to the destination project too.

That seriously doesn't flow for free due to the relational semantics? You don't just have a FK relationship that means you're only updating the list?

Here's the lessons I think everybody should learn from this:

  • Sharding MySQL or another low-end relational database isn't a panacea, no matter how much it contributes to the web-scale secret sauce.
  • If you are sharding/partitioning data, you should probably think long and hard in advance about how that's going to impact movements across shards. Because they ALWAYS end up happening.

Wednesday, August 25, 2010

Java Initialization Barrier Pattern With AtomicBoolean

I've found myself starting to use this little mini-pattern. You might find it useful.

private final AtomicBoolean _hasBeenInitialized = new AtomicBoolean(false);
public void expensiveInitialization() {
  if (_hasBeenInitialized.getAndSet(true)) {
    // Someone else has already done the initialization,
    // or is currently doing it.
    return;
  }
  // Do the initialization that I want to be done only once.
}

Much simpler than any of the other mutual exclusion patterns that I've found myself using.

The caveat here is that in the case of multiple threads, it's possible that one thread (that got to the party late) may return to the caller before the initialization is done (if another thread is currently doing the initialization). Therefore, this pattern isn't suitable where the caller has to guarantee that the initialization is done before continuing in a multi-threaded environment.

I primarily use it where there's an initialization method that many parts of the code are going to call as a defensive measure before continuing. Think of it as a simple solution to the initializeIfYouHaventBeenButDoNothingOtherwise problem.

Of course, it well could be that everybody else in the world is already doing single-initialization this way, and I'm too addled from being outside the day-to-day coding world to have caught up.

UPDATE 2010-08-25 : I changed the name of the control AtomicBoolean to make it clearer that this is a multiple-execution-over-time pattern, and not a general purpose synchronization barrier.

Wednesday, August 18, 2010

Code in an expert programming language

Provided for your pleasure, anonymously, from an Expert Programming Language. Scala fans, you're about 2 steps removed from this.

redacted: {[str]
   map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
   pad: #str _ss "="
   var1: 2 _vs/: map?/:str@&64>map?/:str
   var1[-1+#var1]: 6#(*|var1),6#0
   var1: ,/(-6#/:(6#0),/:var1),(pad*6)#0
   : _ci 2 _sv/: -1 8#((#var1) - pad * 8)#var1
}

Bonus prizes if:

  • You can recognize the hideous abomination of a language
  • You can figure out the common algorithm it's doing. Hint: What should redacted be named?