<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <title>TNG - on Innovation</title>
  <id>tag:www.nnovation.ca,2007:mephisto/blog</id>
  <generator uri="http://mephistoblog.com" version="0.7.3">Mephisto Noh-Varr</generator>
  <link href="http://www.nnovation.ca/feed/blog/atom.xml" rel="self" type="application/atom+xml"/>
  <link href="http://www.nnovation.ca/blog" rel="alternate" type="text/html"/>
  <updated>2007-06-04T19:31:52Z</updated>
  <entry xml:base="http://www.nnovation.ca/">
    <author>
      <name>Jodi</name>
    </author>
    <id>tag:www.nnovation.ca,2007-06-04:1103</id>
    <published>2007-06-04T19:29:00Z</published>
    <updated>2007-06-04T19:31:52Z</updated>
    <category term="on Innovation"/>
    <category term="plugins"/>
    <category term="rails"/>
    <link href="http://www.nnovation.ca/2007/6/4/rails-plugin-find_by_association" rel="alternate" type="text/html"/>
    <title>rails plugin: find_by_association</title>
<summary type="html">&lt;p&gt;Buck and Koz show put on a sesssion of do&#8217;s and don&#8217;t s at railsconf &#8211; an expression of their fab rails way vision &#8211; Helping us to clean up our code with smart coding practices. (&lt;a href='http://onrails.org/articles/2007/05/20/railsconf-2007-day-4'&gt;Buck and Koz show&lt;/a&gt;)&lt;/p&gt;


	&lt;p&gt;During one session they reinforced we should associations instead of finders to clean up our code.&lt;/p&gt;


	&lt;p&gt;..and while demonstrating the finders, they left us with a line that read something like &#8220;Blog.find_all_by_author_id&#8221; &#8211; and I thought to myself.  No, they must be wrong. Don&#8217;t associations have the same sugar? I can&#8217;t remember the exact code, but a few of us thought the use of the syntax wasn&#8217;t quite free&#8230;&lt;/p&gt;


	&lt;p&gt;Can&#8217;t I do Blog.find_all_by_author(@author). Isn&#8217;t that clearer?&lt;/p&gt;


	&lt;p&gt;Banging on our laptops in the lunch space, it seems they don&#8217;t exist.&lt;/p&gt;


	&lt;p&gt;Not for long. This is railsconf.&lt;/p&gt;


	&lt;p&gt;And so is the intro, that started with chatting with Chris O&#8217;Meara @ Code Rhythm(and Chris&#8217; bud) and ended with me pounding keys at &lt;span class='caps'&gt;PDX&lt;/span&gt; and &lt;span class='caps'&gt;JFK&lt;/span&gt; while Tibet Sprague of Public Display was knocking off the code for a new startup.&lt;/p&gt;


	&lt;p&gt;and along the way if find myself wondering around rails internal into method_missing and extending AR find methods.&lt;/p&gt;


	&lt;p&gt;I hope you enjoy find_by_association and the joys of syntactic sugar.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;Buck and Koz show put on a sesssion of do&#8217;s and don&#8217;t s at railsconf &#8211; an expression of their fab rails way vision &#8211; Helping us to clean up our code with smart coding practices. (&lt;a href='http://onrails.org/articles/2007/05/20/railsconf-2007-day-4'&gt;Buck and Koz show&lt;/a&gt;)&lt;/p&gt;


	&lt;p&gt;During one session they reinforced we should associations instead of finders to clean up our code.&lt;/p&gt;


	&lt;p&gt;..and while demonstrating the finders, they left us with a line that read something like &#8220;Blog.find_all_by_author_id&#8221; &#8211; and I thought to myself.  No, they must be wrong. Don&#8217;t associations have the same sugar? I can&#8217;t remember the exact code, but a few of us thought the use of the syntax wasn&#8217;t quite free&#8230;&lt;/p&gt;


	&lt;p&gt;Can&#8217;t I do Blog.find_all_by_author(@author). Isn&#8217;t that clearer?&lt;/p&gt;


	&lt;p&gt;Banging on our laptops in the lunch space, it seems they don&#8217;t exist.&lt;/p&gt;


	&lt;p&gt;Not for long. This is railsconf.&lt;/p&gt;


	&lt;p&gt;And so is the intro, that started with chatting with Chris O&#8217;Meara @ Code Rhythm(and Chris&#8217; bud) and ended with me pounding keys at &lt;span class='caps'&gt;PDX&lt;/span&gt; and &lt;span class='caps'&gt;JFK&lt;/span&gt; while Tibet Sprague of Public Display was knocking off the code for a new startup.&lt;/p&gt;


	&lt;p&gt;and along the way if find myself wondering around rails internal into method_missing and extending AR find methods.&lt;/p&gt;


	&lt;p&gt;I hope you enjoy find_by_association and the joys of syntactic sugar.&lt;/p&gt;
&lt;p&gt;Buck and Koz show put on a sesssion of do&#8217;s and don&#8217;t s at railsconf &#8211; an expression of their fab rails way vision &#8211; Helping us to clean up our code with smart coding practices. (&lt;a href='http://onrails.org/articles/2007/05/20/railsconf-2007-day-4'&gt;Buck and Koz show&lt;/a&gt;)&lt;/p&gt;


	&lt;p&gt;During one session they reinforced we should associations instead of finders to clean up our code.&lt;/p&gt;


	&lt;p&gt;..and while demonstrating the they left us with a line that read something like &#8220;Blog.find_all_by_author_id&#8221; &#8211; and I thought to myself.  No, they must be wrong. Don&#8217;t associations have the same sugar? I can&#8217;t remember the exact code, but a few of us thought the use of the syntax wasn&#8217;t quite free&#8230;&lt;/p&gt;


	&lt;p&gt;Can&#8217;t I do Blog.find_all_by_author(@author) ?&lt;/p&gt;


	&lt;p&gt;Banging on our laptops in the lunch space, it seems they don&#8217;t exist.&lt;/p&gt;


	&lt;p&gt;Not for long. This is railsconf.&lt;/p&gt;


	&lt;p&gt;And so is the intro, that started with chatting with Chris O&#8217;Meara @ Code Rhythm(and Chris&#8217; bud) and ended with me pounding keys at &lt;span class='caps'&gt;PDX&lt;/span&gt; and &lt;span class='caps'&gt;JFK&lt;/span&gt; while Tibet Sprague of Public Display was knocking off the code for a new startup.&lt;/p&gt;


	&lt;p&gt;FindByAssociation gives Active Record dynamic finders for associations. This plugin doesn&#8217;t provide new functionality &#8211; but new sugar.&lt;/p&gt;


	&lt;p&gt;Dynamic finders currently exist for attributes (find_by_title, find_all_by_tag_id, etc), but not for associations.  Find_by_association helps us by determining the join conditions, :includes required tables, and builds a where clause for our needs.&lt;/p&gt;


