Friday, June 29, 2007

The End Of The Domain

TechCrunch posted a write up the other day entitled "Domain Sellers Party Like It's 1999". And it's true. The domain business is a big business right now.

From the TechCrunch post:

Last week some $10million changed hands at auction for domain sales, with 16 domains being sold for 6 figures. Free Credit Check.com & Credit Check.com sold together for $3million, although as the DomainTools Blog points out this was at a relatively low multiple of around 7x yearly earnings. Seniors.com sold for $1.8 million and even Blogging.com raised $135,000. The exuberance in the market even extends to the spam infested .info domain, with Houston.info selling for $17,000.

I guess it's understandable. There's a limited supply of good domains out there, and getting one of them can drive a lot of traffic, which on the current predominantly ad-supported internet, equals profit. The thing is, that's all going to change.

The first steps are already taking place. The Web 2.0 "bubble" is generating tons and tons of new web based businesses and they all need domains. The thing is, there just aren't enough. And nobody is going to let the unavailability of a good domain name stop their "world changing" buzzword laden startup.

So people have started registering jibberish. See basically any real Web 2.0 site for examples of such nonsense-word names. Names that would never have been associated with respectable businesses are now receiving millions in VC on a daily basis. Surely, many would say, these names aren't the result of desperation, but instead new and hip, and thus, marketable.

I tend to disagree with this sentiment. These sorts of names only really became marketable once they were in widespread use, and honestly, I doubt very much that a jaiku or kiko is really very marketable to anyone but mindless Silicon Valley lemmings.

These names, unlike the names of Web 1.0, are certainly not the sort of thing that someone would type randomly into a web browser, like pets.com or money.net, so they clearly don't add value by driving traffic that way. But really, the era of driving traffic with random direct URL entry was the first thing to go. Even the most internet illiterate are starting to get it through their heads that the internet is so big that guessing at URLs is not a very effective way to find useful or relevant websites.

There are really only a few reasonable entry points to the Web:
  • Google or other search engines (there are other search engines?)
  • RSS Readers
  • News syndication services like Slashdot, Digg, or any old blog
  • Social bookmark-sharing and discovery services like Del.icio.us or Magnolia
  • Perhaps an email or IM conversation link
Both news syndication services and social bookmarking services boil down to rss feeds, so that can ideally all be handled by an RSS Reader. This means there's essentially 3 entry points to the web (somebody let me know if I'm missing one here): Search Engines, RSS Readers and Email/Chat.

Of course, Google just so happens to run the most popular web-based versions of all of these applications. And of course, they can all be embedded in a customized Google home page. So really, there's only one word that people ever need to type into their browser, and that's Google. Really, at this point, setting Google as a home page is obvious, because it is the only starting point.

I suppose that the only other possible entry point would be through a bookmark, handled by the del.icio.us Firefox extension ideally; no need to enter a domain name there.

So, there's no reason to enter a URL ever, or even see one, in order to start browsing the web. Of course, once browsing on the web, the way to get from place to place is via links. Period. Any movement over the web is done by accessing a link. No entering a domain name here either. Ever.

So, why again, do we even care about domain names at all? There's no need to enter them, and as a result, no need to ever even look at them, except maybe, to check for a .ru or .ro extension as a warning of a phishing attack (though that's slightly less of a concern with OpenDNS). Why is everyone shelling out millions of dollars for things that there is no reason to look at or care about?

Domains are an archaic and ugly branding method, a holdover from the early days of the internet. It's going to take a little while longer for it to happen, but in the not too distant future people are going to start to realize that domains are not only irrelevant: they're worthless.

Tuesday, June 19, 2007

Acts_as_versioned simple walkthrough

Acts_as_versioned is a plugin for Ruby on Rails that adds simple versioning functionality for any of your ActiveRecord models.


To install the plugin :

Navigate to your home directory and install with the following commands:

ruby script/plugin discover
ruby script/plugin install acts_as_versioned


The acts_as_versioned plugin allows you to easily make a model save each version of itself in a special database table with version identifiers that can be used to show or return to previous versions of that data.

Lets call the model that you want to version "Product", giving it the singular name used for models, knowing that the database that will be created for it will be called "products." To create this just run:
ruby script/generate model Product


To tell your program that you want this model to be versioned by adding to your model a single line:

class Product <>


This is single call to acts_as_versioned takes care of a huge amount of work for us in the background.

Now that we have the model that you want to version, it needs to have a 'version' column.
The easiest way to do this is to edit your migration for this model to include a column called version with attribute integer.

class AddProductAndVersionedTables <>

Your migration is also going to need to create a versioned table for this model. You do this by adding two lines #{model_name}.create_versioned_table and the associated drop function #{model_name}.drop_versioned_table to your migration

class AddProductAndVersionedTables <>


If you have already created your model and want to make it able to be versioned, you are going to need a new migration, this will add the version column to your model, and create a versioned table for it:

class AddVersioning <>


Now just run
rake migrate
to apply the changes, and this takes care of setting up everything we need for the database.


Anytime that our model is saved, it will store a copy of itself in the versioned database, in our case called product_versions. We are provided with most of the functions we need in the acts_as_versioned plugin.


Some useful methods are:

find_version(version) - Use this to find a specific version of a model.
find_versions(options={}) - Use this to find versions of a model. Takes an options hash like find
revert_to(version) - Use this to temporarily revert to a previous model. (doesn't save)
revert_to!(version) - Use this to revert and save to a previous model.



Some examples of how to use these methods:

To add a link to revert to previous versions and view other versions:

In your view:

<% for version in @product.find_versions.reverse %>

Version <%= version.version %>
<%= link_to '(revert)', { :action => 'revert_to_version',
:version_id => version.version,
:id => @product},
{:confirm => "Are you sure?" } %>
<%= link_to '(preview)', :action => 'show',
:version_id => version.version,
:id => @product %>
<%= version.comment %>
<% end %>

Obviously this code uses two methods which are not defined here, but in the controller

def revert_to_version
@product = Product.find( params[:id] )
@product.revert_to! params[:version_id]
redirect_to :action => 'show', :id => @product
end

def show
@product = Product.find(params[:id])
if params[:version_id]
@product.revert_to params[:version_id]
end
end


Thats all you need to have for a basic setup for acts_as_versioned, have fun experimenting more on your own.



For more information look up:
A good tutorial on using acts_as_versioned at http://wiki.rubyonrails.org/rails/pages/ActsAsVersioned

The acts_as_versioned documentation

Another good tutorial can be found at http://www.urbanhonking.com/ideasfordozens/archives/2006/02/learns_to_use_a_1.html