Friday, March 28, 2008

Accepted

So I stayed up late last night waiting for an email about Startup School. Turns out I got in! I'm not really sure how selective it is anyway, but it's cool nonetheless. The anticipation before receiving the email was roughly equal to that of Christmas Eve when I was eight.

Now I get to figure out plane tickets and hotels and (most likely) car rentals. I am looking into good old public transportation (since it's at Stanford and San Francisco is supposed to have good public transit), but compared to what I got used to in Europe, it's not looking great.

I'm also hoping to use this as a motivator to get some small project done before I go, so I have something to talk about when people ask 'what I do'. So many of the attendees actually have startups in the wild, and here I am just hoping to start soon.

In other news, NIN is touring again this fall, and they are conveniently headed to Houston, so I will catch them there. Last time I saw them was in St Louis in 2006, so I'm excited to see lots of new stuff.

Tuesday, March 25, 2008

Think of the Coders

Finally, somebody said it: Save The Developers.

I also noticed that the new version of merb has been out for quite some time now. I played with merb briefly (0.5.3) and really liked its design philosophy. It felt like I had control over what I was doing without requiring an absurd amount of configuration. One of my biggest complaints about Rails is that there seems to be four ways to do everything, and the documentation on the options is often out of date or conflicting.

Thankfully, you can barely find any merb docs, so there is less confusion! Seriously though, the current release is making a big push to properly document a public API, and merb seems so well done that I'm sure it'll be easy to grok.

My experience with it was definitely pleasant the first time. Merb + Datamapper for a simple app would serve pages at about 700 req/s on my home machine, when an equivalent Rails + ActiveRecord app would only hit about 120 req/s. Of course all scaling issues don't really matter until you have lots of traffic, but any advantage is useful.

Also, while reading about Rack, I ran across this presentation that included something called Coset. It was basically an extra layer on top of Rack that would serve RESTful web services. The example code was brilliantly easy to understand, but I can't find a site for it anywhere. Anyone have any ideas where to find this thing?

The ideas for this summer continue to pile up.

Friday, March 21, 2008

Accomplished

I just made my $4000 contribution to my Roth IRA for 2007 this morning. Man it feels good to have that done. On top of that, today is payday and I had a confluence of other bills to mail off too, so it generally feels like a financial cleansing just happened.

Now I just need to figure out what to do with that $4k. The general plan is some kind of ETF, since I can't touch the money for another 35 years anyway, but the market is so depressing lately I don't even want to pick.

I already have my $5k contribution for 2008 saved up (factoring in my KPERS rollover), but I'm keeping it in savings until tax time next year. So I guess the next immediate goal is to save up for this summer. Unemployment here I come!

Tuesday, March 18, 2008

More Organization

So after reading Jys's entry on clutter, I am once again resolved to pare down my possessions. I was temporarily working on this problem last fall when we moved into our apartment, and managed to sort everything I no longer used into one closet (my ebay closet). Unfortunately I have been too lazy to even ebay the stuff (leave it to ebay to make selling things seem like work), so it's all still sitting in that closet.

One of my favorite articles on this subject comes from Paul Graham. In Stuff, he writes:

I first realized the worthlessness of stuff when I lived in Italy for a year. All I took with me was one large backpack of stuff. The rest of my stuff I left in my landlady's attic back in the US. And you know what? All I missed were some of the books. By the end of the year I couldn't even remember what else I had stored in that attic.

And yet when I got back I didn't discard so much as a box of it. Throw away a perfectly good rotary telephone? I might need that one day.
If you substitute 'Spain' for 'Italy' above, I could've written this. I even have my old touch-tone telephone in a box somewhere, just in case I decide to reverse a decision I made seven years ago that a cell phone is all I need.

What makes stuff even worse is that it usually costs time/money to get rid of it. I think that is why we accumulate so much of it by default. Getting rid of stuff is suspiciously like cleaning.

There is also the this-could-be-useful problem. I look at that telephone and start thinking up situations where I would need it. Need to test my line to see if it's working? Better have a phone handy so I can check for a dial tone I'll never ever use. I can't think of a use for the nine parallel ATA cables I have in unopened plastic bags, but you never know, the technology could come back into style.

Likewise, that complete set of PC Worlds from 1995 to 2001 might be worth something to someone someday. It's obviously worth breaking my back every time I have to move it.

I think my dumpster might get a visit or two tonight.

Friday, March 14, 2008

Favorite Code Today

I was most proud of this little gem today:

function addparams(query) {
return query.replace(/(&?)([^&=]+)=([^&]*)/g, function(m, amper, key, id) {
var val = document.getElementById(id).value;
return val.length > 0 ? amper + key + "=" + escape(val) : '';
});
}

It only ended up being six lines, but initially it was more and I like trimming code down more than making it bigger. The function itself is dead simple, nothing tricky or insightful here, but it's just downright pretty... even with the line noise regexp. Something about it just seems elegant and symmetrical. I don't even know how to describe how code can be pretty, but I would consider putting this on the wall in poster form.

So I applied for Startup School today. I figure I can waste some cash on a weekend in San Francisco to go meet some people and hear some hopefully inspiring speakers. Just thinking about it makes me look forward to this summer. I plan to be so nerdy.

Wednesday, March 12, 2008

Checking Things Off

I am a very to-do list driven person. Basically, if I don't write something down where I will constantly see it, I won't do it. Because this has bitten me in the past, I also obsessively check my to-do lists and mentally reorganize them constantly.

My problem lately has been the proliferation of the lists themselves. I have my checkbook spreadsheet, which is more or less my financial to-do list. It tells me when to pay bills, when to transfer money to savings, whether I am hitting goals or not, etc. I also have my Google Calendar, which has my social/work to-do list. (Birthdays, meetings, etc.) Then, for things that have no definite date associated with them, I have just a plain to-do list on my Google homepage. This is for stuff like "Get Insurance" and "Call about KPERS rollover." Finally, to top it all off, I have a legal pad full of programming to-dos. Actually, I have four of those, two at home for different things, and two at work (again for different projects).

So, with all these different modal lists running around, it's easy to ignore one or two for a while. This is what I was doing to my no-definite-date list. I finally remedied that a bit this week by checking off the two highest priorities. First, I got some health insurance. Second, I called AT&T to sort out my cell phone.

I had various issues with my cell phone all happen at once. First, the phone itself refused to charge, and eventually went dead. Second, I really wasn't using it enough to justify $50 a month. Third, the fact I had to pay for text messages sent to me by others just really bothered me.

So I called the other morning ready to pay the stupid termination fee (which I regard as rather like extortion) and cancel my plan. I had been putting this off for some time, but I got another bill (for a month during which my phone was dead in a drawer), so I decided to finally deal with it. The cancellation lady was very helpful however, and solved all my issues rather nicely.

First, I found out I could move my phone to my parent's family plan without a fee. This means my monthly cost will shrink from $50/mo to about $20/mo. Second, I added a block to my line which prevents me from getting any text messages. Third, she is sending me a new phone in the mail to replace my broken one. Since I was still under the one year warranty, it's all free of charge.

Amazing what can get done when I stop avoiding the issue.

And now that I have articulated my to-do list issues, I would like to think of a way to consolidate a bit. I'm thinking some kind of consolidated calendar meets checkbook, if I can figure out an easy way to interface with it. Hell, maybe I'll finally have an interesting project with motivation to finish. (To add to my huge list of ideas that I currently am not working on.)

Tuesday, March 04, 2008

API

So the guys at Buxfer.com opened up a REST API to their service today. I really appreciate that they did REST right, rather then some weird not-quite-by-the-rules hybrid. If you have ever had to use SOAP to do anything, you can really appreciate how fresh and lightweight REST feels, especially when it's ROA.

This got me thinking about my favorite parts of programming. I think that API design is a very interesting problem, because of the constant clashing requirements. On the one hand, you want something simple and easy to understand. On the other, you want something rich enough that it is actually really useful. You also have to really think it out beforehand, because once an API is out there, it's a major faux pas to break existing calls. It's kind of like designing a miniature language. A DSL for data if you will.

I have to wonder if the API is actually what makes a site have lasting value. All of the big important sites I can think of on the net are important to me because they can be built upon. Facebook exploded when they introduced their Platform. Amazon transcended its place as the Walmart of the Internet when it started offering AWS (and became more like the Power Utility of the Internet). Paypal became a real merchant option with their API, Google Maps exploded with it's API, and the most obvious of all is Twitter, which receives 90% of their requests through their API.

If anything, it seems like the API is the real killer feature that makes or breaks a site. It's like selling directly to the customer as opposed to selling to other salesmen. If you sell to a salesman (get them to use your API as a backend service), then you get all his customers too, without having to chase each of them down directly. On top of that, your API clients are much more likely to be willing to pay for what you offer, because they will be using it to make money. They will also be more likely to stay around long term.

Thankfully I think API design is wicked fun, so hopefully I can make something out of this.

Monday, March 03, 2008

Retirement Accounts

It seems like we have an absurd alphabet soup of options for retirement accounts nowdays. I just don't get why there have to be so many options. I know as a 24 year old, my Roth IRA currently makes the most sense for me, but what happens when I start working somewhere that offers a 401k? Or if I suddenly start earning a lot more and decide a Traditional IRA would be better for me? Or, what if I finally become successfully self-employed and have the ability to create a SIMPLE or SEP plan? It seems like we could fix this. Here is my proposal.

Each individual has one account which, to distinguish, I will call a Lifetime Investment Account (LIA). These accounts allow both pre-tax and post-tax contributions. Pre-tax contributions are limited to some set amount (lets say $5000/year - indexed for inflation), and post-tax contributions are limited to the individual's Adjusted Gross Income. The account balance grows tax free, and withdrawals after a certain age (say 60) are also tax free. Withdrawals before this age are taxed as normal (earned) income plus a 10% penalty.

So far this is sounding like a combination Roth and Traditional IRA, with higher contribution limits. Here is where it gets efficient though. Each account has three types of access: Owner, Government, and Contributor. There can only be one Owner, and only the Owner can make both deposits and withdrawals. (The Owner is obviously the individual.)

Only the US Government has Government access, which it would use to deposit a new special kind of bond called a Social Security Bond. This is a non-transferable, non-marketable government security representing promised future SS payments, and is void upon death. Read more over at The Skeptical Optimist about these bonds.

An account can have multiple Contributors (there is no limit). Contributors can only make deposits (they cannot even see the current balance of the account). Any other legal entity can be a Contributor. This means your company can contribute to your account, your parents could, your children could, whoever. If you own your own business, it could contribute to your LIA. To keep the tax figuring simple, all contributions made by Contributors are post-tax. Pre-tax contributions can only be made by the Owner.

Remember the contribution limits? These are global limits. In a simple case, if I make $50k this year, and contribute $4k of it pre-tax to my LIA, then assume my AGI is $46k. That is the limit of contributions from all Contributors combined. Anything over this limit is refunded to the Owner and taxed as normal income. Contributions by the Government do not count towards these limits.

The Owner has total control over investing the contributions. The account custodian can offer any range of investments for the Owner to choose from, just like an IRA works today. Ideally these would include (at minimum) several index tracking mutual funds, ETFs, and money market funds, as well as access to equities and regular mutual funds.

The main thing is that this will stop the proliferation of accounts. When you switch jobs, you just give your new employer your LIA information and they sign on as a Contributor. Since they can't see your balance or investments, you don't even have to worry about removing old Contributors (although they can remove themselves). This account stays with you throughout your adult life, and the SS Bonds make it easy to estimate how much you will be drawing there. You can roll the account over to another custodian directly. Direct rollovers will involve liquidating the account assets, then directly rolling over the cash amount to the new custodian. Simple stuff.

I think this also has big tax preparation implications. Since you only have one lifetime account, there are fewer things to keep track of. Since it acts like both types of IRA at the same time, you don't have to agonize over getting better tax treatment. Since anyone can be a Contributor, it does away with all those 401k, 403b, SEP, and SIMPLE accounts.

Finally, your custodian can compete on investment features and tools, just like IRA custodians do today. I'm specifically thinking about the ability to define an asset allocation plan upon account setup, and simply leave it on autopilot throughout the working life.

Obviously the law that created LIAs would remove the ability to create any more of the existing alphabet soup plans, so within a generation these would fizzle out and our tax code could be simpler. Existing plans could also be rolled over into your LIA, subject to the usual rollover tax implications. Basically your existing 401k custodian would sign on to your LIA account as a Contributor, then contribute the value of your account. You (the Owner) could then allocate the contribution as you pleased.

So what am I missing?