One billion dollars

April 9th, 2012 2 comments

(Part of the One Month to the 1% series of posts)

I was both inspired and dismayed by today’s news that online photo-sharing/photo-filtering company Instagram had been acquired by Facebook for $1 billion.

I was inspired because it was evidence that times are good in the high-tech startup world.  Companies are being built, money is being made, stories are being formed.  A team of about a dozen people went from zero to $1 billion in just over 24 months.

I was dismayed because of the message it sends to young entrepreneurs: “Don’t focus on actual problems, and certainly don’t take big risks to make the world a better place.  You’ll be rewarded handsomely if you just make silly photo-sharing apps.”

Project status: no progress today.

A little progress

April 8th, 2012 Comments off

(Part of the One Month to the 1% series of posts)

Services like consulting are great ways to get cash, but their huge drawback is that they produce income only while you’re on the clock.  I’d love to have a product that sells itself even while I’m asleep or out of town, like I was today for Easter.

Fortunately, I have at least three such initiatives in progress for my $30k goal:

One of them, the ebook, managed to move the needle off of zero yesterday!  Specifically, it now stands at — brace yourself —  $0.70.  Amazing, right?

The ebook was produced only as an experiment to see what it would take to produce an ebook.  It’s simply a reformatting of content from one of my blogs, and it’s not the still-being-written version of my hockey trip.  As such, I haven’t promoted the ebook at all, lest it become confused with a proper book-writing effort.

A variant of this photo has been my most popular stock image to date

My inclusion of the ebook exposes one of my interpretations about the one-month challenge: I can use product that I’ve already put in place or put forth effort developing.  I need not start precisely from scratch.  Don’t worry about that making the challenge too easy, since the total revenue from all three of the aforementioned income sources has been less than $100 — not per month, but in total.

Clearly, there is room for progress.

Status: $0.70 (0.0023% to the goal)

One month to the one percent

April 7th, 2012 Comments off

It’s normally poor form in Western culture to talk about one’s income with acquaintances, but I did it anyway.

Earlier this year I was visiting with a good friend, a fellow Stanford engineering alumnus.  Our meandering conversation eventually passed through his side business.  Somehow, the topic of his revenue arose, and he pulled up the figures.

It wasn’t really a surprise.  I’d known for a while roughly how much money he was making. Still, having the glowing numbers placed before my eyes was like a getting bucket of ice water dumped on my head. The reality became undeniable: my friend was in the much-maligned 1%, the top tier of earners in America.

From last fall's Occupy Boston protest. I wonder how many of these people actually were in the 1% but pretended to be in the 99%?

I’m not proud to admit that I felt a bit jealous.  The fact that much of it was coming from a lifestyle business, not just his regular salary, made it even more painful.

Sure, my friend was a smart guy.  He had identified a niche problem, built a good solution, and was reaping the rewards.  He deserved his success.  Still…  why not me?! Arg.

That’s when I got the idea.

What if I used his success as inspiration for a new project?  Stunts seem to have been my thing lately, and time was on my hands: my most recent contracting client mothballed my planned project due to budget constraints.  I thought about it for a while, and then I hit on an intriguing challenge:

I will go from zero to $30,000 in non-salary, non-consulting income — and do it in a month.

In exactly 30 days, on May 7, I will turn 30 years old.  How numerically alliterative it would be to earn $30k from entrepreneurial activities in that time: 30 in 30 by 30.

I get giddy just thinking about it.  It melds well with a goal I set almost three years ago, in which I wrote that I’d like to be either wealthy or poor when I turned 30, not somewhere in the “mushy middle”:

“When I turn 30 in three years, I want to be either rich or penniless.  The outcome doesn’t matter so much to me as long as it’s not the mushy middle; that would be indicative of a failure.” — Me in 2009

That was in the context of a post about the launch of my since-failed startup, but the sentiment remains. I’m not exactly broke, though spending most of last year gallivanting around America and Canada has left my bank account in sore need of replenishment.

But what would it take to be rich?  The median annual income for Americans is — you guessed it — $30,000.  If you change that from an annual income to a monthly income, the result you get is $360,000 per year.  And that, conveniently, is the threshold for rarefied air. At that level, you join the 1%.  Thus, the name for the project:

“One month to the 1%”

