<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Technovangelism</title>
	
	<link>http://technovangelism.com/blog</link>
	<description>Technova for short</description>
	<lastBuildDate>Thu, 25 Feb 2010 05:41:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/technovangelism" /><feedburner:info uri="technovangelism" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Final – Design Per Day</title>
		<link>http://feedproxy.google.com/~r/technovangelism/~3/yCcdrIvDoqI/</link>
		<comments>http://technovangelism.com/blog/2010/02/24/final-design-per-day/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 05:41:35 +0000</pubDate>
		<dc:creator>erik</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[design-per-day]]></category>
		<category><![CDATA[graphic-design]]></category>

		<guid isPermaLink="false">http://technovangelism.com/blog/?p=299</guid>
		<description><![CDATA[After nearly a year and several more revisions, I finally implemented a design I actually like (for now). I&#8217;m happy with pretty much everything. I like the colors, the general layout, and the font, while basic, is nice. I am not a &#8220;typeface guy,&#8221; so if you have a recommendation on what I should use, [...]]]></description>
			<content:encoded><![CDATA[<p>After <a href="http://technovangelism.com/blog/tag/design-per-day/">nearly a year</a> and several more revisions, I finally implemented a design I actually like (for now). I&#8217;m happy with pretty much everything. I like the colors, the general layout, and the font, while basic, is nice. <em>I am not a &#8220;typeface guy,&#8221; so if you have a recommendation on what I should use, I&#8217;ll listen.</em></p>

<p><a href="http://technovangelism.com/blog/wp-content/uploads/2010/02/final-design.png"><img src="http://technovangelism.com/blog/wp-content/uploads/2010/02/final-design.png" alt="" title="final-design" width="616" height="400" class="alignnone size-full wp-image-306" /></a></p>

<p>One piece I&#8217;m particularly happy with is the section under the &#8220;No Unread Threads&#8221; heading. It has always bothered me that when a user with no unread threads visits the site, or once a user is finished reading his threads, the site loses a lot of its immediate value. Without a list of things to do, the user typically leaves the site. He&#8217;ll be back soon, but why not try to keep him there a little longer. Giving just a few options in that blank state will hopefully spark a little more activity.</p>

<p>All the previous designs were made with unread threads displayed, so here is another shot with a few of them for a more direct comparison.</p>

<p><a href="http://technovangelism.com/blog/wp-content/uploads/2010/02/final-with-threads.png"><img src="http://technovangelism.com/blog/wp-content/uploads/2010/02/final-with-threads.png" alt="" title="final-with-threads" width="617" height="365" class="alignnone size-full wp-image-307" /></a></p>

<p>I still find red to be a difficult color to work with. Finding the right shades of red, tan, and gray that all blend well is a challenge. As I said earlier, this will do for now. There are more important matters to take care of before needlessly changing the theme again.</p>
<img src="http://feeds.feedburner.com/~r/technovangelism/~4/yCcdrIvDoqI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://technovangelism.com/blog/2010/02/24/final-design-per-day/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://technovangelism.com/blog/2010/02/24/final-design-per-day/</feedburner:origLink></item>
		<item>
		<title>Tortoise, Windows and svn2git</title>
		<link>http://feedproxy.google.com/~r/technovangelism/~3/Gex2r0RVMPs/</link>
		<comments>http://technovangelism.com/blog/2009/11/11/tortoise-windows-and-svn2git/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 23:30:19 +0000</pubDate>
		<dc:creator>erik</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://technovangelism.com/blog/?p=297</guid>
		<description><![CDATA[If you have been thinking about making the switch from Subversion to Git, now is the time! svn2git is a great tool to make your transition much easier. It will import an existing Subversion repository into Git while maintaining all of your change history. It will even create branches and tags in your Git repository [...]]]></description>
			<content:encoded><![CDATA[<p>If you have been thinking about making the switch from Subversion to Git, now is the time! <a href="http://github.com/jcoglan/svn2git">svn2git</a> is a great tool to make your transition much easier. It will import an existing Subversion repository into Git while maintaining all of your change history. It will even create branches and tags in your Git repository that match those from your Subversion repository. Check the <a href="http://github.com/jcoglan/svn2git/blob/master/README">readme</a> to get started.</p>

<p>You may want to start the conversion on a weekend as it does take some time to complete. It took overnight to complete the conversion of a 300mb Subversion repository with roughly 6000 commits and 30 branches.</p>

<p>If you are running Windows, I&#8217;m guessing you are using TortoiseSVN, and you will probably want to use <a href="http://code.google.com/p/tortoisegit/">TortoiseGit</a>. It is very similar to TortoiseSVN so you should not have any trouble adjusting assuming you understand the basic workflows of Git. One important thing to note is you will want the AutoCRLF setting set to true in your Git config. TortoiseGit can help you set this setting in the Settings -> Git -> Config dialog. You&#8217;ll see a checkbox labeled <em>AutoCrlf</em> and odds are it is already checked. Unfortunately, this checkbox is not guaranteed to be an accurate reflection of the real setting, so open up <code>projectroot/.git/config</code> in a text editor and add <code>autocrlf = true</code> underneath the <code>[core]</code> section if it is not there.</p>

<p>One last tip on the conversion, follow <a href="http://help.github.com/dealing-with-lineendings/">these instructions</a> from Github if you experience problems with files marked as modified when they do not appear to be.</p>

<blockquote>
The problem is that your core.autocrlf option is likely not enabled. This setting tells git to convert the newlines to the system’s standard when checking out files, and to LF newlines when committing in.

Once this is set, you need to reset your repos. The best way to do this is wipe out your working tree (all the files except the .git directory) and then restore them.
</blockquote>

<p>Good luck with your transition.</p>
<img src="http://feeds.feedburner.com/~r/technovangelism/~4/Gex2r0RVMPs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://technovangelism.com/blog/2009/11/11/tortoise-windows-and-svn2git/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://technovangelism.com/blog/2009/11/11/tortoise-windows-and-svn2git/</feedburner:origLink></item>
		<item>
		<title>Less than Null</title>
		<link>http://feedproxy.google.com/~r/technovangelism/~3/xIQdtOwruk0/</link>
		<comments>http://technovangelism.com/blog/2009/11/05/less-than-null/#comments</comments>
		<pubDate>Fri, 06 Nov 2009 00:30:02 +0000</pubDate>
		<dc:creator>erik</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://technovangelism.com/blog/?p=284</guid>
		<description><![CDATA[Here&#8217;s a fun javascript tidbit that can bite you if you aren&#8217;t careful:

&#62;&#62;&#62; null &#62;= 0
=&#62; true
&#62;&#62;&#62; null &#60;= 0
=&#62; true
&#62;&#62;&#62; null &#62; 0
=&#62; false
&#62;&#62;&#62; null &#60; 0
=&#62; false
&#62;&#62;&#62; null == 0
=&#62; false


I can&#8217;t think of any way to make this more inconsistent. In C# the expression will always evaluate to false (and you get [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a fun javascript tidbit that can bite you if you aren&#8217;t careful:</p>

<pre><code>&gt;&gt;&gt; null &gt;= 0
=&gt; true
&gt;&gt;&gt; null &lt;= 0
=&gt; true
&gt;&gt;&gt; null &gt; 0
=&gt; false
&gt;&gt;&gt; null &lt; 0
=&gt; false
&gt;&gt;&gt; null == 0
=&gt; false
</code></pre>

<p>I can&#8217;t think of any way to make this more inconsistent. In C# the expression will always evaluate to false <em>(and you get a compiler warning, but let&#8217;s not get into that)</em>. In ruby, a <code>NoMethodError</code> is raised because the <code>&lt;</code> operator is treated as a method on the <code>nil</code> object.</p>

<p>Unfortunately, due to the weakly-typed nature of javascript you are more likely to run into this problem than you might think. Because</p>

<pre><code>&gt;&gt;&gt; "0" == 0
=&gt; true
</code></pre>

<p>there is a good chance you will find yourself comparing strings to integers, and eventually, <code>null</code> to integers.</p>

<p>No idea where the designer of javascript came up with this functionality, but now that I found it, I&#8217;ll be watching out for any potential null comparisons in the future.</p>
<img src="http://feeds.feedburner.com/~r/technovangelism/~4/xIQdtOwruk0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://technovangelism.com/blog/2009/11/05/less-than-null/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://technovangelism.com/blog/2009/11/05/less-than-null/</feedburner:origLink></item>
		<item>
		<title>jQuery Weighs Less</title>
		<link>http://feedproxy.google.com/~r/technovangelism/~3/7WFoQdfOV20/</link>
		<comments>http://technovangelism.com/blog/2009/10/14/jquery-weighs-less/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 03:33:14 +0000</pubDate>
		<dc:creator>erik</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[observation]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://technovangelism.com/blog/?p=270</guid>
		<description><![CDATA[Well, that may not be 100% accurate. Unobtrusive JavaScript is likely to weigh less in a Rails application, but that doesn&#8217;t get fan boys riled up enough.

In a standard Rails application, Prototype is included by default as the JavaScript library and several of the html helper methods used in the views will generate Prototype code [...]]]></description>
			<content:encoded><![CDATA[<p>Well, that may not be 100% accurate. Unobtrusive JavaScript is likely to weigh less in a Rails application, but that doesn&#8217;t get fan boys riled up enough.</p>

<p>In a standard Rails application, Prototype is included by default as the JavaScript library and several of the html helper methods used in the views will generate Prototype code for you. A great example of this is <code>link_to_remote</code> which generates a link that will make an AJAX request to the desired url.</p>

<p>This Rails view snippet was found in my forum app:</p>

<pre><code>&lt;%= link_to_remote "delete", :update =&gt; nil,
  :url =&gt; post_path(post), :method =&gt; :delete,
  :confirm =&gt; "Are you sure you want to delete this post?" %&gt;
</code></pre>

<p>And it generates this html mixed with some very obtrusive JavaScript:</p>

<pre><code>&lt;a onclick="if (confirm('Are you sure you want to delete this post?')) {
    new Ajax.Request('/posts/1', {asynchronous:true, evalScripts:true,
      method:'delete', parameters:'authenticity_token=' +
      encodeURIComponent('abcde')
    });
  }; return false;" href="#"&gt;delete&lt;/a&gt;
</code></pre>

<p>There is nothing really wrong with this code. It works fine and did the job while it was in production. The problem is this one link is found in every single post on a thread page. This means the giant link can be repeated on the page hundreds of times.</p>

<p>After I made the switch to unobtrusive jQuery, I wanted to see exactly what kind of a difference it made in page sizes. I looked at three different thread pages, one with 1 post, one with 94 posts, and one with 306. Here are the page sizes (in bytes) and they show a pretty remarkable difference.</p>

<table cellspacing="0">
  <tr>
    <th># of Posts</th>
    <th>jQuery Page Size</th>
    <th>Prototype Page Size</th>
    <th>% Difference</th>
  </tr>
  <tr>
    <td>1</td>
    <td>5,450</td>
    <td>6,568</td>
    <td class="end">20.5</td>
  </tr>
  <tr>
    <td>94</td>
    <td>103,671</td>
    <td>129,641</td>
    <td class="end">25.1</td>
  </tr>
  <tr>
    <td>306</td>
    <td>270,736</td>
    <td>350,170</td>
    <td class="end">29.3</td>
  </tr>
</table>

<p>The difference ended up being quite a bit bigger than I was expecting and really helps sell me on jQuery. Unobtrusive Prototype could no doubt have dropped the page size just as much, but I&#8217;ll be sticking with jQuery from now on.</p>
<img src="http://feeds.feedburner.com/~r/technovangelism/~4/7WFoQdfOV20" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://technovangelism.com/blog/2009/10/14/jquery-weighs-less/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://technovangelism.com/blog/2009/10/14/jquery-weighs-less/</feedburner:origLink></item>
		<item>
		<title>An Apple Tablet Won't Happen</title>
		<link>http://feedproxy.google.com/~r/technovangelism/~3/UddsY3r6gAc/</link>
		<comments>http://technovangelism.com/blog/2009/08/23/an-apple-tablet-wont-happen/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 03:35:42 +0000</pubDate>
		<dc:creator>erik</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[observation]]></category>

		<guid isPermaLink="false">http://technovangelism.com/blog/?p=265</guid>
		<description><![CDATA[Why won&#8217;t Apple make a tablet that is just like a bigger iPod Touch? Ask Steve Ballmer. The experience for developing for the iPhone is so awesome compared to other phones because there is only one screen size and resolution. Removing that part of the equation will place the iPhone on par with its Android [...]]]></description>
			<content:encoded><![CDATA[<p>Why won&#8217;t Apple make a tablet that is just like a bigger iPod Touch? <a href="http://www.youtube.com/watch?v=8To-6VIJZRE">Ask Steve Ballmer</a>. The experience for developing for the iPhone is so awesome compared to other phones because there is only one screen size and resolution. Removing that part of the equation will place the iPhone on par with its Android and Blackberry competitors. One screen size across every device isn&#8217;t the only competitive advantage the iPhone and iPod Touch have, but is it worth it to find out exactly how important it is?</p>

<p>At JavaOne this year, a new design tool (similar to Expression Blend) for JavaFX was demoed and the developer showed off how easily you could change the view to match several different cell phone or desktop resolutions. I could <em>feel</em> the groaning as other developers in the room began to imagine themselves trying to develop like this. It looked like one of the most painful experiences possible (yes, even worse than making your site look <em>perfect</em> in IE6). I&#8217;m sure Apple could come up with some fantastic design tool that would be the best multi-resolution design tool in the market. It might even make life easier, or should I say &#8220;less difficult,&#8221; but it won&#8217;t fix the underlying problem.</p>

<p>Don&#8217;t expect to see the rumored tablet unless it runs normal OS X. Apple has made enough poor decisions already (with the App Store at least), that it doesn&#8217;t need to make any more and ruin a great development experience.</p>
<img src="http://feeds.feedburner.com/~r/technovangelism/~4/UddsY3r6gAc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://technovangelism.com/blog/2009/08/23/an-apple-tablet-wont-happen/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://technovangelism.com/blog/2009/08/23/an-apple-tablet-wont-happen/</feedburner:origLink></item>
		<item>
		<title>Implementing Who's Online with Rails and Memcached</title>
		<link>http://feedproxy.google.com/~r/technovangelism/~3/G3zXgzWOQLs/</link>
		<comments>http://technovangelism.com/blog/2009/08/16/implementing-whos-online-with-rails-and-memcached/#comments</comments>
		<pubDate>Sun, 16 Aug 2009 19:45:49 +0000</pubDate>
		<dc:creator>erik</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://technovangelism.com/blog/?p=262</guid>
		<description><![CDATA[I have wanted to add a &#8220;Who&#8217;s Online&#8221; feature to my forum site for quite some time. Users are more likely to stay and post if they know someone else is there to read what they write. In the first implementation of the site, back in the Rails 1.2 days, sessions were most easily stored [...]]]></description>
			<content:encoded><![CDATA[<p>I have wanted to add a &#8220;Who&#8217;s Online&#8221; feature to my forum site for quite some time. Users are more likely to stay and post if they know someone else is there to read what they write. In the first implementation of the site, back in the Rails 1.2 days, sessions were most easily stored in the database with the <code>ActiveRecord SessionStore</code>. This made fetching who is currently using the site easy as all of the necessary information was stored in the database.</p>

<p>Once Rails 2.0 came out, the default session store was using browser cookies. Now it was not so trivial to determine who is on the site. One option was to add a new column to the <code>User</code> model and update it every time the user accessed a page. While this would work, it would mean an extra SQL read and update for every page accessed. The server would have no trouble handling the extra load, but I decided to wait for a better option.</p>

<p>Having not seen a better option in the latest releases of Rails, I implemented my own solution and got my first experience with <a href="http://www.danga.com/memcached/">memcached</a> along the way.</p>

<p>First things first, get memcached installed and running in verbose mode for development:</p>

<pre><code>sudo port install memcached
memcached -vv
</code></pre>

<p>Next, set the Rails development environment (in <code>development.rb</code>) to use caching and memcached as the cache store:</p>

<pre><code>config.action_controller.perform_caching = true
config.cache_store = :mem_cache_store
</code></pre>

<p>The real work is done by a method in <code>application_controller.rb</code></p>

<pre><code>before_filter :set_online_users

def set_online_users
  return unless logged_in?

  current_user.last_seen = Time.now
  users = Rails.cache.fetch("online_users") { [current_user] }
  @online_users = users.collect do |user|
    user if user.last_seen &gt; 5.minutes.ago
  end.compact
  unless @online_users.include?(current_user)
    @online_users &lt;&lt; current_user
  end
  Rails.cache.write("online_users", @online_users)
end
</code></pre>

<p>The final solution is a fast <em>(not verified by benchmarking)</em> solution with zero extra database access. Some readers might notice this is not a thread-safe solution. All lines between the fetch and the write call should be wrapped with a mutex of some sort, but I will leave that for another time.</p>

<p>If you the looking for extra reading, especially about memcached, <a href="http://railslab.newrelic.com/2009/02/19/episode-8-memcached">Railslab: Epsiode 8</a> is an excellent resource for getting started with memcached and Rails.</p>
<img src="http://feeds.feedburner.com/~r/technovangelism/~4/G3zXgzWOQLs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://technovangelism.com/blog/2009/08/16/implementing-whos-online-with-rails-and-memcached/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://technovangelism.com/blog/2009/08/16/implementing-whos-online-with-rails-and-memcached/</feedburner:origLink></item>
		<item>
		<title>HappierHour Mobile Sneak Preview</title>
		<link>http://feedproxy.google.com/~r/technovangelism/~3/2ZFxc5hwtGE/</link>
		<comments>http://technovangelism.com/blog/2009/08/04/happierhour-mobile-sneak-preview/#comments</comments>
		<pubDate>Wed, 05 Aug 2009 02:37:37 +0000</pubDate>
		<dc:creator>erik</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[happier hour]]></category>

		<guid isPermaLink="false">http://technovangelism.com/blog/?p=251</guid>
		<description><![CDATA[The full web interface for HappierHour has been improving from month to month, but with the summer came significantly more &#8220;usability testing&#8221; from mobile phones. From the start, we tested on phones to ensure the interface would be mostly usable, but it is time to make a first-class mobile interface.

 

 

Look for a release [...]]]></description>
			<content:encoded><![CDATA[<p>The full web interface for <a href="http://apps.facebook.com/happierhour">HappierHour</a> has been improving from month to month, but with the summer came significantly more &#8220;usability testing&#8221; from mobile phones. From the start, we tested on phones to ensure the interface would be mostly usable, but it is time to make a first-class mobile interface.</p>

<p><img src="http://technovangelism.com/blog/wp-content/uploads/2009/08/IMG_0011-200x300.PNG" alt="HH Home" title="HH Home" width="200" height="300" class="alignnone size-full wp-image-249" style="margin: 0 35px; border: 5px solid #666;" /> <img src="http://technovangelism.com/blog/wp-content/uploads/2009/08/IMG_0010-200x300.PNG" alt="Bars list" title="Bars list" width="200" height="300" class="alignnone size-full wp-image-248" style="margin: 0 35px; border: 5px solid #666;" /></p>

<p><img src="http://technovangelism.com/blog/wp-content/uploads/2009/08/IMG_0012-200x300.PNG" alt="Tonight&#039;s Specials" title="Tonight&#039;s Specials" width="200" height="300" class="alignnone size-medium wp-image-250" style="margin: 0 35px; border: 5px solid #666;" /> <img src="http://technovangelism.com/blog/wp-content/uploads/2009/08/IMG_0009-200x300.PNG" alt="New Special" title="New Special" width="200" height="300" class="alignnone size-full wp-image-247" style="margin: 0 35px; border: 5px solid #666;" /></p>

<p>Look for a release in the coming weeks that will include the new interface. If anything looks off or you want to request a mobile-specific feature, leave a comment.</p>
<img src="http://feeds.feedburner.com/~r/technovangelism/~4/2ZFxc5hwtGE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://technovangelism.com/blog/2009/08/04/happierhour-mobile-sneak-preview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://technovangelism.com/blog/2009/08/04/happierhour-mobile-sneak-preview/</feedburner:origLink></item>
		<item>
		<title>No Updates, Thank You</title>
		<link>http://feedproxy.google.com/~r/technovangelism/~3/USNQSsad9z4/</link>
		<comments>http://technovangelism.com/blog/2009/07/27/no-updates-thank-you/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 23:13:16 +0000</pubDate>
		<dc:creator>erik</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[observation]]></category>
		<category><![CDATA[user experience]]></category>

		<guid isPermaLink="false">http://technovangelism.com/blog/?p=242</guid>
		<description><![CDATA[Updates are an important part of the software industry, but for some reason, they are extremely feared. This guy who is switching away from Lotus Notes lists his reasons for leaving:


  &#8230;
  3. No more waiting for the AdminP guy/gal to do his/her work.
  4. Way too many fixes on Lotus Fix [...]]]></description>
			<content:encoded><![CDATA[<p>Updates are an important part of the software industry, but for some reason, they are extremely feared. <a href="http://www.cloudsherpas.com/2009/07/22/top-10-reasons-i-left-lotus-notes-for-google-apps/">This guy</a> who is switching away from Lotus Notes lists his reasons for leaving:</p>

<blockquote>
  <p>&#8230;<br />
  3. No more waiting for the AdminP guy/gal to do his/her work.<br />
  4. <strong>Way too many fixes on Lotus Fix List databases.</strong><br />
  5. Killnotes.exe should be more of an attitude than a program.<br />
  &#8230;<br /></p>
</blockquote>

<p>I can&#8217;t understand why &#8220;way too many fixes&#8221; would be a problem. Certainly, way too many bugs, or way too much time to install fixes could be an issue, but those likely aren&#8217;t the problem because they weren&#8217;t mentioned. Far too many people have an irrational fear of software updates. When it comes to operating systems, updates mean the vendor did a poor job writing the software and is now finally getting around to fixing bugs that you never experienced anyway. In the web world, updates are agile and mean new features are being released. Why does such a dichotomy exist? Perhaps it stems from the interaction with the actual update process. If something is obtrusive and sucks, people hate it (and they should), but if something is so seamless and transparent that you might not even realize it&#8217;s happening, then what is there to hate?</p>

<p>Joel and Jeff discussed updates in their latest podcast and Jeff <a href="http://blog.stackoverflow.com/2009/07/podcast-62/">recommends the Firefox model</a> where updates are as close to transparent as possible (for a desktop application). This is a great strategy and makes a lot of users happy, but unfortunately, it doesn&#8217;t always work for all companies, especially when they are trying to update someone else&#8217;s software. Read the first page of search of &#8220;<a href="http://www.google.com/#q=microsoft+firefox+silent+update">microsoft firefox silent update</a>&#8221; and you&#8217;ll be blasted with words like &#8220;sneak, sabotage, infiltrate, and invade&#8221; because a plugin was installed silently.</p>

<p>The best update model is the no-control model. Don&#8217;t give users the ability to see that an update is happening, let alone stop it from happening. This is basically the model of the web. When website owners decide it&#8217;s time for you to upgrade, you are getting that upgrade. But if you are using this model, you must be very confident that an update is going to work every where it is used. Having never written a piece of software that is used by millions of people, I can only assume this is a monumental task, but with some practice, it is no doubt achievable.</p>

<p>You don&#8217;t necessarily have to have a web application to get this model either, although it certainly helps. When every user is always running the latest version and doesn&#8217;t have the option to go back to previous versions, you save so much effort on support and maintenance. The benefits of supporting only one version of software far outweigh the risks taken to do so.</p>

<p>Maybe hating software updates isn&#8217;t such a bad thing after all. You have to know an update is happening to hate it.</p>
<img src="http://feeds.feedburner.com/~r/technovangelism/~4/USNQSsad9z4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://technovangelism.com/blog/2009/07/27/no-updates-thank-you/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://technovangelism.com/blog/2009/07/27/no-updates-thank-you/</feedburner:origLink></item>
		<item>
		<title>Press F5 to Refresh</title>
		<link>http://feedproxy.google.com/~r/technovangelism/~3/41ZoxKZtVU4/</link>
		<comments>http://technovangelism.com/blog/2009/07/15/press-f5-to-refresh/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 01:26:47 +0000</pubDate>
		<dc:creator>erik</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[meta]]></category>
		<category><![CDATA[themes]]></category>

		<guid isPermaLink="false">http://technovangelism.com/blog/?p=229</guid>
		<description><![CDATA[Not trying to kill anyone, but here is the refresh my blog so badly needed. The old theme made it far too difficult to find the RSS feed link. I typically use the special Firefox or Safari link to grab the RSS url, but finally realized Chrome does not do this, so a link that [...]]]></description>
			<content:encoded><![CDATA[<p>Not trying to <a href="http://www.codinghorror.com/blog/archives/001282.html">kill anyone</a>, but here is the refresh my blog so badly needed. The old theme made it far too difficult to find the RSS feed link. I typically use the special Firefox or Safari link to grab the RSS url, but finally realized Chrome does not do this, so a link that is a little more in your face will fix that.</p>

<p><img src="http://erik.prestigix.com/wordpress/wp-content/uploads/2009/07/Picture-2.png" alt="RSS Link" title="RSS Link" width="179" height="91" class="alignnone size-full wp-image-230" /> <img src="http://erik.prestigix.com/wordpress/wp-content/uploads/2009/07/Picture-3.png" alt="Chrome RSS" title="Chrome RSS" width="310" height="90" class="alignnone size-full wp-image-237" /></p>

<p>I did not do <a href="http://technovangelism.com/blog/tag/design-per-day/">anything fun</a> to design, but have been planning this for quite some time. I drew a lot of inspiration from the <a href="http://wordpress.org/extend/themes/lightword">lightword theme</a>. Feel free to comment and tell me if it does not look right in Windows or IE.</p>
<img src="http://feeds.feedburner.com/~r/technovangelism/~4/41ZoxKZtVU4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://technovangelism.com/blog/2009/07/15/press-f5-to-refresh/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://technovangelism.com/blog/2009/07/15/press-f5-to-refresh/</feedburner:origLink></item>
		<item>
		<title>A Comet-Enabled Lift Application</title>
		<link>http://feedproxy.google.com/~r/technovangelism/~3/hZxtfYxEbIY/</link>
		<comments>http://technovangelism.com/blog/2009/06/14/a-comet-enabled-lift-application/#comments</comments>
		<pubDate>Sun, 14 Jun 2009 07:19:18 +0000</pubDate>
		<dc:creator>erik</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[lift]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://technovangelism.com/blog/?p=221</guid>
		<description><![CDATA[At JavaOne, I attended a session given by David Pollak the creator of the Lift Web Framework. In his hour session David built, from scratch, a functional, comet-based chat application. Although short, and relatively simple, David&#8217;s talk was compelling enough for me to at least investigate Lift.

I purchased The Definitive Guide to Lift while at [...]]]></description>
			<content:encoded><![CDATA[<p>At JavaOne, I attended a session given by <a href="http://blog.lostlake.org/">David Pollak</a> the creator of the <a href="http://liftweb.net/">Lift Web Framework</a>. In his hour session David built, from scratch, a functional, comet-based chat application. Although short, and relatively simple, David&#8217;s talk was compelling enough for me to at least investigate Lift.</p>

<p>I purchased <a href="http://www.apress.com/book/view/1430224215">The Definitive Guide to Lift</a> while at the conference and was able to read <em>(note I didn&#8217;t say understand)</em> through most of it on the plane ride home. One chapter deals specifically with adding AJAX and <a href="http://en.wikipedia.org/wiki/Comet_%28programming%29">Comet</a> to your application enabling push support. It covers almost everything needed to complete the Comet app but it is missing a few important lines, most notably the call to <code>start</code> in <a href="http://github.com/erikperson/Lift-Comet-Example/blob/master/src/main/scala/examples/liftweb/comet/ClockMaster.scala#LC22">ClockMaster.scala</a>.</p>

<p>I posted a fully working copy of the code on <a href="http://github.com/erikperson/Lift-Comet-Example/tree/master">Github</a> for anyone trying to use the code from the book. Hopefully it will help anyone else who got stuck in the same place I did.</p>
<img src="http://feeds.feedburner.com/~r/technovangelism/~4/hZxtfYxEbIY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://technovangelism.com/blog/2009/06/14/a-comet-enabled-lift-application/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://technovangelism.com/blog/2009/06/14/a-comet-enabled-lift-application/</feedburner:origLink></item>
	</channel>
</rss><!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
