<?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:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Victus Spiritus &#187; software</title>
	<atom:link href="http://www.victusspiritus.com/tag/software/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.victusspiritus.com</link>
	<description>a blog by Mark Essel on web technology, startups and design philosophy</description>
	<lastBuildDate>Mon, 30 Jan 2012 19:33:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/><cloud domain='www.victusspiritus.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
		<item>
		<title>Fat Guy in a little coat, Ruby on Windows</title>
		<link>http://www.victusspiritus.com/2010/06/29/fat-guy-in-a-little-coat-ruby-on-windows/</link>
		<comments>http://www.victusspiritus.com/2010/06/29/fat-guy-in-a-little-coat-ruby-on-windows/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 12:24:57 +0000</pubDate>
		<dc:creator>Mark Essel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.victusspiritus.com/?p=4337</guid>
		<description><![CDATA[<p style="text-align: center;"><em>There&#8217;s just too much awesome in Ruby for a clean windows install and development environment.<br />
</em></p>
<p><span id="more-4337"></span></p>
<p>Just yesterday I started laying the pavement for using Ruby at work. I didn&#8217;t want to cough up a few hundred for a dev license &#8230;</p>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/oGWbt3DSje0&amp;hl=en_US&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/v/oGWbt3DSje0&amp;hl=en_US&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object><em>There&#8217;s just too much awesome in Ruby for a clean windows install and development environment.<br />
</em></p>
<p><span id="more-4337"></span></p>
<p>Just yesterday I started laying the pavement for using Ruby at work. I didn&#8217;t want to cough up a few hundred for a dev license of <a href="http://www.sapphiresteel.com/Products/Ruby-In-Steel/Ruby-In-Steel-Developer-Overview">Ruby In Steel</a>, a slick Visual Studio plugin.  My first instinct was to dual boot a flavor of linux. Ubuntu&#8217;s not cleared for work, but Centos (&amp; Redhat) are. The Centos install will have to wait until I torrent the DVD at home later this week (internet at work is low bandwidth). Alternatively, I can go with VirtualBox and emulate my way to happiness.</p>
<p>I remember first setting up Ruby at home on my then Vista system and groaning over failed native gem builds which finally prompted me to jump to Ubuntu (<a href="http://www.victusspiritus.com/2010/01/31/cutting-ties-with-my-old-friend-microsoft/">among many other issues</a>). Going through the usual hoops, JDK, Netbeans for an IDE, Ruby one click installer everything went smoothly. Then I hit a road block:</p>
<p style="padding-left: 30px;">gem install json</p>
<p>ERROR:  http://gems.rubyforge.org/ does not appear to be a repository<br />
ERROR:  could not find gem json locally or in a repository</p>
<p>It couldn&#8217;t find the json gem (or any others).</p>
<p>Turns out I&#8217;m behind a universal proxy, thanks to Google search and <a href="http://stackoverflow.com/questions/2238340/how-can-i-get-past-http-gems-rubyforge-org-does-not-appear-to-be-a-repository/2238383#2238383">stack overflow</a> for clearing up my issue.</p>
<div>
<blockquote><p>Your browser might be using system-wide proxy  settings or some sort of automatic configuration. The gem command  probably doesn&#8217;t. I&#8217;m behind an university proxy and I can&#8217;t  install/update any gems normally, but can access everything with my  browser. To install gems, I normally create a tunnel to my server so I  can bypass the proxy server.</p>
<p>This might help you to configure the proxy settings for the gem  command: <a href="http://stackoverflow.com/questions/4418/how-do-i-update-ruby-gems-from-behind-a-proxy-isa-ntlm">http://stackoverflow.com/questions/4418/how-do-i-update-ruby-gems-from-behind-a-proxy-isa-ntlm</a></p></blockquote>
</div>
<p>Here&#8217;s the fix in a comment under that answer:<br />
gem install &#8211;http-proxy http://proxyserveraddress:proxyport _name_of_gem_</p>
<h2>Native Gems</h2>
<p>Now what I&#8217;m really concerned about is building native gems on windows and debugging what goes wrong. Most native C gems leverage gcc on Linux (<a href="http://packages.debian.org/sid/build-essential">and lots of other stuff)</a>. There&#8217;s a mingw port of gcc for windows, and there&#8217;s also cygwin, but I&#8217;m leery of trusting either of these alternatives to work flawlessly. Luckily Scott Anderson posted a useful trick for debugging native extensions at <a href="http://geeksharp.com/2010/01/18/windows-ruby-native-gems-1-9-1/">Geeksharp.com</a> (thanks Scott). You gotta love the ability of hackers to figure something out, and share it with the world rapidly.</p>
<p>I&#8217;ll update my progress and experiences with Ruby on Windows over the next couple of weeks.</p>
<div style="float:right;margin:0px 0px 0px 0px;"><a title="Post on Google Buzz" class="google-buzz-button" href="http://www.google.com/buzz/post" data-button-style="small-count" data-url="http://www.victusspiritus.com/2010/06/29/fat-guy-in-a-little-coat-ruby-on-windows/"></a><script type="text/javascript" src="http://www.google.com/buzz/api/button.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.victusspiritus.com/2010/06/29/fat-guy-in-a-little-coat-ruby-on-windows/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Ideal Coding: Easy to Pickup Yet Abundant in Function</title>
		<link>http://www.victusspiritus.com/2010/04/03/ideal-coding-easy-to-pickup-yet-abundant-in-function/</link>
		<comments>http://www.victusspiritus.com/2010/04/03/ideal-coding-easy-to-pickup-yet-abundant-in-function/#comments</comments>
		<pubDate>Sat, 03 Apr 2010 12:50:05 +0000</pubDate>
		<dc:creator>Mark Essel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[collaboration]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[web/tech]]></category>

		<guid isPermaLink="false">http://www.victusspiritus.com/?p=3438</guid>
		<description><![CDATA[<h2><a href="http://www.stuckincustoms.com/2010/03/26/tokyo-from-a-window/"></a></h2>
<p><span id="more-3438"></span></p>
<h2>Who likes waiting for more complex programs to run?</h2>
<p>In doing some research on fast dynamic programming languages, a couple of great finds caught my attention. I&#8217;m seeking a language that feels like <a class="zem_slink" title="Ruby (programming language)" rel="homepage" href="http://www.ruby-lang.org/">Ruby</a> but can run natively faster than using &#8230;</p>]]></description>
			<content:encoded><![CDATA[<h2><a href="http://www.stuckincustoms.com/2010/03/26/tokyo-from-a-window/"><img class="aligncenter size-full wp-image-3445" title="StuckInCustomsTokyo" src="http://www.victusspiritus.com/wp-content/uploads/2010/04/StuckInCustomsTokyo.jpg" alt="" width="600" height="388" /></a></h2>
<p><span id="more-3438"></span></p>
<h2>Who likes waiting for more complex programs to run?</h2>
<p>In doing some research on fast dynamic programming languages, a couple of great finds caught my attention. I&#8217;m seeking a language that feels like <a class="zem_slink" title="Ruby (programming language)" rel="homepage" href="http://www.ruby-lang.org/">Ruby</a> but can run natively faster than using the MRI for the types of problems I like to work on (some numerically intensive). Alternatively, I don&#8217;t want to waste time with <a class="zem_slink" title="Program optimization" rel="wikipedia" href="http://en.wikipedia.org/wiki/Program_optimization">premature optimization</a>. I am looking for a development language that is easy for me to create in, build on, and fast to execute, and finally has the easy to read syntactical feel of Ruby (I often reread my own code to figure it out months/years later). I&#8217;ve looked at Scala before, but have found much more enjoyment in Ruby coding. My fear is that a faster execution environment will detract from the qualities that endear me to dynamic languages (I come from c++ my day job&#8217;s default, so all of this is gravy to me). JRuby has shown some promise as well as the underlying tools (Duby) that are used to make interpreting Ruby on the JVM a more enjoyable process.</p>
<h2>Q&amp;A on Stack Overflow</h2>
<p>Fortune smiled on me early this morning. I came across a couple of <a class="zem_slink" title="Stack Overflow" rel="homepage" href="http://stackoverflow.com/">Stack Overflow</a> answers which I appreciated on several levels. Over the past week I&#8217;ve grown accustomed to waking at 4 and searching for topics that have been bothering me. If the meritocracy of dynamic programming (features over class hierarchies) and malleable language structures call to your creative interests, you may need:</p>
<p>a) psychological help <img src='http://www.victusspiritus.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  or</p>
<p>b) a damn good dynamic programming language</p>
<p>The first question &#8220;Are dynamic languages slower than static languages&#8221;. <a href="http://stackoverflow.com/users/2988/jorg-w-mittag">Jorg W Mittag&#8217;s</a> well crafted <a href="http://stackoverflow.com/questions/2198684/are-dynamic-languages-slower-than-static-languages/2200486#2200486">response</a> (here&#8217;s an excerpt):</p>
<blockquote><p>In general, running well-designed code on well-designed high-performance execution engines will yield about the same performance, independent of whether the language is static or dynamic, procedural, object-oriented or functional, imperative or declarative, lazy or strict, pure or impure.</p>
<p>In fact, I would propose that the performance of a system is solely dependent on the amount of money that was spent making it fast, and completely independent of any particular typing discipline, programming paradigm or language.</p></blockquote>
<p>The second question &#8220;What’s the difference between Duby and Juby and why would I need either of them?&#8221; has several parts:</p>
<ul>
<li>&#8220;What&#8217;s invokedynamic and why does Duby &#8220;need a playmate&#8221;?&#8221;</li>
<li>&#8220;Could someone elaborate a little bit more on what this distinction is about?&#8221;</li>
<li>Why do we need (need!) another Ruby-related language? Or, rather, two more Ruby-related languages?</li>
</ul>
<p style="padding-left: 30px;">and another great <a href="http://stackoverflow.com/questions/1337137/whats-the-difference-between-duby-and-juby-and-why-would-i-need-either-of-them/1351895#1351895">answer</a> from Jorg (2 snippets):</p>
<p style="padding-left: 30px;"><em>2. Could someone elaborate a little bit more on what this distinction is about?</em></p>
<blockquote><p><a rel="nofollow" href="http://Duby.Kenai.Com/">Duby</a> is statically typed, <a rel="nofollow" href="https://GitHub.Com/Headius/Surinx/">Surinx</a> (which is the final name for what was for a short amount of time called <a rel="nofollow" href="https://GitHub.Com/Headius/Surinx/">Juby</a>) is dynamically typed. That&#8217;s already all there is to it.</p>
<p>Actually, there is one small detail as a consequence of this: <a rel="nofollow" href="https://GitHub.Com/Headius/Surinx/">Surinx</a> syntax is a strict subset of <a rel="nofollow" href="http://Ruby-Lang.Org/">Ruby</a> syntax, i.e. every syntactically valid <a rel="nofollow" href="https://GitHub.Com/Headius/Surinx/">Surinx</a> program is also a syntactically valid <a rel="nofollow" href="http://Ruby-Lang.Org/">Ruby</a> program. <a rel="nofollow" href="http://Duby.Kenai.Com/">Duby</a> OTOH is <em>almost</em> a syntactic subset, except for its mandatory method parameter type annotations:</p>
<p>def foo(bar =&gt; Integer, baz =&gt; String) =&gt; Array<br />
# &#8230;<br />
end<br />
<em>3. Why do we need (need!) another Ruby-related language?</em></p>
<p>Now, the funny thing is, <a rel="nofollow" href="http://Blog.Headius.Com/">Charlie</a> came to <a rel="nofollow" href="http://Ruby-Lang.Org/">Ruby</a>, because he didn&#8217;t like his day job, doing Java development. And now, he <em>still</em> writes Java code all day long! Of course, he doesn&#8217;t like that, and so he was looking for another programming language in which to implement the core of <a rel="nofollow" href="http://JRuby.Org/">JRuby</a>. One option would certainly be to just write it all in <a rel="nofollow" href="http://Ruby-Lang.Org/">Ruby</a>, but with <a rel="nofollow" href="http://C2.Com/cgi/wiki/?MetaCircularEvaluator">metacircular implementations</a> there usually comes a point of diminishing returns, where the implementations degenerates into academic masturbation. It would certainly make sense to rewrite the libraries, the ahead-of-time compiler (actually, <a rel="nofollow" href="https://GitHub.Com/JRuby/JRuby/blob/master/tool/compiler2.rb">that&#8217;s already being done</a>) and some of the core classes in <a rel="nofollow" href="http://Ruby-Lang.Org/">Ruby</a>, but some parts of the engine core are better written in something closer to the execution model of the JVM itself.</p>
<p><a rel="nofollow" href="http://Blog.Headius.Com/">Charlie</a> was looking at the available options: <a rel="nofollow" href="http://Scala-Lang.Org/">Scala</a>, <a rel="nofollow" href="http://Groovy.CodeHaus.Org/">Groovy</a>, <a rel="nofollow" href="http://FanDev.Org/">Fan</a>, <a rel="nofollow" href="http://Clojure.Org/">Clojure</a>, <a rel="nofollow" href="http://Nice.SourceForge.Net/">Nice</a>, but all of them had a significant disadvantage: a fairly large language runtime. The size of the <a rel="nofollow" href="http://JRuby.Org/">JRuby</a> runtime is already a big problem in terms of memory consumption and startup latency (especially compared to <a rel="nofollow" href="https://GitHub.Com/RubySpec/MatzRuby/tree/ruby%5F1%5F8/">MRI</a> or <a rel="nofollow" href="https://GitHub.Com/RubySpec/MatzRuby/tree/trunk/">YARV</a> and even more so if you actually include the JVM itself in your measurements), and rewriting it in a language that adds its <em>own</em> runtime to that weight is simply a no-go. Unfortunately, there was no programming language which satisfied the two basic criteria <a rel="nofollow" href="http://Blog.Headius.Com/">Charlie</a> was looking for: no runtime and compiles to JVM bytecode that is at least as efficient as the equivalent Java.</p>
<p>So, he decided to create his own. The reason why he chose to use a syntax similar to <a rel="nofollow" href="http://Ruby-Lang.Org/">Ruby</a>, is actually quite simple: he didn&#8217;t need to write a parser for it, <a rel="nofollow" href="http://Duby.Kenai.Com/">Duby</a> just uses <a rel="nofollow" href="http://JRuby.Org/">JRuby</a>&#8216;s already existing parser with one minor modification to support method parameter type annotations. (Actually, he also likes <a rel="nofollow" href="http://Ruby-Lang.Org/">Ruby</a>&#8216;s syntax, that was of course also a factor.)</p></blockquote>
<h2>Where are Programming Languages Going?</h2>
<p>What I took away from my morning readings is that <a href="http://www.victusspiritus.com/2010/04/01/unorthodox-optimization/">unorthodox optimization</a> is already happening. People are selecting languages where they can quickly express themselves, and comprehend structures and flow easily. They&#8217;re even going so far as to adapt these &#8220;syntactically pleasing&#8221; languages and highly dynamic forms to faster compilers (<a href="http://en.wikipedia.org/wiki/Just-in-time_compilation">Just in time compiling</a> on the <a href="http://en.wikipedia.org/wiki/Java_Virtual_Machine">Java Virtual Machine</a>, or even gcc)</p>
<p>The most popular and useful programming languages of the next ten years will share some of the following characteristics:</p>
<ul>
<li>Super Simple, Lightweight, &amp; Easy to Get Started: the lighter the syntax and language, the more inviting it is to new programmers. New programmers come from all backgrounds and specialties. They bring their practical domain expertise to bear on problems dedicated hackers have a hard time understanding</li>
<li>They will be net native. The most useful languages will be useful anywhere and everywhere on the web within browsers, JVMs, Javascript Optimizers, etc.</li>
<li>Super Fast: programmers are nearly always subject to premature optimization. I do it unconsciously, and it&#8217;s a terrible habit. Of course there are mistakes aka &#8220;you&#8217;re doing it wrong&#8221; (usually made when underlying structures aren&#8217;t understood). <strong>If you&#8217;re trying to solve a problem, make the solution your first priority, then iterate on speedups after you have true representation of the data flow and usage.</strong></li>
</ul>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><a class="zemanta-pixie-a" title="Reblog this post [with Zemanta]" href="http://reblog.zemanta.com/zemified/6e66582b-bb0d-479b-94e7-253cbfefa85c/"><img class="zemanta-pixie-img" style="border: none; float: right;" src="http://img.zemanta.com/reblog_e.png?x-id=6e66582b-bb0d-479b-94e7-253cbfefa85c" alt="Reblog this post [with Zemanta]" /></a><span class="zem-script more-related pretty-attribution"><script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></span></div>
<div style="float:right;margin:0px 0px 0px 0px;"><a title="Post on Google Buzz" class="google-buzz-button" href="http://www.google.com/buzz/post" data-button-style="small-count" data-url="http://www.victusspiritus.com/2010/04/03/ideal-coding-easy-to-pickup-yet-abundant-in-function/"></a><script type="text/javascript" src="http://www.google.com/buzz/api/button.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.victusspiritus.com/2010/04/03/ideal-coding-easy-to-pickup-yet-abundant-in-function/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>An Echo through Time, the Minimalist Trend</title>
		<link>http://www.victusspiritus.com/2009/12/26/an-echo-through-time-the-minimalist-trend/</link>
		<comments>http://www.victusspiritus.com/2009/12/26/an-echo-through-time-the-minimalist-trend/#comments</comments>
		<pubDate>Sat, 26 Dec 2009 14:53:04 +0000</pubDate>
		<dc:creator>Mark Essel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[collaboration]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[web/tech]]></category>

		<guid isPermaLink="false">http://www.victusspiritus.com/?p=2633</guid>
		<description><![CDATA[<blockquote><p>
The machines that are first invented to perform any particular movement are always the most complex, and succeeding artists generally discover that, with fewer wheels, with fewer principles of motion, than had originally been employed, the same effects may be </p>&#8230;</blockquote>]]></description>
			<content:encoded><![CDATA[<blockquote><p>
The machines that are first invented to perform any particular movement are always the most complex, and succeeding artists generally discover that, with fewer wheels, with fewer principles of motion, than had originally been employed, the same effects may be more easily produced. The first systems, in the same manner, are always the most complex.
</p></blockquote>
<p><span id="more-2633"></span></p>
<p>A quote from Adam Smith on industry.<br />
And <a href="http://twitter.com/tylergillies">Tyler&#8217;s</a> reponse (the source of the quote and inspiration behind this post): <i>&#8220;reminds me of web development&#8221;</i>.<br />
Right on with refactoring magic, because hindsight is 20/20. </p>
<h2>True Specialization Means Empowering each User</h2>
<p>The ideal interface to collaboratively created databases and services is one perfectly suited to the changing needs of the user. Developers tend to isolate the view, controls, and data into different code sections (<a HREF="http://www.victusspiritus.com/2009/11/15/walking-down-the-tracks-of-ruby-on-rails/">see more on MVC</a>. This approach lends itself well to one where users are in charge of their interface, removing all non-essential information. My ideal evolution of this architecture is one in which the user can customize all design sections of a service to their particular needs, but our tools aren&#8217;t quite advanced enough yet.</p>
<h2>A little about Adam Smith</h2>
<p><a HREF="http://en.m.wikipedia.org/wiki/Adam_Smith?wasRedirected=true">Adam Smith</a> was and continues to be an influential author long after his time. His prescient and detailed motivational philosophy has left a lasting legacy. An echo through time, resonating truth of value and principle.  </p>
<blockquote><p>
Adam Smith (1723-1790) was a Scottish moral philosopher and a pioneer of political economy. One of the key figures of the Scottish Enlightenment, Smith is the author of The Theory of Moral Sentiments and An Inquiry into the Nature and Causes of the Wealth of Nations. The latter, usually abbreviated as The Wealth of Nations, is considered his magnum opus and the first modern work of economics. Adam Smith is widely cited as the father of modern economics.
</p></blockquote>
<p>For further reading explore <a href="http://en.m.wikipedia.org/wiki/The_Wealth_of_Nations">The Wealth of Nations</a>.</p>
<p>I&#8217;ll leave off with another quote of Adam Smith&#8217;s. Within it he alludes to the invisible hand of motivation, interest, and intention. Pay careful attention to how Adam concludes that individual motivations result in outcomes they had not consciously considered. (I see some overlap of this to the Nash Equilibrium, and competing strategies find balance). </p>
<blockquote><p>
Every individual&#8230;generally, indeed, neither intends to promote the public interest, nor knows how much he is promoting it. By preferring the support of domestic to that of foreign industry he intends only his own security; and by directing that industry in such a manner as its produce may be of the greatest value, he intends only his own gain, and he is in this, as in many other cases, led by an invisible hand to promote an end which was no part of his intention.</p></blockquote>
<div style="float:right;margin:0px 0px 0px 0px;"><a title="Post on Google Buzz" class="google-buzz-button" href="http://www.google.com/buzz/post" data-button-style="small-count" data-url="http://www.victusspiritus.com/2009/12/26/an-echo-through-time-the-minimalist-trend/"></a><script type="text/javascript" src="http://www.google.com/buzz/api/button.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.victusspiritus.com/2009/12/26/an-echo-through-time-the-minimalist-trend/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reduce Your (team&#8217;s) Bug Tax</title>
		<link>http://www.victusspiritus.com/2009/12/12/reduce-your-teams-bug-tax/</link>
		<comments>http://www.victusspiritus.com/2009/12/12/reduce-your-teams-bug-tax/#comments</comments>
		<pubDate>Sat, 12 Dec 2009 14:46:32 +0000</pubDate>
		<dc:creator>Mark Essel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[decision making]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.victusspiritus.com/2009/12/12/reduce-your-teams-bug-tax/</guid>
		<description><![CDATA[<h2>What&#8217;s Bug Tax</h2>
<p>The bug tax is a form of friction that increases with the pace of development. For each new feature added, your software gains a number of new bugs. Minimizing the time your team spends bug chasing results &#8230;</p>]]></description>
			<content:encoded><![CDATA[<h2>What&#8217;s Bug Tax</h2>
<p>The bug tax is a form of friction that increases with the pace of development. For each new feature added, your software gains a number of new bugs. Minimizing the time your team spends bug chasing results in greater productivity, and coincidentally more time to add new features (which introduces more bugs). Good job, you just made yourself more work.</p>
<p><span id="more-2490"></span></p>
<p>There is a well known question software developers face. Is additional utility worth the complexity and cost in debugging or redesigning existing structure? It sits at the forefront of every serious designer&#8217;s mind, and when increased functionality is favored too much we call it feature creep.  This concept transcends software design and is evident in just about any project design (my blog layout is a perfect example of feature creep with information overload).</p>
<p>These bugs are introduced by state complexity and the limitations of individual developers to hold entire applications, all dependent libraries, and there interactions in mind simultaneously. On my best day I can keep two large applications and many of their nuances in mind, add a third and everything falls apart. In fact if I&#8217;m <a href="http://www.victusspiritus.com/2009/07/18/autopilot-for-our-brain-allows-multitasking-efficiency/">working on just one</a>, I&#8217;m much more productive. Let&#8217;s review state complexity briefly.</p>
<h2>Exponential Network Interaction Growth</h2>
<p>Say I have one type of data structure and two possible states (on or off). The state complexity of a single structure is nice and simple (size 2).  Scaling that structure is a matter of geometric growth (<a href="http://en.m.wikipedia.org/wiki/Exponential_growth?wasRedirected=true">wiki reference</a>). Add N more instances of that structure and I&#8217;ve added two to the N possible states to be concerned with (this is how numbers are described with binary data). Now introduce one additional interaction or state and expand the number of total states many fold (an additional base state causes system expansion to 3 to the Nth power unique states).</p>
<h2>Why it&#8217;s not that bad</h2>
<p>In practice this is not always as terribly complicated as it sounds. If you have high confidence in your design&#8217;s current functionality, adding linear increases to complexity doesn&#8217;t &#8220;break the bank&#8221; unless you are already at a resource ceiling. Resource limitations of bandwidth, acceptable delay, computer memory, and the most important developer neural ram <img src='http://www.victusspiritus.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> . You can buy more hardware, but each developer&#8217;s mind is memory limited. New team additions require familiarization with the project, and this is an ongoing and predictable cost.</p>
<p>If you are working with solid software developers, they&#8217;ll have intense practical heuristics which help pair down massive complexity to manageable levels. If your team rigorously tests software, the bug is almost certainly in the latest software addition. But it&#8217;s also possible that the latest features reveal existing defects or design limitations.</p>
<h2>When is an Additional Feature Worth the Bug Tax?</h2>
<p>According to one of my favorite coding authors, who has extraordinary enthusiasm for startups, <a href="http://www.paulgraham.com/wealth.html">Paul Graham suggests (in Wealth)</a> that the best path for a startup project is the steepest ascent (which reminds me of <a href="http://en.wikipedia.org/wiki/Conjugate_gradient_method">conjugate gradients</a>).</p>
<blockquote><p>Use difficulty as a guide not just in selecting the overall aim of your company, but also at decision points along the way. At Viaweb one of our rules of thumb was run upstairs. Suppose you are a little, nimble guy being chased by a big, fat, bully. You open a door and find yourself in a staircase. Do you go up or down? I say up. The bully can probably run downstairs as fast as you can. Going upstairs his bulk will be more of a disadvantage. Running upstairs is hard for you but even harder for him.</p></blockquote>
<p>Now it&#8217;s time I get back to debugging at  <a href="http://victusmedia.com">Victus Media</a>. We introduced some bugs while fixing others last night.</p>
<p>Related Links:</p>
<ul>
<li><a href="http://www.victusspiritus.com/2009/08/07/protect-your-peace-of-mind-construct-an-optimal-workspace/">Protect Your Peace of Mind, Construct an Optimal Workspace</a></li>
<li><a href="http://www.joelonsoftware.com/articles/BionicOffice.html">Bionic Office</a> by Joel Spolsky</li>
</ul>
<div style="float:right;margin:0px 0px 0px 0px;"><a title="Post on Google Buzz" class="google-buzz-button" href="http://www.google.com/buzz/post" data-button-style="small-count" data-url="http://www.victusspiritus.com/2009/12/12/reduce-your-teams-bug-tax/"></a><script type="text/javascript" src="http://www.google.com/buzz/api/button.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.victusspiritus.com/2009/12/12/reduce-your-teams-bug-tax/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>ChromeOS more than a dumb terminal?</title>
		<link>http://www.victusspiritus.com/2009/11/20/chromeos-more-than-a-dumb-terminal/</link>
		<comments>http://www.victusspiritus.com/2009/11/20/chromeos-more-than-a-dumb-terminal/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 13:37:23 +0000</pubDate>
		<dc:creator>Mark Essel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.victusspiritus.com/?p=2282</guid>
		<description><![CDATA[<p><a href="http://www.flickr.com/people/dhilung/"></a><span id="more-2282"></span></p>
<h2>But Mark what&#8217;s a terminal?</h2>
<p>If you&#8217;re unfamiliar with older computer architectures here&#8217;s the low down on terminals. Back in the olden days, when the Internet was a gleam in engineers eye&#8217;s (and even further), most business and educational computer &#8230;</p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/people/dhilung/"><img class="aligncenter size-full wp-image-2283" title="ShimmeringCity" src="http://www.victusspiritus.com/wp-content/uploads/2009/11/ShimmeringCity.jpg" alt="ShimmeringCity" width="480" height="330" /></a><span id="more-2282"></span></p>
<h2>But Mark what&#8217;s a terminal?</h2>
<p>If you&#8217;re unfamiliar with older computer architectures here&#8217;s the low down on terminals. Back in the olden days, when the Internet was a gleam in engineers eye&#8217;s (and even further), most business and educational computer system architectures consisted of one or more mainframes/super servers, and many terminal nodes. Terminals had limited memory and functionality but were capable of directing resources on a heavy hitting server. Terminals were cheap and would allow many users to access central processing systems. Meanwhile home computers (the desktop) were just coming into existence (commodore/ vic20, TI99). In parallel both servers and desktop systems evolved. Eventually, in most businesses the desktop prevailed as a more useful node than the dumb terminal. </p>
<p>The web has captured many of our imaginations. And Google percieves (among others) a user need for dedicated portals to web services. In effect Chrome OS will allow for advanced terminals to one super mainframe of information, the Internet.</p>
<h2>Pros and Cons of Chrome OS</h2>
<p>The advantages include simplicity in administration, security, and portability for any browser OS system. The disadvantages include a lack of localized resources (minimal local caching), and reliance on connectivity for almost all functionality.</p>
<p>We use a variety of systems: a desktop, laptop or developer capable smartphone. The smartphone merges functionally with larger devices when I can code comfortably on it, <a href="http://www.paulgraham.com/apple.html">Paul Graham mentioned this need recently</a>. My preference is a full functioning OS with an optimized browser. Then I get the best of both worlds.</p>
<h2>Quick Top Level Description</h2>
<p>If you are new to the Chrome OS, or would like a refresher on the current project vision this video should help you get an idea of the design direction of the Chrome OS.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="330" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://www.youtube.com/v/0QRO3gKj3qw&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;feature=player_embedded&#038;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="330" src="http://www.youtube.com/v/0QRO3gKj3qw&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;feature=player_embedded&#038;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h2>See an early demo version</h2>
<p>This is a longer video (just over 11min) that shows a version of Chrome OS in action.<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="330" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://www.youtube.com/v/ANMrzw7JFzA&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;feature=player_embedded&#038;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="330" src="http://www.youtube.com/v/ANMrzw7JFzA&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;feature=player_embedded&#038;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="float:right;margin:0px 0px 0px 0px;"><a title="Post on Google Buzz" class="google-buzz-button" href="http://www.google.com/buzz/post" data-button-style="small-count" data-url="http://www.victusspiritus.com/2009/11/20/chromeos-more-than-a-dumb-terminal/"></a><script type="text/javascript" src="http://www.google.com/buzz/api/button.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.victusspiritus.com/2009/11/20/chromeos-more-than-a-dumb-terminal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Walking down the tracks with Ruby on Rails</title>
		<link>http://www.victusspiritus.com/2009/11/15/walking-down-the-tracks-of-ruby-on-rails/</link>
		<comments>http://www.victusspiritus.com/2009/11/15/walking-down-the-tracks-of-ruby-on-rails/#comments</comments>
		<pubDate>Sun, 15 Nov 2009 13:45:26 +0000</pubDate>
		<dc:creator>Mark Essel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[web/tech]]></category>

		<guid isPermaLink="false">http://www.victusspiritus.com/?p=2210</guid>
		<description><![CDATA[<p><a href="http://www.stuckincustoms.com"></a><br />
<em>this is a follow on post to <a href="http://www.victusspiritus.com/2009/11/11/pigs-may-not-have-wings-but-i-can-ride-the-rails-with-a-flu/">Pigs may not have wings, but I can Ride the Rails with a flu</a></em></p>
<h1>Gems Gems Gems</h1>
<p>The first barrier to entry to ramping up on RoR (Ruby on Rails) was setting up &#8230;</p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.stuckincustoms.com"><img class="aligncenter size-full wp-image-2101" title="A Sea of Glass - The Chihuly Exhibit at the Ballagio in Vegas" src="http://www.victusspiritus.com/wp-content/uploads/2009/11/DaleChihuliGlassSculptures.jpg" alt="A Sea of Glass - The Chihuly Exhibit at the Ballagio in Vegas" width="480" height="340" /></a><br />
<em>this is a follow on post to <a href="http://www.victusspiritus.com/2009/11/11/pigs-may-not-have-wings-but-i-can-ride-the-rails-with-a-flu/">Pigs may not have wings, but I can Ride the Rails with a flu</a></em></p>
<h1>Gems Gems Gems</h1>
<p>The first barrier to entry to ramping up on RoR (Ruby on Rails) was setting up a build environment. I found several windows friendly developmet options. Netbeans has an install. Steel Ruby has a visual studio variant, Instant Ruby creates an environment you can drop rails projects into (instantly <img src='http://www.victusspiritus.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ), and Ruby Forge has an executable for windows machines. I opted for the <a href="http://www.victusspiritus.com/2009/11/11/pigs-may-not-have-wings-but-i-can-ride-the-rails-with-a-flu/">Ruby Forge windows exec </a> after trying the other routes to varying degrees of success. Primarily because it almost works (there&#8217;s no shuffle! Array function on the RoR Ruby Forge version, or my environment still has problems), it&#8217;s command line driven, and I know where the common install/gem folder is.</p>
<p><span id="more-2210"></span></p>
<p>Let me warn potential windows RoR coders that while all of these options may work to varying degrees, if your ultimate server destination is Linux Apache, you may save a lot of headaches by setting up a dual boot Ubuntu installation (today&#8217;s plan for me). After running into the bug with shuffle! and spending time finding and understanding it, your very limited learning and development time would be better served by avoiding the additional complications introduced with a different OS. Keep in mind I had a much more learned co-pilot helping me along in understanding using <a href="https://www.acrobat.com/#/connectnow/ConnectNowBegin">Adobe Connect</a>.</p>
<h1>Darn GEMS!</h1>
<p>There are inconsistencies in gem names, versus the gem packages. This is to avoid name conflicts because gems sit in repositories on public facing web servers. I also found several close variants of gem names that have subtle implementation differences. One of the pitfalls I fell into was in assuming I had to call rake, and pass all our unit tests. It turns out I assumed wrong. In the race to develop something that is valuable to users, we have opted to skip some of the long term habits Rails nudges us towards (I&#8217;m sure as time allows we&#8217;ll find our way to testing). So the tests weren&#8217;t setup quite right for our specific project (they were using sqlite a default database for rails while we use <a href="http://www.avc.com/a_vc/2009/02/mongo-db.html">MongoDB</a>, a new NonSQL database option).</p>
<h1>MVC Directory Structure First Timer</h1>
<p><a href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller">MVC</a> stands for:</p>
<ul>
<li><span style="background-color: #ffffff;">model (data and it&#8217;s handling)</span></li>
<li><span style="background-color: #ffffff;">view (how we see it an other intermediate stuff), and</span></li>
<li><span style="background-color: #ffffff;">control (algorithms, processing, application flow , the CPU of RoR?).</span></li>
</ul>
<p>When you first construct a bare bones Rails app (rails hello) , the folder structure looks something like this:<br />
C:\Users\Dude Jones\Desktop\My Dropbox\Mystuff\people&gt;tree<br />
C:.<br />
├───app<br />
│   ├───controllers<br />
│   ├───helpers<br />
│   ├───models<br />
│   └───views<br />
│       ├───layouts<br />
│       └───people<br />
├───config<br />
│   ├───environments<br />
│   ├───initializers<br />
│   └───locales<br />
├───db<br />
│   └───migrate<br />
├───doc<br />
├───lib<br />
│   └───tasks<br />
├───log<br />
├───nbproject<br />
│   └───private<br />
├───public<br />
│   ├───images<br />
│   ├───javascripts<br />
│   └───stylesheets<br />
├───script<br />
│   └───performance<br />
├───test<br />
│   ├───fixtures<br />
│   ├───functional<br />
│   ├───integration<br />
│   ├───performance<br />
│   └───unit<br />
│       └───helpers<br />
├───tmp<br />
│   ├───cache<br />
│   ├───pids<br />
│   ├───sessions<br />
│   └───sockets<br />
└───vendor<br />
└───plugins</p>
<p>Here&#8217;s that same structure with files<br />
C:\Users\Dude Jones\Desktop\My Dropbox\Mystuff\people&gt;tree /f<br />
C:.<br />
│   Rakefile<br />
│   README<br />
│<br />
├───app<br />
│   ├───controllers<br />
│   │       application_controller.rb<br />
│   │       people_controller.rb<br />
│   │<br />
│   ├───helpers<br />
│   │       application_helper.rb<br />
│   │       people_helper.rb<br />
│   │<br />
│   ├───models<br />
│   │       person.rb<br />
│   │<br />
│   └───views<br />
│       ├───layouts<br />
│       │       people.html.erb<br />
│       │<br />
│       └───people<br />
│               edit.html.erb<br />
│               index.html.erb<br />
│               new.html.erb<br />
│               show.html.erb<br />
│<br />
├───config<br />
│   │   boot.rb<br />
│   │   database.yml<br />
│   │   environment.rb<br />
│   │   routes.rb<br />
│   │<br />
│   ├───environments<br />
│   │       development.rb<br />
│   │       production.rb<br />
│   │       test.rb<br />
│   │<br />
│   ├───initializers<br />
│   │       backtrace_silencers.rb<br />
│   │       inflections.rb<br />
│   │       mime_types.rb<br />
│   │       new_rails_defaults.rb<br />
│   │       session_store.rb<br />
│   │<br />
│   └───locales<br />
│           en.yml<br />
│<br />
├───db<br />
│   │   development.sqlite3<br />
│   │   schema.rb<br />
│   │   seeds.rb<br />
│   │   test.sqlite3<br />
│   │<br />
│   └───migrate<br />
│           20091111235941_create_people.rb<br />
│<br />
├───doc<br />
│       README_FOR_APP<br />
│<br />
├───lib<br />
│   └───tasks<br />
├───log<br />
│       development.log<br />
│       production.log<br />
│       server.log<br />
│       test.log<br />
│<br />
├───nbproject<br />
│   │   project.properties<br />
│   │   project.xml<br />
│   │<br />
│   └───private<br />
│           private.properties<br />
│           rake-d.txt<br />
│<br />
├───public<br />
│   │   404.html<br />
│   │   422.html<br />
│   │   500.html<br />
│   │   favicon.ico<br />
│   │   robots.txt<br />
│   │<br />
│   ├───images<br />
│   │       rails.png<br />
│   │<br />
│   ├───javascripts<br />
│   │       application.js<br />
│   │       controls.js<br />
│   │       dragdrop.js<br />
│   │       effects.js<br />
│   │       prototype.js<br />
│   │<br />
│   └───stylesheets<br />
│           scaffold.css<br />
│<br />
├───script<br />
│   │   about<br />
│   │   console<br />
│   │   dbconsole<br />
│   │   destroy<br />
│   │   generate<br />
│   │   plugin<br />
│   │   runner<br />
│   │   server<br />
│   │<br />
│   └───performance<br />
│           benchmarker<br />
│           profiler<br />
│<br />
├───test<br />
│   │   test_helper.rb<br />
│   │<br />
│   ├───fixtures<br />
│   │       people.yml<br />
│   │<br />
│   ├───functional<br />
│   │       people_controller_test.rb<br />
│   │<br />
│   ├───integration<br />
│   ├───performance<br />
│   │       browsing_test.rb<br />
│   │<br />
│   └───unit<br />
│       │   person_test.rb<br />
│       │<br />
│       └───helpers<br />
│               people_helper_test.rb<br />
│<br />
├───tmp<br />
│   ├───cache<br />
│   ├───pids<br />
│   ├───sessions<br />
│   └───sockets<br />
└───vendor<br />
└───plugins</p>
<p>There are scripts that will populate subdirectories with ruby files. One that adds to the application, model and view folders at once is scaffold.<br />
It looks like this on a windows prompt:</p>
<p>ruby script/generate scaffold person name:string password:string email:string age:integer</p>
<p>It creates several files of which I believe a few are key after <a href="http://guides.rubyonrails.org/getting_started.html#the-mvc-architecture">reading some of getting started</a> (I prefer to learn by doing, then going back to understand what I did worked or broke and why):</p>
<ul>
<li><span style="background-color: #ffffff;">The model support file is the Rails migration db/migrate/20091111235941_create_people.rb</span></li>
<li><span style="background-color: #ffffff;">a model in app/models/person.rb</span></li>
<li><span style="background-color: #ffffff;">a controller app/controller/people_controller.rb</span></li>
</ul>
<p>The scaffold script also generates several tests (look for person/people above, a helper).</p>
<h1>IDE</h1>
<p>I used <a href="http://netbeans.org/kb/trails/ruby.html">Netbeans</a>, <a href="http://www.eclips3media.com/workshop/2007/08/using-visual-studio-as-a-ruby-on-rails-ide/">Visual Studio</a>, and for editing Notepad and <a href="http://www.scintilla.org/SciTE.html">ScITE</a>. Of all of these, I think I prefer Visual Studio the best for speed, style and responsiveness, but Netbeans is a good backup integrated development platform. ScITE was handy for quick editing though. I ran the server off of the console so I can see what messages (errors) it was printing out, instead of constantly have to reopen the log file. I suspect you will become quite intimate with log/development.log as you experience building your own Rails projects.</p>
<p>Check out what we&#8217;re up to at <a href="http://victusmedia.com/">Victus Media</a>, a cool dev build should be going live this week for <a href="http://victus1.victusmedia.com">Intelligent Advertising Media</a>.</p>
<p>Don&#8217;t forget this handy <a href="http://spreadsheets.google.com/ccc?key=0AvdN0hRq3gdgdEM4dDhETFRONHZtaFFBWS1OY25OYkE&amp;hl=en">Google Doc</a> I started for diving into Ruby on Rails.</p>
<div class="iframe-wrapper">
  <iframe src="http://spreadsheets.google.com/pub?key=tC8t8DLTN4vmhQAY-NcnNbA&amp;output=html" frameborder="0" style="height:600px;width:480px;">Please upgrade your browser</iframe>
</div>
<div style="float:right;margin:0px 0px 0px 0px;"><a title="Post on Google Buzz" class="google-buzz-button" href="http://www.google.com/buzz/post" data-button-style="small-count" data-url="http://www.victusspiritus.com/2009/11/15/walking-down-the-tracks-of-ruby-on-rails/"></a><script type="text/javascript" src="http://www.google.com/buzz/api/button.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.victusspiritus.com/2009/11/15/walking-down-the-tracks-of-ruby-on-rails/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Satisfy the Interface, Dev/User Tip #1</title>
		<link>http://www.victusspiritus.com/2009/09/30/satisfy-the-interface-devuser-tip-1/</link>
		<comments>http://www.victusspiritus.com/2009/09/30/satisfy-the-interface-devuser-tip-1/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 10:17:01 +0000</pubDate>
		<dc:creator>Mark Essel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[web/tech]]></category>

		<guid isPermaLink="false">http://www.victusspiritus.com/2009/09/30/satisfy-the-interface-devuser-tip-1/</guid>
		<description><![CDATA[<p>A reoccuring mistake I see (and make) on a regular basis is failing to utilize existing technology the way it was designed. Of course there are creative innovations built on existing platforms by bootstrapping never before conceived applications. But for &#8230;</p>]]></description>
			<content:encoded><![CDATA[<p>A reoccuring mistake I see (and make) on a regular basis is failing to utilize existing technology the way it was designed. Of course there are creative innovations built on existing platforms by bootstrapping never before conceived applications. But for every one of these there are thousands of garbage in, garbage out scenarios. It&#8217;s probably still a fair trade, but recognizing a failed scenario quickly is a sign of expertise.<span id="more-1722"></span></p>
<p>Most recently an estimation program I have worked with a little was sputtering nonsense outputs. After a couple of days of pulling our hair out we discovered the inputs were junk (good job Paul). Imagine this on a global scale, where interfaces expect specific data formats. How much of our time and energy is spent &#8220;bunny chasing&#8221; compared to new design efforts. Sometimes it is beyond the user to fathom the full capability and assumptions for an application. This is where simple yet comprehensive documentation comes into play, or the ability to contact the software experts directly (Twitter, email).</p>
<p>At the first level of documentation, describe what and how your software does something. Users aren&#8217;t mind readers, and even you are likely to forget the nuances of a large application months or years later. As the complexity of any application increases, the potential for hard to find bugs creeps up as well. The more internal states your application can potentially be in, the greater the chance that you haven&#8217;t tested them all.</p>
<h1>Along Come Alpha &amp; Beta Testers</h1>
<p>I can&#8217;t overemphasize enough the importance of external testing. Just yesterday I caught <a href="http://www.reddit.com/r/startups/comments/9oyd2/reddit_i_would_like_your_opinion_on_my_new/">Savendar asking for user feedback on reddit</a>. Savendar had developed a coupon and deal search tool localized to your area. He got a bunch of great feedback and recognized areas for immediate change. Simply put, as a developer we are working and thinking most about functionality, and less about first impressions and assumptions of users. Early testing helps fill in this design gap, and probably gets a couple of testers excited about your offerring. I know when I test something, and make a suggestion that&#8217;s instantly implemented I get a happy feeling, especially when it helps that product or business take off.</p>
<p>We need to satisfy our creative itches by tweaking functionality and layering (Internet) applications. We would save time by balancing this experimental activity with knowledge of application breaking points.</p>
<h6 class="zemanta-related-title" style="font-size: 1em;">Related articles by Zemanta</h6>
<ul class="zemanta-article-ul">
<li class="zemanta-article-ul-li"><a href="http://www.agile-software-development.com/2009/08/advantages-of-agile-for-testers.html">Advantages of Agile Software Development for Testers</a> (agile-software-development.com)</li>
<li class="zemanta-article-ul-li"><a href="http://www.slideshare.net/rosiesherry/what-do-testers-hate-about-testing">What Do Testers Hate About Testing</a> (slideshare.net)</li>
</ul>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><a class="zemanta-pixie-a" title="Reblog this post [with Zemanta]" href="http://reblog.zemanta.com/zemified/92949f8f-7c9b-4ca4-91a9-8e761ba56572/"><img class="zemanta-pixie-img" style="border: none; float: right;" src="http://img.zemanta.com/reblog_e.png?x-id=92949f8f-7c9b-4ca4-91a9-8e761ba56572" alt="Reblog this post [with Zemanta]" /></a><span class="zem-script more-related pretty-attribution"><script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></span></div>
<div style="float:right;margin:0px 0px 0px 0px;"><a title="Post on Google Buzz" class="google-buzz-button" href="http://www.google.com/buzz/post" data-button-style="small-count" data-url="http://www.victusspiritus.com/2009/09/30/satisfy-the-interface-devuser-tip-1/"></a><script type="text/javascript" src="http://www.google.com/buzz/api/button.js"></script></div>]]></content:encoded>
			<wfw:commentRss>http://www.victusspiritus.com/2009/09/30/satisfy-the-interface-devuser-tip-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