Impossible to achieve?  I disagree. One way to look at it is that it’s only a factor of two from where I was while consulting. I feel that I’ve provided positive value to my clients in the past; presumably, they were making money off of what I developed for them, and probably much more than a factor of two. Why can’t I capture that value for myself?

Hell, I might even be shooting low.

Of course, it’s relatively easy to make a bunch of money as a consultant, but that would feel like cheating, and that’s why I’m not allowing myself to meet the challenge through consulting.

(If that surprises you, here’s the reality: it’s relatively easy to bill in the $100/hr neighborhood as a consultant, but it’s much more difficult to go to $200/hr, which is what would be needed to meet the challenge.  I have reason to believe that many regular employees have no idea what the billing rates are like for engineering consultants.  Consider your eyes opened.)

I have yet to figure out how I’m going to pull this off, but it seems likely that it will hinge on my ability to sell and promote as much as anything else.  That will certainly push the bounds of my comfort zone, I’m more comfortable writing code than selling products.  And what would I sell, anyway?

Uff-dah. The good news is that I have some ideas brewing.

Here are the rules in full:

  • Accrual accounting
  • Can’t be illegal
  • Money made from consulting doesn’t count
  • Neither does money made from being an employee
  • Anything else is fair game
  • Deadline: May 7, 2012
  • Daily progress updates Change of plans: progress updates when there is progress to report

And so, we start Day 1 at $0.

Transparent static text in wxPython

March 15th, 2012 5 comments

For my non-geek friends, feel free to bail now.  This is a nerd post.

I’ve been spending a lot of time lately on a project that uses wxPython for its GUI.  Yesterday, I spent about five hours trying to figure out how to have a static text widget that would have a transparent background.  My application had a gradient background, and I wanted that to show through under the text.

After a bunch of Googling, I found lots of requests for such a widget, but I didn’t find any good explanations on how to do it.  Fortunately, I did figure it out, and as is often the case, the solution was straightforward in hindsight. In the hope that I’ll save somebody a headache, here’s some code for a transparent static text widget:

"""
Static text with transparent background
"""

import wx

class TransparentText(wx.StaticText):
  def __init__(self, parent, id=wx.ID_ANY, label='', 
               pos=wx.DefaultPosition, size=wx.DefaultSize, 
               style=wx.TRANSPARENT_WINDOW, name='transparenttext'):
    wx.StaticText.__init__(self, parent, id, label, pos, size, style, name)

    self.Bind(wx.EVT_PAINT, self.on_paint)
    self.Bind(wx.EVT_ERASE_BACKGROUND, lambda event: None)
    self.Bind(wx.EVT_SIZE, self.on_size)

  def on_paint(self, event):
    bdc = wx.PaintDC(self)
    dc = wx.GCDC(bdc)

    font_face = self.GetFont()
    font_color = self.GetForegroundColour()

    dc.SetFont(font_face)
    dc.SetTextForeground(font_color)
    dc.DrawText(self.GetLabel(), 0, 0)

  def on_size(self, event):
    self.Refresh()
    event.Skip()

A couple of key things: First the style of the widget is wx.TRANSPARENT_WINDOW (all controls are windows).  Second, GCDC is used in on_paint(), because the normal DC doesn’t support transparency very well.

Unfortunately, many of the other widgets in wxPython have a similar lack of transparency support, so I ended up punting and redesigning without a gradient background. However, if I want to go back in the future and create more custom transparent widgets, this approach seems viable.

How I got my mom on the internet

January 16th, 2012 Comments off

I knew it would take drastic action.  Nearly two decades of attempts had fallen flat.  It was the 21st century, and my mom was still not on the internet.

I first got online in 1994.  Seventeen years later, my mom still had a paralyzing fear of even turning a computer on, let alone surfing the web.

More time went by with no progress.  Excuses begat more excuses.  I needed something so compelling that she would have no choice but to capitulate.

Finally, I hit on a solution: I would play to the fears of a parent being disconnected from a child’s life.  It was the spring of 2011, and I was about to leave Minnesota on a 6-month trip to every state and province.  I told my mom that I would not tell her anything about the trip on the phone. She would need to read about it on my blog.

It’s possible that she thought I was bluffing (I wasn’t), but regardless, she quickly got on board with the idea of acquiring internet access.

My sister gave her an older laptop, I did the initial system setup, and my mom subscribed to Clear.  In no time at all, she was leaving mom-esque comments on my trip blog.

Success!