<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Arnold Funken on the Social Web</title>
	<atom:link href="http://dagobart.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://dagobart.wordpress.com</link>
	<description>with a special focus on social site building</description>
	<pubDate>Sat, 05 Jul 2008 09:43:01 +0000</pubDate>
	<generator>http://wordpress.org/?v=MU</generator>
	<language>en</language>
			<item>
		<title>Are plugins that a time-saver in development?</title>
		<link>http://dagobart.wordpress.com/2008/06/26/are-plugins-that-a-time-saver-in-development/</link>
		<comments>http://dagobart.wordpress.com/2008/06/26/are-plugins-that-a-time-saver-in-development/#comments</comments>
		<pubDate>Thu, 26 Jun 2008 00:16:24 +0000</pubDate>
		<dc:creator>dagobart</dc:creator>
		
		<category><![CDATA[B Ray]]></category>

		<category><![CDATA[F/LOSS]]></category>

		<category><![CDATA[GPL]]></category>

		<category><![CDATA[community]]></category>

		<category><![CDATA[foreign code]]></category>

		<category><![CDATA[software development]]></category>

		<category><![CDATA[customer demands]]></category>

		<category><![CDATA[Rails]]></category>

		<category><![CDATA[glitches]]></category>

		<guid isPermaLink="false">http://dagobart.wordpress.com/?p=108</guid>
		<description><![CDATA[Bryan Ray&#8217;s recent posting on a drag and drop mentality of developers gave the kick start to this here posting. You might want to read his first.
&#160;
It&#8217;s cruical for a employer/customer to get stuff done as quickly as possible. Therefore it&#8217;s tempting to demand the developer to reuse foreign code, drop in plugins instead of [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Bryan Ray&#8217;s recent posting on <a href="http://bryanray.net/2008/06/25/rails-appli-plugins-the-drag-and-drop-developer/">a drag and drop mentality of developers</a> gave the kick start to this here posting. You might want to read his first.<br />
&nbsp;</p>
<p>It&#8217;s cruical for a employer/customer to get stuff done as quickly as possible. Therefore it&#8217;s tempting to demand the developer to reuse foreign code, drop in plugins instead of developing from scratch, get a whole idea of the project and make that happen. Instead, they often demand: &#8216;Just dump every almost usefully looking plugin into the app, and our users will love it.&#8217;</p>
<p>Despite that&#8217;s often not true, adding foreign code to your project often is really the opposite of a time saver: If you want to get to the save side, you&#8217;d review that foreign code. Which&#8217;d cost you time. As the foreign developer might had have other issues in mind, the foreign code might not exactly fulfill what you&#8217;re after. So you need to make that code do what you want. If you&#8217;ve got the source code and allowed to patch it, then by going into that matter &#8212; and figuring out foreign code is not always <em>that</em> funny &#8212; or, if you&#8217;ve got no source code at all, you need to develop some wrappers or workarounds. Chances, that you&#8217;d be quicker if you&#8217;d developed everything from scratch here. Even more the chance that that patching need rips your whole project schedule apart.</p>
<p>Second thing is, code always implies the chance of glitches. That&#8217;s true for code you write yourself as for code you get from foreign sources. Customers often believe foreign code would be save to use per se, simply because either they paid for it or <a href="http://dagobart.wordpress.com/2008/04/24/why-the-community-of-xxx-failedfails/">that it&#8217;s assumedly community-backed</a>.</p>
<p>It&#8217;s a venerable assumption that more eyes spot glitches quicker than only two of them. Anyways, that venerable assumption might miss an important point: Not every GPLed project has a community. Often GPLed projects consist only of a mere two or three developers and no community at all. They of course might not spot and fix issues as quickly as you might assume. And same so for commercial developers: If their team consists of that few developers as well, you&#8217;re in no better luck. &#8212; For that reason, although foreign code is available, you&#8217;re nontheless in the duty to test it, at least review it. Saves you time over developing the same functionality yourself? &#8212; I have my doubts.<br />
&nbsp;</p>
<p><em>Update:</em> <br />
WordPress.com automatically added a link to <a href="http://talkaboutquality.wordpress.com/2007/01/31/what-code-review-should-not-find/">an early 2007 post by Tom Harris on code review</a>. As that post read reasonable and his blog even features <a href="http://talkaboutquality.wordpress.com/category/code-review/">a whole category on the code review</a>, I suggest to give his posts a try.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dagobart.wordpress.com/108/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dagobart.wordpress.com/108/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dagobart.wordpress.com/108/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dagobart.wordpress.com/108/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dagobart.wordpress.com/108/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dagobart.wordpress.com/108/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dagobart.wordpress.com/108/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dagobart.wordpress.com/108/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dagobart.wordpress.com/108/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dagobart.wordpress.com/108/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dagobart.wordpress.com/108/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dagobart.wordpress.com/108/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dagobart.wordpress.com&blog=3031991&post=108&subd=dagobart&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://dagobart.wordpress.com/2008/06/26/are-plugins-that-a-time-saver-in-development/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/schildkroet-128.jpg" medium="image">
			<media:title type="html">dagobart</media:title>
		</media:content>
	</item>
		<item>
		<title>for purpose of reference: enable tagging in a Rails model</title>
		<link>http://dagobart.wordpress.com/2008/06/19/for-purpose-of-reference-enable-tagging-in-a-rails-model/</link>
		<comments>http://dagobart.wordpress.com/2008/06/19/for-purpose-of-reference-enable-tagging-in-a-rails-model/#comments</comments>
		<pubDate>Thu, 19 Jun 2008 15:16:10 +0000</pubDate>
		<dc:creator>dagobart</dc:creator>
		
		<category><![CDATA[A de Vroom]]></category>

		<category><![CDATA[B Ray]]></category>

		<category><![CDATA[B Smith]]></category>

		<category><![CDATA[M Wedemeyer]]></category>

		<category><![CDATA[R Felton]]></category>

		<category><![CDATA[Ruby on Rails]]></category>

		<category><![CDATA[reference]]></category>

		<category><![CDATA[tagging]]></category>

		<category><![CDATA[acts_as_taggable]]></category>

		<category><![CDATA[acts_as_taggable_on_steroids]]></category>

		<category><![CDATA[DZone]]></category>

		<guid isPermaLink="false">http://dagobart.wordpress.com/?p=102</guid>
		<description><![CDATA[As my yesterday posting on how to do many-to-many relationships in Rails turned out to be popular, today I give an example for how to add tags to a Rails model in the same stripped down style.
Just like yesterday, as the thing that shall get tags attached we want an item model. And we want [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>As my yesterday posting on <a href="http://dagobart.wordpress.com/2008/06/18/for-purpose-of-reference-doing-many-to-many-relationships-in-rails/">how to do many-to-many relationships in Rails</a> turned out to be popular, today I give an example for how to add tags to a Rails model in the same stripped down style.</p>
<p>Just like yesterday, as the thing that shall get tags attached we want an item model. And we want to make use of the tagging tool.</p>
<p>To achieve the little today goal, we need a scaffold for the item model first, then install a plug-in for the tagging, do some modification to the model, views, and the plug-in itself. To the plug-in only because this little project aims for quick results &#8212; to get the matter clear&nbsp;&mdash;, not for comfort.</p>
<p>To prevent possible side-effects with whatever project we might be working on already, let&#8217;s start a completely new project:</p>
<p><code>$ rails <strong>tag_me</strong> &amp;&amp; cd <strong>tag_me</strong><br />
&#8230; [output] &#8230;</code></p>
<p>Then the let&#8217;s apply scaffold to get the model set up:</p>
<p><code>$ ./script/generate scaffold <strong>item</strong> name:string &amp;&amp; rake db:migrate<br />
&#8230; [output] &#8230;</code></p>
<p>Now we install the plug-in for the tagging:</p>
<p><code>$ ruby script/plugin install http://svn.viney.net.nz/things/rails/plugins/acts_as_taggable_on_steroids<br />
&#8230; [output] &#8230;</code></p>
<p>(I used <tt>acts_as_taggable_on_steroids</tt> because the plug-in it&#8217;s based upon, <tt>acts_as_taggable</tt>, looks outdatedly.)</p>
<p><code>$ ruby script/generate acts_as_taggable_migration &amp;&amp; rake db:migrate<br />
&#8230; [output] &#8230;</code></p>
<p>Once done with that, we have everything in place to perform the necessary modifications on both, the plug-in and the scaffolded application. Since everything depends on the plug-in, we start our modifications there:</p>
<p><strong>file: vendor/plugins/acts_as_taggable_on_steroids/lib/acts_as_taggable.rb</strong>:<br />
At the end of the <abbr title="that is module InstanceMethods">module body</abbr> (<abbr title="20080619">currently</abbr> line 200) we insert two additional methods:</p>
<pre>def tags_as_text
  tag_list
end

def tags_as_text= text
  self.tag_list = text
end</pre>
<p>&nbsp;</p>
<p>Next, we make the item taggable, by inserting a <tt>acts_as_taggable</tt> into the class body:</p>
<p><strong>file: app/models/item.rb</strong>:</p>
<pre>class Item &lt; ActiveRecord::Base
  <strong>acts_as_taggable</strong>
end</pre>
<p>(Bold code lines like the one above are those you need to insert.)<br />
&nbsp;</p>
<p>That&#8217;s it, mainly. What&#8217;s left is to update the views so that tags get displayed and can get entered:</p>
<p><strong>file: app/views/items/index.html.erb</strong>:</p>
<pre>&lt;h1&gt;Listing items&lt;/h1&gt;

&lt;table&gt;
  &lt;tr&gt;
    &lt;th&gt;Name&lt;/th&gt;
    <strong>&lt;th&gt;Tags&lt;/th&gt;</strong>
  &lt;/tr&gt;

  &lt;% for item in @items %&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;%=h item.name %&gt;&lt;/td&gt;
      <strong>&lt;td&gt;&lt;%=h item.tags_as_text %&gt;&lt;/td&gt;</strong>
      &lt;td&gt;&lt;%= link_to &#8216;Show&#8217;, item %&gt;&lt;/td&gt;
      &lt;td&gt;&lt;%= link_to &#8216;Edit&#8217;, edit_item_path(item) %&gt;&lt;/td&gt;
      &lt;td&gt;&lt;%= link_to &#8216;Destroy&#8217;, item, :confirm =&gt; &#8216;Are you sure?&#8217;, :method =&gt; :delete %&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;% end %&gt;
&lt;/table&gt;

&lt;br /&gt;

&lt;%= link_to &#8216;New item&#8217;, new_item_path %&gt;</pre>
<p>&nbsp;</p>
<p><strong>file: app/views/items/new.html.erb</strong>:</p>
<pre>&lt;h1&gt;New item&lt;/h1&gt;

&lt;%= error_messages_for :item %&gt;

&lt;% form_for(@item) do |f| %&gt;
  &lt;p&gt;
    &lt;b&gt;Name&lt;/b&gt;&lt;br /&gt;
    &lt;%= f.text_field :name %&gt;
  &lt;/p&gt;

  <strong>&lt;p&gt;
    &lt;b&gt;Tags&lt;/b&gt;&lt;br /&gt;
    &lt;%= f.text_area(&#8217;tags_as_text&#8217;) %&gt;
  &lt;/p&gt;</strong>

  &lt;p&gt;
    &lt;%= f.submit &#8220;Create&#8221; %&gt;
  &lt;/p&gt;
&lt;% end %&gt;

&lt;%= link_to &#8216;Back&#8217;, items_path %&gt;</pre>
<p>&nbsp;</p>
<p><strong>file: app/views/items/show.html.erb</strong>:</p>
<pre>&lt;p&gt;
  &lt;b&gt;Name:&lt;/b&gt;
  &lt;%=h @item.name %&gt;
&lt;/p&gt;

<strong>&lt;p&gt;
  &lt;b&gt;Tags&lt;/b&gt;&lt;br /&gt;
  &lt;%= @item.tags_as_text %&gt;
&lt;/p&gt;</strong>

&lt;%= link_to &#8216;Edit&#8217;, edit_item_path(@item) %&gt; |
&lt;%= link_to &#8216;Back&#8217;, items_path %&gt;</pre>
<p>&nbsp;</p>
<p><strong>file: app/views/items/edit.html.erb</strong>:</p>
<pre>&lt;h1&gt;Editing item&lt;/h1&gt;

&lt;%= error_messages_for :item %&gt;

&lt;% form_for(@item) do |f| %&gt;
  &lt;p&gt;
    &lt;b&gt;Name&lt;/b&gt;&lt;br /&gt;
    &lt;%= f.text_field :name %&gt;
  &lt;/p&gt;

  <strong>&lt;p&gt;
    &lt;b&gt;Tags&lt;/b&gt;&lt;br /&gt;
    &lt;%= f.text_area(&#8217;tags_as_text&#8217;) %&gt;
  &lt;/p&gt;</strong>

  &lt;p&gt;
    &lt;%= f.submit &#8220;Update&#8221; %&gt;
  &lt;/p&gt;
&lt;% end %&gt;

&lt;%= link_to &#8216;Show&#8217;, @item %&gt; |
&lt;%= link_to &#8216;Back&#8217;, items_path %&gt;</pre>
<p>&nbsp;</p>
<p>Now you can launch the server by the common</p>
<p>	<code>$ ./script/server</code></p>
<p>and direct your browser to</p>
<p>	<code><a href="http://localhost:3000/items/">http://localhost:3000/items/</a></code></p>
<p>There you can enter some dummy data (using the ‘new item’ link).<br />
&nbsp;</p>
<p>Notes:</p>
<ul>
<li>Despite single quotes in this posting get displayed as oblique <strong>&#8216;&#8230;&#8217;</strong>, <strong>in the source code you need real single quotes</strong>. &#8212; If you just copypaste the source and keep the wry single quotes, things might go wrong. </li>
<li>To separate several tags from each other you can utilize te comma (,) character. Multiple identical tags get treated as a single one.
</li>
<li>To develop the above intro, I made use of the <tt><a href="http://agilewebdevelopment.com/plugins/acts_as_taggable_on_steroids">acts_as_taggable_on_steroids</a></tt> page and <a href="http://pragmatig.wordpress.com/2008/05/06/simple-tag-io-with-acts_as_taggable/">Simple Tag IO with acts_as_taggable_on_steroids</a>. </li>
<li>While aiming at getting a clue of how to deal with tags in Rails at all, I also found these sources useful: <a href="http://www.bin-co.com/blog/2007/12/installing-the-acts_as_taggable-rails-plugin/">Installing the acts_as_taggable Rails Plugin</a> and <a href="http://blog.evanweaver.com/articles/2007/01/13/growing-up-your-acts_as_taggable/">growing up your acts_as_taggable</a>. </li>
<li>In the <a href="http://www.google.com/search?hl=en&amp;pwst=1&amp;q=acts_as_taggable&amp;start=40&amp;sa=N">neighbourhood of my search for/on how to deal with <tt>acts_as_taggable.*</tt></a>, I found some promising drill-ups related to <tt>acts_as_taggable.*</tt> such as <a href="http://ariejan.net/2007/07/01/activescaffold-acts_as_taggable-auto-complete/">auto-completion for <tt>acts_as_taggable_on_steroids</tt></a> by Ariejan de Vroom, <a href="http://www.slashdotdash.net/articles/2006/04/29/acts_as_taggable-per-user-tagging"><tt>acts_as_taggable</tt> per user tagging</a> by Ben Smith (and some <a href="http://blog.aisleten.com/2007/02/25/acts_as_taggable-per-user-from-slashdotslash-plus-a-few-fixes/">hiccup fixing on that</a> by Micah Wedemeyer/Ryan Felton), <a href="http://bryanray.net/2008/04/24/creating-an-tagapplicator-for-acts_as_taggable/">Creating a TagApplicator for <tt>acts_as_taggable</tt></a> by Bryan Ray and <a href="http://snippets.dzone.com/posts/show/3110">Extending <tt>acts_as_taggable</tt> to take scope into account</a> (by unknown, found on DZone). <br /><em><abbr title="20080628">Update:</abbr></em> I got aware of some more <tt>act_as_taggable*</tt> resources, e.g. <a href="http://www.intridea.com/2007/12/4/announcing-acts_as_taggable_on"><tt>acts_as_taggable_on</tt> by intridea</a> or <a href="http://github.com/search?q=acts+taggable">those found on github</a> (<a href="http://bryanray.net/2008/06/25/rails-appli-plugins-the-drag-and-drop-developer/#comment-972">via Bryan Ray</a>). </li>
<li>Last not least, I stumbled upon a <a href="http://nubyonrails.com/articles/the-complete-guide-to-rails-plugins-part-i">tutorial on writing plug-ins for Rails</a>. Might be useful, but I didn&#8217;t try it yet. </li>
</ul>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dagobart.wordpress.com/102/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dagobart.wordpress.com/102/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dagobart.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dagobart.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dagobart.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dagobart.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dagobart.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dagobart.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dagobart.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dagobart.wordpress.com/102/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dagobart.wordpress.com/102/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dagobart.wordpress.com/102/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dagobart.wordpress.com&blog=3031991&post=102&subd=dagobart&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://dagobart.wordpress.com/2008/06/19/for-purpose-of-reference-enable-tagging-in-a-rails-model/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/schildkroet-128.jpg" medium="image">
			<media:title type="html">dagobart</media:title>
		</media:content>
	</item>
		<item>
		<title>for purpose of reference: doing many-to-many relationships in Rails</title>
		<link>http://dagobart.wordpress.com/2008/06/18/for-purpose-of-reference-doing-many-to-many-relationships-in-rails/</link>
		<comments>http://dagobart.wordpress.com/2008/06/18/for-purpose-of-reference-doing-many-to-many-relationships-in-rails/#comments</comments>
		<pubDate>Wed, 18 Jun 2008 15:52:43 +0000</pubDate>
		<dc:creator>dagobart</dc:creator>
		
		<category><![CDATA[A Cetinick]]></category>

		<category><![CDATA[J Susser]]></category>

		<category><![CDATA[Model View Controller]]></category>

		<category><![CDATA[P Raju]]></category>

		<category><![CDATA[Railscast]]></category>

		<category><![CDATA[Ruby on Rails]]></category>

		<category><![CDATA[contact list]]></category>

		<category><![CDATA[reference]]></category>

		<category><![CDATA[social network]]></category>

		<category><![CDATA[:through association]]></category>

		<category><![CDATA[many-to-many relationships]]></category>

		<category><![CDATA[Rails wiki]]></category>

		<guid isPermaLink="false">http://dagobart.wordpress.com/?p=96</guid>
		<description><![CDATA[There are lots of tutorials out on Rails, and many people may need to work through them to get a grasp of Rails. but once you&#8217;re experienced in programming you might feel delayed by all the stuff the tutorial brings up but which you already know. Most of the tutorials I&#8217;ve seen so far also [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>There are lots of tutorials out on Rails, and many people may need to work through them to get a grasp of Rails. but once you&#8217;re experienced in programming you might feel delayed by all the stuff the tutorial brings up but which you already know. Most of the tutorials I&#8217;ve seen so far also prevent you from skipping over to go straightly to the interesting parts because they do stuff in between that affects the interesting parts, so you need to go backwards through the tutorial to figure out what&#8217;s affect only and what actually needs to be there so that what you intend will work.</p>
<p>I find that rather annoying. I&#8217;d like to have a simple overview of what files need to get modified to get a many-to-many relationship between two tables. For starters, it&#8217;s rather useless to know all the details, gimmicks and features you might want to use once you&#8217;re a bit more experienced: If you come from a different development language, you probably don&#8217;t want anything as simple as a single-table application to get a first impression of Rails for yourself. I want to know how I can implement a many-to-many, and how to make that visible. Nothing more, nothing less.<br />
&nbsp;</p>
<p>For the example, I use tags and items: Each tag may be related to multiple items; each item may have multiple tags. (For example, the tags {sunset, sun, water} may be related to a sunset picture. Thus, there are multiple tags related to a single picture yet. And another picture might have the tags {tap, water, damp, dishes}. Thus &#8216;water&#8217; would be a tag that&#8217;s related to more but a single item.)</p>
<p>We&#8217;ve got three scaffolds to do, one for the items, one for the tags and one for the many-to-many relationship. The three scaffolds create three model files. For simplicity, we start with a whole new project, so there won&#8217;t be any side effects of whatever project we might be working on already:</p>
<p><code>$ rails <strong>many_to_many</strong> &amp;&amp; cd <strong>many_to_many</strong><br />
&#8230; [output] &#8230;</code></p>
<p>Next, we do the scaffolds:</p>
<p><code>$ ./script/generate scaffold <strong>item</strong> name:string &amp;&amp; rake db:migrate<br />
&#8230; [output] &#8230;</code></p>
<p><code>$ ./script/generate scaffold <strong>tag</strong> label:string &amp;&amp; rake db:migrate<br />
&#8230; [output] &#8230;</code></p>
<p><code>$ ./script/generate scaffold <strong>item_tag</strong> item_id:integer tag_id:integer &amp;&amp; rake db:migrate<br />
&#8230; [output] &#8230;</code></p>
<p>Once done with that, we have everything in place to set up the many-to-many relationship. We modify the models first, then the output for a single item to make it show the tags for that item also:</p>
<p><strong>file: <tt>app/models/item.rb</tt>:</strong> </p>
<pre>class Item &lt; ActiveRecord::Base
<strong>  has_many :item_tags
  has_many :tags, :through =&gt; :item_tags </strong>
end</pre>
<p>(The bold code lines are those you need to insert into the model. Same for the two others below.)<br />
&nbsp;</p>
<p><strong>file: <tt>app/models/tag.rb</tt>:</strong> </p>
<pre>class Tag &lt; ActiveRecord::Base
<strong>  has_many :item_tags
  has_many :items, :through =&gt; :item_tags </strong>
end</pre>
<p>&nbsp;</p>
<p><strong>file: <tt>app/models/item_tag.rb</tt>:</strong> </p>
<pre>class ItemTag &lt; ActiveRecord::Base
<strong>  belongs_to :item
  belongs_to :tag </strong>
end</pre>
<p>&nbsp;</p>
<p>And now the output. To meet the needs of the Model View Controller pattern, to get the appropriate output, we need to modify the controller and view of the item(s). First we modify the controller, then the view; in the controller we modify the show() method:</p>
<p><strong>file: <tt>app/controllers/items_controller.rb</tt>:</strong><br />
<tt>show</tt> method before: </p>
<pre>def show
  @item = Item.find(params[:id])

  respond_to do |format|
    format.html # show.html.erb
    format.xml  { render :xml =&gt; @item }
  end
end</pre>
<p>&nbsp;</p>
<p><tt>show</tt> method after: </p>
<pre>def show
  @item = Item.find(params[:id])

  <strong>@tagline = @item.tags.collect { |t| t.label }.join(&#8217;, &#8216;)</strong>
  respond_to do |format|
    format.html # show.html.erb
    format.xml  { render :xml =&gt; @item }
  end
end</pre>
<p>&nbsp;</p>
<p>In the view, we simply add a paragraph that outputs the tagline gotten by the controller:</p>
<p><strong>file: <tt>app/views/items/show.html.erb</tt>: </strong> </p>
<pre>&lt;p&gt;
  &lt;b&gt;Tags:&lt;/b&gt;
  &lt;%=h @tagline %&gt;
&lt;/p&gt;</pre>
<p>That mostly is it.</p>
<p>Now you can launch the server by the common</p>
<p><code>$ ./script/server</code></p>
<p>and direct your browser to</p>
<p><code><a href="http://localhost:3000/">http://localhost:3000/</a></code></p>
<p>You can access items, tags and relationships between both by going to their respective views, like</p>
<pre><a href="http://localhost:3000/items">http://localhost:3000/items</a>
<a href="http://localhost:3000/tags">http://localhost:3000/tags</a>
<a href="http://localhost:3000/item_tags">http://localhost:3000/item_tags</a></pre>
<p>There you can enter some dummy data (using the &#8216;new&#8217; link); to see the effect, I&#8217;d start by defining some items, then some tags, then some item_tag relationships, then view the individual item I related some tags to.<br />
&nbsp;</p>
<p>Notes:
<ul>
<li>If you want to do something serious with tags, you might want to use the <tt>acts_as_taggable</tt> or the <tt><a href="http://agilewebdevelopment.com/plugins/acts_as_taggable_on_steroids">acts_as_taggable_on_steroids</a></tt> Rails plug-in. &#8212; <em>Update: Here&#8217;s my <a href="http://dagobart.wordpress.com/2008/06/19/for-purpose-of-reference-enable-tagging-in-a-rails-model/">quick reference on how to apply the latter</a>.</em> </li>
<li>Some background info on many-to-many relationships in Rails (which I used&nbsp; to come up with the step-by-step intro above): <a href="http://blog.hasmanythrough.com/2006/4/20/many-to-many-dance-off">Many-to-many Dance-off of 2006</a> by Josh Susser; a brand-new <a href="http://www.jumbabox.com/2008/06/ruby-on-rails-many-to-many-tutorial/">post on the same matter of June 2008</a> by Prashant Raju and Andrew Cetinick; <a href="http://railscasts.com/episodes/47">a Railscast of June 2007</a> on still the same matter and, for reference, <a href="http://wiki.rubyonrails.org/rails/pages/ThroughAssociations">the Rails wiki on <tt>:through</tt> associations</a>, date may vary. </li>
<li>Furthermore, not only items:tags are common many-to-many relationships &#8212; contact lists are too. Here are two contact list maintaining tools in Rails I found along the way when I was after grasping the many-to-many issue: <tt><a href="http://actsasnetwork.rubyforge.org/">acts_as_network</a></tt> and <a href="http://www.danielfischer.com/2008/03/14/are-we-fischy-friends/">Fischy Friends</a>. &#8212; Contact lists resemble a <a href="http://dagobart.wordpress.com/2008/03/25/barebone-social-network-frameworks-whats-already-there-and-a-draft-on-several-levels-of-implementation-of-social-networks/">social network, though a rather low-level one</a>. </li>
</ul>
<p> [<a title="tinyurl for this posting" href="http://tinyurl.com/3jaqsm">t</a>]</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dagobart.wordpress.com/96/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dagobart.wordpress.com/96/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dagobart.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dagobart.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dagobart.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dagobart.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dagobart.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dagobart.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dagobart.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dagobart.wordpress.com/96/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dagobart.wordpress.com/96/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dagobart.wordpress.com/96/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dagobart.wordpress.com&blog=3031991&post=96&subd=dagobart&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://dagobart.wordpress.com/2008/06/18/for-purpose-of-reference-doing-many-to-many-relationships-in-rails/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/schildkroet-128.jpg" medium="image">
			<media:title type="html">dagobart</media:title>
		</media:content>
	</item>
		<item>
		<title>Keeping your business independent of Google, even if using Google web applications engine</title>
		<link>http://dagobart.wordpress.com/2008/05/31/keeping-your-business-independent-of-google-even-if-using-google-web-applications-engine/</link>
		<comments>http://dagobart.wordpress.com/2008/05/31/keeping-your-business-independent-of-google-even-if-using-google-web-applications-engine/#comments</comments>
		<pubDate>Sat, 31 May 2008 11:13:54 +0000</pubDate>
		<dc:creator>dagobart</dc:creator>
		
		<category><![CDATA[Google]]></category>

		<category><![CDATA[Google Web App Engine]]></category>

		<category><![CDATA[business]]></category>

		<category><![CDATA[business independence]]></category>

		<category><![CDATA[globalization]]></category>

		<category><![CDATA[web applications]]></category>

		<category><![CDATA[Amazon]]></category>

		<category><![CDATA[datacenters]]></category>

		<category><![CDATA[IsTwitterDown]]></category>

		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://dagobart.wordpress.com/?p=68</guid>
		<description><![CDATA[Dependent on where you are Twitter is slow, but how&#8217;d be Google web applications? &#8212; Globally quick because of distributed datacenters? But if so, how could you keep your business independent of Google?
Twitter has performance issues that very often, a probably local slow-down caused by local thunder-storm made me suspect Twitter was down, again. IsTwitterDown [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><strong>Dependent on where you are Twitter is slow, but how&#8217;d be Google web applications? &#8212; Globally quick because of distributed datacenters? But if so, how could you keep your business independent of Google?</strong></p>
<p>Twitter has performance issues that very often, a probably local slow-down caused by local thunder-storm made me suspect Twitter was down, again. <a href="http://istwitterdown.com">IsTwitterDown</a> said No. I suspected IsTwitterDown was wrong.</p>
<p>Anyways, this little incident this morning made me aware of a possible side-effect of Google Web Apps &#8212; I mean those you can build yourself now by using the Google Web App Kit: As Google is global and they&#8217;ve placed their datacenters around the world so you can get Google search results in less than a second <em>and</em> the web apps built using the Google web application kit are going to be hosted on those very datacenters, this might be a side-effect, but maybe one being very significantly: Maybe, building your web apps upon the Google web application kit might make your apps as quickly available as Google search results. And that globally.</p>
<p>At least, that&#8217;s what I&#8217;d be glad to see if Twitter or a serious competitor would do.</p>
<p>On the other hand there is the issue that hosting your app on Google gets you dependent of them. Same for your your business.</p>
<p>I think, one way to deal with that could be to have two variants of your app at hand: One quickly available for your country..continent in your own data center, and one boosted for global audience, hosted on Google, globally speedy.</p>
<p>That solution would resemble what we had (and still have) for pages to be rendered on different web browsers. Obviously, that&#8217;s not a solution you&#8217;d long for. But &#8212; alternatives? Also: You developers already are used to do the work twice; it would not be that great difference, would it?</p>
<p>If you&#8217;d like to minimize the efforts of developing everything twice, to make the passages of the Google web application framework relevant (to you) available as free software (&#8221;open source&#8221;) would be obvious. Where a clone of the framework might originate from &#8212; which of course might be significantly slower at your individual web host but which would help to decrease the efforts to develop your app twice. And, that framework clone could be picked up by an alternative datacenters provider or anyone of the big ones, like Amazon.</p>
<p>I think, keeping your business and yourself independent of Google could get achieved this way.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dagobart.wordpress.com/68/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dagobart.wordpress.com/68/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dagobart.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dagobart.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dagobart.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dagobart.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dagobart.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dagobart.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dagobart.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dagobart.wordpress.com/68/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dagobart.wordpress.com/68/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dagobart.wordpress.com/68/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dagobart.wordpress.com&blog=3031991&post=68&subd=dagobart&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://dagobart.wordpress.com/2008/05/31/keeping-your-business-independent-of-google-even-if-using-google-web-applications-engine/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/schildkroet-128.jpg" medium="image">
			<media:title type="html">dagobart</media:title>
		</media:content>
	</item>
		<item>
		<title>drafted a minimalist business card</title>
		<link>http://dagobart.wordpress.com/2008/05/26/drafted-a-minimalist-business-card/</link>
		<comments>http://dagobart.wordpress.com/2008/05/26/drafted-a-minimalist-business-card/#comments</comments>
		<pubDate>Mon, 26 May 2008 19:07:42 +0000</pubDate>
		<dc:creator>dagobart</dc:creator>
		
		<category><![CDATA[graphics]]></category>

		<category><![CDATA[business card]]></category>

		<guid isPermaLink="false">http://dagobart.wordpress.com/?p=65</guid>
		<description><![CDATA[thought it would be nice to share this   Besides of this, the top left corner of the card is free, so you could add a personal note or reminder there &#8212; or simply your actual e-mail address or phone number.
The green and the yellow square refer to the natural green environment and the [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>thought it would be nice to share this <a href="http://dagobart.files.wordpress.com/2008/05/dagobartwordpresscomcard.jpg"><img src="http://dagobart.files.wordpress.com/2008/05/dagobartwordpresscomcard.jpg?w=300&h=225" alt="" width="300" height="225" class="aligncenter size-medium wp-image-67" /></a> <br /> Besides of this, the top left corner of the card is free, so you could add a personal note or reminder there &#8212; or simply your actual e-mail address or phone number.</p>
<p>The green and the yellow square refer to the natural green environment and the sun and sky. Where the bird fits in well. The bar code should link to this blog.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dagobart.wordpress.com/65/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dagobart.wordpress.com/65/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dagobart.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dagobart.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dagobart.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dagobart.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dagobart.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dagobart.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dagobart.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dagobart.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dagobart.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dagobart.wordpress.com/65/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dagobart.wordpress.com&blog=3031991&post=65&subd=dagobart&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://dagobart.wordpress.com/2008/05/26/drafted-a-minimalist-business-card/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/schildkroet-128.jpg" medium="image">
			<media:title type="html">dagobart</media:title>
		</media:content>

		<media:content url="http://dagobart.files.wordpress.com/2008/05/dagobartwordpresscomcard.jpg?w=300" medium="image" />
	</item>
		<item>
		<title>Do you address your service to trolls?</title>
		<link>http://dagobart.wordpress.com/2008/05/20/do-you-address-your-service-to-trolls/</link>
		<comments>http://dagobart.wordpress.com/2008/05/20/do-you-address-your-service-to-trolls/#comments</comments>
		<pubDate>Tue, 20 May 2008 15:22:58 +0000</pubDate>
		<dc:creator>dagobart</dc:creator>
		
		<category><![CDATA[addressing crap -- getting crap]]></category>

		<category><![CDATA[cliches]]></category>

		<category><![CDATA[community]]></category>

		<category><![CDATA[management's point of view]]></category>

		<category><![CDATA[social network]]></category>

		<category><![CDATA[trolls]]></category>

		<guid isPermaLink="false">http://dagobart.wordpress.com/?p=64</guid>
		<description><![CDATA[Looking at some web services one might get the impression their creators assumes their audience to be fools. Once I even learned that from a manager&#8217;s side of view who stated that opinion clearly.
And why do managers may think so? Maybe for all the trolls out there and for the reports about those trolls. Maybe [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Looking at some web services one might get the impression their creators assumes their audience to be fools. Once I even learned that from a manager&#8217;s side of view who stated that opinion clearly.</p>
<p>And why do managers may think so? Maybe for all the trolls out there and for the reports about those trolls. Maybe even for news media propagating such cliches.</p>
<p>True, trolls might be those folks who are loudest and most wide spread, therefore those folks who get recognized first, by number of postings and by number of places they post to. Not to forget, they get also noticed by outsiders first.</p>
<p>I wonder whether outsiders generally fail to dig in any deeper to recognize there are some more wise people there, so they simply don&#8217;t realize trolls in reality contribute very little. So they don&#8217;t really shape the places or communities or folks or attitudes of mind found there.</p>
<p>But there are more experienced and more &#8216;wise&#8217; people there, even if there are trolls around. (But, rule of thumb, the more trolls the quicker the really contributing people leave.) And for all the other participants on whatever community you might look at &#8212; may it be a blog/comments &#8216;community&#8217; or a fully fledged social network &#8212; the experienced folks count most.</p>
<p>So, in other words, trolls are like flies. Breathing the sweat of others. There and obvious. But not necessary. Those folks may be dumb. But to address your service at them gets you what? &#8212; A crap audience, I suppose.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dagobart.wordpress.com/64/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dagobart.wordpress.com/64/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dagobart.wordpress.com/64/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dagobart.wordpress.com/64/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dagobart.wordpress.com/64/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dagobart.wordpress.com/64/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dagobart.wordpress.com/64/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dagobart.wordpress.com/64/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dagobart.wordpress.com/64/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dagobart.wordpress.com/64/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dagobart.wordpress.com/64/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dagobart.wordpress.com/64/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dagobart.wordpress.com&blog=3031991&post=64&subd=dagobart&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://dagobart.wordpress.com/2008/05/20/do-you-address-your-service-to-trolls/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/schildkroet-128.jpg" medium="image">
			<media:title type="html">dagobart</media:title>
		</media:content>
	</item>
		<item>
		<title>Instantly loading programs &#8212; How to achieve that? &#8212;OR&#8212; Why humans still outrun machines in interaction</title>
		<link>http://dagobart.wordpress.com/2008/05/17/instantly-loading-programs-how-to-achieve-that-or-why-humans-still-outrun-machines-in-interaction/</link>
		<comments>http://dagobart.wordpress.com/2008/05/17/instantly-loading-programs-how-to-achieve-that-or-why-humans-still-outrun-machines-in-interaction/#comments</comments>
		<pubDate>Sat, 17 May 2008 10:52:41 +0000</pubDate>
		<dc:creator>dagobart</dc:creator>
		
		<category><![CDATA[GNOME]]></category>

		<category><![CDATA[KDE]]></category>

		<category><![CDATA[Whoa! user experience]]></category>

		<category><![CDATA[graphical user interface (GUI)]]></category>

		<category><![CDATA[interaction design]]></category>

		<category><![CDATA[text user interface (TUI)]]></category>

		<category><![CDATA[user experience]]></category>

		<guid isPermaLink="false">http://dagobart.wordpress.com/?p=62</guid>
		<description><![CDATA[Probably from the beginning on, computers suffered a common lack: latency on user action. Therefore a computer, some time old, will always feel slow regardless how quick it was regarded once.
I&#8217;ve got an old i286 PC/AT here. Currently it has a 40 MB disk in it (I guess). As I want to get id of [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Probably from the beginning on, computers suffered a common lack: latency on user action. Therefore a computer, some time old, will always feel slow regardless how quick it was regarded once.</p>
<p>I&#8217;ve got an old i286 PC/AT here. Currently it has a 40 MB disk in it (I guess). As I want to get id of it but not just throw it away, I pondered whether I should put a 400 MB disk into it and see what nice software I could put there too.</p>
<p>Then I realized, despite the smalliness of the software I&#8217;d put there and how quickly it would load and exec on a current machine, there &#8212; of course &#8212; it would be awfully slow. Which brought me to the original insight.</p>
<p>However, I wonder whether it&#8217;d be possible to speed up software in general, including current one on current machines, especially the situation of latency you&#8217;re encountering everywhere and always, until now and probably also in future &#8212; but let&#8217;s think this one through.</p>
<p>As the latency becomes experiencable mostly and most easily in programs people interact with, yes, especially those programs I have in mind. Even more specifically, programs that have a graphical user interface (GUI), such as any GNOME programs. Of course, people do experience latency effects on text user interface (TUI) programs too, and even on service programs that don&#8217;t feature a immediate user interaction. &#8212; Once we&#8217;ll be got over start up latencies, of course, that should be tackled too. But for the moment, please let&#8217;s focus on programs with a graphical user interface.</p>
<p>I imagine, the process of loading and making a program ready to use, i.e. to interact with it, in general could be speed up by preloading every possible [GUI] program. On a averagely set up computer, that will probably a lot of programs to load, and even more probably that will eat up a huge share of memory &#8212; if it won&#8217;t make your machine swap immediately. Plus, you need to hide all those programs and make sure they&#8217;ll keep sitting in the background until the user actually wants to use any of them. So, if any such program might get bored for some reason (&#8221;No user interaction since xxx minutes. Shall I quit?&#8221;) you must make sure it does not fire up any distracting popup right in front of the user.<br />
&nbsp;</p>
<p>So far, now we&#8217;ve got two issues: #1, loading all possible programs would eat up a lot of memory, probably go to swap, thus slow the machine down in general (although that way lack in responsivity might slip through unnoticedly). #2, programs need to be enforced to sit invisible in the background &#8212; and stay there. I see chances to get rid of both, with a little help of either the maintainers of the respective programs or by figuring out and applying the necessary patches all ourselves.</p>
<p>So, what&#8217;d need to be done?</p>
<p>The user interacting with a program experiences something that probably is a bit different from what the average user <em>might think</em> they experience. At first glance, most people probably would assume they have &#8212; or at least demand &#8212; a linear user experience. That means, once you get into a program you&#8217;d have a steady (linear) stream of interaction. But that&#8217;s not the case: Today, we&#8217;ve got machines that are a million times faster but their cousins from twenty years ago, but still they lack &#8212; you guess &#8212; responsivity. Which exactly hints to what&#8217;s going on instead of linearity in interaction: a dialog.</p>
<p>The user does something, say, launch a program by clicking an icon. Then the user waits for the program&#8217;s upcoming next action. This clearly is the moment where lack in responsivity kicks in, you <em>wait</em> for some reaction. But the point is: Even if you&#8217;d speak with a real person, after saying something you&#8217;d expect a reaction from the other side. There you&#8217;d wait also. So, it&#8217;s a <em>natural</em>, thus familiar, habit to wait for a reaction once you initiated an action. Even below the level of human interaction this takes place in nature: If you release a bottle of water from your hand, <em>you expect</em> it to drop to the ground. Although there you probably won&#8217;t have to wait too long till that takes place.</p>
<p>The point I wanted to make clear by that was that there is a natural break in the flow of interaction of [at least] humans, and it&#8217;s so common, it&#8217;s fully integrated into our flow of habit&#8217;s we don&#8217;t even notice. But that implies, your flow of action/interaction simply is not linearly but stepped.</p>
<p>So, the user launches a program, waits until it&#8217;s loaded, then <em>orient</em> &#8212; another delay in interaction&nbsp;&ndash;, then decides, then perform another step of interaction, wait for another reaction, and so on. &#8212; By that, for the vast memory usage ignited by #1 &#8212; loading all available GUI programs at once&nbsp;&ndash;, to get rid of it by still loading all the programs at once, but not in complete.</p>
<p>Let&#8217;s look at that for a single program: As the user needs to orient themselves anyways, instead of loading the whole program at once it might suffice to load the GUI only, first. That even might reduce to some <em>picture</em> instead of a real program, then. Which would result in a &#8220;Whoa!&#8221; user experience since the programs would seem to load <em>instantly</em>, i.e. without any latency here. &#8212; Loading a picture only, of course, would cause the latency to take place the moment the user really wants to interact with the program, say make use of the sensitive areas of the user interface, menu, buttons, click fields, hovering interactions (&#8221;hint windows&#8221;).</p>
<p>So we&#8217;ve got two alternatives here: Either start with a small part of the program like indeed a picture of the user interface, then load the remainder in the background once the user starts interacting with a particular program (which would avoid to run out of memory). &#8212; Or: Load only a small share of the program, until the next predictable break in the users interaction. To get some notion for that, I&#8217;d call the user interaction between two (predictable) break in user interaction a &#8217;stage&#8217;. This refers to the time the user needs to get from one user interaction break to the next one but also to the according part(s) of the program which enable the user to perform that move [from one interaction break to the next one]. Once the user makes a decision, they leave the interaction break and enter another stage.</p>
<p>As a stage may allow several interactions to get initiated (such as drawing a line, flipping a picture, selecting a new drawing tool in a painting program) a stage, by the users part of view end by a single interaction break &#8212; but not by the program&#8217;s part of view: For the program the stage may end by diverse set of interaction breaks. So, despite you&#8217;ve got a single entry point for a stage, most times you&#8217;ll have a multitude of exit points (thus, if you imagine it, you get some kind of triangular shape for a stage, not a line-wise or rectangular one).</p>
<p>Loading the program only in stages probably can get extended to the whole program. I imagine even the old machines could handle that, therefore get rid of interaction latencies. At least with a little help of the program loader.<br />
&nbsp;</p>
<p>Let me utter one more word about the interaction breaks: You might imagine that every time a user needs to make a decision an interaction break takes place. That&#8217;s true for inexperienced users since encountering the menu (or any other initial choosing alternative) might enforce them to get oriented first before making a decision. But obviously that does not happen for experienced users: They already have a picture of the choosing alternative in mind and therefore pre-plan their interactions beforehand. For such users it&#8217;s most likely they outrun the machine/program, simply because the machine insists on drawing the menu instead of taking up the user&#8217;s approach of ignoring the accomplishment of menu drawing. &#8212; Because of that you&#8217;d need to choose interaction breaks for your program carefully: Probably the best chances to get a match [between presumed and real interaction break] is for every situation where the user needs to orient themselves before they can make the decision. &#8212; This probably can get optimized even more. However, I think this approach might find a good use on multi-core or other parallelized machines.</p>
<p>Back to the issue #2, programs to sit invisible in the background: Well, I hope it&#8217;d simply vanish once developers get used to the idea their program might get loaded [partitially] without being used ever. <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>However, to make this approach work, we&#8217;d either need to apply this for programs or we&#8217;d need to get some help from the program loader/operating system/desktop environment. Also because they might help on determining where stages might end.</p>
<p>What about a discussion, below, in the comments?</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dagobart.wordpress.com/62/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dagobart.wordpress.com/62/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dagobart.wordpress.com/62/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dagobart.wordpress.com/62/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dagobart.wordpress.com/62/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dagobart.wordpress.com/62/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dagobart.wordpress.com/62/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dagobart.wordpress.com/62/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dagobart.wordpress.com/62/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dagobart.wordpress.com/62/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dagobart.wordpress.com/62/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dagobart.wordpress.com/62/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dagobart.wordpress.com&blog=3031991&post=62&subd=dagobart&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://dagobart.wordpress.com/2008/05/17/instantly-loading-programs-how-to-achieve-that-or-why-humans-still-outrun-machines-in-interaction/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/schildkroet-128.jpg" medium="image">
			<media:title type="html">dagobart</media:title>
		</media:content>
	</item>
		<item>
		<title>How to get the social graph portable without hurting people&#8217;s privacy</title>
		<link>http://dagobart.wordpress.com/2008/05/06/how-to-get-the-social-graph-portable-without-hurting-peoples-privacy/</link>
		<comments>http://dagobart.wordpress.com/2008/05/06/how-to-get-the-social-graph-portable-without-hurting-peoples-privacy/#comments</comments>
		<pubDate>Tue, 06 May 2008 22:04:48 +0000</pubDate>
		<dc:creator>dagobart</dc:creator>
		
		<category><![CDATA[Cologne]]></category>

		<category><![CDATA[armedangels.de]]></category>

		<category><![CDATA[community]]></category>

		<category><![CDATA[community site]]></category>

		<category><![CDATA[personal relationship]]></category>

		<category><![CDATA[portability of the social graph]]></category>

		<category><![CDATA[social arc]]></category>

		<category><![CDATA[social graph]]></category>

		<category><![CDATA[suggests]]></category>

		<category><![CDATA[web monday]]></category>

		<category><![CDATA[web_montag]]></category>

		<category><![CDATA[web_montag_05052008_cologne]]></category>

		<category><![CDATA[R Scoble]]></category>

		<category><![CDATA[Sandra of armedangels.de]]></category>

		<guid isPermaLink="false">http://dagobart.wordpress.com/?p=61</guid>
		<description><![CDATA[Unknowingly, Robert Scoble reminded me about something I thought about the last 24 hours: Yesterday, I attended Web Monday in Cologne, Germany. Although her entry to the presentation was not tech but fashion, Sandra of armedangels.de gave a great presentation on a shirt fashion label that noticed a community gathering around them and aims at [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Unknowingly, Robert Scoble <a href="http://twitter.com/Scobleizer/statuses/804907778">reminded me</a> about something I thought about the last 24 hours: Yesterday, I attended Web Monday in Cologne, Germany. Although her entry to the presentation was <em>not tech</em> but fashion, Sandra of armedangels.de gave a great presentation on a shirt fashion label that noticed a community gathering around them and aims at binding that community to the label by doing just that: add common community functionality to their site. Sandra ignited the discussion of what a community site needs by means of features; one annoyed question of some attender there was &#8220;Why do people need one another community site?&#8221;</p>
<p>Today, pondering the idea to extend the focus of this blog to w0rk and on/offline society, and noticing what I have in mind might be better doable as a community, the &#8220;why one another community?&#8221; question from yesterday evening came back to my mind. Open Social and Open ID without particularly mentioned floated around.</p>
<p>As far as I know (and if I remember correctly), there still is no consensus on how to make the personal social graph portable. One issue in this is privacy: Data that I own is my own data. But my social graph defines by some more data: data that <em>belongs to</em> me, but I am clearly not the owner of it. That&#8217;s relationship data, i.e. my contact list. Though it does belong to me but I don&#8217;t own it, that&#8217;s exactly that part of data I am interested to take with me, over to the next social site I join. Simply because I&#8217;m yet fed up adding the very same friends at every new platform I join, ever and ever again.<br />
&nbsp;</p>
<p>On the other hand, on most social platforms I am aware of people I add to my contact list need to confirm the contact &#8212; or to reject my request if they don&#8217;t like me. That&#8217;s a common need, people are familiar to it and &#8212; most important &#8212; they accept that bit of manual work, the demand to explicitly confirm or refuse whatever contact request comes in.</p>
<p>So, if that&#8217;s so simple, so common and people are used to do it that way, then why not just to add a second checkbox that says: &#8220;allow contact to port me&#8221;? In other words: If the contacter wants to port their social graph to just another social platform, <em>me</em> gives the permission to be ported there too, i.e. this one arc of the requester&#8217;s social graph. That would ease to reuse once established social graphs on every new social platform I join &#8212; without violating the other ends&#8217; (of my social arcs) privacy.</p>
<p>That checkbox would refer to the relationship between contacter and self only, not to personal data of self (i.e. the contactee).</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dagobart.wordpress.com/61/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dagobart.wordpress.com/61/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dagobart.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dagobart.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dagobart.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dagobart.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dagobart.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dagobart.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dagobart.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dagobart.wordpress.com/61/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dagobart.wordpress.com/61/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dagobart.wordpress.com/61/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dagobart.wordpress.com&blog=3031991&post=61&subd=dagobart&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://dagobart.wordpress.com/2008/05/06/how-to-get-the-social-graph-portable-without-hurting-peoples-privacy/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/schildkroet-128.jpg" medium="image">
			<media:title type="html">dagobart</media:title>
		</media:content>
	</item>
		<item>
		<title>Are patterns meta-algorithms?</title>
		<link>http://dagobart.wordpress.com/2008/04/27/are-patterns-meta-algorithms/</link>
		<comments>http://dagobart.wordpress.com/2008/04/27/are-patterns-meta-algorithms/#comments</comments>
		<pubDate>Sun, 27 Apr 2008 12:50:46 +0000</pubDate>
		<dc:creator>dagobart</dc:creator>
		
		<category><![CDATA[J Weiss]]></category>

		<category><![CDATA[Ruby on Rails]]></category>

		<category><![CDATA[algorithms]]></category>

		<category><![CDATA[patterns]]></category>

		<category><![CDATA[slides]]></category>

		<category><![CDATA[Java]]></category>

		<category><![CDATA[meta-algorithm]]></category>

		<category><![CDATA[O'Reilly]]></category>

		<guid isPermaLink="false">http://dagobart.wordpress.com/?p=59</guid>
		<description><![CDATA[I quit programming as a hobby in about 1996. That was when finally I noticed repetitions in my programming work &#8212; situations you ran into before, but for sure not ever since you learned this particular language. Today, you most likely would call them patterns. Patterns are quite popular today, but those days I was [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I quit programming as a hobby in about 1996. That was when finally I noticed repetitions in my programming work &#8212; situations you ran into before, but for sure not ever since you learned this particular language. Today, you most likely would call them <em>patterns</em>. Patterns are quite popular today, but those days I was not aware of neither the term nor the science behind. It just got me frustrated.</p>
<p>However, I just reordered the categories of my blog and noticed the long list of sub-categories to &#8220;core social framework functionality&#8221;: buddy/contact list, contact list management, social graph, user management, user account management, emergency login, lost-password recovery, user profile, basic user model, handle for a user, e-mail address, username. By looking at that list, Jonathan Weiss&#8217; <a href="http://blog.innerewut.de/files/presentations/scotlandonrails2008/rails_patterns_jonathan_weiss.pdf">presentation on patterns in Rails</a> came back to my memory.</p>
<p>Yesterday, I had another look into my Java patterns book. The O&#8217;Reilly people here put emphasis on the task <em>to memorize</em> the different patterns. That&#8217;s a bit in contradiction to developing algorithms. (Anyway, I wondered what might be the difference between a pattern and a simple algorithm.) When you develop an algorithm you look at the problem, then determine which steps to take, how to granularize the task &#8212; until you get to the point that you can express your demands immediately by the commands a programming language provides you with.</p>
<p>If you need to sort things and your language does not provide you with a sort routine you usually are aware that there are several alternatives you could apply &#8212; quick sort, bubble sort, or others. Is that a pattern yet? That you are aware of alternatives and the chance to select one. &#8212; At least, similarly to knowing about alternative algorithms to apply, in you might need to be aware of available patterns and select the one best suited for the case.</p>
<p>Patterns apparently get developed once and from that onwardly nothing but propagated/memorized. The task for the developer reduces to recognize whether or not the situation demands applying a pattern. Because of that background, I wonder whether it&#8217;d be correct to say patterns were meta-algorithms?</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dagobart.wordpress.com/59/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dagobart.wordpress.com/59/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dagobart.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dagobart.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dagobart.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dagobart.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dagobart.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dagobart.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dagobart.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dagobart.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dagobart.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dagobart.wordpress.com/59/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dagobart.wordpress.com&blog=3031991&post=59&subd=dagobart&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://dagobart.wordpress.com/2008/04/27/are-patterns-meta-algorithms/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/schildkroet-128.jpg" medium="image">
			<media:title type="html">dagobart</media:title>
		</media:content>
	</item>
		<item>
		<title>Crowdsourcing, Social Platforms, Business Models</title>
		<link>http://dagobart.wordpress.com/2008/04/26/crowdsourcing-social-platforms-business-models/</link>
		<comments>http://dagobart.wordpress.com/2008/04/26/crowdsourcing-social-platforms-business-models/#comments</comments>
		<pubDate>Sat, 26 Apr 2008 18:57:52 +0000</pubDate>
		<dc:creator>dagobart</dc:creator>
		
		<category><![CDATA[43 Things]]></category>

		<category><![CDATA[D Heinemeier-Hansson]]></category>

		<category><![CDATA[LastFM]]></category>

		<category><![CDATA[Ning]]></category>

		<category><![CDATA[Twitter]]></category>

		<category><![CDATA[Wikipedia]]></category>

		<category><![CDATA[Xing]]></category>

		<category><![CDATA[being utility]]></category>

		<category><![CDATA[community]]></category>

		<category><![CDATA[community building]]></category>

		<category><![CDATA[core social framework functionality]]></category>

		<category><![CDATA[crowdsourcing]]></category>

		<category><![CDATA[customer care service]]></category>

		<category><![CDATA[dedicated functionality]]></category>

		<category><![CDATA[developing a social network]]></category>

		<category><![CDATA[free culture projects]]></category>

		<category><![CDATA[free software projects]]></category>

		<category><![CDATA[gaining users]]></category>

		<category><![CDATA[gathering a resource]]></category>

		<category><![CDATA[providing sharp tools]]></category>

		<category><![CDATA[social network]]></category>

		<category><![CDATA[social platform]]></category>

		<category><![CDATA[social platforms business plans]]></category>

		<category><![CDATA[white-label social network]]></category>

		<category><![CDATA[Asterisk]]></category>

		<category><![CDATA[Asterisk@Home]]></category>

		<category><![CDATA[cell phones]]></category>

		<category><![CDATA[cliff hangers]]></category>

		<category><![CDATA[global society]]></category>

		<category><![CDATA[Mambo]]></category>

		<category><![CDATA[The Long Tail]]></category>

		<category><![CDATA[user base]]></category>

		<category><![CDATA[userbase]]></category>

		<category><![CDATA[win:loose]]></category>

		<category><![CDATA[win:win]]></category>

		<guid isPermaLink="false">http://dagobart.wordpress.com/?p=58</guid>
		<description><![CDATA[I&#8217;ve been a bit shy &#8212; maybe too shy &#8212; to go on with my series of posts of prerequisites needed to launch a social network because my previous posting ended with a cliff hanger on &#8220;now we finally approach social networks&#8221;. Point is, my original notes on different kinds of communities were not as [...]]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I&#8217;ve been a bit shy &#8212; maybe too shy &#8212; to go on with my series of posts of prerequisites needed to launch a social network because my previous posting ended with a cliff hanger on &#8220;now we finally approach social networks&#8221;. Point is, my original notes on different kinds of communities were not as extended as one might expect. On the other hand, recently, some net prominent propagated charging for web services was a good idea, and I&#8217;d like to add a word or two on crowdsourcing. &#8212; After a second look, I noticed you actually need to know about crowdsourcing before you can go into the matters of discerning different kinds of communities. But commenting on David Heinemeier-Hansson&#8217;s presentation I leave out for now.</p>
<h3>crowdsourcing</h3>
<p><a href="http://dagobart.wordpress.com/2008/04/12/barter-economy/">The previous post of this series</a>, on crowdsourcing I stated: &#8220;Using that by-product of your users effectively is nothing but crowdsourcing. It uses the crowds to get some task done. Such as tagging all the items known to your service.&#8221; Or to collect those items first place. Crowdsourcing simply is to use a crowd &#8212; the collective of all users of your service &#8212; to get some task done. Such as gathering a excessively mostly complete collection of all things in a particular field of interest &#8212; such as the things which are/were in Wikipedia &#8212; or to apply some rule on all such things gathered once; some rule that requires mind, decision-making or knoowledge &#8212; such as tagging of music tracks on <a href="http://last.fm/">Last.FM</a> or typewriting music track titles on <a href="http://en.wikipedia.org/wiki/CDDB">CDDB</a>/<a href="http://www.freedb.org/">FreeDB</a>.</p>
<p>Despite it might look like a win:loose situation at first sight, crowdsourcing in fact is a win:win situation: If the alternative is no chance for tagging at all, people love to get the chance to tag items &#8212; since that way they gain the valuable and real chance to re-find things they once decided to be useful for them. On the other hand, tagging performed by a crowd piles up, effectively creating <em>a resource</em> for the service. Which in turn can be re-used for extended services, such as determining similar music tracks (as Last.FM does and offers as an additional service). But also, such a resource can be traded. Which makes crowdsourcing a win for you &#8212; the service provider &#8212; too.</p>
<h3>social platforms</h3>
<p>But let&#8217;s take one step back. Previous to social networks, there are <em>social platforms</em>, such as Last.FM or Wikipedia. They do not even offer the <a href="http://dagobart.wordpress.com/2008/03/25/barebone-social-network-frameworks-whats-already-there-and-a-draft-on-several-levels-of-implementation-of-social-networks/">most basic level of social networks</a>, a contact list. Here I count Last.FM in, because its use mostly takes place off-site. </p>
<p>I see two core kinds of social platforms. Both of them have two things in common: They are after to tackle a problem and they apply crowdsourcing. As I am going to flipside that very sentence in a minute, let me make clear: By the problem that&#8217;s getting tackled by the users, I refer to a problem the users notice and want to get solved. Such as quitting to smoke (self-help forums) or loosing the need to enter the track titles whenever you rip a CD (FreeDB) or form a new software application (free software projects). And crowdsourcing does take place simply because lots of individual users contribute to get over that problem.</p>
<p>But this very note &#8212; the core commonalities of social platforms were tackling a problem and using a crowd to get over it &#8212; also can be seen from the opposite point of view, that one of a company that applies crowdsourcing to gather a resource: In their view, the problem might be to gather the resource, and crowdsourcing would be nothing but a tool for the company to get that task done. &#8212; Worthwhile to note, that there is a <a href="http://dagobart.wordpress.com/2008/04/24/why-the-community-of-xxx-failedfails/">series of open/free software projects struggling</a>, probably because of the dominance of such a company in the background (Asterisk, Asterisk front-end Asterisk@Home, Mambo). Anyways, that&#8217;s going to be off-topic, therefore let&#8217;s concentrate on social platforms again:</p>
<p>I think, you can discern two core kinds of social platforms &#8212; whereby some examples of both groups blur into the territory of social networks, as they feature something comparable to a contact list &#8212; the core of anything that <a href="http://dagobart.wordpress.com/2008/03/25/barebone-social-network-frameworks-whats-already-there-and-a-draft-on-several-levels-of-implementation-of-social-networks/">deserves to be called a social <em>network</em></a>:
<ol>
<li>The one kind has some dedicated functionality &#8212; such as Last.FM or <a href="http://twitter.com/">Twitter</a>, which integrates cell phones simply but [in that] excellently as a user front-end, or <a href="http://43things.com/">43 Things</a> which in its functionality rewires the features of a blog to serve best to their users, so these get their goals done most easy. </li>
<li>The other kind of social platform has only basic common functionality but are targeted to one general common direction, by rules. Examples for this<br />
can be found in usual free culture projects, such as Wikipedia or free software projects, and in  probably any network which builds upon white label (i.e. generic) social network platforms such as <a href="http://ning.com/">Ning</a> or <a href="http://www.mixxt.com/">Mixxt</a>: Those simply do not provide any special functionality despite contact list, about me, forum, event calendar, and a way to PR news (blog or newsletter). Often you (as a administrator-user) don&#8217;t even get news groups management. </li>
</ol>
<p>Also, I see a tight relation between the two kinds of social platforms to as well only two different core types of communities. But I don&#8217;t see whether if a platform is of type one or two necessarily determines the community that will gather there (if at all, depending on <a href="http://dagobart.wordpress.com/2008/04/07/usability-to-convince-people-of-your-service-to-get-out-word-of-mouth/">previously analyzed factors such as usability</a> or <a href="http://dagobart.wordpress.com/2008/04/06/gaining-users-lessons-learned-from-blogging/">how you (as a platform provider) treat your users</a>).</p>
<p>The one type of community I see in users whose participation in the &#8217;social&#8217; thing is only an effect, not an intend: The people work everyone for oneself, with the only intend to get benefit for everyone oneself. Contribution here is only a by-product. This can be seen on remote users of Last.FM: They send in the data of a track listened, and Last.FM can do anything with the data, but <em>what</em> they do about the data essentially is unimportant for the user &#8212; at least as long Last.FM guarantees for the users&#8217; privacy, especially against man hunts for &#8216;robbery of intellectual properly&#8217;.</p>
<p>So, this kind of community as a by-product already can take place when someone manages to smartly set up crowdsourcing. An other case where being community is a by-product may be seen in self-help forums where people essentially go to to get help for themselves, to chitchat or to make new contacs. All these of course are social activities, but they do not imply that a community constitutes. That&#8217;s why I mention them here, and why I discern those social activities from actively forming a community.</p>
<p>The other type of users I see in folks who go after a particular, determined problem, to tackle, solve and get over it. This kind of users you find probably in mostly all free culture projects, such as free software projects and in Wikipedias (plural, because Wikipedias get developed in different languages by different teams). Clearly, you see a tight match between this kind of community and the kind of social platform that offers only basic common functionality but is driven by rules predetermined by the platform/service provider.</p>
<p><a name="business-expectations"></a><br />
<h3>business expectations</h3>
<p>So, as a service provider you might tend to provide a social platform that provides basic common functionality, select an arbitrary problem and hope the users to come. However, in my opinion that approach goes wrong, simply because for people affected by the problem, the problem is <em>a real problem</em> &#8212; other than for you &#8212; and they of course mind which tools to use to effectively and in the end get over that hassle that limits their lives. Note, although you&#8217;re after to form a community, you still do interact with an individual. Probably with millions of them, but nevertheless with each of them individually &#8212; by platform and, important to realize, by customer care.</p>
<p>I see the point that there remains a discrepancy between the company&#8217;s intend with the platform and the [individual] user&#8217;s intend to use that particular platform: The goal of the company might be to gather as many users as possible (to become able to <a href="http://dagobart.wordpress.com/2008/04/05/dont-lock-in-compete-with-free/">take profit of The Long Tail</a> approach to business) and to keep these users as long as possible &#8212; most hopefully even <em>forever</em>. On the other hand, for a user to take part on a community might immediately originate from a hassle the user wants to get rid of &#8212; and therefore the user&#8217;s goal <em>is</em> to get rid of that hassle and once to be done with that. &#8212; After that point in time there should be no more reason for the user to stay with that particular community, so they might want to leave. &#8212; I presume, in current business plans, this issue may be not regarded, and companies might assume they were after just gathering a &#8216;big enough&#8217; share of global society to become their user base. I think, it&#8217;d be important for businesses to realize their platform, for the user, is not an end in itself but nothing but a vehicle &#8212; tool &#8212; to get over some issue. Therefore it&#8217;s part of their business model that they&#8217;re going to loose long-term users at some point in time; the only lesson for the companies too be learned is <em>that</em> this is the case, that this is part of their business model, even if they don&#8217;t do plan that.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dagobart.wordpress.com/58/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dagobart.wordpress.com/58/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dagobart.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dagobart.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dagobart.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dagobart.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dagobart.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dagobart.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dagobart.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dagobart.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dagobart.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dagobart.wordpress.com/58/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=dagobart.wordpress.com&blog=3031991&post=58&subd=dagobart&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://dagobart.wordpress.com/2008/04/26/crowdsourcing-social-platforms-business-models/feed/</wfw:commentRss>
	
		<media:content url="http://a.wordpress.com/avatar/schildkroet-128.jpg" medium="image">
			<media:title type="html">dagobart</media:title>
		</media:content>
	</item>
	</channel>
</rss>