&lt;table class='CodeRay'&gt;&lt;tr&gt;
  &lt;td title='click to toggle' class='line_numbers'&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class='code'&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt; &lt;span class='c'&gt;#Before&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class='co'&gt;Post&lt;/span&gt;.find(&lt;span class='sy'&gt;:all&lt;/span&gt;, &lt;span class='sy'&gt;:conditions&lt;/span&gt; =&amp;gt; [&lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;tags.id = ?&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, tag.id], &lt;span class='sy'&gt;:include&lt;/span&gt; =&amp;gt; &lt;span class='sy'&gt;:tags&lt;/span&gt;)&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt; &lt;span class='c'&gt;#After. ahh. joy&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class='co'&gt;Post&lt;/span&gt;.find_all_by_tag(tag)&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


	&lt;p&gt;As with atttribute finders, with find_by_association you can find_all or find_ (returns first), and you can chain associations ala Post.find_all_by_author_and_tag(author, tag). You can also use instance or id for the param (author, or author.id). Find_by_association works with has_many (and has_many :through), belongs_to_, has_one and has_and_belongs_to_many associations.&lt;/p&gt;


	&lt;p&gt;Notes:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Tests are run via the rails AR procedure (read &lt;span class='caps'&gt;RUNNING&lt;/span&gt;_UNIT_TESTS). Currently contains tests only for mysql. Mysql tests run via &#8220;rake test_mysql&#8221; (after db and tables created) tests currently include AR Finder tests from Rails 1.2.3 (AR 1.15.3). Testing requires that rails is vendored. Not tested with edge. [TODO]&lt;/li&gt;
	&lt;/ul&gt;


	&lt;ul&gt;
	&lt;li&gt;Does not mix with find_by attributes (can&#8217;t do Post.find_by_title_and_tag(&#8216;post title&#8217;, tag)). So use either on or the other &#8211; mixing will not provide expected results. [TODO]&lt;/li&gt;
	&lt;/ul&gt;


	&lt;ul&gt;
	&lt;li&gt;Class level finders &#8211; no instance finders [TODO]&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Acquire via subversion at:&lt;/p&gt;


	&lt;p&gt;http://svn.nnovation.ca/svn/find_by_association/trunk&lt;/p&gt;


	&lt;p&gt;script/plugin install http://svn.nnovation.ca/svn/find_by_association/trunk&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://www.nnovation.ca/">
    <author>
      <name>Jodi</name>
    </author>
    <id>tag:www.nnovation.ca,2007-05-18:742</id>
    <published>2007-05-18T19:20:00Z</published>
    <updated>2007-06-11T03:14:35Z</updated>
    <category term="on Innovation"/>
    <category term="rails"/>
    <category term="savage beast"/>
    <category term="the soup"/>
    <link href="http://www.nnovation.ca/2007/5/18/savage-beast" rel="alternate" type="text/html"/>
    <title>savage beast</title>
<content type="html">
            Extracted from The Soup (&lt;a href='http://the-soup.net'&gt;the-soup.net&lt;/a&gt;) is the Savage Beast plugin - a rails engine of the popular Beast forum.

Savage Beast simplifies the addition of multiple forums to your rails app, associating 1 or more forum to a AR Model instance.

For instance adding a forum to a project model,
&lt;table class='CodeRay'&gt;&lt;tr&gt;
  &lt;td title='click to toggle' class='line_numbers'&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class='code'&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class='r'&gt;class&lt;/span&gt; &lt;span class='cl'&gt;Project&lt;/span&gt; &amp;lt; &lt;span class='co'&gt;ActiveRecord&lt;/span&gt;::&lt;span class='co'&gt;Base&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  has_one &lt;span class='sy'&gt;:forum&lt;/span&gt;, &lt;span class='sy'&gt;:as&lt;/span&gt; =&amp;gt; &lt;span class='sy'&gt;:owner&lt;/span&gt;, &lt;span class='sy'&gt;:dependent&lt;/span&gt; =&amp;gt; &lt;span class='sy'&gt;:destroy&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

as you can note above, SB adds a model attribute to polymorphically relate to the forum owner.

If you are doing nested routes to forums, topics and posts, overload the appropriate controller and before filter. For instance, if you route /project/1/forum, the forums_controller may look like:
&lt;table class='CodeRay'&gt;&lt;tr&gt;
  &lt;td title='click to toggle' class='line_numbers'&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;strong&gt;10&lt;/strong&gt;&lt;tt&gt;
&lt;/tt&gt;11&lt;tt&gt;
&lt;/tt&gt;12&lt;tt&gt;
&lt;/tt&gt;13&lt;tt&gt;
&lt;/tt&gt;14&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class='code'&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class='r'&gt;class&lt;/span&gt; &lt;span class='cl'&gt;ForumsController&lt;/span&gt; &amp;lt; &lt;span class='co'&gt;ApplicationController&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class='c'&gt;#this is the standard before filter called by SB&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class='r'&gt;def&lt;/span&gt; &lt;span class='fu'&gt;find_or_initialize_forum&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;    &lt;span class='r'&gt;if&lt;/span&gt; params[&lt;span class='sy'&gt;:id&lt;/span&gt;] &amp;amp;&amp;amp; params[&lt;span class='sy'&gt;:project_id&lt;/span&gt;]&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='iv'&gt;@project&lt;/span&gt; = &lt;span class='co'&gt;Project&lt;/span&gt;.find(params[&lt;span class='sy'&gt;:project_id&lt;/span&gt;])&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='iv'&gt;@forum&lt;/span&gt; = &lt;span class='iv'&gt;@project&lt;/span&gt;.forum.find(params[&lt;span class='sy'&gt;:id&lt;/span&gt;])&lt;tt&gt;
&lt;/tt&gt;    &lt;span class='r'&gt;elsif&lt;/span&gt; params[&lt;span class='sy'&gt;:id&lt;/span&gt;]&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='iv'&gt;@forum&lt;/span&gt; = &lt;span class='co'&gt;Forum&lt;/span&gt;.find(params[&lt;span class='sy'&gt;:id&lt;/span&gt;])&lt;tt&gt;
&lt;/tt&gt;    &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


As this is a engine, overloading is pretty simple - but I must say that the great encapsulation of behaviour in the Beast, makes for an easy isolation of functional concerns, and the above use of before filters was almost all the customization that The Soup needed to integrate multiple forums.

You can get Savage Beast here: Enjoy. If you have question please fwd by email.

requires rails 1.2 and the latest engines plugin.

http://svn.nnovation.ca/svn/savage_beast/trunk

------------------------------------------------------------------------

With help from Nick Coyne, we've nailed down a number of gotcha's when integrating Savage Beast, and even come up with a demo application you can use to learn the rules for integrating.

The demo app is at:

http://svn.nnovation.ca/svn/savage_beast_demo/ (it svn externals savage_beast)

Below are more notes that will aid in integration:

The demo app uses acts as authenticated (see the routes file for signup/login/logout urls - not included in the user interface)

In the demo app, you'll want to grab the migration &quot;003_add_post_count_to_user.rb&quot; - this migration adds 2 columns to your user table that beast wants - I'll eventually include them into the savage_beast plugin.

In the demo routes file, you'll also notice:

&lt;table class='CodeRay'&gt;&lt;tr&gt;
  &lt;td title='click to toggle' class='line_numbers'&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class='code'&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class='c'&gt;#get routes for beast&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  map.from_plugin &lt;span class='sy'&gt;:savage_beast&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


which gets all routes that beast depends on. The remaining routes in the demo are only there for the app (not the forum).

You'll also want to add  include SavageBeast::UserInit to your user model - gets a bunch of dependent methods for beast - take a look at the lib, and over-ride what's important to you (like user.display_name, admin? and logged_in?)

As a final note, there are three  controller before_filters that you'll want to over-ride if you have custom routes/params.

Take a look at:

&lt;table class='CodeRay'&gt;&lt;tr&gt;
  &lt;td title='click to toggle' class='line_numbers'&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class='code'&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class='co'&gt;ForumsController&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt; before_filter &lt;span class='sy'&gt;:find_or_initialize_forum&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class='co'&gt;PostsController&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;before_filter &lt;span class='sy'&gt;:find_post&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class='co'&gt;TopicsController&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt; before_filter &lt;span class='sy'&gt;:find_forum_and_topic&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;


Overiding the above filters in your own TopicsController (etc) is a great way to embed the forum within custom urls.

One final note - Beast depends on a few plugins: white_list, white_list_formatted_content, browser_filter - oh and SB requires engines.

If you run into integration issues, or suggestions please let me know. thanx for your help Nick.

These notes will eventually turn into real docs - for now, that's all I can provide.

enjoy
          </content>  </entry>
  <entry xml:base="http://www.nnovation.ca/">
    <author>
      <name>Jodi</name>
    </author>
    <id>tag:www.nnovation.ca,2007-05-11:551</id>
    <published>2007-05-11T20:11:00Z</published>
    <updated>2007-05-11T20:21:31Z</updated>
    <category term="on Innovation"/>
    <category term="rails"/>
    <category term="rails conf"/>
    <category term="soup"/>
    <link href="http://www.nnovation.ca/2007/5/11/the-soup-is-tasty" rel="alternate" type="text/html"/>
    <title>The Soup is tasty - come on in</title>
<content type="html">
            &lt;p&gt;It&#8217;s taken months to assemble a v1 release of &lt;a href='http://the-soup.net'&gt;The Soup&lt;/a&gt;. I&#8217;ve been stealing away every free minute to pour into this baby, and now I feel a great sense of release. I think my wife and 2 year old remember me - hopefully they let me back in.&lt;/p&gt;

&lt;p&gt;Finished not a moment too late - knackered as our UK cousins say - and just in time to take a break. Next week I&#8217;m off to &lt;a href='http://conferences.oreillynet.com/rails/'&gt;Rails Conf&lt;/a&gt; to learn, hookup with all the cool kids,learn, relax..&lt;/p&gt;

&lt;p&gt;I really intended to make a nice series of blog entries to track the thought progression for The Soup, but alas, who&#8217;s got time to do and write?! Better folks than me I guess.&lt;/p&gt;

&lt;p&gt;Well onto the next stage. Bug fixes and planning for v2. Oh, all that client stuff that&#8217;s backed up!&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://www.nnovation.ca/">
    <author>
      <name>Jodi</name>
    </author>
    <id>tag:www.nnovation.ca,2007-01-18:19</id>
    <published>2007-01-18T19:27:00Z</published>
    <updated>2007-05-31T03:12:29Z</updated>
    <category term="on Innovation"/>
    <category term="rails"/>
    <category term="zoup"/>
    <link href="http://www.nnovation.ca/2007/1/18/charting-the-creation-of-a-new-product-idea" rel="alternate" type="text/html"/>
    <title>charting the creation of a new product idea</title>
<summary type="html">&lt;p&gt;This article explores both the business and technology progress of a new startup - code named &#8220;Stonezoup&#8221;. Wearing both technology and business hats, I will shift back and forth - compromising, grumbling, lying awake at night, excited to take the next step.&lt;/p&gt;

&lt;p&gt;Being a technologist who was ran software companies, I hope this series will help my fellow technologists chart the journey from a good idea along the path towards a substainable venture. The mixture of skills required can be daunting, and usually the science of &#8220;what step comes next&#8221; can be as much about the art of asking the right questions.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;This article explores both the business and technology progress of a new startup - code named &#8220;Stonezoup&#8221;. Wearing both technology and business hats, I will shift back and forth - compromising, grumbling, lying awake at night, excited to take the next step.&lt;/p&gt;

&lt;p&gt;Being a technologist who was ran software companies, I hope this series will help my fellow technologists chart the journey from a good idea along the path towards a substainable venture. The mixture of skills required can be daunting, and usually the science of &#8220;what step comes next&#8221; can be as much about the art of asking the right questions.&lt;/p&gt;
&lt;p&gt;Since selling my business last year, I&#8217;ve been looking around for my next venture - in the meantime I&#8217;m selling services to keep bread on the table. Services are great, but the revenue model is limitted - it doesn&#8217;t scale the way I want - revenue is limitted by the number of hours in the hour. I&#8217;d rather be generating revenue while I sleep. Wouldn&#8217;t you?&lt;/p&gt;

&lt;p&gt;This article explores both the business and technology issues of a new startup - code named &#8220;Stonezoup&#8221;. Wearing both hats, I will shift back and forth - compromising, grumbling, lying awake at night, excited to take the next step. &lt;/p&gt;

&lt;p&gt;Being a technologist who was ran software companies, I hope this series will help my fellow technologists chart the journey from a good idea along the path towards a substainable venture. The mixture of skills required can be daunting, and usually the science of &#8220;what step comes next&#8221; can be as much about the art of asking the right questions.&lt;/p&gt;

&lt;p&gt;What we need is a framework - a framework that embeds the questions we should be asking ourselves, when we should be asking them. Our business framework will take the form of documents. Each with their own purposes &#8220;to help us make good decisions&#8221;. Those decisions will result in actions, of which some will be businsess actions, and some technology.&lt;/p&gt;

&lt;p&gt;Our technology framework is &lt;a href='http://www.rubyonrails.com'&gt;RoR&lt;/a&gt; - for I know of no better framework or community for building this particular kind of app - a service offered over the web through a web browser.&lt;/p&gt;

&lt;p&gt;Being just the intro, we&#8217;ll halt there. Next we&#8217;ll look at how we take that germ of an idea and turn it into something actionable.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://www.nnovation.ca/">
    <author>
      <name>Jodi</name>
    </author>
    <id>tag:www.nnovation.ca,2007-01-04:18</id>
    <published>2007-01-04T02:29:00Z</published>
    <updated>2007-01-04T02:58:45Z</updated>
    <category term="on Innovation"/>
    <category term="biz"/>
    <category term="saas"/>
    <link href="http://www.nnovation.ca/2007/1/4/software-as-a-service-part-III" rel="alternate" type="text/html"/>
    <title>Software as a Service - Part III, Implications &amp; Challenges</title>
<summary type="html">&lt;p&gt;The following discussion studies the value proposition of the Software as a Service (SaaS) business and licensing model. Additionally we&#8217;ll look at the sales, marketing and cultural and operational challenges it presents for corporations looking to deploy such a model.&lt;/p&gt;

&lt;p&gt;&lt;a href='/2006/11/22/software-as-a_service-part-I'&gt;Part I&lt;/a&gt; in this series evaluated the Value Proposition, or &#8220;what makes this business model interesting to the customer&#8221;. You may find that introduction will help as an introduction to this one. Additionally in &lt;a href='/2006/12/11/software-as-a_service-part-II'&gt;Part II&lt;/a&gt; we examined the specific SaaS Revenue Model and Operating Expenses.&lt;/p&gt;

&lt;p&gt;This section, considers the cultural, Technical, Sales and Customer Facing challenges identified to successfully execute an SaaS business Model. As before, the ISV model is contrasted to highlight these challenges.&lt;br /&gt;&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;The following discussion studies the value proposition of the Software as a Service (SaaS) business and licensing model. Additionally we&#8217;ll look at the sales, marketing and cultural and operational challenges it presents for corporations looking to deploy such a model.&lt;/p&gt;

&lt;p&gt;&lt;a href='/2006/11/22/software-as-a_service-part-I'&gt;Part I&lt;/a&gt; in this series evaluated the Value Proposition, or &#8220;what makes this business model interesting to the customer&#8221;. You may find that introduction will help as an introduction to this one. Additionally in &lt;a href='/2006/12/11/software-as-a_service-part-II'&gt;Part II&lt;/a&gt; we examined the specific SaaS Revenue Model and Operating Expenses.&lt;/p&gt;

&lt;p&gt;This section, considers the cultural, Technical, Sales and Customer Facing challenges identified to successfully execute an SaaS business Model. As before, the ISV model is contrasted to highlight these challenges.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;The following discussion studies the value proposition of the Software as a Service (SaaS) business and licensing model. Additionally we&#8217;ll look at the sales, marketing and cultural and operational challenges it presents for corporations looking to deploy such a model.&lt;/p&gt;

&lt;p&gt;&lt;a href='/2006/11/22/software-as-a_service-part-I'&gt;Part I&lt;/a&gt; in this series evaluated the Value Proposition, or &#8220;what makes this business model interesting to the customer&#8221;. You may find that introduction will help as an introduction to this one. Additionally in &lt;a href='/2006/12/11/software-as-a_service-part-II'&gt;Part II&lt;/a&gt; we examined the specific SaaS Revenue Model and Operating Expenses.&lt;/p&gt;

&lt;p&gt;This section, considers the cultural, Technical, Sales and Customer Facing challenges identified to successfully execute an SaaS business Model. As before, the ISV model is contrasted to highlight these challenges.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Cultural Barriers&lt;/b&gt;&lt;br /&gt;
As has been illustrated in earlier sections, the software as a service model is philosophically different than traditional ISVs models including a redefinition of the relationship between vendor, customer, and third-party service providers, a different value proposition, and changing roles for ongoing delivery. In fundamental contradiction to traditional ISVs, the SaaS firm becomes a service-based relationship rather than a technology enabler.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Technical Hurdles&lt;/b&gt;&lt;br /&gt;
To prosper in a multi-tenant delivery model, SaaS firms utilize purely Web-native applications that are based on a single instance of an application rather than multiple instances supported across different delivery environments (client/server, mainframe, Web-based) with traditional ISV models. This is not an insurmountable undertaking by an established ISV, but requires a commitment to Web-based delivery. Additionally, technical development becomes much more adaptive, as SaaS firms provide continuous updates on a weekly, monthly, or quarterly basis rather than major upgrades every several years.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Sales &amp;amp; Partnership Conflicts&lt;/b&gt;&lt;br /&gt;
With ISV sales teams earning commissions on large upfront licenses rather than earning over the term of the agreement, re-aligning proper sales incentives &amp;amp; cultures is perhaps the largest impediment that ISVs face in successfully making a quick transition. Sales teams are rewarded based on the customer&#8217;s usage of the system over time rather than being based on upfront license fees.&lt;br /&gt;
&lt;br /&gt;
The lack of large implementation professional services opportunities poses special challenges for SaaS firms seeking to draw on partnerships and alliances with top-tier consulting firms that thrive on providing these types of upfront services.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Customer Service, Application Support &amp;amp; Management &amp;amp; Network Operations&lt;/b&gt;&lt;br /&gt;
We have already made passing reference to the implications of convergence between software and services. As this process occurs, several challenges arise. Customer service and technical engineering become intertwined as the company relies on customer feedback and user adoption trends in the refinement of its solutions. Administrative issues surrounding customer support, account management, and application support become ongoing rather than one-time processes, and essentially become the lifeblood of the SaaS provider in building long-term client relationships. Additionally, network operations take on an additional role and are viewed as essential contributors and a hub for customer service &amp;amp; ongoing support.&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;Thank you for reading along. I hope this article provides some value to your current or next SaaS venture.&lt;/p&gt;

&lt;p&gt;I&#8217;m looking forward to you thoughts in the comments.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://www.nnovation.ca/">
    <author>
      <name>Jodi</name>
    </author>
    <id>tag:www.nnovation.ca,2006-12-17:16</id>
    <published>2006-12-17T02:57:00Z</published>
    <updated>2006-12-30T03:50:32Z</updated>
    <category term="on Innovation"/>
    <category term="rails"/>
    <category term="rspec"/>
    <link href="http://www.nnovation.ca/2006/12/17/rspec-rails12-and-testing-return-types" rel="alternate" type="text/html"/>
    <title>rspec and testing various return types</title>
<summary type="html">&lt;p&gt;I&#8217;ve just started a new project so I&#8217;m starting with 1.2RC and the experimenting with BDD with rspec.&lt;/p&gt;

&lt;p&gt;I won&#8217;t delve into either as folks with more FU than myself have explored both topics.&lt;/p&gt;

&lt;p&gt;Specifically though I have run into problems with rspec and the new simply_helpful - thankfully Lourens of methodmissing has nailed down a &lt;a href='http://blog.methodmissing.com/rspec/'&gt;monkey patch&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Laurens also supplies a monkey patch to permit testing of various return types - but, alas, since rspec is maturing at the speed of light it doesn&#8217;t work with rspec 0.7.4.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;I&#8217;ve just started a new project so I&#8217;m starting with 1.2RC and the experimenting with BDD with rspec.&lt;/p&gt;

&lt;p&gt;I won&#8217;t delve into either as folks with more FU than myself have explored both topics.&lt;/p&gt;

&lt;p&gt;Specifically though I have run into problems with rspec and the new simply_helpful - thankfully Lourens of methodmissing has nailed down a &lt;a href='http://blog.methodmissing.com/rspec/'&gt;monkey patch&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Laurens also supplies a monkey patch to permit testing of various return types - but, alas, since rspec is maturing at the speed of light it doesn&#8217;t work with rspec 0.7.4.&lt;/p&gt;
&lt;p&gt;I&#8217;ve just started a new project so I&#8217;m starting with 1.2RC and the experimenting with BDD with rspec.&lt;/p&gt;

&lt;p&gt;I won&#8217;t delve into either as folks with more FU than myself have explored both topics.&lt;/p&gt;

&lt;p&gt;Specifically though I have run into problems with rspec and the new simply_helpful - thankfully Lourens of methodmissing has nailed down a &lt;a href='http://blog.methodmissing.com/rspec/'&gt;monkey patch&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Laurens also supplies a monkey patch to permit testing of various return types - but, alas, since rspec is maturing at the speed of light it doesn&#8217;t work with rspec 0.7.4.&lt;/p&gt;

&lt;p&gt;Following is a mod of Lauren&#8217;s patch that&#8217;ll get your specifies testing RSS, XML, et al.&lt;/p&gt;

&lt;table class='CodeRay'&gt;&lt;tr&gt;
  &lt;td title='click to toggle' class='line_numbers'&gt;&lt;pre&gt;1&lt;tt&gt;
&lt;/tt&gt;2&lt;tt&gt;
&lt;/tt&gt;3&lt;tt&gt;
&lt;/tt&gt;4&lt;tt&gt;
&lt;/tt&gt;5&lt;tt&gt;
&lt;/tt&gt;6&lt;tt&gt;
&lt;/tt&gt;7&lt;tt&gt;
&lt;/tt&gt;8&lt;tt&gt;
&lt;/tt&gt;9&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
  &lt;td class='code'&gt;&lt;pre&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;span class='r'&gt;class&lt;/span&gt; &lt;span class='cl'&gt;Test::Unit::TestCase&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  &lt;span class='s'&gt;&lt;span class='dl'&gt;%w(&lt;/span&gt;&lt;span class='k'&gt;get put post head delete&lt;/span&gt;&lt;span class='dl'&gt;)&lt;/span&gt;&lt;/span&gt;.each{|m| define_method(m.to_sym) &lt;span class='r'&gt;do&lt;/span&gt; |*args|&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='iv'&gt;@request&lt;/span&gt;.env[&lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;REQUEST_METHOD&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;] = m.upcase&lt;tt&gt;
&lt;/tt&gt;      &lt;span class='iv'&gt;@request&lt;/span&gt;.env[&lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;CONTENT_TYPE&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;] = &lt;span class='co'&gt;Mime&lt;/span&gt;::&lt;span class='co'&gt;EXTENSION_LOOKUP&lt;/span&gt;[(args[&lt;span class='i'&gt;2&lt;/span&gt;].nil? ? &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;html&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt; : args[&lt;span class='i'&gt;2&lt;/span&gt;].to_s )]&lt;tt&gt;
&lt;/tt&gt;      process( args[&lt;span class='i'&gt;0&lt;/span&gt;], args[&lt;span class='i'&gt;1&lt;/span&gt;] || {} )  &lt;tt&gt;
&lt;/tt&gt;    &lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;  }   &lt;tt&gt;
&lt;/tt&gt;&lt;span class='r'&gt;end&lt;/span&gt;&lt;tt&gt;
&lt;/tt&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;put this in your spec&lt;em&gt;helper.rb, after require &#8216;rspec&lt;/em&gt;on_rails&#8217; and before your Test::Rails::Testcase definition. &lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://www.nnovation.ca/">
    <author>
      <name>Jodi</name>
    </author>
    <id>tag:www.nnovation.ca,2006-12-11:14</id>
    <published>2006-12-11T20:40:00Z</published>
    <updated>2007-01-04T02:53:46Z</updated>
    <category term="on Innovation"/>
    <category term="biz"/>
    <category term="saas"/>
    <link href="http://www.nnovation.ca/2006/12/11/software-as-a_service-part-II" rel="alternate" type="text/html"/>
    <title>Software as a Service - Part II, Revenue &amp; Expenses</title>
<summary type="html">&lt;p&gt;The following discussion studies the value proposition of the Software as a Service (SaaS) business and licensing model. Additionally we&#8217;ll look at the sales, marketing and cultural and operational challenges it presents for corporations looking to deploy such a model.&lt;/p&gt;

&lt;p&gt;&lt;a href='/2006/11/22/software-as-a_service-part-I'&gt;Part I&lt;/a&gt; in this series evaluated the Value Proposition, or &#8220;what makes this business model interesting to the customer&#8221;. You may find that introduction will help as an introduction to this one.&lt;/p&gt;

&lt;p&gt;This section, considers the Revenue Model and Operating Expenses. We&#8217;ll look at the inherent implications of this model and it&#8217;s specific financials as contrasted with the ISV licensing model.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;The following discussion studies the value proposition of the Software as a Service (SaaS) business and licensing model. Additionally we&#8217;ll look at the sales, marketing and cultural and operational challenges it presents for corporations looking to deploy such a model.&lt;/p&gt;

&lt;p&gt;&lt;a href='/2006/11/22/software-as-a_service-part-I'&gt;Part I&lt;/a&gt; in this series evaluated the Value Proposition, or &#8220;what makes this business model interesting to the customer&#8221;. You may find that introduction will help as an introduction to this one.&lt;/p&gt;

&lt;p&gt;This section, considers the Revenue Model and Operating Expenses. We&#8217;ll look at the inherent implications of this model and it&#8217;s specific financials as contrasted with the ISV licensing model.&lt;/p&gt;
&lt;p&gt;The following discussion studies the value proposition of the Software as a Service (SaaS) business and licensing model. Additionally we&#8217;ll look at the sales, marketing and cultural and operational challenges it presents for corporations looking to deploy such a model.&lt;/p&gt;

&lt;p&gt;&lt;a href='/2006/11/22/software-as-a_service-part-I'&gt;Part I&lt;/a&gt; in this series evaluated the Value Proposition, or &#8220;what makes this business model interesting to the customer&#8221;&lt;/p&gt;

&lt;p&gt;This section, considers the Revenue Model and Operating Expenses. We&#8217;ll look at the inherent implications of this model and it&#8217;s specific financials as contrasted with the ISV licensing model.&lt;/p&gt;

&lt;p&gt;As before, this article is not an endorsement of SaaS, but a (hopefully) thoughtful examination; as such many comments express “less” or “more” - the specific quantities will of course depend on your circumstances. &lt;/p&gt;

&lt;h1&gt;Business Model Implications&lt;/h1&gt;

&lt;p&gt;For the sake of considering the implications of the SaaS model, it is counter-pointed against the traditional software(ISV) licensing model.&lt;/p&gt;

&lt;h1&gt;Revenue Model&lt;/h1&gt;

&lt;p&gt;The software as a service model is quite different from the traditional software (ISV) licensing model in that the large, upfront licensing fee and the resulting professional service fees and maintenance costs are replaced by periodic &#8216;all-in-one&#8217; subscription payments - typically on a monthly or installed basis. The tradeoff being that software as a service firms have significantly smaller upfront revenue and cash flows in exchange for longer-term and more predictable cash flows that are the result of a service-based relationship.&lt;/p&gt;

&lt;p&gt;Consequently, the true measure of success or value for a software as a service firm is not necessarily tied to revenue growth or the P&amp;amp;L, but is measured by metrics for new customer acquisition, rate of customer retention, predictability &amp;amp; visibility of cash flows, and the growth of deferred revenue on the balance sheet.&lt;/p&gt;

&lt;h1&gt;Cost of Revenues&lt;/h1&gt;

&lt;p&gt;Significantly different from the ISV model, software as a service firms require less investment in upfront professional services due to the rapid time to deployment and Web-based delivery. Many ISVs partner with top-tier systems integrators to provide upfront professional services and implementation, but also maintain internal resources to support these functions initially and going forward.&lt;/p&gt;

&lt;p&gt;Instead, software as a service firms invest in customer service &amp;amp; training, account management, and application support and management, which includes network operations, to ensure successful application delivery, virtually 100% uptime &amp;amp; performance, and high user adoption.&lt;/p&gt;

&lt;h1&gt;Operating Expenses&lt;/h1&gt;

&lt;p&gt;An area of key distinction between ISVs and software as a service firms lies in the approach for product development and sales &amp;amp; marketing. &lt;/p&gt;

&lt;p&gt;The ISV typically supports multiple code bases across different technical environments (client/server, mainframe, Web-based, etc.) and delivered in a single-tenant model that is maintained on the client&#8217;s premises. Conversely, software as a service firms base their technology on a single Web-native code base that is capable of supporting numerous end-users in a multi-tenant, shared application environment. The end result is that software as a service firms are able to lower the incremental product development costs with each new customer acquisition. &lt;/p&gt;

&lt;p&gt;Additionally, while ISVs charge for software upgrades, maintenance, and generally have new software release cycles every two to three years, software as a service firms provide free software upgrades, include maintenance &amp;amp; support in the service relationship, and support more frequent and seamless software releases &amp;amp; upgrades.&lt;/p&gt;

&lt;p&gt;In terms of the sales and marketing approaches, there are also noticeable differences. Since the ISV supports a model that is based on large upfront professional services and implementation that are often more than two times the software license fee, major consulting and IT services firms have been natural allies and partners in developing sales alliances and indirect channels.&lt;/p&gt;

&lt;p&gt;Conversely, software as a service firms have needed to be much more creative in their sales &amp;amp; marketing approach, since traditional alliances &amp;amp; channels pose unique challenges due to the changed economic relationship for the systems integrator. Consequently, many software as a service firms have invested in multiple indirect channels to the market (vertical industry partners, infrastructure alliances, OEM, VAR, private branding relationships) as well as building direct sales channels.&lt;/p&gt;

&lt;p&gt;In the end, software as a service firms manage the tradeoff and conflict posed by growth that require investment in multiple sales and marketing channels, by stable cash flows that require more patient growth expectations as the model and customer acquisition grows over a longer period of time.&lt;/p&gt;

&lt;p&gt;That&#8217;s the end of Part II. In our final look at SaaS, In Part III we&#8217;ll examine the specific challenges inherent in the model. Careful consideration of these will be reasons for organizational success.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://www.nnovation.ca/">
    <author>
      <name>Jodi</name>
    </author>
    <id>tag:www.nnovation.ca,2006-12-04:9</id>
    <published>2006-12-04T02:40:00Z</published>
    <updated>2006-12-04T21:26:18Z</updated>
    <category term="on Innovation"/>
    <category term="innovation"/>
    <link href="http://www.nnovation.ca/2006/12/4/innovation-is-not-enough" rel="alternate" type="text/html"/>
    <title>innovation is not enough</title>
<summary type="html">&lt;p&gt;As with porn, it seems that spamming (marketers) are on the cutting edge of technology and uses thereof. Just as the pr0n industry were early adopters of Beta video and at one time were one of the only industries making money on the back of our beloved infrastructure, today we find &lt;em&gt;innovative&lt;/em&gt; spammers pushing the envelope (and our patience!).&lt;/p&gt;

&lt;p&gt;&lt;a href=''&gt;PayPerPost&lt;/a&gt; comes to mind. (from the web site) &#8220;Get paid for blogging. Write about websites, products, services&#8221;. I wonder if bloggers get paid for bad reviews? Talk about conflict of interest. &lt;/p&gt;

&lt;p&gt;Coincident with the above PPP discovery, my wife and I were researching elliptical cross-trainer. In particular we were interested in reviews of the Iron*Man ET30. A google search revealed a number of the usual suspects (fake review sites, without any reviews but aggregated prices - can you read affiliate?).&lt;/p&gt;

&lt;p&gt;And this one&#8230;.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;As with porn, it seems that spamming (marketers) are on the cutting edge of technology and uses thereof. Just as the pr0n industry were early adopters of Beta video and at one time were one of the only industries making money on the back of our beloved infrastructure, today we find &lt;em&gt;innovative&lt;/em&gt; spammers pushing the envelope (and our patience!).&lt;/p&gt;

&lt;p&gt;&lt;a href=''&gt;PayPerPost&lt;/a&gt; comes to mind. (from the web site) &#8220;Get paid for blogging. Write about websites, products, services&#8221;. I wonder if bloggers get paid for bad reviews? Talk about conflict of interest. &lt;/p&gt;

&lt;p&gt;Coincident with the above PPP discovery, my wife and I were researching elliptical cross-trainer. In particular we were interested in reviews of the Iron*Man ET30. A google search revealed a number of the usual suspects (fake review sites, without any reviews but aggregated prices - can you read affiliate?).&lt;/p&gt;

&lt;p&gt;And this one&#8230;.&lt;/p&gt;
&lt;p&gt;As with porn, it seems that spamming (marketers) are on the cutting edge of technology and uses thereof. Just as the pr0n industry were early adopters of Beta video and at one time were one of the only industries making money on the back of our beloved infrastructure, today we find &lt;em&gt;innovative&lt;/em&gt; spammers pushing the envelope (and our patience!).&lt;/p&gt;

&lt;p&gt;&lt;a href=''&gt;PayPerPost&lt;/a&gt; comes to mind. (from the web site) &#8220;Get paid for blogging. Write about websites, products, services&#8221;. I wonder if bloggers get paid for bad reviews? Talk about conflict of interest. &lt;/p&gt;

&lt;p&gt;Coincident with the above PPP discovery, my wife and I were researching elliptical cross-trainer. In particular we were interested in reviews of the Iron*Man ET30. A google search revealed a number of the usual suspects (fake review sites, without any reviews but aggregated prices - can you read affiliate?).&lt;/p&gt;

&lt;p&gt;And this one&#8230;.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://views.azigodi.info/'&gt;views.azigodi.info&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sinking one rung lower than PayPerPost, this effort doesn&#8217;t even involve humans, and upon first glance looks reasonably &#8216;human&#8217;.&lt;/p&gt;

&lt;p&gt;But upon closer inspection we see what can only be computer generated output - text that includes all the key-words for my search criteria, and back fills with text that approximates english.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;
Jeff said&#8230;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;I like the first site
2006 Oct 18 20:15
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Margaret said&#8230;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Very good links. Thanx
2006 Oct 14 03:53
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;2006 Sep 23 06:29&lt;/p&gt;

&lt;p&gt;In 1000hr their precor efx 546i elliptical study, Sarano&#8221;s group reviewed nordictrack review by trimline 2450 treadmill Reuters 9700hr physician foldaway editors. cxt990 Fully cap barbell searchable weslo treadmill reviews news. proform review Vanderbilt Television News Archive
&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;It seems where there is opportunity, innovators will engage; where some will rise others will sink to the occasion.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://www.nnovation.ca/">
    <author>
      <name>Jodi</name>
    </author>
    <id>tag:www.nnovation.ca,2006-11-22:8</id>
    <published>2006-11-22T15:28:00Z</published>
    <updated>2006-11-22T15:46:34Z</updated>
    <category term="on Innovation"/>
    <category term="biz"/>
    <category term="saas"/>
    <link href="http://www.nnovation.ca/2006/11/22/software-as-a_service-part-I" rel="alternate" type="text/html"/>
    <title>Software as a Service - Part I, Introduction</title>
<summary type="html">&lt;p&gt;The following discussion studies the value proposition of the Software as a Service (&lt;a href='http://en.wikipedia.org/wiki/Software_as_a_Service'&gt;SaaS&lt;/a&gt;)  business and licensing model. Additionally we&#8217;ll look at the sales, marketing and cultural and operational challenges it presents for corporations looking to deploy such a model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Part I&lt;/strong&gt; in this series evaluates the Value Proposition, or &#8220;what makes this business model interesting to the customer&#8221;. &lt;strong&gt;Part II&lt;/strong&gt; considers the Revenue Model and Operating Expenses and &lt;strong&gt;III&lt;/strong&gt; concludes with the Challenges faced.&lt;/p&gt;

&lt;p&gt;For ease of consideration, many of the arguments are contrasted against the traditional &lt;a href='http://en.wikipedia.org/wiki/Independent_software_vendor'&gt;ISV&lt;/a&gt; licensing and business model.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;The following discussion studies the value proposition of the Software as a Service (&lt;a href='http://en.wikipedia.org/wiki/Software_as_a_Service'&gt;SaaS&lt;/a&gt;)  business and licensing model. Additionally we&#8217;ll look at the sales, marketing and cultural and operational challenges it presents for corporations looking to deploy such a model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Part I&lt;/strong&gt; in this series evaluates the Value Proposition, or &#8220;what makes this business model interesting to the customer&#8221;. &lt;strong&gt;Part II&lt;/strong&gt; considers the Revenue Model and Operating Expenses and &lt;strong&gt;III&lt;/strong&gt; concludes with the Challenges faced.&lt;/p&gt;

&lt;p&gt;For ease of consideration, many of the arguments are contrasted against the traditional &lt;a href='http://en.wikipedia.org/wiki/Independent_software_vendor'&gt;ISV&lt;/a&gt; licensing and business model.&lt;/p&gt;
&lt;p&gt;The following discussion studies the value proposition of the Software as a Service (&lt;a href='http://en.wikipedia.org/wiki/Software_as_a_Service'&gt;SaaS&lt;/a&gt;)  business and licensing model. Additionally we&#8217;ll look at the sales, marketing and cultural and operational challenges it presents for corporations looking to deploy such a model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Part I&lt;/strong&gt; in this series evaluates the Value Proposition, or &#8220;what makes this business model interesting to the customer&#8221;. &lt;strong&gt;Part II&lt;/strong&gt; considers the Revenue Model and Operating Expenses and &lt;strong&gt;III&lt;/strong&gt; concludes with the Challenges faced.&lt;/p&gt;

&lt;p&gt;For ease of consideration, many of the arguments are contrasted against the traditional &lt;a href='http://en.wikipedia.org/wiki/Independent_software_vendor'&gt;ISV&lt;/a&gt; licensing and business model.&lt;/p&gt;

&lt;p&gt;As a final note this article is not an endorsement of SaaS, but a (hopefully) thoughtful examination; as such many comments express &#8220;less&#8221; or &#8220;more&#8221; - the specific quantities will of course depend on your circumstances. Additionally, the following does make use of mba-jargon; I hope the usage of such does not interfere with readability.&lt;/p&gt;

&lt;h1&gt;Part I - Value Propositions of SaaS&lt;/h1&gt;

&lt;p&gt;In &lt;a href='http://en.wikipedia.org/wiki/Application_service_provider'&gt;ASP&lt;/a&gt;, SaaS&#8217;s original incarnation, the reasons for contracting with a service provider largely mirrored the motivation for any other outsourcing relationship: more predictable costs and a greater ability to focus on core competencies while leveraging the expertise of a specialist service provider. These core propositions are quite similar software as a service value proposition where an affordable, “pay-as-you-go” relationship provides organizations with a service ensuring ongoing &lt;strong&gt;value&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The following contrasts SaaS and the ISV model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lower cash outlays&lt;/strong&gt; for enterprise-class software purchases by replacing large, upfront licensing expenditures with a smaller, subscription based pricing model that is much more frequent but at a fraction of the cost; shifting expenditures from variable to fixed costs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ease of implementation&lt;/strong&gt; and quicker time-to market. With enterprise software deployments (CRM/ERP/BPM) generally requiring less than three months compared to six to 18 months with traditional software; while non-enterprise applications the implementation time approaches zero(&lt;a href='http://www.basecamphq.com/'&gt;Basecamp&lt;/a&gt;/&lt;a href='https://www.google.com/a/'&gt;Google Apps&lt;/a&gt;). The focus of a deployment is on end-user training and acceptance, since customers do not have to install or maintain servers, networking equipment, security products, or other hardware.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reduced technology investment risk&lt;/strong&gt; and higher ROI with lower upfront investment(capital and resource). The customer avoids the risk of additional &#8216;hidden costs&#8217; that creep up over the application life-cycle such as ongoing support and maintenance costs, upgrades, user acceptance risks, etc. Many on-demand providers are able to provide a breakeven point in six months or less while licensing models require a longer payback period.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lower total cost of ownership&lt;/strong&gt; (TCO) with licensing, implementation, customization, maintenance, upgrades, and hardware &amp;amp; support costs being bundled into an on-demand service relationship. The first year total cost of ownership can be &lt;strong&gt;five to ten times less expensive&lt;/strong&gt; than enterprise software with the majority of savings resulting from the elimination of upfront integration and customization projects.&lt;/p&gt;

&lt;p&gt;The following table looks at the TCO of a traditional CRM ISV(Siebal/Oracle/etc) solution versus SalesForce.com’s SaaS (note: this is from a salesforce/Yankee Group study, so likely represents a particular view of &lt;em&gt;reality&lt;/em&gt;):&lt;/p&gt;

&lt;p&gt;&lt;img src='/assets/2006/11/20/salesforce.png' height='350' width='700' /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frees up internal resources&lt;/strong&gt; by reducing internal IT staff required to manage applications, keep track of upgrades, maintain performance, etc. Internal IT resources can focus on less &#8216;risky&#8217; tasks and more strategically focused on bring core value to the enterprise.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Full application lifecycle involvement&lt;/strong&gt;, from initial deployment through ongoing support, maintenance and upgrade, that ensures that there is a complete alignment of interests with the SaaS firm having a vested stake in the success of the application beyond initial deployment(see &lt;em&gt;*Shared Risk&lt;/em&gt;). Clients are a key value to the SaaS organization, whereby Customer Service is as a conduit to Product Development. When was the last time you felt that a Service call would be directed to the development team?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Continuous support &amp;amp; seamless upgrades&lt;/strong&gt; with new features and functionality, upgrades, customer support, and other operational services all included instead of being treated as incremental costs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Shared risks and single-source accountability&lt;/strong&gt; with customers demanding a different vendor relationship that results in more accountability and flexibility in the actual execution of the software. Just as importantly, the SaaS firm &#8216;shares&#8217; in the execution risk of the application, since the SaaS provider also earns their own return over the term of the relationship and consequently loses in the equation when customers seek alternatives.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;New functionality and improved application performance&lt;/strong&gt; with on-demand firms receiving continual client feedback in a service-based relationship and often interacting with end-users in the application environment itself to determine priorities for new features and to fix bugs. A critical differentiator is that new product revisions are made more frequently. Consequently, software as a service providers are able to continually refine the product with new releases that add customer-driven functionality that can be utilized by all clients in a shared application and across a multi-tenant model.&lt;/p&gt;

&lt;p&gt;That&#8217;s the end of Part I. In Part II we&#8217;ll take a look at the SaaS revenue model and operating expenses.&lt;/p&gt;

&lt;p&gt;Hopefully the above examination provides some benefit to the budding SaaS venture.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://www.nnovation.ca/">
    <author>
      <name>Jodi</name>
    </author>
    <id>tag:www.nnovation.ca,2006-11-10:7</id>
    <published>2006-11-10T02:52:00Z</published>
    <updated>2006-11-27T17:19:34Z</updated>
    <category term="on Innovation"/>
    <category term="biz"/>
    <category term="rails"/>
    <category term="ruby"/>
    <link href="http://www.nnovation.ca/2006/11/10/hello-world" rel="alternate" type="text/html"/>
    <title>puts "Hello World. TNG is live!"</title>
<summary type="html">This first post is firstly a test of Mephisto, the CMS that I've built this site with -  less than 8 hard hours (mostly CSS) and TNG is done! (as my 2 year old says &quot;I Did It! TaDa!!&quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;a href='http://mephisto.stikipad.com'&gt;Mephisto&lt;/a&gt; is a &lt;a href='http://www.rubyonrails.com'&gt;Rails&lt;/a&gt; based blogging/cms system. I've been intending to use CMS for the corporate website plus a site for my wife's naturapathic clinic (long past due, I may say). With the ease of this implementation, I'll have little reason for not getting her up asap.&lt;br /&gt;</summary><content type="html">
            This first post is firstly a test of Mephisto, the CMS that I've built this site with -  less than 8 hard hours (mostly CSS) and TNG is done! (as my 2 year old says &quot;I Did It! TaDa!!&quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;a href='http://mephisto.stikipad.com'&gt;Mephisto&lt;/a&gt; is a &lt;a href='http://www.rubyonrails.com'&gt;Rails&lt;/a&gt; based blogging/cms system. I've been intending to use CMS for the corporate website plus a site for my wife's naturapathic clinic (long past due, I may say). With the ease of this implementation, I'll have little reason for not getting her up asap.&lt;br /&gt;

&lt;br /&gt;
This introductory note is firstly a test of Mephisto, the CMS that I've built this site with -  less than 8 hard hours (mostly CSS) and TNG is done! (as my 2 year old says &quot;I Did It! TaDa!!&quot;).&lt;br /&gt;
&lt;br /&gt;
And secondly, I wanted to set the stage for the intention of this blog.&lt;br /&gt;
&lt;br /&gt;
I intend to use it as an exploration of both technology and high tech business concepts. Through my years as both a computer engineer and small business ceo, I've longed to share various thoughts, and to join others through dialogue on these topics.&lt;br /&gt;
&lt;br /&gt;
So, through time I will likely vary from discussions on technology delving into Ruby, Rails, databases, design, TDD/BDD, agility and occasionally into my fascination with consumer electronics.&lt;br /&gt;
&lt;br /&gt;
Alternating with thoughts on high tech marketing, sales, product development. My inspirations stem from The Chasm Group, and Neil Rackham's Spin Selling &amp; &lt;a href='http://www.jimnovo.com
'&gt;Jim Novo's Drilling Down&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
P.S. In the spirit of &quot;hello world&quot;, check out this &lt;a href='http://www.infiltec.com/j-h-wrld.htm'&gt;reference&lt;/a&gt; to a bunch of &quot;hello world&quot; programs.&lt;br /&gt;
&lt;br /&gt;
          </content>  </entry>
</feed>
