It’s been a while

I wrote another iPhone app, you’ll be able to buy it on the App store next week, search for Top of the Rock. I won’t get anything from sales, but it’s a pretty cool app!

Meantime, my responsibilities at AOL increased, I’m now working on the Huffington Post iPhone and iPad apps, the recent updates to those apps are in part due to my work. I’m going to start looking at the server side, to see what I can improve there.

Which brings me to my next topic set, the Server Side. This consists of quite a few subtopics which I hope to touch on:

Server Architecture. There are a lot of wheels out there already invented. Except for some weird specialty ones, wheels are round, and have an axle. Most servers have a database full of some sort of content, some business logic which is mostly concerned with categorizing and authenticating to content, and a bit more business logic for adding content to the database. Content may include professionally authored and/or curated data, as well as user-provided comments and questions.

Business Logic. This consists of the nontrivial business logic once you get past authentication and generation. A server may have to process a lot of data, and it’s important to ensure that this data moves through as quickly as possible.

It is the business logic that is most fascinating. Sure, you need to make decisions as to which wheel you want to use, and how you want to spread out your server farm, database replication, etc. But these are already solved problems. One from column A, …

I’m working on a system that analyzes and optimizes stock portfolios. Imagine you have 5 years’ worth of data for the entire S&P 500. You first generate metrics for the 500 securities that comprise it. That means iterating over about 1260 sets of statistics per security. Then you need to compare each of the 500 against its 499 counterparts to come up with comparison metrics. Taking advantage of the fact that m(a,b) = m(b,a), and that fact that I don’t need to recalculate m(a,a) I have to perform 124,750 comparisons to get the final set of metrics.

My answer to this was to use OpenCL. This is a system that allows you to utilize the 64-1600 cores provided by the GPU to perform calculations in parallel (or at least better than linear) time. Xcode provides an OpenCL framework that makes integration a bit easier.

Future posts will document my explorations and discoveries of this platform.