<?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.fitnr.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:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Louis Marascio « Fixed in the Next Release</title>
	
	<link>http://fitnr.com</link>
	<description>Thoughts on Programming, Startups and Finance → The Personal Site of Louis Marascio</description>
	<lastBuildDate>Fri, 27 May 2011 13:43:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.fitnr.com/FixedInTheNextRelease" /><feedburner:info uri="fixedinthenextrelease" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>30.287739</geo:lat><geo:long>-97.802203</geo:long><creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license><feedburner:emailServiceId>FixedInTheNextRelease</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>A New Tech Bubble?</title>
		<link>http://feeds.fitnr.com/~r/FixedInTheNextRelease/~3/ppbZdZYhoQk/new-tech-bubble.html</link>
		<comments>http://fitnr.com/new-tech-bubble.html#comments</comments>
		<pubDate>Thu, 26 May 2011 00:05:38 +0000</pubDate>
		<dc:creator>Louis Marascio</dc:creator>
				<category><![CDATA[Building Companies]]></category>
		<category><![CDATA[entrepreneurs]]></category>
		<category><![CDATA[markets]]></category>
		<category><![CDATA[startups]]></category>

		<guid isPermaLink="false">http://fitnr.com/?p=655</guid>
		<description><![CDATA[The year was 1995. I was working at FlexNet, a local ISP in The Woodlands (a northern suburb of Houston), as a tech support jockey and hack programmer. It was a small company, maybe 10 employees, and was owned by two old business partners who didn&#8217;t know much about the Internet but had other successful [...]


Other posts you might like:<ol><li><a href='http://fitnr.com/onwards-and-upwards-goodbye-cisco-hello-tbd.html' rel='bookmark' title='Permanent Link: Onwards and Upwards: Goodbye Cisco, Hello TBD'>Onwards and Upwards: Goodbye Cisco, Hello TBD</a></li>
<li><a href='http://fitnr.com/getting-things-done-an-entrepreneurial-prerequisite.html' rel='bookmark' title='Permanent Link: Getting Things Done: An Entrepreneurial Prerequisite'>Getting Things Done: An Entrepreneurial Prerequisite</a></li>
<li><a href='http://fitnr.com/risk-and-responsibility.html' rel='bookmark' title='Permanent Link: Risk and Responsibility'>Risk and Responsibility</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p></p><p>The year was 1995. I was working at FlexNet, a local ISP in The Woodlands (a northern suburb of Houston), as a tech support jockey and hack programmer. It was a small company, maybe 10 employees, and was owned by two old business partners who didn&#8217;t know much about the Internet but had other successful ventures in insurance and real estate. This was a great time to be involved with the Internet&#8211;it was still raw and rough around the edges but compared to today it was &#8220;pure&#8221;. The Internet still felt like an exclusive destination; something you could do that other people couldn&#8217;t. I still fondly remember the looks I used to get when I told other people, disconnected people, about the Internet&#8211;one part pity and two parts disgust.</p>

<p><span id="more-655"></span></p>

<p>This particular day was special. I was under our marketing guy&#8217;s desk installing a new video card in his new computer. He was ferociously pacing about, demanding that I hurry the hell up. As far as I was concerned this new video card had only one purpose: after hours Duke Nuke and Quake, something me and the 3 other &#8220;tech guys&#8221; at the ISP would do every weekend. However, Mike the Marketing Guy could care less. He wanted that video card installed and installed fast. Netscape was IPOing and he wanted to get online.</p>

<p>I didn&#8217;t grasp what was happening, but August 9, 1995 was the beginning of the great Internet/Tech bubble. Netscape really was the catalyst. It set the whole thing off. Netscape IPO&#8217;d at around $28/share and soared, ending the day up 100% at around $58/share giving it a market cap of nearly $3 billion. Netscape probably deserved most of this valuation; however, this isn&#8217;t about what Netscape deserved. This is about the greed that ensued.</p>

<p>You see, venture capitalists and entrepreneurs saw that any story connected to the Internet was a catalyst for very large valuations. A rush was on to IPO. Get in while the getting is good. People are paying, so we&#8217;re selling. This was the predominant viewpoint. Once the handful of deserving Internet companies had gone public the search was on for the next big thing. Before you knew it, companies were coming out with little to no revenue and demanding $1 billion valuations. The capital got more greedy than normal and the entrepreneurs were happy to oblige. Easy money.</p>

<p>Unfortunately, as we all know, it ended badly. We all learned our lesson, right?</p>

<p>LinkedIn IPO&#8217;d on Thursday May 19, 2011. It soared. Just like Netscape it probably deserved to soar. It&#8217;s been a stalwart in the social networking space and has a very large niche (professional social networks) all to its own. But again, just like Netscape, this isn&#8217;t about whether LinkedIn deserves $9 billion valuation it currently has. This is about what happens next.</p>

<p>Now that the primary markets are proven open for business to a new breed of dotcoms will we see a gradual but persistent decrease in common sense around the types of businesses that get funded and the types of exits they receive? We&#8217;re already hearing news that Zynga is pushing to IPO sooner rather than later&#8211;and again, Zynga is a very successful business and deserves to be public if they want to be. What you should be watching for is this: once the 6-12 deserving companies go public will we start to see less deserving businesses sell shares to the public? If so, you have a decision to make. Ride the wave or sit it out.</p>

<p>In my opinion, the next bubble is coming. These things don&#8217;t happen all at once nor do they end instantaneously. I&#8217;d reckon that if you interviewed any venture guy that lived through the bubble they would claim that they couldn&#8217;t get caught up in it again. However, everyone has penis envy. Everyone wants to see their portfolio have tremendous success and going public, especially in a frothy market, is a sure way to make that happen. Once the venture industry sees its possible I have a feeling they&#8217;ll begin to push companies to come out sooner than they should and entrepreneurs will be happy to oblige. Eventually we&#8217;ll see an erosion in quality of new issues and if valuations don&#8217;t adjust, then I&#8217;ll personally be staying very far away. Riding the wave can be great fun, but there&#8217;s rocks on this beach. Big, jagged, sharp net-worth-eating rocks.</p>


<p>Other posts you might like:<ol><li><a href='http://fitnr.com/onwards-and-upwards-goodbye-cisco-hello-tbd.html' rel='bookmark' title='Permanent Link: Onwards and Upwards: Goodbye Cisco, Hello TBD'>Onwards and Upwards: Goodbye Cisco, Hello TBD</a></li>
<li><a href='http://fitnr.com/getting-things-done-an-entrepreneurial-prerequisite.html' rel='bookmark' title='Permanent Link: Getting Things Done: An Entrepreneurial Prerequisite'>Getting Things Done: An Entrepreneurial Prerequisite</a></li>
<li><a href='http://fitnr.com/risk-and-responsibility.html' rel='bookmark' title='Permanent Link: Risk and Responsibility'>Risk and Responsibility</a></li>
</ol></p><div class="feedflare">
<a href="http://feeds.fitnr.com/~ff/FixedInTheNextRelease?a=ppbZdZYhoQk:neAiEySSp7Y:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/FixedInTheNextRelease?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.fitnr.com/~ff/FixedInTheNextRelease?a=ppbZdZYhoQk:neAiEySSp7Y:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/FixedInTheNextRelease?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/FixedInTheNextRelease/~4/ppbZdZYhoQk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://fitnr.com/new-tech-bubble.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://fitnr.com/new-tech-bubble.html</feedburner:origLink></item>
		<item>
		<title>Comparing Version Strings with Bash</title>
		<link>http://feeds.fitnr.com/~r/FixedInTheNextRelease/~3/5tGHHVLPx58/bash-comparing-version-strings.html</link>
		<comments>http://fitnr.com/bash-comparing-version-strings.html#comments</comments>
		<pubDate>Fri, 20 May 2011 15:34:10 +0000</pubDate>
		<dc:creator>Louis Marascio</dc:creator>
				<category><![CDATA[Bash Tips and Tricks]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[series]]></category>
		<category><![CDATA[tip]]></category>
		<category><![CDATA[versions]]></category>

		<guid isPermaLink="false">http://fitnr.com/?p=455</guid>
		<description><![CDATA[This post is part of a series: Bash Tips and Tricks. When I write a &#8220;serious&#8221; bash script I always try to check my pre-requisites. Is pigz installed? If not, fall back to gzip. Is wget installed? If not, error out. That sort of stuff. One part of this is checking the version of the [...]


Other posts you might like:<ol><li><a href='http://fitnr.com/showing-a-bash-spinner.html' rel='bookmark' title='Permanent Link: Showing a Bash Spinner for Long Running Tasks'>Showing a Bash Spinner for Long Running Tasks</a></li>
<li><a href='http://fitnr.com/introducing-bash-tips-and-tricks.html' rel='bookmark' title='Permanent Link: Introducing Bash Tips and Tricks'>Introducing Bash Tips and Tricks</a></li>
<li><a href='http://fitnr.com/showing-file-download-progress-using-wget.html' rel='bookmark' title='Permanent Link: Showing File Download Progress Using Wget'>Showing File Download Progress Using Wget</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p></p><p><em>This post is part of a series: <a href="http://fitnr.com/introducing-bash-tips-and-tricks.html">Bash Tips and Tricks</a>.</em></p>

<p>When I write a &#8220;serious&#8221; bash script I always try to check my pre-requisites. Is <code>pigz</code> installed? If not, fall back to <code>gzip</code>. Is <code>wget</code> installed? If not, error out. That sort of stuff. One part of this is checking the version of the programs you depend on. Most of the time version doesn&#8217;t matter, but every so often it does. There are some tools out there to do version comparisons, like Arch&#8217;s <a href="http://www.archlinux.org/pacman/vercmp.8.html">vercmp</a>. However, I&#8217;ve never really found a ubiquitous tool that I could rely on being there, so I decided to write a bash function to do the comparison for me that relies only on <code>sed</code>, <code>sort</code>, and <code>head</code>&#8211;tools that are ubiquitous.</p>

<pre><code># return 0 if program version is equal or greater than check version
check_version()
{
    local version=$1 check=$2
    local winner=$(echo -e "$version\n$check" | sed '/^$/d' | sort -nr | head -1)
    [[ "$winner" = "$version" ]] &amp;&amp; return 0
    return 1
}
</code></pre>

<p>The function, <code>check_version</code>, takes two arguments. The first is the version of the tool we are verifying and the second is the minimum version we&#8217;re willing to accept. Both version and check must only be <code>major.minor</code> version numbers, no patch levels, beta tags, or any other &#8220;version chrome&#8221;. The way it works is very simple:</p>

<ol>
<li>Echo both versions one on each line, and send that as stdin to <code>sed</code>.</li>
<li>Eliminate empty lines with <code>sed</code>.</li>
<li>Use <code>sort</code> to do a reverse numeric sort.</li>
<li>Take the first line of <code>sort</code>&#8216;s output, and call that the <code>winner</code>.</li>
<li>If the winner is the version from the tool we are verifying, the one passed in as argument 1, then the version of the tool checks out. Otherwise, it does not.</li>
</ol>

<p>This function does exactly what I need, nothing more and nothing less. I&#8217;m sure it could be extended to support more than major/minor version numbers. If you do add features to it, please let me know.</p>


<p>Other posts you might like:<ol><li><a href='http://fitnr.com/showing-a-bash-spinner.html' rel='bookmark' title='Permanent Link: Showing a Bash Spinner for Long Running Tasks'>Showing a Bash Spinner for Long Running Tasks</a></li>
<li><a href='http://fitnr.com/introducing-bash-tips-and-tricks.html' rel='bookmark' title='Permanent Link: Introducing Bash Tips and Tricks'>Introducing Bash Tips and Tricks</a></li>
<li><a href='http://fitnr.com/showing-file-download-progress-using-wget.html' rel='bookmark' title='Permanent Link: Showing File Download Progress Using Wget'>Showing File Download Progress Using Wget</a></li>
</ol></p><div class="feedflare">
<a href="http://feeds.fitnr.com/~ff/FixedInTheNextRelease?a=5tGHHVLPx58:9OFhonabyBs:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/FixedInTheNextRelease?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.fitnr.com/~ff/FixedInTheNextRelease?a=5tGHHVLPx58:9OFhonabyBs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/FixedInTheNextRelease?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/FixedInTheNextRelease/~4/5tGHHVLPx58" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://fitnr.com/bash-comparing-version-strings.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://fitnr.com/bash-comparing-version-strings.html</feedburner:origLink></item>
		<item>
		<title>Showing a Bash Spinner for Long Running Tasks</title>
		<link>http://feeds.fitnr.com/~r/FixedInTheNextRelease/~3/FTLZkyBAr-Q/showing-a-bash-spinner.html</link>
		<comments>http://fitnr.com/showing-a-bash-spinner.html#comments</comments>
		<pubDate>Sun, 27 Feb 2011 16:42:12 +0000</pubDate>
		<dc:creator>Louis Marascio</dc:creator>
				<category><![CDATA[Bash Tips and Tricks]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[series]]></category>
		<category><![CDATA[spinner]]></category>
		<category><![CDATA[tip]]></category>

		<guid isPermaLink="false">http://fitnr.com/?p=451</guid>
		<description><![CDATA[This post is part of a series: Bash Tips and Tricks. I&#8217;ve mentioned before that I like to show users of my scripts useful information. This can be a complex progress bar, a simple progress meter, or it can be an animation to let the user know the script hasn&#8217;t hung. These animations are typically [...]


Other posts you might like:<ol><li><a href='http://fitnr.com/introducing-bash-tips-and-tricks.html' rel='bookmark' title='Permanent Link: Introducing Bash Tips and Tricks'>Introducing Bash Tips and Tricks</a></li>
<li><a href='http://fitnr.com/showing-file-download-progress-using-wget.html' rel='bookmark' title='Permanent Link: Showing File Download Progress Using Wget'>Showing File Download Progress Using Wget</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p></p><p><em>This post is part of a series: <a href="http://fitnr.com/introducing-bash-tips-and-tricks.html">Bash Tips and Tricks</a>.</em></p>

<p>I&#8217;ve <a href="/showing-file-download-progress-using-wget.html" title="Showing File Download Progress using Wget">mentioned before</a> that I like to show users of my scripts useful
information. This can be a complex progress bar, a simple progress meter, or
it can be an animation to let the user know the script hasn&#8217;t hung. These
animations are typically called <a href="http://en.wikipedia.org/wiki/Throbber" title="Throbbers">Throbbers</a> are exist purely to tell
the user to continue patiently waiting. Sometimes folks like me call Throbbers
Spinners for two reasons. First, a very common throbber animation type is the
spinning wheel. Second, the word throbber sounds oddly sexual, and sort of
creeps me out if I say it too many times in a sentence (Just kidding.  Well,
no, not really.)</p>

<p>This tip will show you to create a spinner for your Bash scripts. If you have
a long running process and don&#8217;t want to try to tell the user approximately
how much of that process is left to run, showing them a spinner is a great
alternative.</p>

<h2>Implementing the Spinner</h2>

<p>The throbber, er I mean spinner, is implemented as a loop that shifts a string
during each iteration.</p>

<pre><code>spinner()
{
    local pid=$1
    local delay=0.75
    local spinstr='|/-\'
    while [ "$(ps a | awk '{print $1}' | grep $pid)" ]; do
        local temp=${spinstr#?}
        printf " [%c]  " "$spinstr"
        local spinstr=$temp${spinstr%"$temp"}
        sleep $delay
        printf "\b\b\b\b\b\b"
    done
    printf "    \b\b\b\b"
}
</code></pre>

<p>Let&#8217;s dissect the <code>spinner</code> function so to illustrate how it works.</p>

<p><span id="more-451"></span></p>

<pre><code>local pid=$1
local delay=0.75
local spinstr='|/-\'
</code></pre>

<p>This is pretty self-explanatory. The function has one input argument and two
internal variables that control how it works.</p>

<ol>
<li><p>The input argument is assigned to the local variable <code>pid</code>. This is the
process ID of the background task for which we are showing the spinner.</p></li>
<li><p>The next local variable, <code>delay</code>, is how long each frame of the spinner
animation stays visible for. We&#8217;ve set it to 75% of 1 second or 750ms. A
smaller number will make the spinner rotate faster while a larger number
will make it slower.</p></li>
<li><p>The final local variable is called <code>spinstr</code>. This is a string for which
each character is a frame in our spinner animation. As you can see, the
string is 4 characters long, therefore we have four frames in our
animation.</p></li>
</ol>

<p>Moving along we get to the meat of the function, the primary loop.</p>

<pre><code>while [ "$(ps a | awk '{print $1}' | grep -w $pid)" ]; do
</code></pre>

<p>The loop condition does three things:</p>

<ol>
<li><p><code>ps a</code> will show all processes.</p></li>
<li><p><code>awk '{print $1}'</code> will extract the pid column of the process list.</p></li>
<li><p><code>grep -w $pid</code> will look for the process ID of our background task in the list
of PIDs printed by <code>awk</code>.</p></li>
</ol>

<p>The loop is conditioned on the return value of <code>grep</code>, the last command in our
pipe chain. If grep finds a match in our PID list it will return 0, otherwise
it will return 1.</p>

<p>The next several lines do the hard work of displaying our animation. I&#8217;ve
created two images to help illustrate what&#8217;s going on.</p>

<p>First, I remove the first character from the string and save the remaining
characters into a <code>temp</code>.</p>

<pre><code>local temp=${spinstr#?}
</code></pre>

<p>Then I use <code>printf</code> to output the first character of <code>spinstr</code>, which contains
our animation. Only the first character is output because I use the <code>%c</code>
format string.</p>

<pre><code>printf " [%c]  " "$spinstr"
</code></pre>

<p>These two steps are illustrated below.</p>

<p><img src="/wp-content/uploads/2011/02/bash-spinner-step12.png" alt="Bash Spinner Steps 1 and 2" title="Bash Spinner Steps 1 and 2" /></p>

<p>Finally, I shift <code>spinstr</code> by constructing a new string that contains the
value of <code>temp</code> and all characters from <code>spinstr</code> that aren&#8217;t in <code>temp</code>.</p>

<pre><code>local spinstr=$temp${spinstr%"$temp"}
</code></pre>

<p>The first part of this, the character rotation, appears as step 3 and the last
part, the assignment to <code>spinstr</code> appears as step 4.</p>

<p><img src="/wp-content/uploads/2011/02/bash-spinner-step34.png" alt="Bash Spinner Steps 3 and 4" title="Bash Spinner Steps 3 and 4" /></p>

<h2>Using the Bash Spinner</h2>

<p>When you have a task to run that will take a large (or unknown) amount of time
invoke it in a background subshell like this:</p>

<pre><code>(a_long_running_task) &amp;
</code></pre>

<p>Then, immediately following that invocation, call the spinner and pass it the
PID of the subshell you invoked.</p>

<pre><code>spinner $!
</code></pre>

<p>The <code>$!</code> is a <a href="http://tldp.org/LDP/abs/html/internalvariables.html" title="Bash Internal Variables">bash internal variable</a> for the PID of the
last job run in the background. In this case, it will give us the PID of the
bash shell executing our long running task.</p>

<p>When it&#8217;s all said and done you&#8217;ll have a nice and simple Bash spinner like
the one below.</p>

<p><img src="/wp-content/uploads/2011/02/bash-spinner.gif" alt="A Bash Spinner" title="A Bash Spinner" /></p>


<p>Other posts you might like:<ol><li><a href='http://fitnr.com/introducing-bash-tips-and-tricks.html' rel='bookmark' title='Permanent Link: Introducing Bash Tips and Tricks'>Introducing Bash Tips and Tricks</a></li>
<li><a href='http://fitnr.com/showing-file-download-progress-using-wget.html' rel='bookmark' title='Permanent Link: Showing File Download Progress Using Wget'>Showing File Download Progress Using Wget</a></li>
</ol></p><div class="feedflare">
<a href="http://feeds.fitnr.com/~ff/FixedInTheNextRelease?a=FTLZkyBAr-Q:TDpSedaLvJs:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/FixedInTheNextRelease?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.fitnr.com/~ff/FixedInTheNextRelease?a=FTLZkyBAr-Q:TDpSedaLvJs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/FixedInTheNextRelease?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/FixedInTheNextRelease/~4/FTLZkyBAr-Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://fitnr.com/showing-a-bash-spinner.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://fitnr.com/showing-a-bash-spinner.html</feedburner:origLink></item>
		<item>
		<title>Getting More out of Top</title>
		<link>http://feeds.fitnr.com/~r/FixedInTheNextRelease/~3/krhwZ9V2rBc/getting-more-out-of-top.html</link>
		<comments>http://fitnr.com/getting-more-out-of-top.html#comments</comments>
		<pubDate>Fri, 25 Feb 2011 14:50:47 +0000</pubDate>
		<dc:creator>Louis Marascio</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[top]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://fitnr.com/?p=591</guid>
		<description><![CDATA[Ran across this very informative video on using top. I use top like most people, which is to say I almost never touch any of the options. I have recently started to use htop quite a bit as well, since for me it has more sensible defaults and is more useful right out of the [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>Ran across this very informative video on using <a
href="http://en.wikipedia.org/wiki/Top_(software)">top</a>. I use top like most
people, which is to say I almost never touch any of the options. I have
recently started to use <a href="http://en.wikipedia.org/wiki/Htop">htop</a>
quite a bit as well, since for me it has more sensible defaults and is more
useful right out of the box. This video shows how useful and powerful top
really is, and has motivated me spend a bit more time actually digging into the
program, its options, and documentation.</p>

<iframe title="YouTube video player" width="596" height="365"
        src="http://www.youtube.com/embed/yFKRsLj_Jhg?rel=0&amp;hd=1" 
        frameborder="0" allowfullscreen></iframe>

<p>Something else I learned from this video: using <code>watch</code> and <code>/proc/interrupts</code>
to visualize interrupt load across CPUs. Very cool.</p>
<div class="feedflare">
<a href="http://feeds.fitnr.com/~ff/FixedInTheNextRelease?a=krhwZ9V2rBc:IU45kPOHpqE:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/FixedInTheNextRelease?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.fitnr.com/~ff/FixedInTheNextRelease?a=krhwZ9V2rBc:IU45kPOHpqE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/FixedInTheNextRelease?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/FixedInTheNextRelease/~4/krhwZ9V2rBc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://fitnr.com/getting-more-out-of-top.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://fitnr.com/getting-more-out-of-top.html</feedburner:origLink></item>
		<item>
		<title>Google’s 2-Step Authentication is Awesome</title>
		<link>http://feeds.fitnr.com/~r/FixedInTheNextRelease/~3/5JXP-1fJiD0/google-2-step-authentication-is-awesome.html</link>
		<comments>http://fitnr.com/google-2-step-authentication-is-awesome.html#comments</comments>
		<pubDate>Sun, 20 Feb 2011 18:25:11 +0000</pubDate>
		<dc:creator>Louis Marascio</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[authentication]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[two-factor authentication]]></category>

		<guid isPermaLink="false">http://fitnr.com/?p=562</guid>
		<description><![CDATA[How important is your email account? How much damage can someone cause if they got access to your email? In my opinion, your email account is more important than any single other account you might have. The reason is simple: with access to your email an attacker can access every account you have. All they [...]]]></description>
			<content:encoded><![CDATA[<p></p><p>How important is your email account? How much damage can someone cause if they got access to your email? In my opinion, your email account is more important than any single other account you might have. The reason is simple: with access to your email an attacker can access every account you have. All they have to do is ask the target site, let&#8217;s say Facebook, to reset your password. Facebook will happily send an email to you with a link to change your password, allowing the attacker to take control of your Facebook profile. Ouch. Imagine the amount of damage someone can do if they had unfettered access to your email for 8 hours, approximately the amount of time we all sleep each night. 8 hours before you might notice anything is wrong. Double ouch.</p>

<p>Most people take security for granted. They use the same password everywhere. If they are security conscious they might use a different password for their bank accounts. The same password. Everywhere. That means anytime a web site is compromised not only do the attackers have your standard password but they also have your email address. Email address + password = a very simple way for an attacker to automatically scan for potential accounts to compromise. You don&#8217;t have to be targeted individually because the ability to automatically try every email and password in the compromised database is trivial to acquire.</p>

<p>Google&#8217;s new 2-step authentication is a god send. In security parlance it provides what is known as <a href="http://en.wikipedia.org/wiki/Two-factor_authentication">Two-factor Authentication</a>. The basic premise is simple: by combining two secrets from two separate sources you can achieve better security. One source should be something you know&#8211;the password you remember, for example. The other secret should come from a source that is in your physical possession, often referred to as &#8220;something you have&#8221;. For Google&#8217;s 2-step authentication the first secret is your Google account password. The second secret comes from an application that is installed on your phone&#8211;something you have.</p>

<p>If you haven&#8217;t enabled it you should. Here&#8217;s why:</p>

<ol>
    <li>It uses your phone. You always have your phone on your person or very near by.</li>
    <li>It instantly makes you a non-easy target. Most attackers will happily move along when they realize your password is more than just HappyFunr0s3z.</li>
    <li>There are two backup options in case you lose your phone or it gets stolen.</li>
    <li>It stops the proliferation of your primary email password to other accounts and applications: for example your instant messaging client.</li>
</ol>

<p>Google has made this really easy. It&#8217;s great that Google has realized how important your email account really is and that it deserves the level of security typically reserved for other services. For example, many banks will provide you with a hardware token that serves the same purpose that Google&#8217;s 2-step authentication does. Unfortunately, most people don&#8217;t take advantage of their bank&#8217;s hardware token either.</p>

<p>Do this now: go read <a href="http://googleblog.blogspot.com/2011/02/advanced-sign-in-security-for-your.html">Google&#8217;s announcement about 2-step authentication</a> and then enable 2-step authentication for your Google account. Don&#8217;t wait. Just do it. Right. Now.</p>

<p>Why are you still here?</p>
<div class="feedflare">
<a href="http://feeds.fitnr.com/~ff/FixedInTheNextRelease?a=5JXP-1fJiD0:FHOYF5gOZ4g:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/FixedInTheNextRelease?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.fitnr.com/~ff/FixedInTheNextRelease?a=5JXP-1fJiD0:FHOYF5gOZ4g:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/FixedInTheNextRelease?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/FixedInTheNextRelease/~4/5JXP-1fJiD0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://fitnr.com/google-2-step-authentication-is-awesome.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://fitnr.com/google-2-step-authentication-is-awesome.html</feedburner:origLink></item>
		<item>
		<title>Showing File Download Progress Using Wget</title>
		<link>http://feeds.fitnr.com/~r/FixedInTheNextRelease/~3/svfeydWIcW0/showing-file-download-progress-using-wget.html</link>
		<comments>http://fitnr.com/showing-file-download-progress-using-wget.html#comments</comments>
		<pubDate>Fri, 11 Feb 2011 19:31:31 +0000</pubDate>
		<dc:creator>Louis Marascio</dc:creator>
				<category><![CDATA[Bash Tips and Tricks]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[progress]]></category>
		<category><![CDATA[tip]]></category>
		<category><![CDATA[wget]]></category>

		<guid isPermaLink="false">http://fitnr.com/?p=446</guid>
		<description><![CDATA[This post is part of a series: Bash Tips and Tricks. In this inaugural post for the Bash Tips and Tricks series I&#8217;ve decided to lead off with a tip that I hacked up as a result of a personal pet peeve of mine: superfluous output to stdout. When I write scripts that must perform [...]


Other posts you might like:<ol><li><a href='http://fitnr.com/introducing-bash-tips-and-tricks.html' rel='bookmark' title='Permanent Link: Introducing Bash Tips and Tricks'>Introducing Bash Tips and Tricks</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p></p><p><em>This post is part of a series: <a href="http://fitnr.com/introducing-bash-tips-and-tricks.html">Bash Tips and Tricks</a>.</em></p>

<p>In this inaugural post for the <a title="Bash Tips and Tricks" href="http://fitnr.com/category/bash-tips-and-tricks">Bash Tips and Tricks</a> series I&#8217;ve decided to lead off with a tip that I hacked up as a result of a personal pet peeve of mine: superfluous output to <code>stdout</code>. When I write scripts that must perform some long running task like downloading a large file I want the user to know something useful is happening and about how long it will take. The easiest option is to just spam stdout with as much output as possible, but I really don&#8217;t like doing this. Too much output might tell the user something is happening, but it can also hide more useful information like errors and can be deceptive as to how much progress the long running task has made. I prefer to show nice, clean output whenever possible, and I let the various programs spew to log files in case an error occurs.</p>

<p>This tip demonstrates how you can download a file using wget and show a nice, simple progress meter. It gives the user of your script exactly what they want to know: how much has been downloaded and approximately how much longer do I have to wait. Directly below you&#8217;ll find the solution. For those that are curious how it comes together keep reading and I&#8217;ll dissect the various bits of the solution to help you understand how it works.</p>

<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">download<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
<span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">local</span> <span style="color: #007800;">url</span>=<span style="color: #007800;">$1</span><br />
&nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">&quot; &nbsp; &nbsp;&quot;</span><br />
&nbsp; &nbsp; <span style="color: #c20cb9; font-weight: bold;">wget</span> <span style="color: #660033;">--progress</span>=dot <span style="color: #007800;">$url</span> <span style="color: #000000;">2</span><span style="color: #000000; font-weight: bold;">&gt;&amp;</span><span style="color: #000000;">1</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #660033;">--line-buffered</span> <span style="color: #ff0000;">&quot;%&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> \<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-u</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">&quot;s,\.,,g&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{printf(&quot;\b\b\b\b%4s&quot;, $2)}'</span><br />
&nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-ne</span> <span style="color: #ff0000;">&quot;\b\b\b\b&quot;</span><br />
&nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot; DONE&quot;</span><br />
<span style="color: #7a0874; font-weight: bold;">&#125;</span></div></div>

<p>The meat of the tip is in the call to wget. It chains together wget, grep, sed, and awk to get the percentage complete from wget. Using it is even easier:</p>

<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #007800;">file</span>=<span style="color: #ff0000;">&quot;patch-2.6.37.gz&quot;</span><br />
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">&quot;Downloading <span style="color: #007800;">$file</span>:&quot;</span><br />
download <span style="color: #ff0000;">&quot;http://www.kernel.org/pub/linux/kernel/v2.6/<span style="color: #007800;">$file</span>&quot;</span></div></div>

<p>The above usage would generate output that is nice and simple, like this:
<pre>Downloading patch-2.6.37.gz:  6%</pre></p>

<p>That is a lot better than the default wget output, which is 9 lines of crap and 1 line of useful information:</p>

<p><pre>--2011-02-10 08:08:31-- http://www.kernel.org/pub/linux/kernel/v2.6/patch-2.6.37.gz
Resolving www.kernel.org... 204.152.191.37, 149.20.20.133
Connecting to www.kernel.org|204.152.191.37|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 15430256 (15M) [application/x-gzip]
Saving to: "patch-2.6.37.gz"</p>

<p>100%[==========================================&gt;] 15,430,256  1.79M/s   in 10s</p>

<p>2011-02-10 08:08:42 (1.48 MB/s) - "patch-2.6.37.gz" saved [15430256/15430256]
</pre></p>

<p>You can see this tip and the code behind it in the <a href="http://github.com/marascio/bash-tips-and-tricks" alt="Bash Tips and Tricks GitHub repository">GitHub repository</a> for the <a href="http://fitnr.com/bash-tips-and-tricks">Bash Tips and Tricks</a> series.</p>

<p>Here&#8217;s how it all works.</p>

<p>First, let&#8217;s understand the call to wget:</p>

<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">wget</span> <span style="color: #660033;">--progress</span>=dot <span style="color: #007800;">$url</span> <span style="color: #000000;">2</span><span style="color: #000000; font-weight: bold;">&gt;&amp;</span><span style="color: #000000;">1</span></div></div>

<p>The default wget output is about 10 lines of which only 1 is really useful, the progress bar line. Does the user really care to know that the HTTP request was sent or that wget is waiting on a response? No, not really. Thankfully, wget has a command line option that can help us out.</p>

<p>To get a simplified status display from wget I use the <code>--progress=dot</code> option. This will give us status output as follows:
<pre>--2011-02-10 08:08:31-- http://www.kernel.org/pub/linux/kernel/v2.6/patch-2.6.37.gz
Resolving www.kernel.org... 204.152.191.37, 149.20.20.133
Connecting to www.kernel.org|204.152.191.37|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 15430256 (15M) [application/x-gzip]
Saving to: "patch-2.6.37.gz"</p>

<p>0K .......... .......... .......... .......... ..........  0%  189K 80s
  50K .......... .......... .......... .......... ..........  0%  655K 51s
 150K .......... .......... .......... .......... ..........  1%  686K 40s
 200K .......... .......... .......... .......... ..........  1%  743K 36s
 300K .......... .......... .......... .......... ..........  2%  767K 29s
 350K .......... .......... .......... .......... ..........  2%  770K 28s
 [... etc ...]
</pre></p>

<p>Now that wget is giving us some more reasonable to work with we can use grep to get the information that is relevant to us. For this tip the only thing I&#8217;m interested in are lines with percent signs (%) in them. Here is our call to grep:</p>

<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #660033;">--line-buffered</span> <span style="color: #ff0000;">&quot;%&quot;</span></div></div>

<p>The &#8216;&#8211;line-buffered- flag is very important. Without it we won&#8217;t see much if any progress changes because grep will be buffering until EOF. Telling grep to buffer until end of line means it will read one line, match the pattern, and write any matched output on a line by line basis. We now have something like this:
<pre>
   0K .......... .......... .......... .......... ..........  0%  189K 80s
  50K .......... .......... .......... .......... ..........  0%  655K 51s
 150K .......... .......... .......... .......... ..........  1%  686K 40s
 200K .......... .......... .......... .......... ..........  1%  743K 36s
 300K .......... .......... .......... .......... ..........  2%  767K 29s
 350K .......... .......... .......... .......... ..........  2%  770K 28s
 [... etc ...]
</pre></p>

<p>The next step is to get rid anything that might be superfluous or break our word oriented parsing we&#8217;re going to do with awk. Namely, ew need to get rid of all those dots. The big reason here is that the number of dots that appears is not consistent. It might be that near the end of the file we get a line with only 3 dots. This isn&#8217;t good since we&#8217;re going to use awk in the last step to extract the information we want. So, let&#8217;s nuke those dots.</p>

<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-u</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">&quot;s,\.,,g&quot;</span></div></div>

<p>This is pretty straightforward. We have a regular expression that matches a dot (.) and we replace it with nothing, nuking all dots that might appear on the input stream. The only real trick here is to use the &#8216;-u&#8217; flag, which is short for &#8216;&#8211;unbuffered&#8217;. As you can imagine, the reasoning for this is the same as in the grep explanation above, we want output to show up on stdin as soon as possible, not at EOF. After applying the sed transoformation our input to the last program in the pipeline will look like this:</p>

<p><pre>
   0K 0%  189K 80s
  50K 0%  655K 51s
 150K 1%  686K 40s
 200K 1%  743K 36s
 300K 2%  767K 29s
 350K 2%  770K 28s
</pre></p>

<p>We are going to use awk to extract the information we want. Our invocation of awk is straightforward:</p>

<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:100%;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{printf(&quot;\b\b\b\b%4s&quot;, $2)}'</span></div></div>

<p>The fields are separated by space and we take the 2nd field with is the percent of the download that we have completed. The backspace characters (\b) are written first to back us up on the terminal then we write out a four character percentage completion string. awk is the last tool in our pipeline so it will now write to stdout, and this is what we&#8217;ll see:</p>

<p><pre>  2%</pre></p>

<p>A right aligned, space padded, four character string with the percentage of the download we&#8217;ve completed.</p>


<p>Other posts you might like:<ol><li><a href='http://fitnr.com/introducing-bash-tips-and-tricks.html' rel='bookmark' title='Permanent Link: Introducing Bash Tips and Tricks'>Introducing Bash Tips and Tricks</a></li>
</ol></p><div class="feedflare">
<a href="http://feeds.fitnr.com/~ff/FixedInTheNextRelease?a=svfeydWIcW0:WlfvZL8sofs:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/FixedInTheNextRelease?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.fitnr.com/~ff/FixedInTheNextRelease?a=svfeydWIcW0:WlfvZL8sofs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/FixedInTheNextRelease?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/FixedInTheNextRelease/~4/svfeydWIcW0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://fitnr.com/showing-file-download-progress-using-wget.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://fitnr.com/showing-file-download-progress-using-wget.html</feedburner:origLink></item>
		<item>
		<title>Introducing Bash Tips and Tricks</title>
		<link>http://feeds.fitnr.com/~r/FixedInTheNextRelease/~3/_Z5HsWFLHXE/introducing-bash-tips-and-tricks.html</link>
		<comments>http://fitnr.com/introducing-bash-tips-and-tricks.html#comments</comments>
		<pubDate>Mon, 07 Feb 2011 20:23:09 +0000</pubDate>
		<dc:creator>Louis Marascio</dc:creator>
				<category><![CDATA[Bash Tips and Tricks]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[series]]></category>
		<category><![CDATA[tip]]></category>

		<guid isPermaLink="false">http://fitnr.com/?p=441</guid>
		<description><![CDATA[This post is part of a series: Bash Tips and Tricks. I&#8217;ve been hacking a lot of Bash lately. Tariten Trading uses Linux end-to-end so I&#8217;ve had ample opportunity to scrub off the rust that has accumulated on my shell scripting skills. I&#8217;ve decided to write an irregular series highlighting some of the more interesting [...]]]></description>
			<content:encoded><![CDATA[<p></p><p><em>This post is part of a series: <a href="http://fitnr.com/introducing-bash-tips-and-tricks.html">Bash Tips and Tricks</a>.</em></p>

<p>I&#8217;ve been hacking a lot of <a title="GNU Bash" href="http://www.gnu.org/software/bash/">Bash</a> lately. <a title="Tariten Trading" href="http://taritentrading.com">Tariten Trading</a> uses Linux end-to-end so I&#8217;ve had ample opportunity to scrub off the rust that has accumulated on my shell scripting skills. I&#8217;ve decided to write an irregular series highlighting some of the more interesting Bash snippets I create and come across.</p>

<p>One of the great things about Bash is that it not only teaches you the syntax of the language, but it also imparts the syntax and philosophy of the GNU and Unix tool chain that underpins everything you do. Indeed, the syntax of the Bash is only a small part of truly learning to write effective Bash scripts; a much larger part involves learning the tools that underpin the entire environment, such as Sed and Awk.</p>

<p>This won&#8217;t be a tutorial on how to use Bash, but will instead focus on specific recipes that people familiar with the language and environment can put to use. I&#8217;ll try to keep each snippet short and sweet, and where available I&#8217;ll offer alternate solutions and source references such as links to relevant <a title="Stack Overflow" href="http://stackoverflow.com">Stack Overflow</a> questions.</p>

<p>All posts in the series, most recent is first:</p>

<ol>
    <li><a href="http://fitnr.com/bash-comparing-version-strings.html">Comparing Version Strings with Bash</a></li>
        <li><a href="http://fitnr.com/showing-a-bash-spinner.html">Showing a Bash Spinner for Long Running Tasks</a></li>
    <li><a href="http://fitnr.com/showing-file-download-progress-using-wget.html">Showing File Download Progress Using Wget</a></li>
</ol>
<div class="feedflare">
<a href="http://feeds.fitnr.com/~ff/FixedInTheNextRelease?a=_Z5HsWFLHXE:Ae7BD21__G4:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/FixedInTheNextRelease?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.fitnr.com/~ff/FixedInTheNextRelease?a=_Z5HsWFLHXE:Ae7BD21__G4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/FixedInTheNextRelease?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/FixedInTheNextRelease/~4/_Z5HsWFLHXE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://fitnr.com/introducing-bash-tips-and-tricks.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://fitnr.com/introducing-bash-tips-and-tricks.html</feedburner:origLink></item>
		<item>
		<title>Bringing FITNR Back Online</title>
		<link>http://feeds.fitnr.com/~r/FixedInTheNextRelease/~3/zyH-7Jmadlg/bringing-fitnr-back-online.html</link>
		<comments>http://fitnr.com/bringing-fitnr-back-online.html#comments</comments>
		<pubDate>Fri, 04 Feb 2011 22:40:23 +0000</pubDate>
		<dc:creator>Louis Marascio</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[fitnr]]></category>

		<guid isPermaLink="false">http://fitnr.com/?p=426</guid>
		<description><![CDATA[The control room monkeys have been hard at work for the past several days bringing the site back online. Apparently I did some maintenance on the web server about a month ago and forgot to restart the service. Bit rot set in and various things got out of date and broken. Anyhow, this only came [...]]]></description>
			<content:encoded><![CDATA[<p><a class="post_image_link" href="http://fitnr.com/bringing-fitnr-back-online.html" title="Permanent link to Bringing FITNR Back Online"><img class="post_image alignnone" src="http://fitnr.com/wp-content/uploads/2011/02/control-room.jpg" width="500" height="333" alt="Photo credit: Urban~Spaceman on Flickr: http://www.flickr.com/photos/urban-spaceman/4650149124/" /></a>
</p><p>The control room monkeys have been hard at work for the past several days bringing the site back online. Apparently I did some maintenance on the web server about a month ago and forgot to restart the service. Bit rot set in and various things got out of date and broken. Anyhow, this only came to my attention because of some recent events that I&#8217;ll go into more detail on in a later post. Needless to say, Fixed in the Next Release is now back online and functioning as expected. Expect more soon&#8230;
<em></em></p>

<p><em>(photo credit: </em><a href="http://www.flickr.com/photos/urban-spaceman/4650149124/"><em>Urban~Spaceman on Flickr</em></a><em>)</em></p>
<div class="feedflare">
<a href="http://feeds.fitnr.com/~ff/FixedInTheNextRelease?a=zyH-7Jmadlg:JYP3QhqoNc0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/FixedInTheNextRelease?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.fitnr.com/~ff/FixedInTheNextRelease?a=zyH-7Jmadlg:JYP3QhqoNc0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/FixedInTheNextRelease?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/FixedInTheNextRelease/~4/zyH-7Jmadlg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://fitnr.com/bringing-fitnr-back-online.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://fitnr.com/bringing-fitnr-back-online.html</feedburner:origLink></item>
		<item>
		<title>Risk and Responsibility</title>
		<link>http://feeds.fitnr.com/~r/FixedInTheNextRelease/~3/OMmY4CDQIYE/risk-and-responsibility.html</link>
		<comments>http://fitnr.com/risk-and-responsibility.html#comments</comments>
		<pubDate>Sat, 27 Mar 2010 15:48:35 +0000</pubDate>
		<dc:creator>Louis Marascio</dc:creator>
				<category><![CDATA[Building Companies]]></category>
		<category><![CDATA[Markets and Trading]]></category>
		<category><![CDATA[government]]></category>
		<category><![CDATA[investing]]></category>
		<category><![CDATA[regulations]]></category>
		<category><![CDATA[startups]]></category>

		<guid isPermaLink="false">http://fitnr.com/?p=372</guid>
		<description><![CDATA[There was very long discussion about Fred Wilson&#8217;s post on the collateral damage that might be caused by Senator Dodd&#8217;s financial overhaul bill. In particular there is language in the bill modifying what an &#8220;accredited investor&#8221; is, significantly raising the financial bar for people to invest in startups as angel investors. Folks are upset about [...]]]></description>
			<content:encoded><![CDATA[<p><a class="post_image_link" href="http://fitnr.com/risk-and-responsibility.html" title="Permanent link to Risk and Responsibility"><img class="post_image alignnone" src="http://fitnr.com/wp-content/uploads/2010/03/risk-seawall.jpg" width="500" height="315" alt="Risk" /></a>
</p><p>There was very long discussion about <a href="http://www.avc.com/a_vc/2010/03/startups-get-hit-by-shrapnel-in-the-banking-bill.html" target="_blank">Fred Wilson&#8217;s post</a> on the collateral damage that might be caused by <a href="http://banking.senate.gov/public/_files/ChairmansMark31510AYO10306_xmlFinancialReformLegislationBill.pdf" target="_blank">Senator Dodd&#8217;s financial overhaul bill</a>. In particular there is language in the bill modifying what an &#8220;accredited investor&#8221; is, significantly raising the financial bar for people to invest in startups as angel investors.</p>

<p>Folks are upset about this because it will make it harder for upstart businesses to get capital to start and grow. Suggested fixes include leaving the current language alone to lowering the bar based on invested capital to some artificially low number—Fred suggests investments up to $25k be exempted, for example.</p>

<p>I got into the discussion asking simply, &#8220;Why 25k?&#8221; The limit is entirely arbitrary so why set a limit at all. It is not the government&#8217;s responsibility to tell its citizens how to spend, invest, or waste their money. Setting these sorts of limits only confuses the legal situation and shifts the burden of responsibility in a fuzzy, non-deterministic way. The result is a mess of regulation that increases the cost of doing business with no real gain other than reducing bad publicity when some grandmother loses money investing in a young wiz-kid&#8217;s high-tech startup.</p>

<p>Proponents of investor accreditation suggest that the instruments are simply too complex for an average person to understand and it is too easy for sleaze-balls to take advantage of unsuspecting, uninformed people. This might be true, but then why does the government only provide protection around investments? The government does not tell me whether I&#8217;m suited to purchase a house nor do they advise for or against my trip to Las Vegas. This is simply selective nanny-state politics.</p>

<p>To be clear: the government absolutely has a role here. In my opinion that role is to ensure that sufficient law and regulation exist to ensure that people are provided sufficient information to make an informed decision—they should not be trying to define which of its citizens are wise enough to make such decisions. However, if practicality requires such an accredited investor status to exist then the government should solve the real problem. Accredited investors should be  required to demonstrate proficiency to prove their ability to make  informed risk decisions. Income and wealth levels are terrible  predictors of this knowledge.</p>

<p>(photo credit: <a href="http://www.flickr.com/photos/bluesquarething/4376775880/" target="_blank">bluesquarething on Flickr</a>)</p>
<div class="feedflare">
<a href="http://feeds.fitnr.com/~ff/FixedInTheNextRelease?a=OMmY4CDQIYE:9dW5AaVvjSU:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/FixedInTheNextRelease?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.fitnr.com/~ff/FixedInTheNextRelease?a=OMmY4CDQIYE:9dW5AaVvjSU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/FixedInTheNextRelease?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/FixedInTheNextRelease/~4/OMmY4CDQIYE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://fitnr.com/risk-and-responsibility.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://fitnr.com/risk-and-responsibility.html</feedburner:origLink></item>
		<item>
		<title>Getting Things Done: An Entrepreneurial Prerequisite</title>
		<link>http://feeds.fitnr.com/~r/FixedInTheNextRelease/~3/_lDYsFl0dic/getting-things-done-an-entrepreneurial-prerequisite.html</link>
		<comments>http://fitnr.com/getting-things-done-an-entrepreneurial-prerequisite.html#comments</comments>
		<pubDate>Sat, 02 Jan 2010 16:00:39 +0000</pubDate>
		<dc:creator>Louis Marascio</dc:creator>
				<category><![CDATA[Building Companies]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[entrepreneurs]]></category>
		<category><![CDATA[getting things done]]></category>
		<category><![CDATA[startups]]></category>

		<guid isPermaLink="false">http://fitnr.com/?p=59</guid>
		<description><![CDATA[Mark Suster, a two-time entrepreneur turned venture capitalist, is doing a series of posts on his blog about Entrepreneurial DNA. Mark&#8217;s series is going through 11 key attributes that successful entrepreneurs need to have. I have enjoyed reading the series thus far but I think Mark left out the most important attribute of all. Mark&#8217;s [...]


Other posts you might like:<ol><li><a href='http://fitnr.com/onwards-and-upwards-goodbye-cisco-hello-tbd.html' rel='bookmark' title='Permanent Link: Onwards and Upwards: Goodbye Cisco, Hello TBD'>Onwards and Upwards: Goodbye Cisco, Hello TBD</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p></p><p><a href="http://www.bothsidesofthetable.com/" target="_blank">Mark Suster</a>, a two-time entrepreneur turned venture capitalist, is doing a series of posts on his blog about <a href="http://www.bothsidesofthetable.com/entrepreneur-dna/" target="_blank">Entrepreneurial DNA</a>. Mark&#8217;s series is going through 11 key attributes that successful entrepreneurs need to have. I have enjoyed reading the series thus far but I think Mark left out the most important attribute of all.</p>

<p>Mark&#8217;s list begins with what he believes to be the key attribute: <a href="http://www.bothsidesofthetable.com/2009/12/15/what-makes-an-entrepreneur-111-tenacity/" target="_blank">tenacity</a>. Quoting from the article:</p>

<blockquote>Tenacity is probably the most important attribute in an entrepreneur.  It’s the person who never gives up – who never accepts “no” for an answer.  The world is filled with doubters who say that things can’t be done and then pronounce after the fact that they “knew it all along.”  Look at Google.  You think that anybody really believed 1999 that two young kids out of Stanford had a shot at unseating Yahoo!, Excite, Ask Jeeves and Lycos?</blockquote>

<p>I agree with everything Mark is saying about not giving up, but I would disagree at its the &#8220;most important&#8221; attribute. In my mind the most critical requirement for any entrepreneur is whether they Get Things Done.</p>

<h2>Let&#8217;s Git-R-Done</h2>

<p><a href="http://fitnr.com/wp-content/uploads/2010/01/larry-the-cable-guy-git-r-done.jpg"><img class="size-medium wp-image-332 alignleft" title="larry-the-cable-guy-git-r-done" src="http://fitnr.com/wp-content/uploads/2010/01/larry-the-cable-guy-git-r-done-300x214.jpg" alt="Larry the Cable Guy" width="300" height="214" /></a></p>

<p><a href="http://en.wikipedia.org/wiki/Larry_the_Cable_Guy" target="_blank">Larry the Cable Guy</a> is an American Redneck comedian famous for the phrase, &#8220;Git-r-done&#8221;. In my mind, this should be the rallying cry of every founder as they work through obstacle after obstacle in their quest to start a company.</p>

<p>Getting this done is so key you might think of it as a prerequisite to starting a company. If you can&#8217;t get things done, it doesn&#8217;t matter how much tenacity you have. It doesn&#8217;t matter how hard you work. Nothing matters if you can&#8217;t move the ball forward.</p>

<p>In real world terms this can manifest itself in many ways. Ask yourself these questions:</p>

<ul>
    <li>Am I working on the absolute most important task I could be?</li>
    <li>Am I working on something that will eliminate an obstacle to my success?</li>
    <li>Am I avoiding the hard choices that need to be made to evolve my company and product?</li>
    <li>Did I just walk away from the most important opportunity in the early life of my company because I thought it was impossible to grasp?</li>
    <li>When you see an obstacle in front of you is your initial reaction anything other than to move forward, finding a way through, around, or over the problem?</li>
</ul>

<p>Seemingly every day or week or a young startup&#8217;s life the founders are presented with new and unknowable challenges. In fact, I tend of think of this as an indicator of potential success. If you don&#8217;t feel as if you&#8217;re on the razors edge then you&#8217;re not pushing hard enough.</p>

<h2>Getting Things Done at Metreos</h2>

<p>At <a href="http://en.wikipedia.org/wiki/Metreos" target="_blank">Metreos</a> there was one specific event that was critical to our success. It was a Monday morning, if I recall correctly, and we got a call from a potential customer. At this time, we had no customers at all, just a bunch of people kicking the tires. This customer had been evaluating the product but we couldn&#8217;t get them over the line in terms of buying. Their question to me was simple, &#8220;We&#8217;re about to buy a product from one of your competitors. We like yours better, but there is a key feature that is missing. If you can add that feature by Friday, we&#8217;ll go with yours instead.&#8221;</p>

<p>Now, calling what they wanted a feature is really doing it a disservice. What they really wanted was an entire application. You see, at Metreos we build development tools. This potential customer wanted to use our tools but they also needed this particular application more. So, the customer decided to see if they could get both: Metreos would very quickly build the application using our tools, and the customer would buy both the application and the development platform they wanted.</p>

<p>The only problem was the application they wanted could easily take 3 months to build and they had given us a week to prove the key tenet of our sales pitch, that using our development tools would significantly reduce the amount of time required to build these applications. Of course, in my mind, there was no way we weren&#8217;t going to get this done.</p>

<p>Late Friday afternoon we shipped the application to the customer. It certainly wasn&#8217;t polished, but it worked and it proved to them that not only did we really want their business but the underlying tenet of our product, that you could very quickly build telephony applications, was true. This was our first customer, and they went on to be our biggest and best customer as well.</p>

<p>Getting things done is the most important attribute any entrepreneur can have. If you can&#8217;t get things done then no amount of hard work will make you a success.</p>


<p>Other posts you might like:<ol><li><a href='http://fitnr.com/onwards-and-upwards-goodbye-cisco-hello-tbd.html' rel='bookmark' title='Permanent Link: Onwards and Upwards: Goodbye Cisco, Hello TBD'>Onwards and Upwards: Goodbye Cisco, Hello TBD</a></li>
</ol></p><div class="feedflare">
<a href="http://feeds.fitnr.com/~ff/FixedInTheNextRelease?a=_lDYsFl0dic:EKyBqEc4L_M:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/FixedInTheNextRelease?d=qj6IDK7rITs" border="0"></img></a> <a href="http://feeds.fitnr.com/~ff/FixedInTheNextRelease?a=_lDYsFl0dic:EKyBqEc4L_M:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/FixedInTheNextRelease?d=yIl2AUoC8zA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/FixedInTheNextRelease/~4/_lDYsFl0dic" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://fitnr.com/getting-things-done-an-entrepreneurial-prerequisite.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://fitnr.com/getting-things-done-an-entrepreneurial-prerequisite.html</feedburner:origLink></item>
	</channel>
</rss>

