Sunday, September 14, 2008

Host unlimited photos at for FREE!

I, for one, welcome our new robot overlords...

This is indeed our Fearless Leader, Max.

Caption contest anyone?

Sunday, May 18, 2008

Top Friends News

Now that Paul and I are at, we've been busy creating new stuff.

My latest is a humble, yet ever-so-cool Public version of the Top Friends News on Facebook. Given that Top Friends has between 1.5M and 2.5M users per day, the news feed is a fascinating cross-section of activity across the different Slide applications.

Paul's latest project is the new Top Friends Network page - if you're a member of Top Friends, on Facebook, check it out!

If you're not a member of Top Friends, join up and then check it out!

(By the way, my latest project for Top Friends involves ActionScript-3. Stay tuned.. I'll blog on that later).


Wednesday, May 07, 2008

Do not adjust your set

It's been a month since my last post, and since joining Slide, and I've kept myself too damn busy to blog.

At least I can say I've been reading some interesting material: this, for example.

I have some work to do - my last post managed to mix in "mise en place", The Shaw Brothers, and Brahms. For your entertainment, I'll see what other wildly disparate combinations of turns-of-phrase I can come up with in a new useful and informative post soon.

Saturday, April 05, 2008


Well, you just never know where you may end up.

A few weeks ago Paul and I received an offer for the purchase of Just Three Words in the midst of several RFPs (Request for Proposal) for website and Facebook application development. We began to juggle the prospects of consulting work that would keep our rent paid through June at least and selling Just Three Words & proceeding to create a new product for our business.

After much discussion weighing our options, Paul and I decided to accept jobs at

I was resistant at first
If you'd asked me in mid-January whether I'd consider employment anywhere, I'd have scowled at you. I love being independent, and running my own company - both the technical and non-technical challenges were what got me out of bed in the morning and kept me out of bed until early the next morning.

Having said that, it was becoming increasingly likely that we'd have to take various consulting jobs in order to keep the startup afloat. This is exactly the situation in which I found myself in the early days of Gearhead Music, and was wary of making the same mistake twice - I.e., once you start to make money contracting it is very difficult to stop; and while you're working on someone else's project, you're not working on your own product. Neither the consulting nor the startup excel from the benefits of your undivided attention, and in the end consulting proves to be a trap since you really can't ever turn down a job.

The excitement kicks in
But a "real" job? I couldn't think of a company working for which I'd be happy. But in a casual email exchange a while ago, a friend at mentioned that when I was ready to consider a job, come talk to the engineers there.

I know a few of those guys, and not only like them but really respect them professionally and personally and respect the work they do & their approach to solving difficult technical problems. "Hmm", thinks I, "this could be interesting, and worth the consideration".

So I agreed to an interview, flew up to San Francisco from Los Angeles for the day, and over the course of several conversations, started to get excited about coming onboard. Not only are the engineers at Slide sharp as hell and extremely knowledgeable, but also very hard-working. And on a personal level, I liked everyone with whom I spoke.

And the prospect of learning a lot more about python, about solutions to challenging problems of scale (when you serve as many widgets and apps as they do the challenges of scale become very interesting), and about creating products and solutions that just don't exist yet is what really got me fired up about considering employment with them.

By the end of the day I was on the fence, but very seriously interested in working with this excellent group of engineers.

And, in music if you want to get really good go work with people who are better musicians than you are. The same applies to engineering - work with people whose knowledge and ability surpass your own and so inspire you to achieve and improve.

Why this is a great opportunity for an engineer

Man, these people know their [EXPLETIVE DELETED]. It's been only one week and I've already learned techniques that make me a better engineer. There are few better ways to improve than when surrounded by other very smart people solving problems.

And the technical challenges the company faces with regard to application development, infrastructure, database and so on are red meat for any True Geek™. I obviously can't talk specifics here, but if you thrive on solving problems that few companies are required to solve and for which there are very few out-of-a-box solutions, send me your resume and I'll pass it along.¹ Slide does more than make pretty widgets - there's a lot of engineering going on in the boiler room that's just way too damn cool.

Why this is a great opportunity for an engineer with entrepreneurial tendencies

First, the obvious - Slide is run by Max Levchin who is one of the founders of PayPal - one of the few tech startups to survive and thrive through the tech crash. So not only is it very safe to bet that he and his executive staff know what they're doing, but he's a top-notch engineer himself with an intense entrepreneurial drive. A good kung-fu master to learn from if there ever was one.*

Second, this is a new market - social networks are still in their infancy, and it is probable that the speed of progress and opportunity will cause the landscape of the market to look different a year from now than it does currently. For any business-minded soul, the internet space in general is a once in a lifetime opportunity (analogous to what the chemical industry was to 19th century minds**), and within this space the social network market an opportunity within an opportunity rarely seen, as the reward v. risk is higher than in other sub-sectors of the larger market.

So, I'm very excited. I didn't come to the decision to join Slide lightly, and now that I'm there I'm very happy to be a member of the team. I'm working on the Top Friends application, and am just now finding where they put everything. I've been working in my own kitchen (so to speak) for a year and know where everything is. Now, in someone else's, I spent most of my time last week finding where the hell they put the can-opener. But soon, I'll have my technical, geeky mise-en-place all set and I'll be geeking-out in your Top Friends.

¹python, AS2, AS3, C++, java, whatever - the ability to solve problems and possessing intelligence are most important.

*Max is short for "Maximum", so you will work your ass off for this cifu (teacher) and frog-jump up and down the figurative temple stairs until your technical and entrepreneurial -fu are the best anywhere. My apologies to the Shaw Brothers for this analogy...

**And if your interests lie in additional areas but you still want to get involved in the interwebs, remember: both Brahms and Borodin were chemists, and they did some nice work in other fields ;)


