Monthly Archives: June 2011

Cloud Computing

Cloud Computing has got to be the most over used term today. As an abstract term it serves a useful purpose for marketers who understand that many cloud computing will mean to the audience whatever the audience wants it to mean. For me cloud computing means platforms like Amazon Web Services (AWS) and Azure which at their core offer compute and storage services in a remote data center. If you don’t have EC2 and S3 like services I don’t consider your offering to be a cloud. Note I don’t particularly care that iCloud does not fit this definition as it is a consumer service. I will be discussing Cloud from the perspective of a developer and from the business who prefers not to own physical infrastructure.

Last week saw NYSE announce its Cloud. The release as with many “Enterprise” software press releases is short on details. It will probably mean that NYSE will host more back office applications in its data centers. It seems to be the rage today to call SaaS a Cloud in finance. See this about a back office application being hosted remotely and called a Cloud.

What would be cool would be infrastructure for frontend strategy development. That should look something like Amazon’s EC2 and S3 with NYSE providing readily available data sets such as SuperFeed historical and realtime data, low latency connections to the exchange data center, a large compute farm with every machine having a Tesla card and API’s for accessing other pieces of NYSE’s infrastructure.

I am going to continue to use AWS. At least one company is building a finance focused platform on AWS although the approach I am taking relies on capabilities that are unlikely to be built into a commercially available platform. AWS has GPU compute instances which give it a decisive advantage over competitors such as Azure for building financial/trading applications.

Scala 2.9 ArrayStack

So I moved my current codebase to be compiled against Scala I had been using 2.8 and I want access to the parallel collection operators which I was missing dearly from .net. Much of my code used ArrayStack as a mutable collection. I have increasingly preferred immutable approaches however when simply tying together existing Java components this can be impractical due to the way some API’s work. With the upgrade to 2.9 I noticed 2 specific problems.

1. If you call ArrayStack.reverse and iterate through the results the first item returned is actually the second item added to the collection.

2. When iterating through larger collections the iterator starts with null elements from the beginning. This is probably returning unused elements from the buffer that are allocated as part of the growth strategy. I have not spent enough time to know that this is conclusively the case.

With these problems with basic collections I have removed ArrayStack from all of my code. I have been instead using java.util.Vector[A]. This seems to have cleared up much bizarre behavior.