Friday, January 08, 2010

Websocket Client for Java

A few weeks ago I published an implementation of a Websocket client written in Java here. If you're not already familiar with it, I'll point you to Mark's post, which is a great explanation of the practical benefits of this protocol. The main reason I wrote this in Java was for compatibility with Android, so if you have trouble using it in other situations, it would be great to get feedback or patches.

Thursday, December 17, 2009

PartyCamera for Android

I just released a new application on the Android Market called PartyCamera. If you're on Android, you can follow this link to get it. Here's the description on the Market:
Ever wanted to pass your phone around at a party, but were worried about people looking at private information on your phone? PartyCamera locks your phone into camera mode - preventing other uses!

Once activated, press the HOME button to enter your password and exit PartyCamera.
I'm eager to get feedback from users, especially with regards to how it works across different devices.

Wednesday, November 25, 2009

Android Doesn't

Android has been promoted as exposing many more phone features to user-installable applications than the typical "open" mobile OS. Here is the "All applications are created equal" bullet from the Android About page:
Android does not differentiate between the phone's core applications and third-party applications. They can all be built to have equal access to a phone's capabilities providing users with a broad spectrum of applications and services. With devices built on the Android Platform, users are able to fully tailor the phone to their interests. They can swap out the phone's homescreen, the style of the dialer, or any of the applications.
This may be Google's goal, but at present this statement is patently false. Yes, you can swap out the homescreen, but it's impossible to build a suite of applications that can achieve the same level of functionality as the core applications.

Most of Android is open source so it's easy to look at how the system works. The core applications have special permissions or access internal APIs which are not exposed in the SDK used by third-party applications. This means it is not possible to recreate the full experience of the core applications entirely using user-installed applications.

Getting the same level of access as the core applications entails modifying the Android source, which means you should really be building your own device or have a very technically savvy audience who is willing to replace their system software with your own (and that assumes they have a device with root access). Downloadable applications available through the Android Market or other channels cannot perform these functions.

Many developers had expected Android to provide a new level of accessibility not previously found on platforms like J2ME or even Windows Mobile and Symbian, but it appears there are still many things that just aren't possible. Here are some of the features I have found missing from application capabilities:

- Replace the in-call screen.
- Dial numbers in the background (without an in-call screen; useful for call forwarding, etc.)
- Dial emergency numbers (Ok, not really necessary :).
- Access call audio streams (e.g. for call recording)
- Suppress notifications from other applications (toasts)
- Incoming call control (filter/block/redirect)

These are the features that I've personally been stymied on; I'm sure there are other common scenarios that aren't supported. What have you found?

Thursday, November 19, 2009

The Revenue Singularity (Google Drinks Your Milkshake)

I've heard a number of people recently say something like "Google is a one-trick pony. They've never made a dime off anything but search." While this is mostly true on its face, it ignores the bigger picture of what Google is doing: converting all tech revenue into advertising revenue, where Google owns the majority of market share.

As I've stated before, Google's endgame, explicit or not, is to commoditize all software to the point that no one can make money directly off software. This means no more software royalty streams, no more software subscriptions, no more software IP sales. By open-sourcing so many types of software (and this software is mostly at the top of its class, if not the very best), Google is making all types of advanced software free. Of course, Google's core infrastructure and advertising software is NOT open source. In this world, Google's operational efficiency and huge search advertising market share are their competitive advantage.

By making software free (or less than free), Google is knee-capping any company that tries to sell software. Android is destroying revenues for mobile OS vendors. ChromeOS will have the same effect on PC OS vendors. Shares of navigation software makers dropped by nearly 20% after it was announced that Google would give a revenue share to OEMs installing its Google Navigation product. The list goes on.

This has two effects: to cripple its competition and to establish a baseline price which drives software developers into Google's arms. By building best in class web applications, Google has established that no sane person would pay for any web application. With free now the de facto price for software, the only way for anyone to make money is through advertising, where Google will reap the majority share.

It may be true that Google does not make money DIRECTLY off many of its non-search products. But the conversion of software to a "less than free" commodity means Google is destroying value in many other areas and siphoning some of that off as search revenue.

Monday, November 09, 2009

wmaloader for Windows

I'm still using an ancient Linksys WMA11B Media Adapter to stream audio to my stereo. The original UPnP-based software it came with was really buggy, so I use some alternative firmware to connect it to my Squeezebox Server (nee SlimServer).

The firmware is downloaded by the device everytime it boots up, so it's easy to send it a new brain. The Linksys server software was also a pig though and only worked on windows, so someone was kind enough to put together an open source package called wmaloader as an alternative that runs on most OSes.

I've been using the wmaloader on Windows for a while, but it was a pain to setup and didn't work out of the box as a service. I've built an installer that bundles up the necessary binaries, installs the service, and opens up the firewall as needed.

The installer binary is here, and the source is on github.

Monday, September 28, 2009

PubSubHubbub Subscriber for Python

I built a little PubSubHubbub subscriber library in Python that I just put on Github here. I'm using it for real-time sharing from Google Reader to Twitter, but there are a lot of other interesting applications coming along.

Tuesday, April 07, 2009

10 Startup Red Flags

I've worked on a number of startups: from seed-stage through IPO, as a founder, employee, advisor, and consultant, as well as evaluating a bunch from the outside, so I've seen my share of screw-ups. There are some obvious warning signs, but sometimes these are hard to recognize except in hindsight or without prior startup experience. If you're considering working for a startup, hopefully this will give you some tips on what to look out for.

