Bloomberg radio for startup news

Enter the office of any financial institution and you'll find Bloomberg on TV and the radio.  It's almost always on, filling their ears and heads with up-to-date news about their industry.  They don't need to venture to a website periodically to be updated -- it's constant.

This should exist for the startup community.  Perhaps it would be slightly different, as coding with that kind of white noise is pretty difficult (at least for me).  Maybe that's a reason it wouldn't work.  But it would be nice to not need to surf the web to find out that 37signals has some massive update or that your favorite hosting provider has experienced a massive outage.  

Maybe it doesn't have to be audio -- perhaps something akin to RSS, where you can subscribe to specific companies.  I think textual data is not ideal, though, because that still requires more attention than merely hearing the stories read to you.

My own climbing gym?

I was thinking about how cool it would be to have my own private climbing (bouldering) gym.  I think it would be awesome to wake up, mosey over to that room in my own place, and climb as little or as much as I want.  I could climb at my leisure, wouldn't have to travel, and wouldn't have to wait my turn for whatever route I wanted to try.

However, it turns out that making routes is HARD.  It's easy to make an easy route, but it's hard to make a difficult route.  The only way you can get better at climbing is perpetually doing things that are just out of reach (no pun intended).  If you're climbing space is private, nobody else is ever around, so harder and harder routes are nearly impossible to create.  It would create a stagnation in your skill and you'd never advance.

And so goes the normal pattern.  If you want to advance or increase your skill, it is imperative to surround yourself with people better than yourself.  So the idea of having a personal climbing gym falls apart.

Luckily, owning your own hovercraft might not fall into this category.  I'm still going to do that.

Why cloudhosting is the future

It's sometimes hard to figure out exactly why certain companies are successful.  Often times it seems to be a magic-lightbulb moment and the mere idea is something lots of people will instantly pay for.  Other times the idea is more general but the defaults are set correctly -- and there's no choice.  The iPod comes to mind.  It's an old story -- mp3 players had been around for awhile and nobody expected the iPod to be anything spectacular.  Apple's previous performance (until Steve Jobs came back) was nothing to brag about.  But they got the defaults right, they got the design right, and they executed extremely well.  Good engineering coupled with good marketing won them the vast majority of that market, to the exclusion of nearly every single competitor.

Cloudhosting (or Platform-as-a-service, PaaS) I think is a mixture of the two, I think.  The idea itself is very good: your code runs on our servers, and you pay us to manage the servers.  Web sites and web apps have worked this way for awhile: hosting companies like Dreamhost and Slicehost give you access to the machine your code runs upon, but they manage the infrastructure around that machine.  They take care of networking and maintenance.  This model worked really well for a long time.

Amazon came out with their Elastic-Cloud service (EC2) and it shifted things.  Now you could manage many machines very quickly with very little effort.  Amazon got the defaults right.  You don't need to care how the firewall is set up as long as it works.  That's what you pay Amazon for.  They took the hosting model and added another dimension to it.  You can bring up new servers very quickly and spin down others.  Amazon succeeded in executing very well to a specific market: engineers.  EC2 is more usable by non-sysadmins, but it still takes a bunch of knowledge about how to, say, configure apache or your mail daemon on TOP of EC2.  In this manner, Amazon's EC2 service is an instance of them capturing the idea and executing it very well for a specific market.

Heroku (and to a lesser extent, Google App Engine) did the same thing for different markets.  The beauty of a service like Heroku is that it requires zero sysadmin knowledge.  None.  I don't need to have a glimmer of understanding as to the inner workings of the server -- I just know it runs my application.  I write a rails app, test it locally, and it JUST WORKS on the server.  All of a sudden the time between development and launching has completely disappeared.