Saturday, February 23, 2008

Quick and Dirty Database Pooling in Django and MySQL using SQLAlchemy

As our Facebook application "Just Three Words" started to get rolling, we started to optimize our database calls.

The first step was to take a look at the ORM db calls taking the most time. Django has a facility to do this, by taking a look at the raw SQL Django is running. Once we did this and replaced the obviously slow calls with custom and optimized SQL, I started to look into some sort of database connection pooling for Django.

A friend suggested I look into, among other things, SQLAlchemy. There's a very good database connection pooling piece to SQLAlchemy (docs here), and after thinking about ways to write my own db pooling code based on routines I'd researched all over the web, I figured it was quicker and easier to use what was already out there. I could get pooling in place and buy myself some time to write a customized db pooling routine, thus not only getting what I specifically needed but also learning how exactly to write a db pooling routine!

(Of course, I haven't done that yet - part of the price of quick and dirty code that works is that the pressure is off to actually create a routine that isn't q&d).

We're using MySql, so I opened up and applied the code from the SQLAlchemy docs to

import sqlalchemy.pool as pool
from django.db.backends import BaseDatabaseWrapper, BaseDatabaseFeatures, BaseDatabaseOperations, util
import MySQLdb as Database
Database = pool.manage(Database)
except ImportError, e:
from django.core.exceptions import ImproperlyConfigured
raise ImproperlyConfigured("Error loading MySQLdb module: %s" % e)

This wasn't enough, however, as SQLAlchemy didn't like the use of **kwargs at the time the connection is created. So I changed this:

self.connection = Database.connect(**kwargs)

to this:

self.connection = Database.connect(user=kwargs['user'], db=kwargs['db'], passwd=kwargs['passwd'], charset='utf8')

and voila! Quick and dirty DB pooling hack in Django for MySql implementations!

There are problems with this, of course, the most obvious being that I'm now branched from the standard Django trunk, that this isn't a universal solution & if taken to other database implementations violates DRY, etc. But: as a quick stopgap, and as a solution to an immediate need to speed up the user experience and keep them happy, it's pretty good.

(Facebook has an 8-second timeout for calls to your server. If 8 seconds passes and your server is still ruminating the nature of it's navel, the users see the White Screen Of Death, and they drop your app like it was an unpleasantly hot rock)

As usual, post your comments, criticisms, and cliches, and feel free to tell me UR DOIN IT ALL WRONG & offer suggestions if that's what makes you happy.

Thursday, January 31, 2008


The early bird catches the worm.

The second mouse gets the cheese.

Great minds think alike.

Fools seldom vary.

Time heals all wounds.

Time wounds all heels.