Of course, everyone should trust their gut, so if you feel something's not right, it's probably not a good fit. I'm not going to go over everything you should be looking for in an employer or even in a startup, just some warning signs that might make you think twice about what might otherwise sound like a good opportunity. On the other hand, if you're running a startup maybe these are some things to avoid. If anyone has any strong objections to these or good stories, I'd love to hear them.

1. Wacky Titles

Startups that have too many VP and C-level titles floating around are just asking for the smack-down. Who's going to do the work if everyone thinks they're an executive? Titles like SVP and EVP are silly at a startup, and a giveaway that there's been some serious shuffling or some really big egos are involved.

It's generally wrong for people to have multiple titles too. Ever met a CTO/VP Engineering or CEO/CTO? Yeah me neither. At least, I've never met someone who needed to have both of these titles. This is generally a sign of some wildly narcissitic personalities.

If you're the CEO, just be the CEO! If you're highly technical and drive the technology vision of the company, people will get it without you tacking on the CTO title.

2. A Billion Outstanding Shares

Most startups should have fewer than 50 million shares outstanding. If you get an option grant for a million shares and you're employee 25, something is funky. Maybe the CEO got his cousin from Omaha to be their lawyer or there's been some serious messing around with the cap table. Either way, it's a sign that something is amiss.

3. Lack of Technical Leadership

In my definition, to call a company a tech startup, there must be some significant technology that gives you an advantage. Just using technology isn't enough (who doesn't have a website these days?) This means there MUST be a technical founder in a startup. If you're outsourcing the all the technical work, your company probably isn't a tech startup.

It follows that an "idea guy" who "just needs to hire a few engineers" probably isn't running a tech startup. If you're the first technical employee at a startup, you're either a founder or you're a sucker.

4. A Large Number of Ex-Employees

With social networks like LinkedIn, it's easy to get a rough idea of how many people work at a given company. Of course, not everyone in the company is going to be on LinkedIn, but if a large number of people are former employees this is a really bad sign for a startup as there probably aren't that many employees to begin with. Maybe there were layoffs, which isn't a great sign, but it probably indicates a serious retention (i.e. leadership) problem.

5. An HR Department

After a certain point, all companies need someone in charge of hiring just to deal with screening, scheduling, and general process, but most startups don't fall into this bag. If the company in question is a 5 person shop and they have someone outside the core team calling you, there's something wrong. The founders or at least the hiring manager should be doing the bulk of the hiring early on - including phone screens. I think this applies up to about 50 people.

Recruiters are generally non-technical and aside from process-pushing offer little aside from their network of contacts. If you're just looking to have resumes keyword-scanned then maybe you should consider a basic mail filter. When budgets are tight this is one area you shouldn't feel bad about skimping on. Hiring is one of the main things a startup must get right, but contract recruiters aren't the way.

I actually once had a very non-technical recruiter try to give me a technical interview (including coding) over the phone. That's a REALLY bad sign.

6. Too Much Big Company Blood

There's an old joke about General Managers from a certain very large software company who think they've "built" a billion-dollar business who then fail spectacularly at starting a company when they no longer have that big company business card. Well, it's not a joke.

Startups require resourcefulness and a rolodex of enterprise customers isn't enough. People who are too far removed from doing actual work and haven't worn more than one hat are unlikely to be successful in an environment where this is a serious prerequisite.

I'm not saying that no one at a big company can succeed in a small company, but in my experience success is rarely transferrable between the two.

7. Zero Transparency

The interview is a try-out. It sets the stage for how things might work on a day-to-day basis. If your questions about funding, outstanding shares (save this for after the interview), and the general details about the company's plan go unanswered ("It's not our policy to disclose that" is the usual response), is there going to be any openness when you work there?

This one is pretty generally applicable to all hiring, but given the small size of a startup there can't be a lot of secrets and if the atmosphere is secretive to start with, how much worse will it be when the company is bigger?

If it's your company, bear this strongly in mind. "Stealth-mode" is generally unecessary and more likely harmful to your startup (and calling it stealth-mode calls you out as a noob). You may not be ready to go as far as some in how open your startup is, but consider what radical transparency can do for you.

8. Marketing Stunts

Startups need to be cash conscious. The ones that are spending money on large booths at conferences, television ads, or huge launch parties might be fun to work at, but they likely won't be around in 6 months too.

9. Too Much Money

One of the biggest threats to a startup is running out of money. But too much money can kill just as easily. VC-backed startups can find themselves in a position where there investors are trying to drive growth by pumping money into the company. Unfortunately this usually backfires.

The first thing that happens with too much money is too much hiring. You start hiring a lot of people in sales and marketing to drive revenue, and while you may still be hiring people to do real work, the weight from the top starts to push down on everything else. The focus on hiring can take away from the drive to get actual work done which means your company is going nowhere fast.

It's easy to start losing discipline when the money is flowing around, so while that $50 million looked like a lot of money when you were 20 people, when you're 100 it's nothing. Consultants, free lunches, massages, and junkets expand to use it up.

10. Lack of Focus

When the CEO says "We're going to be bigger than Google!" and you can tell he really believes it, you should:
1. Kindly thank him for taking the time to speak with you.
2. Leave the building.
3. Never speak of this again.

It's great to have a big vision and try to get others excited about it, but a startup really needs focus (What's the minimum viable product?). You can't take over the world without building a few forts first. If company management won't even engage you in a realistic discussion of the challenges the company will face, it's going to be an uphill battle.