I believe there are specifics to each of these services that cater to their market.  Heroku, for example, is targeted exclusively to Ruby on Rails developers (and they're experimentally supporting Node.js, another community).  This is an important distinction.  App Engine, while it supports Java and Python, doesn't get the defaults right.  They force you to use their libraries, which breaks the entire abstraction.

What's the point of using that infrastructure if you still need to know how it works underneath?  Sure, it's always helpful to know how it works.  But that shouldn't be FORCED on you.

And that's what we're doing at Djangy.  We're working to get the defaults right for the Python community.  For example, the Python community is far more varied in certain respects than, say, the Ruby community.  Ruby has a few frameworks but Rails is by FAR the most popular.  Django is probably the most popular Python framework, but the others are still very significant.  Pylons, Turbogears, CherryPy, and others are most definitely on the radar.  This is one area we're investigating.

I believe the software industry benefits immensely from an incredibly fast cycle from imagination to product.  If I want to build a bridge, I have to go to school, learn physics, math, and join a company that has enough resources to throw at my bridge-building venture.  Then, if I somehow discover halfway through the project that I made an error, it might require weeks, months, or even years until the project gets back on track.  My imagined bridge takes a long, long time to become reality.

With software, though, it's completely different.  We can take our mere ideas and transform them into products very quickly.  Djangy aims to make this even faster.  We're taking care of the tedious work and the sometimes difficult scaling problems and letting you focus on building.

Wouldn't it be great if more people could experience turning your ideas into reality?

Why code?

I had a really interesting conversation with my roommate about "those types of people who just work all the time" and subsequently "become rich".  Her reaction (which is quite typical, I'd assume) was to question what happens after "these people" get rich.

She noted that they normally just keep working their asses off and keep coding.  They keep at it.  I can understand why it's generally difficult to understand, or to write that off as being "no fun".

The thing is, coding is fun.  It's sometimes frustrating and tedious, but if you pull off some product that becomes successful, (I imagine) the satisfaction is incredible.  Even from tiny projects I write for myself, it's an incredibly satisfying feeling to create something useful purely out of your ideas.  Not just satisfying, but FUN.

To non-tech folks, that (I think) is the missing key.  In other industries, it costs so much money and involves so much infrastructure that it just isn't possible to turn your ideas into working products.  But in the software industry, the barrier to entry is incredibly low.

Hacking is fun!

Using python decorators to modify arguments

Just came across a cool little decorator use.

I'm using Python fabric for Djangy.com deployment.  We have a production server, a stage server, and a local VM for development.  The IP addresses for the two servers stay the same, while my VM's IP address changes according to whatever network I happen to be on.

Ideally, I'd like to run any of the following:

Now, I could simply alias 'stage' and 'production' to their respective ip addresses.  But where's the fun in that?  Instead, I added these two strings and their corresponding IP addresses into constants and then put them into a HOSTS dictionary:

Then I created a python decorator that checks the host argument and swaps it out for the right address, but only if it's included in the HOSTS dictionary.  Otherwise, it lets it pass through unchanged.

The new thing I learned here was the ability to unpack the calling arguments in a decorator.  You can specify them individually and then say *args to denote "the rest" of the arguments.  Useful to know!  Now, I can call any of those hosts by their aliases, or I can simply specify a hostname or IP address.

 

My rant on the ever-widening technology gap

The pace of technological progress is absolutely staggering.  This website has color photos of russia from a century ago.  Before the Russian revolution.  Before WW1.

And there are little links to google maps so I can see where each image was taken overlayed on an interactive map of the world.  With satellite images and maps if I'd like.  And then I can read about it on wikipedia.

10 years ago, the internet was around, but it was very static.  I could simply read documents, but I could read them from anywhere in the world. I could communicate with anyone in the world, instantly (at very low cost).

50 years ago (1960), I could still communicate instantly with people across the world, but it was expensive.  I could call my family and friends but I'd need to keep my conversations short in order to not pay too much.  And sending documents? The mail was it.  GPS?  Forget it.  Ask for directions.

50 years before that was 1910.  There were no nuclear bombs.  Cars were still a luxury.  The average life span was 50 years old in the US.  Antibiotics?  What are those?  Uh oh, you got the flu.  You're dead.  

The pace of technology isn't just increasing.  It's ACCELERATING.  This is nothing new.  The technological singularity is not a new concept.  But what's interesting to me is the gap between tech-literate and tech-illiterate.

Think about the baby boomers.  Sure, there are quite a few (mostly in the tech industry) who are very up-to-date, who know enough about technology to be very successful.  But those are the exceptions.  Most folks my parents' age know how to use the web.  They know how to email, they know how to Google things, possibly how to organize their pictures and music on their computers and laptops.  And a small percentage even deeply understand what it means to store your information in the "cloud" versus on your local machine.  Fewer still understand enough to know which box to restart when the internet "stops working".

That gap is widening.  Because of this exponential growth in technology, no human generation can hope to keep up (not even yours).  The fact that 10 years from now, our parent's generation will not understand much more about technology than they do now is a fact.  Sure, we'll all learn about the new things that come along.  But for the most part, generational knowledge is static.  Once you reach a certain age, it's really really hard to learn more.

There are two realizations to make here.  1) This is unstoppable.  It's a fact of life.  2) If you can ease the life of the people on either side of the gap, you can probably make a killing.

We can make life easier for folks on the one side of the gap by making technology easy to use.  We can design things well enough so that people don't need to understand a shred of how anything works to get things done.  My parents shouldn't have to understand how a filesystem is organized to know how to burn a CD or print pictures.

Some ideas

I keep emailing these to myself and I figure I should just post them here

  • Everybody knows that variable reinforcement is the best way to pick up a habit.  Could we apply this to some kind of motivational priority list?  Every time my terminal starts up, I have it display a motivational saying, but I've started to ignore them.  Perhaps some kind of "random alert" system to remind you of your priorities, or goals, or quotes or something.
  • When I'm browsing webcomics like toothpastefordinner.com, xkcd.com, or pbfcomics.com, I'm annoyed that I have to keep clicking on "next" or "previous".  Could there be a firefox plugin or something that binds these to keystrokes (not just for users of, say, vimperator, but for everyone).  That would be incredibly useful.
  • Some of the comments on blogs like Failblog and thereifixedit are really hilarious.  More hilarious than the average, say, reddit comment (probably because their viewership is more broad).  I wonder if you could somehow crowdsource blog content or entertainment content on a more moderated level and still reward these people somehow.
So I guess that's it for now.

Using logger from a Delayed Job on Heroku

Yes, another rails post.  This time I'm sharing a solution.

I have a class I wrote to utilize the Delayed::Job functionality of Heroku.  I tried to use the standard rails logger.info("some error") and it kept throwing exceptions.

The solution is to add the following line to your class:

logger = RAILS_DEFAULT_LOGGER

Everything is perfect after that. (Well, okay, rails is far from perfect, but whatever).