<?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/"
	>

<channel>
	<title>KATR Software Inc.</title>
	<atom:link href="http://www.katr.com/kblog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.katr.com/kblog</link>
	<description>Break free from the rat race</description>
	<pubDate>Sat, 26 Mar 2011 20:48:28 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Monitoring and stopping invalid ssh login attempts with perl and iptables</title>
		<link>http://www.katr.com/kblog/2011/03/monitoring-and-stopping-invalid-ssh-login-attempts-with-perl-and-iptables/</link>
		<comments>http://www.katr.com/kblog/2011/03/monitoring-and-stopping-invalid-ssh-login-attempts-with-perl-and-iptables/#comments</comments>
		<pubDate>Sat, 26 Mar 2011 16:43:04 +0000</pubDate>
		<dc:creator>Bill</dc:creator>
		
		<category><![CDATA[General Computing]]></category>

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

		<guid isPermaLink="false">http://www.katr.com/kblog/?p=283</guid>
		<description><![CDATA[So I want to start this article right off by stating that I am NOT a security expert.  That being said however, does not mean that security is of no interest to me.  So the story begins as I was reviewing my server logs and I noticed numerous entries like the following in [...]]]></description>
			<content:encoded><![CDATA[<p>So I want to start this article right off by stating that I am NOT a security expert.  That being said however, does not mean that security is of no interest to me.  So the story begins as I was reviewing my server logs and I noticed numerous entries like the following in my auth.log:</p>
<div class="codecolorer-container text " style="overflow:auto;white-space:nowrap;width:500px"><div class="text codecolorer" style="font-family:Monaco,Lucida Console,monospace">Mar 26 01:11:46 lxop1 sshd[7412]: Failed password for root from 207.234.224.189 port 51151 ssh2</div></div>
<p>AND</p>
<div class="codecolorer-container text " style="overflow:auto;white-space:nowrap;width:500px"><div class="text codecolorer" style="font-family:Monaco,Lucida Console,monospace">Mar 25 11:49:57 lxop1 sshd[1686]: Invalid user toor from 124.228.136.137</div></div>
<p>This clearly represented some sort of attack on my system, whether <strong>&#8220;bot&#8221;</strong> (program) or <strong>&#8220;butt&#8221;</strong> (human).  In the past I&#8217;ve experienced similar problems and one of my most clever, in my opinion, solution was to write a custom log &#8220;tailer&#8221; in C that watched for these entries and then dealt with them by adding iptables rules to drop those packets.  That solution actually worked great&#8230;.except that somehow I managed to misplace that source code.  <SIGH>It took me a while to write, test, and cleanup that code to be the fine oiled machine that it had once been, but alas I endeavored to write it again (better this time of course) in order to protect this system.  </p>
<p>I think that I got as far as:</p>
<div class="codecolorer-container c " style="overflow:auto;white-space:nowrap;width:435px"><div class="c codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co2">#include &lt;stdio.h&gt;</span><br />
<span class="kw4">int</span> main<span class="br0">&#40;</span> <span class="kw4">int</span> argc<span class="sy0">,</span> <span class="kw4">char</span> <span class="sy0">**</span>argv <span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; <span class="kw1">return</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div></div>
<p>&#8230;at which point I said to my self, <strong>&#8220;self, this is stupid, there must be a better way&#8221;</strong>.  So I started thinking, <strong>&#8220;Hey, this is the land of unix and a gazillion utilities.  Can&#8217;t I put something together with tools that does the same thing&#8221;</strong>.  And the answer is, of course you can, this is unix&#8230;or linux rather.  Actually unix only has one half of a gazillion tools.  Linux has added another half gazillion to bring that up to a full gazillion.  </p>
<p>Having done quite a bit of perl in the past I decide that this would meet the need nicely and has hence brought forth <strong>watcher.pl</strong>, the solution to this particular problem.  </p>
<p>The summary version of watcher.pl is that it opens a pipe to a &#8220;tail -f&#8221; and watches for the above two patterns and then goes into action when it detects them.  It isolates the IPs, permits a small window of failure in order to allow the accidental login failures that we all generate, and then after X number of violations in Y period of time, blocks the IP address with iptables.  Here is the code:</p>
<div class="codecolorer-container perl " style="overflow:auto;white-space:nowrap;width:700px"><div class="perl codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co1">#!/usr/bin/perl</span><br />
<br />
<span class="co1"># ************************************************************************************************</span><br />
<span class="co1"># * watcher.pl - Watches for unauthorized user login attempts and when detected, evaluates</span><br />
<span class="co1"># * whether this appears to be a malicious attack and blocks the IP with iptables. &nbsp;This script</span><br />
<span class="co1"># * needs to run as root and should be set to startup at boot (or you can nohup it manually after)</span><br />
<span class="co1"># *</span><br />
<span class="co1"># * KATR Inc.</span><br />
<span class="co1"># * Author: Bill Johnson</span><br />
<span class="co1"># * Web: http://www.katr.com</span><br />
<span class="co1"># * Date: 03/26/2011</span><br />
<span class="co1"># * Version: 1.0</span><br />
<span class="co1"># * Requirements: Perl 5.x or better, Linux or compatible OS</span><br />
<span class="co1"># *</span><br />
<span class="co1"># * Disclaimer: KATR Inc. and the author provides no guarantee, warranty, or liability of the</span><br />
<span class="co1"># * suitability or viability of running this script on your server. &nbsp;The individual or organization</span><br />
<span class="co1"># * utilizing this application assumes all risk and responsibility of the consequences.</span><br />
<span class="co1"># * Please review the code to make sure that the application meets your needs and complies</span><br />
<span class="co1"># * with your standards for security and safety.</span><br />
<span class="co1"># *</span><br />
<span class="co1"># * Support: You may need to update the paths or names of programs called from within this</span><br />
<span class="co1"># * script to support your particular version or OS. &nbsp;Search for ENVSPECIFIC to find all</span><br />
<span class="co1"># * occurrances. You may contact the author by filling out the contact form at:</span><br />
<span class="co1"># *</span><br />
<span class="co1"># * http://www.katr.com/contactus.php</span><br />
<span class="co1"># *</span><br />
<span class="co1"># * LICENSE: Simple, you are permitted to use this personally or commercially. &nbsp;Just don't take</span><br />
<span class="co1"># * &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;credit for it. &nbsp;If you like it, link back to our site. &nbsp;If you really like it, </span><br />
<span class="co1"># * &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;support it by purchasing one of our 99 cent mobile apps from Apple or Google. &nbsp;</span><br />
<span class="co1"># * &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Just search for &quot;KATR Software&quot; in either market.</span><br />
<span class="co1"># ************************************************************************************************</span><br />
<br />
<span class="co1"># ************************************************************************************************</span><br />
<span class="co1"># (ENVSPECIFIC)</span><br />
<span class="co1"># Depending upon your platform/distribution, the following commands may need to be changed</span><br />
<span class="co1"># ************************************************************************************************</span><br />
<span class="kw1">my</span> <span class="re0">$IPTABLES</span> <span class="sy0">=</span> <span class="st0">&quot;/sbin/iptables -I INPUT -s [IPADDRESS] -j DROP&quot;</span><span class="sy0">;</span><br />
<span class="kw1">my</span> <span class="re0">$LOGTAIL</span> <span class="sy0">=</span> <span class="st0">&quot;tail -n0 -f /var/log/auth.log|&quot;</span><span class="sy0">;</span><br />
<br />
<span class="co1"># ************************************************************************************************</span><br />
<span class="co1"># (ENVSPECIFIC)</span><br />
<span class="co1"># You will probably want to change the location of this logfile</span><br />
<span class="co1"># ************************************************************************************************</span><br />
<span class="kw1">my</span> <span class="re0">$Logfile</span><span class="sy0">=</span><span class="st0">&quot;/root/scripts/watcher.log&quot;</span><span class="sy0">;</span> &nbsp; &nbsp; &nbsp;<span class="co1"># Where to send the output.</span><br />
<span class="kw1">my</span> <span class="re0">%rogueIPs</span> <span class="sy0">=</span> <span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1"># The array of offending IPs</span><br />
<span class="kw1">my</span> <span class="re0">$killEnabled</span> <span class="sy0">=</span> <span class="nu0">1</span><span class="sy0">;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; <span class="co1"># Set to 1 when ready to drop connections</span><br />
<span class="kw1">my</span> <span class="re0">$maxFailures</span> <span class="sy0">=</span> <span class="nu0">3</span><span class="sy0">;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1"># Maximum CRITICAL failures before blocking</span><br />
<span class="kw1">my</span> <span class="re0">$criticalWindow</span> <span class="sy0">=</span> <span class="nu0">60</span><span class="sy0">*</span><span class="nu0">5</span><span class="sy0">;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1"># The number of seconds where between logins</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># where a login failure is considered CRITICAL</span><br />
<br />
<span class="co1"># ************************************************************************************************</span><br />
<span class="co1"># (ENVSPECIFIC)</span><br />
<span class="co1"># Depending upon your platform/distribution, the following tail command may need to be changed</span><br />
<span class="co1"># ************************************************************************************************</span><br />
<span class="co1">#open( AUTH, &quot;tail -n0 -f /var/log/auth.log|&quot; );</span><br />
<a href="http://perldoc.perl.org/functions/open.html"><span class="kw3">open</span></a><span class="br0">&#40;</span> AUTH<span class="sy0">,</span> <span class="re0">$LOGTAIL</span> <span class="br0">&#41;</span><span class="sy0">;</span><br />
<a href="http://perldoc.perl.org/functions/open.html"><span class="kw3">open</span></a><span class="br0">&#40;</span> LOG<span class="sy0">,</span> <span class="st0">&quot;&gt;&gt;$Logfile&quot;</span> <span class="br0">&#41;</span><span class="sy0">;</span><br />
<a href="http://perldoc.perl.org/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span>LOG <span class="st0">&quot;%s Watcher starting, kill is %s<span class="es0">\n</span>&quot;</span><span class="sy0">,</span> now<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="br0">&#40;</span><span class="re0">$killEnabled</span><span class="sy0">?</span><span class="st0">&quot;enabled&quot;</span><span class="sy0">:</span><span class="st0">&quot;DISABLED&quot;</span> <span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1"># ************************************************************************************************</span><br />
<span class="co1"># * Turn off output buffer to the LOG</span><br />
<span class="co1"># ************************************************************************************************</span><br />
<span class="kw1">my</span> <span class="re0">$ofh</span> <span class="sy0">=</span> <a href="http://perldoc.perl.org/functions/select.html"><span class="kw3">select</span></a> LOG<span class="sy0">;</span><br />
<span class="co5">$|</span> <span class="sy0">=</span> <span class="nu0">1</span><span class="sy0">;</span><br />
<a href="http://perldoc.perl.org/functions/select.html"><span class="kw3">select</span></a> <span class="re0">$ofh</span><span class="sy0">;</span><br />
<br />
<span class="co1"># ************************************************************************************************</span><br />
<span class="co1"># * Read from the tail pipe...this is a &quot;forever&quot; loop as configured today.</span><br />
<span class="co1"># ************************************************************************************************</span><br />
<span class="kw1">while</span><span class="br0">&#40;</span> <span class="re4">&lt;AUTH&gt;</span> <span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; <br />
&nbsp; <span class="co1"># ************************************************************************************************</span><br />
&nbsp; <span class="co1"># * We match on the following two patterns from auth.log:</span><br />
&nbsp; <span class="co1"># * Pattern: Failed password for root from 119.149.189.52 port 44095 ssh2</span><br />
&nbsp; <span class="co1"># * Pattern: Invalid user magic from 64.182.46.126</span><br />
&nbsp; <span class="co1"># ************************************************************************************************</span><br />
&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span> <span class="co2">/(Failed) password for ([^\s]+) from ([^\s]+) /</span> <span class="sy0">||</span> <span class="co2">/(Invalid) user ([^\s]+) from ([^\s]+)/</span><span class="br0">&#41;</span><br />
&nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">my</span> <span class="re0">$type</span><span class="sy0">=</span><span class="co3">$1</span><span class="sy0">;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Will be &quot;Failed&quot; or &quot;Invalid&quot;</span><br />
&nbsp; &nbsp; <span class="kw1">my</span> <span class="re0">$user</span><span class="sy0">=</span><span class="co3">$2</span><span class="sy0">;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Username recorded in the log</span><br />
&nbsp; &nbsp; <span class="kw1">my</span> <span class="re0">$ip</span><span class="sy0">=</span><span class="co3">$3</span><span class="sy0">;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># IP recorded in the log</span><br />
&nbsp; &nbsp; <span class="kw1">my</span> <span class="re0">$critical</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1"># The number of CRITICAL failures for this IP</span><br />
&nbsp; &nbsp; <span class="kw1">my</span> <span class="re0">$time</span> <span class="sy0">=</span> <a href="http://perldoc.perl.org/functions/time.html"><span class="kw3">time</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># The current time since epoch</span><br />
&nbsp; &nbsp; <span class="kw1">my</span> <span class="re0">$flag</span> <span class="sy0">=</span> <span class="st0">&quot;&quot;</span><span class="sy0">;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># A flag for indicating if this was counted as CRITICAL or NOT</span><br />
&nbsp; &nbsp; <span class="kw1">my</span> <span class="re0">$delta</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Time delta since the last failure for this IP</span><br />
<br />
&nbsp; &nbsp; <span class="co1"># ************************************************************************************************</span><br />
&nbsp; &nbsp; <span class="co1"># * If we haven't seen this IP before, add it to the list</span><br />
&nbsp; &nbsp; <span class="co1"># ************************************************************************************************</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span> <span class="sy0">!</span><a href="http://perldoc.perl.org/functions/exists.html"><span class="kw3">exists</span></a> <span class="re0">$rogueIPs</span><span class="br0">&#123;</span><span class="re0">$ip</span><span class="br0">&#125;</span> <span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="re0">%detail</span><span class="sy0">=</span><span class="br0">&#40;</span><span class="st0">&quot;time&quot;</span><span class="sy0">=&gt;</span><span class="re0">$time</span><span class="sy0">,</span> <span class="st0">&quot;total&quot;</span><span class="sy0">=&gt;</span><span class="nu0">1</span><span class="sy0">,</span> <span class="st0">&quot;critical&quot;</span><span class="sy0">=&gt;</span><span class="nu0">1</span> <span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="re0">$rogueIPs</span><span class="br0">&#123;</span><span class="re0">$ip</span><span class="br0">&#125;</span><span class="sy0">=</span><span class="re0">$detail</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="re0">$critical</span> <span class="sy0">=</span> <span class="nu0">1</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="re0">$flag</span><span class="sy0">=</span><span class="st0">&quot;NEW&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="co1">#printf(LOG &quot;%s IP: %s, User: %s - First failure (%s)\n&quot;, now(), $ip, $user, $type);</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="kw1">else</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="co1"># ************************************************************************************************</span><br />
&nbsp; &nbsp; &nbsp; <span class="co1"># * We have seen this IP, now &quot;guess&quot; as to it's intentions</span><br />
&nbsp; &nbsp; &nbsp; <span class="co1"># ************************************************************************************************</span><br />
&nbsp; &nbsp; &nbsp; <span class="re0">$flag</span><span class="sy0">=</span><span class="st0">&quot;ADD&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="re0">$detail</span><span class="sy0">=</span><span class="re0">$rogueIPs</span><span class="br0">&#123;</span><span class="re0">$ip</span><span class="br0">&#125;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="re0">$detail</span><span class="br0">&#123;</span><span class="st0">&quot;total&quot;</span><span class="br0">&#125;</span><span class="sy0">++;</span><br />
&nbsp; &nbsp; &nbsp; <span class="re0">$delta</span> <span class="sy0">=</span> <span class="re0">$time</span> <span class="sy0">-</span> <span class="re0">$detail</span><span class="br0">&#123;</span><span class="st0">&quot;time&quot;</span><span class="br0">&#125;</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; <span class="co1"># ************************************************************************************************</span><br />
&nbsp; &nbsp; &nbsp; <span class="co1"># * If this IP had a previous failure within a set period of time, increment the critical count.</span><br />
&nbsp; &nbsp; &nbsp; <span class="co1"># ************************************************************************************************</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span> <span class="re0">$delta</span> <span class="sy0">&lt;</span> <span class="re0">$criticalWindow</span> <span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$detail</span><span class="br0">&#123;</span><span class="st0">&quot;critical&quot;</span><span class="br0">&#125;</span><span class="sy0">++;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span class="co1"># ************************************************************************************************</span><br />
&nbsp; &nbsp; &nbsp; <span class="co1"># * Enough time has elapsed, do not count as CRITICAL, but count and keep track nevertheless</span><br />
&nbsp; &nbsp; &nbsp; <span class="co1"># ************************************************************************************************</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">else</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$detail</span><span class="br0">&#123;</span><span class="st0">&quot;critical&quot;</span><span class="br0">&#125;</span><span class="sy0">=</span><span class="nu0">1</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$flag</span><span class="sy0">=</span><span class="st0">&quot;RESET&quot;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; <span class="co1"># ************************************************************************************************</span><br />
&nbsp; &nbsp; &nbsp; <span class="co1"># * Update our IP list.</span><br />
&nbsp; &nbsp; &nbsp; <span class="co1"># ************************************************************************************************</span><br />
&nbsp; &nbsp; &nbsp; <span class="re0">$detail</span><span class="br0">&#123;</span><span class="st0">&quot;time&quot;</span><span class="br0">&#125;</span> <span class="sy0">=</span> <span class="re0">$time</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="re0">$critical</span> <span class="sy0">=</span> <span class="re0">$detail</span><span class="br0">&#123;</span><span class="st0">&quot;critical&quot;</span><span class="br0">&#125;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="re0">$rogueIPs</span><span class="br0">&#123;</span><span class="re0">$ip</span><span class="br0">&#125;</span><span class="sy0">=</span><span class="re0">$detail</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<br />
&nbsp; &nbsp; <a href="http://perldoc.perl.org/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span> LOG <span class="st0">&quot;%s IP: %s, User: %s, Total count: %d, Critical count: %d (%s)(%s)<span class="es0">\n</span>&quot;</span><span class="sy0">,</span> now<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="re0">$ip</span><span class="sy0">,</span> <span class="re0">$user</span><span class="sy0">,</span> <span class="re0">$detail</span><span class="br0">&#123;</span><span class="st0">&quot;total&quot;</span><span class="br0">&#125;</span><span class="sy0">,</span> <span class="re0">$detail</span><span class="br0">&#123;</span><span class="st0">&quot;critical&quot;</span><span class="br0">&#125;</span><span class="sy0">,</span> <span class="re0">$flag</span><span class="sy0">,</span> <span class="re0">$type</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
&nbsp; &nbsp; <span class="co1"># ************************************************************************************************</span><br />
&nbsp; &nbsp; <span class="co1"># * If this IP has exceeded the number of critical failures in the given time window, block it!</span><br />
&nbsp; &nbsp; <span class="co1"># ************************************************************************************************</span><br />
&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span> <span class="re0">$critical</span> <span class="sy0">&gt;</span> <span class="re0">$maxFailures</span> <span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span class="co1"># **************************************************************************************************</span><br />
&nbsp; &nbsp; &nbsp; <span class="co1"># * To reset iptables: iptables --flush INPUT</span><br />
&nbsp; &nbsp; &nbsp; <span class="co1"># **************************************************************************************************</span><br />
&nbsp; &nbsp; &nbsp; <span class="re0">$cmd</span> <span class="sy0">=</span> <span class="re0">$IPTABLES</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="re0">$cmd</span> <span class="sy0">=~</span> <span class="co2">s/\[IPADDRESS\]/$ip/g</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span> <span class="re0">$killEnabled</span> <span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://perldoc.perl.org/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span>LOG <span class="st0">&quot;%s IP %s has exceeded maximum failures<span class="es0">\n</span>CMD: %s<span class="es0">\n</span>&quot;</span><span class="sy0">,</span> now<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="re0">$ip</span><span class="sy0">,</span> <span class="re0">$cmd</span> <span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://perldoc.perl.org/functions/system.html"><span class="kw3">system</span></a><span class="br0">&#40;</span><span class="re0">$cmd</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span class="kw1">else</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://perldoc.perl.org/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span>LOG <span class="st0">&quot;%s IP %s has exceeded maximum failures<span class="es0">\n</span>(KILL IS DISABLED) CMD: %s<span class="es0">\n</span>&quot;</span><span class="sy0">,</span> now<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="re0">$ip</span><span class="sy0">,</span> <span class="re0">$cmd</span> <span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
<br />
<a href="http://perldoc.perl.org/functions/close.html"><span class="kw3">close</span></a><span class="br0">&#40;</span>AUTH<span class="br0">&#41;</span><span class="sy0">;</span><br />
<a href="http://perldoc.perl.org/functions/close.html"><span class="kw3">close</span></a><span class="br0">&#40;</span>LOG<span class="br0">&#41;</span><span class="sy0">;</span><br />
<br />
<span class="co1"># ************************************************************************************************</span><br />
<span class="co1"># * now() is a handy function for formatting the current date time for logging purposes.</span><br />
<span class="co1"># ************************************************************************************************</span><br />
<span class="kw2">sub</span> now<span class="br0">&#40;</span><span class="br0">&#41;</span><br />
<span class="br0">&#123;</span><br />
&nbsp; <span class="kw1">my</span> <span class="br0">&#40;</span><span class="re0">$second</span><span class="sy0">,</span> <span class="re0">$minute</span><span class="sy0">,</span> <span class="re0">$hour</span><span class="sy0">,</span> <span class="re0">$day</span><span class="sy0">,</span> <span class="re0">$month</span><span class="sy0">,</span> <span class="re0">$year</span><span class="sy0">,</span> <span class="re0">$dayOfWeek</span><span class="sy0">,</span> <span class="re0">$dayOfYear</span><span class="sy0">,</span> <span class="re0">$daylightSavings</span><span class="br0">&#41;</span> <span class="sy0">=</span> <a href="http://perldoc.perl.org/functions/localtime.html"><span class="kw3">localtime</span></a><span class="br0">&#40;</span><a href="http://perldoc.perl.org/functions/time.html"><span class="kw3">time</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$year</span> <span class="sy0">+=</span> <span class="nu0">1900</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$month</span> <span class="sy0">+=</span> <span class="nu0">1</span><span class="sy0">;</span><br />
&nbsp; <span class="re0">$time</span> <span class="sy0">=</span> <a href="http://perldoc.perl.org/functions/sprintf.html"><span class="kw3">sprintf</span></a><span class="br0">&#40;</span> <span class="st0">&quot;%04d-%02d-%02d %02d:%02d:%02d&quot;</span><span class="sy0">,</span><span class="re0">$year</span><span class="sy0">,</span><span class="re0">$month</span><span class="sy0">,</span><span class="re0">$day</span><span class="sy0">,</span><span class="re0">$hour</span><span class="sy0">,</span><span class="re0">$minute</span><span class="sy0">,</span><span class="re0">$second</span> <span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <a href="http://perldoc.perl.org/functions/return.html"><span class="kw3">return</span></a><span class="br0">&#40;</span> <span class="re0">$time</span> <span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div></div>
<p>You may download the above code <a href='http://www.katr.com/kblog/wp-content/uploads/2011/03/watcher.pl'>here</a>.</p>
<p>So now when you have this script running you can review the generated log file to see what&#8217;s going on.  Here is a snip from my logfile where it caught actual bad guys and prevented them from continuing on a path of computer unrighteousness.</p>
<div class="codecolorer-container text " style="overflow:auto;white-space:nowrap;width:700px"><div class="text codecolorer" style="font-family:Monaco,Lucida Console,monospace">2011-03-26 11:01:01 IP: 210.202.227.52, User: FARA, Total count: 1, Critical count: 1 (NEW)(Failed)<br />
2011-03-25 01:13:48 IP: 210.202.227.52, User: root, Total count: 2, Critical count: 2 (ADD)(Failed)<br />
2011-03-25 01:13:54 IP: 210.202.227.52, User: root, Total count: 3, Critical count: 3 (ADD)(Failed)<br />
2011-03-25 01:14:18 IP: 210.202.227.52, User: root, Total count: 4, Critical count: 4 (ADD)(Failed)<br />
2011-03-25 01:14:18 IP 210.202.227.52 has exceeded maximum failures<br />
CMD: /sbin/iptables -I INPUT -s 210.202.227.52 -j DROP</div></div>
<p>If you liked this article, please consider supporting KATR Software by purchasing one of the many $0.99 mobile apps that have been published in the Apple iTunes store or the Google Android market.  Just search for &#8220;KATR Software&#8221;.</p>
<p>This article was designed, produced, and written by Bill Johnson exclusively for KATR Inc. and is copyrighted 2005-2011, KATR Inc., all rights reserved.</p>
<p><strong>About the writer:</strong> Bill Johnson<br />
Having worked as a computer consultant, independent contractor, and an IT employee, Bill has developed a strong background in many areas, including information systems technologies, systems administration, application development, web development and deployment, game research and development, and graphics manipulation.  Bill operates as a full-time computer consultant, while at the same time maintains numerous servers, web sites, and office networks for a variety of clients, both professional and personal.  Having previously served as an owner, partner, and director for a successful 80 employee computer consulting company, he has unique insights into the challenges of owning and  operating a business with partners of diverse business backgrounds.</p>
<p>Bill graduated summa cum laude from Bemidji State University in 1989 with a bachelor&#8217;s degree in computer science.  He has earned his private pilots license with an instrument rating and is a certified SCUBA diver.  As well as serving on the local Community Education Advisory<br />
board, he also enjoys coaching his two boys in various athletic programs, karate, hiking, camping, fishing, rock climbing, and hunting.</p>
<p><strong>Find Bill at:</strong><br />
<a href="http://www.linkedin.com/in/bxj2008">http://www.linkedin.com/in/bxj2008</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.katr.com/kblog/2011/03/monitoring-and-stopping-invalid-ssh-login-attempts-with-perl-and-iptables/feed/</wfw:commentRss>
		</item>
		<item>
		<title>iPhone accelerometer use in the simulator</title>
		<link>http://www.katr.com/kblog/2009/05/iphone-accelerometer-use-in-the-simulator/</link>
		<comments>http://www.katr.com/kblog/2009/05/iphone-accelerometer-use-in-the-simulator/#comments</comments>
		<pubDate>Sun, 31 May 2009 04:24:53 +0000</pubDate>
		<dc:creator>Bill</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<category><![CDATA[iPhone / iPod touch]]></category>

		<guid isPermaLink="false">http://www.katr.com/kblog/?p=192</guid>
		<description><![CDATA[One of the areas where the iPhone SDK and the simulator fall short becomes obvious when trying to develop and test applications that use the accelerometer.  Invariably developers find themselves deploying to the actual device to do any sort of real testing.  Well my friends, thanks to an ingenious little application called the [...]]]></description>
			<content:encoded><![CDATA[<p>One of the areas where the iPhone SDK and the simulator fall short becomes obvious when trying to develop and test applications that use the accelerometer.  Invariably developers find themselves deploying to the actual device to do any sort of real testing.  Well my friends, thanks to an ingenious little application called the Accelerometer Simulator, or AccSim, written by <a href="http://code.google.com/u/otto.chrons/">otto.chrons</a> at Google Code, you no longer have to deploy your application to your device in order to test.</p>
<p>Now, you still have to have a compatible device connected to your Mac or network, however it controls the accelerometer in the sim.  In this article, we are going to go step by step through the integration of this application and how to use it against the accelerometer graph sample provided by Apple.<br />
First of all, we need to do a few things and we need to go get a few resources.</p>
<p><span style="color: #33cccc;">Requirement 1: You must be signed up for a paid Apple developer account</span><br />
This will only work for individuals who have a paid Apple developer account.  Yeah, I know, this stinks, however Apples policy is to prevent anyone from deploying their applications to their devices until they are a paid Apple developer with a properly provisioned device.  If you haven&#8217;t read my article on <a href="http://www.katr.com/kblog/2009/05/getting-started-in-iphone-ipod-touch-development-2/">Getting started in iPhone / iPod touch development</a> you may want to do that now.</p>
<p><span style="color: #33cccc;">Requirement 2: Use <em>svn</em> to download AccSim from:</span><br />
<a href="http://code.google.com/p/accelerometer-simulator/source/checkout">http://code.google.com/p/accelerometer-simulator/source/checkout</a></p>
<p><span style="color: #33cccc;">Requirement 3: Go get Apple&#8217;s accelerometer source code from:</span><br />
<a href="http://developer.apple.com/iphone/library/samplecode/AccelerometerGraph/index.html">http://developer.apple.com/iphone/library/samplecode/AccelerometerGraph/index.html</a></p>
<p>Now the fun begins, first open up the AccSim xCode project, set it deploy to the device (I use Device - iPhone OS 2.1).  I did not encounter any build or deployment errors.  If you do get something about code signing, you&#8217;ll have to fix that in your project settings or by editing your Info.plist file (check out the Bundle identifier).  Close this project and run the simulator on your device.</p>
<p>When running on your device, it should look like this:</p>
<p><img class="size-full wp-image-214 alignnone" src="http://www.katr.com/kblog/wp-content/uploads/2009/05/accsim-acc.png" alt="AccSim - Accelerometer" width="320" height="480" /></p>
<p>Switch to the Network view and turn the network ON.</p>
<p><img class="size-full wp-image-217 alignnone" src="http://www.katr.com/kblog/wp-content/uploads/2009/05/accsim-net.png" alt="AccSim - Network" width="320" height="480"/></p>
<p>Now, open the the Accelerometer graph sample application in xCode, and drag the following two files from the &#8220;Simulator classes&#8221; directory in the AccSim project into the Accelerometer graph project:</p>
<div class="codecolorer-container objc " style="overflow:auto;white-space:nowrap;width:435px"><div class="objc codecolorer" style="font-family:Monaco,Lucida Console,monospace">AccelerometerSimulation.h<br />
AccelerometerSimulation.m</div></div>
<p>After you&#8217;ve added the files to the project, open the file AppDelegate.m and add the following import statement (I placed it after the other imports).</p>
<div class="codecolorer-container objc " style="overflow:auto;white-space:nowrap;width:435px"><div class="objc codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co1">#import &quot;AccelerometerSimulation.h&quot;</span></div></div>
<p>Here is a picture of what this should look like (click on the picture for a full sized version, it&#8217;s a little hard to read):</p>
<p><a href='http://www.katr.com/kblog/wp-content/uploads/2009/05/accgraph-changes.png' target='__blank'><img class="size-full wp-image-222 alignnone" src="http://www.katr.com/kblog/wp-content/uploads/2009/05/accgraph-changes.png" alt="AccGraph - Code Changes" width="483" height="359" border='0'/></a><br />
Now, compile and run your Accelerometer graph application and it should pick up the motion of your device.  If it isn&#8217;t working, verify that your device has not gone to sleep and that the network is enabled in the Network view.  If you still have trouble, try changing the UDP port in the AccelerometerSimulation.m file, look for the line:</p>
<p></span></p>
<div class="codecolorer-container objc " style="overflow:auto;white-space:nowrap;width:435px"><div class="objc codecolorer" style="font-family:Monaco,Lucida Console,monospace"><span class="co1">#define kAccelerometerSimulationPort 10552</span></div></div>
<p>Make sure to make the corresponding change in the Network view on your device as well.  Here&#8217;s a short video of the AccSim application controlling the xCode simulator:<br />
[See post to watch Flash video]
<p><span class="com"><br />
When it is time to deploy your application, just remove the #import that you added and you&#8217;re ready to go.  I hope you enjoyed this tutorial.</span></a></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.katr.com/kblog/2009/05/iphone-accelerometer-use-in-the-simulator/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Boundary Waters (BWCA) Packing List</title>
		<link>http://www.katr.com/kblog/2009/05/bwca-packing-list/</link>
		<comments>http://www.katr.com/kblog/2009/05/bwca-packing-list/#comments</comments>
		<pubDate>Fri, 29 May 2009 06:12:13 +0000</pubDate>
		<dc:creator>Bill</dc:creator>
		
		<category><![CDATA[BWCA]]></category>

		<category><![CDATA[Free Yourself]]></category>

		<guid isPermaLink="false">http://www.katr.com/kblog/?p=99</guid>
		<description><![CDATA[Okay, what does the Boundary Waters have to do with freeing yourself?  Well, sometimes it&#8217;s not enough to free yourself from your day job, sometimes you&#8217;ve got to free yourself from everything.  If you like the outdoors, then the BWCA is at the very top of my list of &#8220;free yourself&#8221; hideaways.  [...]]]></description>
			<content:encoded><![CDATA[<p>Okay, what does the Boundary Waters have to do with freeing yourself?  Well, sometimes it&#8217;s not enough to free yourself from your day job, sometimes you&#8217;ve got to free yourself from everything.  If you like the outdoors, then the BWCA is at the very top of my list of &#8220;free yourself&#8221; hideaways.  Just as a teaser, here is Lake Agnes on a beautiful afternoon in May during one of my &#8220;escapes&#8221; (click on the picture for a larger version):<br />
<a href='http://www.katr.com/kblog/wp-content/uploads/2009/05/agnesonthewater03-1024.jpg' target='__blank'><img src="http://www.katr.com/kblog/wp-content/uploads/2009/05/agnesonthewater03-500.jpg" alt="Lake Agnes, Quetico Provincial Park" title="Lake Agnes, Quetico Provincial Park" width="475" class="alignnone size-full wp-image-242" /></a></p>
<h2>This is my list for a spring boundary waters canoe trip</h2>
<p><strong><span style="color: #33cccc;">Packs</span></strong></p>
<ul>
<li>1 gear pack (tents and other gear)</li>
<li>1 food pack (could be more depending on length of the trip)</li>
<li>1 personal pack (1 or more peoples clothing, etc)</li>
<li>day pack(s) for short trips</li>
</ul>
<p><strong><span style="color: #33cccc;">Canoe gear</span></strong></p>
<ul>
<li>Car/Truck racks for the Canoe(s)</li>
<li>Canoe (check your sticker to make sure it&#8217;s current)</li>
<li>Portage yoke (should be on canoe already)</li>
<li>Paddle</li>
<li>Spare Paddle</li>
<li>50 ft rope ( to tie off canoe or other)</li>
<li>Canoe anchor bag (fill with rocks for an anchor)</li>
<li>Life jacket for each person</li>
<li>Throwable rescue preserver</li>
<li>Canoe seat if so desired</li>
<li>Bungee cords for securing whatever</li>
<li>Sponge or bailer</li>
</ul>
<p><strong><span style="color: #33cccc;">Navigation gear</span></strong></p>
<ul>
<li>Maps of all areas to be travelled (Fisher or McKenzie)</li>
<li>Map case or large ziplock</li>
<li>Compass for each person</li>
<li>Whistle for each person</li>
<li>GPS (with extra batteries)</li>
<li>Travel log (notebook)</li>
</ul>
<p><strong><span style="color: #33cccc;">Camping gear</span></strong></p>
<ul>
<li>Tent and Vestibules</li>
<li>Tent stakes</li>
<li>Ground cloth</li>
<li>Rope to tie tent down with</li>
<li>Sleeping pad</li>
<li>Sleeping bag</li>
<li>Camp pillow</li>
<li>Rain tarp</li>
<li>Rope for rain tarp</li>
<li>Bear rope for hanging food pack</li>
<li>Extra nylon parachute cord (clothesline, re-enforcement, etc)</li>
<li>Camp saw</li>
<li>Camp axe</li>
<li>Camp shovel (for latrine if necessary)</li>
<li>Garbage bags</li>
<li>Permits</li>
</ul>
<p><strong><span style="color: #33cccc;">Cooking gear</span></strong></p>
<ul>
<li>Camp stove</li>
<li>Lantern with extra mantles(optional)</li>
<li>Fuel</li>
<li>Windscreen</li>
<li>Lighter(s) (I bring 3 )</li>
<li>Waterproof matches</li>
<li>Fire starter</li>
<li>Fire grate if desired (heavy)</li>
<li>1 frying pan</li>
<li>1 cooking pot</li>
<li>1 coffee pot (can be the cooking pot)</li>
<li>1 spatula</li>
<li>Eating utensils</li>
<li>Reynolds wrap</li>
<li>Mess kit or cups and plates</li>
<li>Dish washing gear (camp suds/biodegradable soap and scrubber)</li>
<li>Naglene water bottles</li>
<li>Water filter</li>
<li>Water purification tablets</li>
<li>Collapsable water jug (5 gallon)</li>
<li>Paper towels</li>
</ul>
<p><strong><span style="color: #33cccc;">Clothes (Spring / Summer / Fall )</span></strong></p>
<ul>
<li>Rain gear</li>
<li>Polar fleece sweat shirt</li>
<li>Knit cap</li>
<li>Baseball cap</li>
<li>Short sleeve T-Shirts</li>
<li>Long sleeve T-Shirts</li>
<li>Underwear</li>
<li>Zip-off pants</li>
<li>Hiking socks</li>
<li>Lightweight camp/sleep socks</li>
<li>Swimsuit</li>
<li>Stuff sack for all clothes</li>
<li>Wet boots (in canoe/portage)</li>
<li>Dry boots (in camp)</li>
<li>Sandals if warm</li>
<li>Bandana</li>
<li>Chamois Towel</li>
</ul>
<p><strong><span style="color: #33cccc;">Clothes (Cold weather)</span></strong></p>
<ul>
<li>Long underwear</li>
<li>Warm gloves (dry)</li>
<li>Neoprene gloves (wet)</li>
<li>Warm boots</li>
<li>Rubber boots</li>
</ul>
<p><strong><span style="color: #33cccc;">Miscellaneous personal gear</span></strong></p>
<ul>
<li>Drivers license</li>
<li>Insurance card</li>
<li>Credit card</li>
<li>Passport (if necessary)</li>
<li>RABC / Remote access permit (if necessary)</li>
<li>Personal water bottle</li>
<li>Sunscreen</li>
<li>Bug repellant</li>
<li>Lip balm</li>
<li>Watch with alarm</li>
<li>Spare eyeglasses / contacts</li>
<li>Contact solution</li>
<li>Belt</li>
<li>Flashlight / headlamp (plus extra batteries)</li>
<li>Camera (plus extra batteries)</li>
<li>Lens cleaners</li>
<li>Tripod</li>
<li>Pocket knife</li>
<li>Multi-tool pliers</li>
<li>Sharpening steel</li>
<li>Extra film or memory cards (digital is the way to go)</li>
<li>Waterproof camera case</li>
<li>Binoculars</li>
<li>Cellular phone (although it may not work)</li>
<li>Bug head net</li>
<li>Book to read</li>
<li>Notebook and pen</li>
<li>Playing cards (for rainy days)</li>
<li>Nylon hammock (low profile, definitely luxury)</li>
<li>Camp chair (yet another luxury)</li>
</ul>
<p><strong><span style="color: #33cccc;">Hygiene</span></strong></p>
<ul>
<li>Toilet paper</li>
<li>Baby wipes</li>
<li>Toothbrush</li>
<li>Toothpaste</li>
<li>Dental floss</li>
<li>Deodorant (so that the bears like you)</li>
<li>Camp suds (mentioned earlier, multipurpose)</li>
<li>Lotion</li>
<li>Comb</li>
<li>Feminine hygiene products</li>
</ul>
<p><strong><span style="color: #33cccc;">First aid</span></strong></p>
<ul>
<li>Any required medications</li>
<li>Tweezers</li>
<li>Medical scissors</li>
<li>Nail clippers</li>
<li>Medical tape</li>
<li>Bandaids</li>
<li>Gauze patches</li>
<li>Moleskin (blisters)</li>
<li>Butterly bandages</li>
<li>Disposable gloves</li>
<li>Needle and thread</li>
<li>Safety pins</li>
<li>Razor blades</li>
<li>Topical antiseptic</li>
<li>Topical antibiotic</li>
<li>Ibuprofen / Tylenol</li>
<li>Antihistamine</li>
<li>OraGel</li>
<li>Electrolite tablets</li>
<li>Cortizone</li>
<li>Antidiarrheal</li>
<li>Instant ice</li>
<li>Aloe vera gel</li>
<li>Petroleum jelly (burns)</li>
<li>Ace bandage</li>
<li>EpiPen (for allergic reactions)</li>
<li>First aid book</li>
<li>Emergency solar blanket</li>
<li>Duct tape (first aid for person, tent or canoe)</li>
<li>Signal mirror</li>
</ul>
<p><strong><span style="color: #33cccc;">Fishing gear</span></strong></p>
<ul>
<li>2 complete fishing poles (in case 1 breaks)</li>
<li>Rod case (or Rod wrap)</li>
<li>Rod repair kit</li>
<li>Filet knife</li>
<li>Canoe friendly tackle box (mine straps to the thwart)</li>
<li>Tackle (remember, lead heads are heavy and not legal in all locations)</li>
<li>Hook removers</li>
<li>Line clippers</li>
<li>Fishing licenses for region being fished</li>
<li>Fishing regulations</li>
<li>Stringer</li>
<li>Collapsible fishing net</li>
<li>Portable depth finder (also very heavy and bulky)</li>
<li>Bait (if legal)</li>
</ul>
<p><strong><span style="color: #33cccc;">Food</span></strong></p>
<ul>
<li>Breakfast for each day (don&#8217;t need for the first day)</li>
<li>Lunch for each day (every day)</li>
<li>Dinner for each day (don&#8217;t need for the last day )</li>
<li>Snacks (energy bars, trail mix, etc)</li>
<li>Drinks (coffee, Tang, Kool-aid, cocoa)</li>
<li>Fish fry and cooking oil</li>
<li>Spices</li>
</ul>
<h2>Remember:  Whatever you pack, you carry.  This list is fairly extensive and many items can be cut out</h2>
<p><strong><span style="color: #33cccc;">Trip Home</span></strong></p>
<ul>
<li>Clean clothes (shirt, pants, socks, underwear, and shoes) for the last day ride home&#8230;AHHhhhhhhh)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.katr.com/kblog/2009/05/bwca-packing-list/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Breaking free from debt</title>
		<link>http://www.katr.com/kblog/2009/05/breaking-free-from-debt/</link>
		<comments>http://www.katr.com/kblog/2009/05/breaking-free-from-debt/#comments</comments>
		<pubDate>Fri, 29 May 2009 01:59:42 +0000</pubDate>
		<dc:creator>Bill</dc:creator>
		
		<category><![CDATA[Financial Freedom]]></category>

		<category><![CDATA[Free Yourself]]></category>

		<guid isPermaLink="false">http://www.katr.com/kblog/?p=131</guid>
		<description><![CDATA[As Americans, most of us have fallen into the credit trap and many of us are still there. Whether it was because we were unaware of the hole we were digging or simply couldn&#8217;t resist the instant gratification and didn&#8217;t care about the hole, many of us now find ourselves wallowing in debt with no [...]]]></description>
			<content:encoded><![CDATA[<p>As Americans, most of us have fallen into the credit trap and many of us are still there. Whether it was because we were unaware of the hole we were digging or simply couldn&#8217;t resist the instant gratification and didn&#8217;t care about the hole, many of us now find ourselves wallowing in debt with no obious way out.</p>
<p>Yet, there must be a way to break free from debt&#8230;and yes, there is:</p>
<h2>Stop using credit</h2>
<p>First of all, stop using your credit cards. If you are afraid to cut them up, at least take them out of your wallet and put them in the safe or filing cabinet. You can&#8217;t get out of debt if you continue to consume credit. Even if you intend to pay it off at the end of the month, don&#8217;t use them. Pay in cash or check whenever possible. You can use debit cards, however be wary of the trap where they can &#8220;become&#8221; as &#8220;credit&#8221;.</p>
<h2>Fix your cash flow</h2>
<p>Secondly, if you are having trouble making the payments, contact your credit card company or bank and discuss the issue with them. Most of them would rather work out terms than have you default on your balances.</p>
<h2>Clear your credit balances</h2>
<p>Okay, so we&#8217;ve stopped increasing our debt load, now how do we deal with our existing debt load and how long will it take? Most of us grudgingly make the minimum or stated payment on our credit obligations every month.  The solution is actually surprisingly simple and mathematical. What??? You don&#8217;t do math&#8230;? Well, these math equations are very simple and we&#8217;ll lay it out for you step by step. Here is a high level view of the steps that we must take:</p>
<ol>
<li>Itemize your debt.  Include the name, balance, and minimum payment</li>
<li>Calculate your current positions</li>
<li>Calculate the best payoff plan</li>
<li>Expedite it!</li>
<li>Put it to work!</li>
</ol>
<h2>Step 1: Itemize your debt</h2>
<table class='datatable' border='1' cellpadding='0' cellspacing='0'>
<tbody>
<tr>
<th class='creditor' align="left">Creditor</th>
<th style="width: 80px;" align="right">Balance</th>
<th style="width: 70px;" align="right">Payment</th>
<th style="width: 70px;" align="right"> </th>
<th style="width: 70px;" align="right"> </th>
<th style="width: 70px;" align="right"> </th>
<th style="width: 70px;" align="right"> </th>
</tr>
<tr>
<td align="left">Car 1</td>
<td align="right">$15,000.00</td>
<td align="right">$250.00</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td align="left">Car 2</td>
<td align="right">$5,104.00</td>
<td align="right">$125.00</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td align="left">Mortgage</td>
<td align="right">$89,200.00</td>
<td align="right">$645.00</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td align="left">Equity line</td>
<td align="right">$39,000.00</td>
<td align="right">$390.00</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td align="left">Visa 1</td>
<td align="right">$1,004.00</td>
<td align="right">$25.00</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td align="left">Visa 2</td>
<td align="right">$7,520.00</td>
<td align="right">$85.00</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr style="color: red;">
<td align="left">Total</td>
<td align="right">$156,828.00</td>
<td align="right">$1,520.00</td>
<td> </td>
<td> </td>
<td> </td>
<td> </td>
</tr>
</tbody>
</table>
<p>Wow!  Look at all that debt.  And that monthly payment total is a killer!  I feel faint, is there any hope for me?  Well, that&#8217;s where the magic comes in.  You&#8217;ll notice we left a few extra columns in this spreadsheet, that&#8217;s where we go to work with step 2 where we calculate our current positions.</p>
<h2>Step 2: Calculate our current position</h2>
<p>Now it&#8217;s time to see how long it will take to payoff each credit obligation based on our current payment schedule.  For each obligation, divide your total balance by your payment to get a rough payoff period, which we will call Plan B where B stands for &#8220;BAD&#8221;.  For this exercise, we won&#8217;t consider interest rates, although if you have an extraordinarily high rate, you may want to consider re-financing.  If  you take the largest number in the Plan B column, ignore interest and make all your payments as scheduled, this is the number of months until you are debt free.  In our example, this is 138.3 months or 11.5 years.  That&#8217;s quite a while for a debt payoff program.</p>
<table style="border: solid 1px green; font: verdana 10em;" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<th style="width: 100px;" align="left">Creditor</th>
<th style="width: 80px;" align="right">Balance</th>
<th style="width: 70px;" align="right">Payment</th>
<th style="width: 70px;" align="right">Plan B</th>
<th style="width: 70px;" align="right">&nbsp;</th>
<th style="width: 70px;" align="right">&nbsp;</th>
<th style="width: 70px;" align="right">&nbsp;</th>
</tr>
<tr>
<td align="left">Car 1</td>
<td align="right">$15,000.00</td>
<td align="right">$250.00</td>
<td align="right">60</td>
<td align="right">&nbsp;</td>
<td align="right">&nbsp;</td>
<td align="right">&nbsp;</td>
</tr>
<tr>
<td align="left">Car 2</td>
<td align="right">$5,104.00</td>
<td align="right">$125.00</td>
<td align="right">40.8</td>
<td align="right">&nbsp;</td>
<td align="right">&nbsp;</td>
<td align="right">&nbsp;</td>
</tr>
<tr>
<td align="left">Mortgage</td>
<td align="right">$89,200.00</td>
<td align="right">$645.00</td>
<td align="right">138.3</td>
<td align="right">&nbsp;</td>
<td align="right">&nbsp;</td>
<td align="right">&nbsp;</td>
</tr>
<tr>
<td align="left">Equity line</td>
<td align="right">$39,000.00</td>
<td align="right">$390.00</td>
<td align="right">100</td>
<td align="right">&nbsp;</td>
<td align="right">&nbsp;</td>
<td align="right">&nbsp;</td>
</tr>
<tr>
<td align="left">Visa 1</td>
<td align="right">$1,004.00</td>
<td align="right">$25.00</td>
<td align="right">40.2</td>
<td align="right">&nbsp;</td>
<td align="right">&nbsp;</td>
<td align="right">&nbsp;</td>
</tr>
<tr>
<td align="left">Visa 2</td>
<td align="right">$7,520.00</td>
<td align="right">$85.00</td>
<td align="right">88.5</td>
<td align="right">&nbsp;</td>
<td align="right">&nbsp;</td>
<td align="right">&nbsp;</td>
</tr>
<tr style="color: red;">
<td align="left">Total</td>
<td align="right">$156,828.00</td>
<td align="right">$1,520.00</td>
<td align="right">138.3</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
<p><br/></p>
<h2>Step 3: Calculate the best payoff plan</h2>
<p>Now, here is the sneaky part:  We are going to determine what order we are going to pay off our credit obligations.  This has nothing to do with balance or payment, but on the number we just computed which is the number of months to payoff on the normal program.  Time to add our next column to the spreadsheet, we&#8217;ll call this &#8220;Priority&#8221;.  Start by finding the lowest number in the &#8220;Plan B&#8221; column and number it as 1, find the next lowest and number it as 2, and so on.  If you want to, you can even re-order your list in order of priority which is what we have done below.</p>
<table style="border: solid 1px green; font: verdana 10em;" border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<th style="width: 100px;" align="left">Creditor</th>
<th style="width: 80px;" align="right">Balance</th>
<th style="width: 70px;" align="right">Payment</th>
<th style="width: 70px;" align="right">Plan B</th>
<th style="width: 70px;" align="center">Priority</th>
<th style="width: 70px;" align="right">&nbsp;</th>
<th style="width: 70px;" align="right">&nbsp;</th>
</tr>
<tr>
<td align="left">Visa 1</td>
<td align="right">$1,004.00</td>
<td align="right">$25.00</td>
<td align="right">40.2</td>
<td align="center">1</td>
<td align="right">&nbsp;</td>
<td align="right">&nbsp;</td>
</tr>
<tr>
<td align="left">Car 2</td>
<td align="right">$5,104.00</td>
<td align="right">$125.00</td>
<td align="right">40.8</td>
<td align="center">2</td>
<td align="right">&nbsp;</td>
<td align="right">&nbsp;</td>
</tr>
<tr>
<td align="left">Car 1</td>
<td align="right">$15,000.00</td>
<td align="right">$250.00</td>
<td align="right">60</td>
<td align="center">3</td>
<td align="right">&nbsp;</td>
<td align="right">&nbsp;</td>
</tr>
<tr>
<td align="left">Visa 2</td>
<td align="right">$7,520.00</td>
<td align="right">$85.00</td>
<td align="right">88.5</td>
<td align="center">4</td>
<td align="right">&nbsp;</td>
<td align="right">&nbsp;</td>
</tr>
<tr>
<td align="left">Equity line</td>
<td align="right">$39,000.00</td>
<td align="right">$390.00</td>
<td align="right">100</td>
<td align="center">5</td>
<td align="right">&nbsp;</td>
<td align="right">&nbsp;</td>
</tr>
<tr>
<td align="left">Mortgage</td>
<td align="right">$89,200.00</td>
<td align="right">$645.00</td>
<td align="right">138.3</td>
<td align="center">6</td>
<td align="right">&nbsp;</td>
<td align="right">&nbsp;</td>
</tr>
<tr style="color: red;">
<td align="left">Total</td>
<td align="right">$156,828.00</td>
<td align="right">$1,520.00</td>
<td align="right">138.3</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
<p>Now what we want to do is, pay the minimum payment on the loans except the one with the lowest priority.   Let&#8217;s figure out what this looks like before we determine how to expedite this plan.  What we are going to do is to add three more columns, an adjusted balance which represents the new debt balance when the new payment amount kicks in, a new payment amount called Pmt G where &#8220;G&#8221; means Good and the new months to pay off called Plan G.  The adjusted balance will start out the same, however for later obligations consider that you will have been paying the minimum payment at that point and the balance should be reduced by the minimum payment multiplied by the number of months it took to payoff the previous obligations.  Once again, we&#8217;re not factoring in interest here, so there is a bit of variability involved.  The new payment will start off the same, but as we pay off each obligation, we will take the amount that we were paying there and apply it to the obligation with the next lowest priority.  We&#8217;ll then take that new payment, divide that into the balance to come up with an adjusted months to payoff and place this in &#8220;Plan G&#8221;.  </p>
<p>Lets work through a couple of examples.  Since our first debt doesn&#8217;t really change because nothing has happened yet, we&#8217;ll begin with the second debt which is &#8220;Car 2&#8243;.  Our increased payment for &#8220;Car 2&#8243; won&#8217;t happen until we&#8217;ve paid off &#8220;Visa 1&#8243;, which will take 40.2 or actually 41 months.  During that period of time, we will have made 41 payments of $125.00 on &#8220;Car 2&#8243;, totalling to $5125, which actually results in &#8220;Car 2&#8243; getting paid off at the same time as &#8220;Visa 1&#8243;.  So our beginning balance on &#8220;Car 2&#8243; is effectively 0 and it will take 0 more months to pay off.</p>
<p>Our next debt to work on becomes &#8220;Car 1&#8243;, using the same calculation as above we see that we&#8217;ve made 41 payments of $250.00 for a total of $10,250.  This reduces our previous balance of $15,000 to $4750 which becomes our adjusted balance.  We compute our new payment for &#8220;Car 1&#8243; which is the existing payment of $250.00 + the previous payments for &#8220;Car 2&#8243; and &#8220;Visa 1&#8243; for a total of $400.00.  When we take our new payment and divide it into our adjusted balance of $4750.00 we see that it will take 11.9 or 12 months to pay off this obligation.</p>
<p>Let&#8217;s work one more example using &#8220;Visa 2&#8243;.  By the time we get to &#8220;Visa 2&#8243;, 53 months will have elapsed ( 41 + 12 ) where we have been making the minimum payment of $85.00 for a total of $4505.00.  This reduces our previous balance of $7,520.00 to $3015.00 which becomes our adjusted balance.  We compute our new payment for &#8220;Visa 2&#8243; which is the existing payment of $85.00 + the previous payments for &#8220;Car 1&#8243;, &#8220;Car 2&#8243;, and &#8220;Visa 1&#8243; for a total of $485.00.  We divide our adjusted balance of $3015.00 by the new payment of $485.00 to see that it will take 7 months to pay off.</p>
<p>Add up the total months in the last column and this is the new total months until you are debt free!  In our case, 104 months or approximately 8.5 years.  Still a long time, however we&#8217;re getting closer.</p>
<table class='datatable' border='1' cellpadding='0' cellspacing='0'>
<tbody>
<tr>
<th class='creditor' align="left">Creditor</th>
<th class='balance' align="right">Balance</th>
<th class='paymentb' align="right">Payment</th>
<th class='planb' align="right">Plan B</th>
<th class='priority' align="center">Priority</th>
<th class='adjbalance' align="right">Adj Bal</th>
<th class='paymentg' align="right">Pmt G</th>
<th class='plang' align="right">Plan G</th>
</tr>
<tr>
<td align="left">Visa 1</td>
<td align="right">$1,004.00</td>
<td align="right">$25.00</td>
<td align="right">40.2</td>
<td align="center">1</td>
<td align="center">$1,004.00</td>
<td align="right">$25.00</td>
<td align="right">40.2</td>
</tr>
<tr>
<td align="left">Car 2</td>
<td align="right">$5,104.00</td>
<td align="right">$125.00</td>
<td align="right">40.8</td>
<td align="center">2</td>
<td align="center">$0.00</td>
<td align="right">$0.00</td>
<td align="right">paid off</td>
</tr>
<tr>
<td align="left">Car 1</td>
<td align="right">$15,000.00</td>
<td align="right">$250.00</td>
<td align="right">60</td>
<td align="center">3</td>
<td align="center">$4750.00</td>
<td align="right">$400.00</td>
<td align="right">11.9</td>
</tr>
<tr>
<td align="left">Visa 2</td>
<td align="right">$7,520.00</td>
<td align="right">$85.00</td>
<td align="right">88.5</td>
<td align="center">4</td>
<td align="center">$3015.00</td>
<td align="right">$485.00</td>
<td align="right">6.2</td>
</tr>
<tr>
<td align="left">Equity line</td>
<td align="right">$39,000.00</td>
<td align="right">$390.00</td>
<td align="right">100</td>
<td align="center">5</td>
<td align="center">$15,600</td>
<td align="right">$875.00</td>
<td align="right">17.8</td>
</tr>
<tr>
<td align="left">Mortgage</td>
<td align="right">$89,200.00</td>
<td align="right">$645.00</td>
<td align="right">138.3</td>
<td align="center">6</td>
<td align="center">$38,890.00</td>
<td align="right">$1520.00</td>
<td align="right">25.5</td>
</tr>
<tr style="color: red;">
<td align="left">Total</td>
<td align="right">$156,828.00</td>
<td align="right">$1,520.00</td>
<td align="right">138.3</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>104</td>
</tr>
</tbody>
</table>
<p><br/></p>
<h2>Step 4: Expedite it!</h2>
<p>Notice that our total monthly cash flow has not changed, we&#8217;ve accomplished this simply by rearranging how we pay off our debt. Now let&#8217;s consider how we might expedite this, which as you may have guessed, involves adding more money into the equation.  How much extra can you afford per month?  Most of us could manage to throw another $50.00 or $100.00 per month at something that has almost immediate returns.  Let&#8217;s say $100.00 for this example, the cost of two nights of eating out at a restaurant for two people.  We factor this $100.00 right in at the start, let&#8217;s see what type of change this makes in our payoff program.</p>
<table class='datatable' border='1' cellpadding='0' cellspacing='0'>
<tbody>
<tr>
<th class='creditor' align="left">Creditor</th>
<th class='balance' align="right">Balance</th>
<th class='paymentb' align="right">Payment</th>
<th class='planb' align="right">Plan B</th>
<th class='priority' align="center">Priority</th>
<th class='adjbalance' align="right">Adj Bal</th>
<th class='paymentg' align="right">Pmt G</th>
<th class='plang' align="right">Plan G</th>
</tr>
<tr>
<td align="left">Visa 1</td>
<td align="right">$1,004.00</td>
<td align="right">$25.00</td>
<td align="right">40.2</td>
<td align="center">1</td>
<td align="center">adj</td>
<td align="right">$125.00</td>
<td align="right">8.0</td>
</tr>
<tr>
<td align="left">Car 2</td>
<td align="right">$5,104.00</td>
<td align="right">$125.00</td>
<td align="right">40.8</td>
<td align="center">2</td>
<td align="center">$4104.00</td>
<td align="right">$250.00</td>
<td align="right">16.4</td>
</tr>
<tr>
<td align="left">Car 1</td>
<td align="right">$15,000.00</td>
<td align="right">$250.00</td>
<td align="right">60</td>
<td align="center">3</td>
<td align="center">$8750.00</td>
<td align="right">$500.00</td>
<td align="right">17.5</td>
</tr>
<tr>
<td align="left">Visa 2</td>
<td align="right">$7,520.00</td>
<td align="right">$85.00</td>
<td align="right">88.5</td>
<td align="center">4</td>
<td align="center">$3865.00</td>
<td align="right">$585.00</td>
<td align="right">6.6</td>
</tr>
<tr>
<td align="left">Equity line</td>
<td align="right">$39,000.00</td>
<td align="right">$390.00</td>
<td align="right">100</td>
<td align="center">5</td>
<td align="center">$19,500</td>
<td align="right">$975.00</td>
<td align="right">20</td>
</tr>
<tr>
<td align="left">Mortgage</td>
<td align="right">$89,200.00</td>
<td align="right">$645.00</td>
<td align="right">138.3</td>
<td align="center">6</td>
<td align="center">$44,050.00</td>
<td align="right">$1620.00</td>
<td align="right">27.1</td>
</tr>
<tr style="color: red;">
<td align="left">Total</td>
<td align="right">$156,828.00</td>
<td align="right">$1,520.00</td>
<td align="right">138.3</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>98</td>
</tr>
</tbody>
</table>
<p>By adding $100.00 to the equation, we dropped the time required to payoff our debt by 6 months.  Now a couple of things to keep in mind.  First off, there is the very real aspect of interest that throws this simple version of the equation off.  Secondly, in the case of a mortgage, make sure that your extra payment is going towards the principle of the loan, not the interest.  </p>
<p>Well, we hope that you&#8217;ve enjoyed this little trip down debt-free lane.  We&#8217;ll be posting a tool that will automate this a bit for you in the not to distant future, so come check back often.  While you&#8217;re here, you might as well <a href='http://www.katr.com/kblog/members-area/'>sign-up</a> as a registered user.  Registration is free and you will receive access to additional content.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.katr.com/kblog/2009/05/breaking-free-from-debt/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Business Partners</title>
		<link>http://www.katr.com/kblog/2009/05/business-partners/</link>
		<comments>http://www.katr.com/kblog/2009/05/business-partners/#comments</comments>
		<pubDate>Thu, 28 May 2009 02:29:19 +0000</pubDate>
		<dc:creator>Bill</dc:creator>
		
		<category><![CDATA[Business Lessons]]></category>

		<guid isPermaLink="false">http://www.katr.com/kblog/?p=56</guid>
		<description><![CDATA[I should probably start by qualifying this post; it is going to sound downright &#8220;doom and gloomy&#8221;.  The truth of the matter is that I&#8217;ve actually also had some great business partners, however they&#8217;re not much fun to write about.  So I&#8217;ve picked out some of the more interesting personality traits to depict [...]]]></description>
			<content:encoded><![CDATA[<p>I should probably start by qualifying this post; it is going to sound downright &#8220;doom and gloomy&#8221;.  The truth of the matter is that I&#8217;ve actually also had some great business partners, however they&#8217;re not much fun to write about.  So I&#8217;ve picked out some of the more interesting personality traits to depict here.  This list represents actual partners that I&#8217;ve encountered after 20 years of experience in 5 different venues.  And by partners, I mean just that.  Co-shareholders in S-Corps or LLC&#8217;s that I&#8217;ve also been a shareholder in.  In some cases, the partners were simply not committed or motivated to participate while in other cases, issues with the partners went legal and cost the organizations a significant amount of money.</p>
<p>I once asked the renowned business man <a href="http://people.forbes.com/profile/brian-p-short/14270">Brian P. Short</a> how he avoided issues with his partners to which he provided a simple response: &#8220;I don&#8217;t have any&#8221;.   </p>
<p>That being said, let me describe the personality types that I have encountered directly in my travels through the business world.</p>
<h2>The Nelly</h2>
<p>The Nelly or &#8220;Nervous Nelly&#8221; is the partner who lets fear of the unknown prevent themselves from reaching success.  While this personality trait is not in itself dangerous, it does add drag to the effort that can impact the whole group.</p>
<h2>The Truster</h2>
<p>In all honesty, this is the category that I must place myself, often to my chagrin.  The Truster has a tendency to put too much faith in the other partners.  This can lead to complacency in areas where perhaps more diligence is required.</p>
<h2>The Whiner</h2>
<p>The Whiner is never satisfied even though their complaints may be unreasonable or irrelevant.  The Whiner rocks the boat so often that when a real issue materializes, it goes unnoticed as yet another petty rant.</p>
<h2>The Delegator</h2>
<p>The Delegator is a unique partner.  This individual may be very smart, or the very opposite.  Regardless, this particular individual usually has a reason for delegating tasks to other partners.  At times it may be because they feel &#8220;less qualified&#8221; to do the work and at other times it may be a simple &#8220;scheduling challenge&#8221;.  The net result is that someone else ends up doing their work on a regular basis.</p>
<h2>The Lemming</h2>
<p>The Lemming does what their told, when their told, and doesn&#8217;t challenge the directives even when there may be reason to.  This individual makes a dynamite employee, but not such a good partner.  The Lemming is generally not self-motivated and requires significant direction in order to get any results.</p>
<h2>Barney Rubble</h2>
<p>Barney Rubble is generally a good person, however lacks the general common sense that causes them to be a good partner.  Whether it is a matter of not working smart or simply a poor process, Barney falls into the less effective partner category.</p>
<p><span style="color: #00ccff;">We&#8217;ve saved the best for last.  All of the previous partner categories can basically be considered more useless than actually harmful.  The next two categories represent the apex predators of partnerships:  The King and The Don.</span></p>
<h2>The King</h2>
<p>The King is the great benefactor of the partnership, or at least that&#8217;s what he wants his royal subjects to believe.  As long as things are good, his subjects are running around happily doing his bidding, the King is generally good natured and generous.  But don&#8217;t let this demeanor fool you, The King generally has a powerful position and still rules the land.  When the chips are down, just remember&#8230;the Headsman works for The King.</p>
<h2>The Don</h2>
<p>The Don IS THE APEX predator of the partnership.  The major distinction between The King and The Don is technique and approach.  Both wield tremendous power, however The Don won&#8217;t hesitate to form alliances and take sanctions.  The Don doesn&#8217;t always follow the rules and may straddle the ethical and legal boundary.  The Don may act like your friend, but watch your back, your interests are generally NOT his top priority.</p>
<hr />If you are planning on choosing or joining with a partner, make sure they bring something to the table in the form of financial, technical, business networking, or other valuable assets.  If you must engage a partner, make sure you protect yourself legally by considering and understanding the following:</p>
<ol>
<li>The corporate stock distribution</li>
<li>The voting power of each partner/shareholder.  Is it 1 person 1 vote or weighted by stock ownership?</li>
<li>How ties and stalemates are broken</li>
<li>Establish and understand the terms for both voluntary and involuntary shareholder removal</li>
<li>Establish and understand the corporate buy sell document</li>
<li>Establish and understand the corporate buy laws</li>
<li>Establish and understand any non-compete clauses that may bind you</li>
<li>Each partners personal goals</li>
<li>Money changes everything and everyone</li>
</ol>
<p>And always remember that corporate counsel represents the company, not your interests.  Alway, always engage your own attorney to make sure that your interests are protected.</p>
<p><span style="color: #00ccff;">And whatever you do, watch out for The Don!</span></p>
<p><span style="color: #00ccff;"><span style="color: #ffff00;"><strong>DISCLAIMER:  This post is intended as a humorous take on partnership follies.  This post is NOT intended to provide legal advice or recommendations.  Always check with your attorney before making any questionable or significant business decisions.</strong></span><br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.katr.com/kblog/2009/05/business-partners/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Why start your own business?</title>
		<link>http://www.katr.com/kblog/2009/05/why-start-your-own-business/</link>
		<comments>http://www.katr.com/kblog/2009/05/why-start-your-own-business/#comments</comments>
		<pubDate>Tue, 26 May 2009 03:56:23 +0000</pubDate>
		<dc:creator>Bill</dc:creator>
		
		<category><![CDATA[Business Lessons]]></category>

		<category><![CDATA[Free Yourself]]></category>

		<guid isPermaLink="false">http://research.katr.com/wordpress/?p=12</guid>
		<description><![CDATA[So, why should you start your own business?  It would be so easy just to remain a run-of-the-mill employee, sit down, do what your told, day in and day out, every day for the rest of your life&#8230;..
&#8230;or&#8230;
You can DARE to be different, take charge, take control, take the wheel, and free yourself.  Now, all [...]]]></description>
			<content:encoded><![CDATA[<p>So, why should you start your own business?  It would be so easy just to remain a run-of-the-mill employee, sit down, do what your told, day in and day out, every day for the rest of your life&#8230;..</p>
<p>&#8230;or&#8230;</p>
<p>You can DARE to be different, take charge, take control, take the wheel, and free yourself.  Now, all of that being said, ponder the following questions:</p>
<ol>
<li>How secure do you feel in your job?  Really, even in today&#8217;s economy?</li>
<li>How often do you lose control of your personal time because of work?</li>
<li>How often do you lose control of your work time because of personal items?</li>
<li>How much enjoyment do you get out of your job?  Are you doing what you love?</li>
<li>Evaluate your boss.  On a scale of 1 to 10 with 10 being a Tyrannosaurus, how close to 10 does your boss get?</li>
<li>Evaluate your leadership?  On a scale of 1 to 10 with 10 being clueless, how close to 10 do they get?</li>
<li>Is your business growing or shrinking?  Why?</li>
<li>Is your staff growing or shrinking? Why?</li>
<li>Is your work managed by process and planning or driven by chaos and reaction?</li>
<li>How many rounds of layoffs have you had in the last year?  2 years?</li>
<li>What is the morale of your coworkers?</li>
<li>How positive is your work environment?  How flexible is the company?</li>
<li>How did your last performance review go?  Given your performance, was your cost of living increase (raise) adequate?</li>
<li>How much vacation time do you get?  Sick time?</li>
</ol>
<p>Think about the answers to those questions.  Now consider the answers to those questions if you are the boss.</p>
<p>Hold on now, don&#8217;t go quitting your job just yet.  Perhaps you now realize that the world is slightly bigger than a 5&#215;5 foot cubicle, however you still need to do a little planning.  You still have financial obligations that must be met and you can&#8217;t just throw away your current bread and butter on a whim.</p>
<p>Until the next post where we start to frame in a strategy, consider the following:</p>
<ol>
<li>What is it that you&#8217;d love to do if money was no object?</li>
<li>Do you have the skills and resources necessary to do what you love?  If not, what would it take?</li>
<li>Do you envision a market for what you&#8217;d love to do?</li>
<li>What does your competition look like?</li>
<li>What sort of time do you think you&#8217;d need to put into it to get it going initially?  After 1 month?  After 1 year?</li>
</ol>
<p><strong>Don&#8217;t let fear of the unknown prevent you from pursuing your dreams.</strong></p>
<p>Keep in mind that your dreams can:</p>
<ol>
<li>Allow you to be excited for Mondays</li>
<li>Go to sleep knowing that you&#8217;ll have a job when you wake up</li>
<li>Become financially independent</li>
<li>Have virtually unlimited vacation and personal time</li>
<li>Become a master rather than a minion</li>
<li>Grab the wheel and steer your own course through whatever waters you want to travel.</li>
</ol>
<p>I&#8217;d like to close with two quotes, spend a few minutes thinking about them:</p>
<p><strong><span class="art_title">&#8220;Whether You Believe You Can, Or You Can&#8217;t, You Are Right&#8221;</span></strong></p>
<p><em><span class="art_title">Henry Ford</span></em></p>
<p><strong><span class="art_title">&#8220;Insanity: doing the same thing over and over again and expecting different results.&#8221; </span></strong></p>
<p><em><span class="art_title">Albert Einstein</span></em><strong><span class="art_title"><br />
</span></strong></p>
<p>Check back next week and we&#8217;ll start planning our course together.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.katr.com/kblog/2009/05/why-start-your-own-business/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Getting started in iPhone / iPod touch development</title>
		<link>http://www.katr.com/kblog/2009/05/getting-started-in-iphone-ipod-touch-development-2/</link>
		<comments>http://www.katr.com/kblog/2009/05/getting-started-in-iphone-ipod-touch-development-2/#comments</comments>
		<pubDate>Sun, 24 May 2009 18:53:20 +0000</pubDate>
		<dc:creator>Bill</dc:creator>
		
		<category><![CDATA[iPhone / iPod touch]]></category>

		<guid isPermaLink="false">http://www.katr.com/kblog/?p=45</guid>
		<description><![CDATA[Okay, so we have these ultra-COOL new mobile devices created by Apple, the iPhone and the iPod touch.  These gadgets have redefined the mobile computing arena and a number of competitors are scrambling to catch up.  In the meantime, we&#8217;ll just have to be satisfied with trying to dream up new applications for [...]]]></description>
			<content:encoded><![CDATA[<p>Okay, so we have these <em>ultra-COOL</em> new mobile devices created by Apple, the iPhone and the iPod touch.  These gadgets have redefined the mobile computing arena and a number of competitors are scrambling to catch up.  In the meantime, we&#8217;ll just have to be satisfied with trying to dream up new applications for the Apple platforms.</p>
<p>But, what do we have to do to get started&#8230;?</p>
<p>Our mobile development team at KATR.com had to do that very thing in order to begin and we&#8217;re here to share that information with you.  Here is a summary of the steps needed to develop and deploy an iPhone application successfully ( by the way, the information contained here applies equally to the iPhone and iPod touch platforms):</p>
<p><strong>To get started developing for the iPhone you will need to do the following:</strong></p>
<ol>
<li>Obtain a Macintosh.  That&#8217;s right, the iPhone SDK does NOT have a Windows version.  Pretty much any Mac will do.</li>
<li>Register as an Apple developer at<a href="http://developer.apple.com/iphone/"> http://developer.apple.com/iphone/</a> (do not do this under your normal iTunes account, if possible, create a new one).<a href="http://developer.apple.com/iphone/"><br />
</a></li>
<li>Download the iPhone SDK and install it on your Macintosh</li>
</ol>
<p>You are now ready to start writing iPhone applications.  The SDK that you downloaded includes the xcode ide, the objective-c compiler, and the iPhone simulator (plus a few additional tools).  There is a catch, however, you cannot deploy your application unless you are paid developer under at least Apple&#8217;s &#8220;standard program&#8221;, which as of the time of this writing cost $99.00 and was valid for 1 year.</p>
<p><strong>Here are a few pointers when completing this process:</strong></p>
<ol>
<li>Your Apple developer registration must be complete.</li>
<li>You must be willing to spend $99.00 on the registration.</li>
<li>You will need to provide bank information for paid applications.  Make sure this bank can provide a <a href="http://en.wikipedia.org/wiki/ISO_9362">SWIFT</a> code, some smaller banks cannot and Apple will not approve you for paid applications without one.  In short, a swift code is used for international fund transfers and the Apple Store is an international venue.</li>
<li>You will need to provide proof of identity, for us this was our incorporation documents followed by a phone call.</li>
<li>You will need to provide tax information to Apple.</li>
<li>Have patience, this process took a couple of weeks.  Do it early and you can be working on your application while Apple sorts through your material.</li>
</ol>
<p>Technically, the bank and tax information isn&#8217;t required to deploy to your device, but you may as well complete this step now so that you don&#8217;t have to wait.  After you have completed these steps, you should be a paid, approved Apple developer.  Don&#8217;t forget to follow Apple&#8217;s provisioning documents in order to get your device setup properly.  We&#8217;ll leave that discussion for Apple (or if there&#8217;s enough interest, perhaps a future post).</p>
<p>Okay, you should be rocking and rolling at this point, creating applications, deploying to your device and testing.  Don&#8217;t forget to rotate your app from all possible orientations to make sure it is functioning properly.   Do things such as starting from flat on the table as well as upside down, you just never know what your users are going to do.  Our first application suffered from the case where a user started with it sitting on the table, and the initial screen display did not paint properly.  Our testers always began with the device in their hands pointing up.</p>
<p>Okay, you&#8217;re ready to go to the store.  You&#8217;ll have to zip up your application and submit it to Apple.  They reserve the right to reject it for a wide range of reasons and we&#8217;ve never found a list published on these guidelines.  Just make sure to meet Apple&#8217;s UI standards, make sure it doesn&#8217;t crash or have memory leaks, or violate it&#8217;s sandbox and you should be fine.  Be patient, our experience is that it takes Apple 7-10 days to review and approve a simple application.  If yours is complex, it may take longer.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.katr.com/kblog/2009/05/getting-started-in-iphone-ipod-touch-development-2/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>

