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

<channel>
	<title>Kingsrook Software</title>
	<atom:link href="http://www.kingsrook.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.kingsrook.com</link>
	<description>Dreaming in Source Code</description>
	<lastBuildDate>Tue, 15 May 2012 14:09:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Java Terminal Graphics (A.K.A. image.sh)</title>
		<link>http://www.kingsrook.com/blog/java-terminal-graphics-a-k-a-image-sh/</link>
		<comments>http://www.kingsrook.com/blog/java-terminal-graphics-a-k-a-image-sh/#comments</comments>
		<pubDate>Tue, 28 Jun 2011 22:19:36 +0000</pubDate>
		<dc:creator>dkelkhoff</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Darin]]></category>
		<category><![CDATA[Development Tools]]></category>

		<guid isPermaLink="false">http://www.kingsrook.com/?p=412</guid>
		<description><![CDATA[So after all these years, I say you still can&#8217;t beat a modern UNIX-like (i.e., Linux) shell environment (i.e., bash) for doing development. But that&#8217;s a topic for a different rant. Today I want to focus on introducing a tool that we&#8217;ve developed which adds one feature to the shell that it&#8217;s been lacking for [...]]]></description>
			<content:encoded><![CDATA[<p>So after all these years, I say you still can&#8217;t beat a modern UNIX-like (i.e., Linux) shell environment (i.e., bash) for doing development. But that&#8217;s a topic for a different rant. Today I want to focus on introducing a tool that we&#8217;ve developed which adds one feature to the shell that it&#8217;s been lacking for all these years: The ability to view image files.<br />
<span id="more-412"></span></p>
<p>This particular tool came about as the fortunate merger of two otherwise unrelated projects that I was working on at the same time a few years back: <a href="http://en.wikipedia.org/wiki/ANSI_escape_code" target="_blank">ANSI escape codes</a> for producing colors in the shell, and the <a href="http://download.oracle.com/javase/1,5.0/docs/api/javax/imageio/ImageIO.html" target="_blank">Java Image IO</a> library. They seemed like a natural fit together, and an ideal solution to the long-standing problem of how to view images in the shell.</p>
<p>So we had the pieces: ANSI escape codes, which let us basically treat characters on the terminal as though they were pixels (i.e., specify coordinates and a color), and Java Image IO, which let us easily read images of various formats and convert them into an array of pixels, ready for display. The only hard part left was mapping from (potentially) full 32-bit color images down to the 16 colors available in ANSI terminal color pallet.</p>
<p>The solution we went with involved the realization that unlike standard pixels, which generally take on only a single color, that &#8220;character&#8221; pixels are made up of 2 colors: the foreground, and the background. For example, a given character-pixel can be displaying a white &#8220;A&#8221; on a black background, or a bright red &#8220;#&#8221; on a yellow background. When viewed as a single pixel then, a character-pixel&#8217;s actual color value can be evaluated as the weighted average of the 2 colors being shown, with the weights being set to the number of pixels that are showing the foreground color versus those showing the background color.</p>
<p>For example, if a character is 7 pixels wide and 14 pixels high, that&#8217;s 98 total pixels. If displaying character &#8220;X&#8221; takes up, say, 16 of those pixels, then we would weight the foreground color (the color of the &#8220;X&#8221; pixels) at 16/98ths, and we&#8217;d weight the background color at (98-16)/98ths. So a bright red &#8220;X&#8221; (RGB=(255,85,85)) on a yellow background (RGB=(187,187,0)) would evaluate as RGB=(191,169,11), by:</p>
<pre>fgWeight = 16/98      ~= .16
bgWeight = (98-16)/98 ~= .84
R = (fgRed  *fgWeight) + (bgRed  *bgWeight) = (255*.16) + (187*.84) ~= 191
G = (fgGreen*fgWeight) + (bgGreen*bgWeight) = (85 *.16) + (187*.84) ~= 169
B = (fgBlue *fgWeight) + (bgBlue *bgWeight) = (85 *.16) + (0  *.84) ~= 11</pre>
<p>Using this type of calculation, we choose a handful of characters that took up a wide variety of pixels (the final set became &#8221; &#8220;, &#8220;-&#8221;, &#8220;X&#8221;, &#8220;#&#8221;, and a special &#8220;checkerboard&#8221; char, that nicely turns on half the pixels in a character). We then build all the combinations of (foreground, background, character) triplets, which multiplies out to (16 * 16 * 5) = 1280 colors. It&#8217;s not quite True Color, but it&#8217;s like 4 times better than 256, and way better than just those 16 that ANSI gave us, right!</p>
<p>So now we have something like 1280 colors, in some odd distribution throughout the RGB 3-Dimensional space. The final task then is to pick a terminal-character (an FG color, BG color and a character to print) that&#8217;s the closest match to the color of a pixel in the image. Easy right? We just used the <a href="http://en.wikipedia.org/wiki/Distance" target="_blank">distance formula</a> to pick which color is closest.</p>
<p>I think our results speak for themselves:<br />
<div class="ngg-galleryoverview"><div class="slideshowlink"><a class="slideshowlink" href="http://www.kingsrook.com/blog/java-terminal-graphics-a-k-a-image-sh/?show=gallery">Show picture list</a></div>[Show as slideshow]</div>
<div class="ngg-clear"></div>
</p>
<p>A few more notes:</p>
<ul>
<li>I have a handy <code>image.sh</code> in my $PATH that calls the binary distribution available below. So to view an image in my shell session, I simply execute <code>image.sh path/to/your.image</code>. The contents of that script tend to be as simple as <code>java -jar path/to/javaTermGraph.jar "$1"</code> (adjust the parameter handling, path, and <a href="http://en.wikipedia.org/wiki/Shebang_(Unix)" target="_blank">shebang</a>line all to your liking).</li>
<li>This tool was developed and has always been ran using <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/" target="_blank">PuTTY</a> connected to <a href="http://www.gnu.org/software/bash/" target="_blank">bash</a> on Linux. In theory it might work on some other combination of platforms, but that&#8217;s up to you, as I don&#8217;t have access to any of those.</li>
<li>If the image is wider than your terminal, it is scaled (using Java 2D) to your terminal&#8217;s width. Height isn&#8217;t adjusted &#8211; tall images simply scroll (probably slowly).</li>
<li>I will point out that it works better with a smaller font (basically because you get more character-pixels, and/or you get character-pixels that are closer to actual pixels), so since I&#8217;m always running our hacked version of putty, I just hold control and throw my mouse wheel down to get to about a 1 or 2 pixel font.</li>
</ul>
<p>&nbsp;</p>
<div class='et-box et-download'>
					<div class='et-box-content'><p>Binary (jar) distro: <a href="http://www.kingsrook.com/wp-content/uploads/2011/06/javaTermGraph.jar">javaTermGraph.jar</a></p>
<p>To use:</p>
<pre>java -jar $pathTo/javaTermGraph.jar $pathToAnImage</pre>
<p>Source package: <a href="http://www.kingsrook.com/wp-content/uploads/2011/06/javaTermGraph-0.1-src.zip">javaTermGraph-0.1-src.zip</a></p>
<p>To use:</p>
<pre>unzip javaTermGraph-0.1-src.zip
cd javaTermGraph-0.1-src/
ant
java -cp build com.kingsrook.termgraph.DrawImage $pathToAnImage</pre></div></div>
<div style="float: left; margin-right: 20px;"><a name='fb_share' type='button_count' href='http://www.facebook.com/sharer.php'>Share</a><script src='http://static.ak.fbcdn.net/connect.php/js/FB.Share' type='text/javascript'></script></div>
<div style="float: left; margin-right: 20px;"><a href='http://twitter.com/share' class='twitter-share-button' data-count='vertical'>Tweet</a><script type='text/javascript' src='http://platform.twitter.com/widgets.js'></script></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kingsrook.com/blog/java-terminal-graphics-a-k-a-image-sh/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>extended cd</title>
		<link>http://www.kingsrook.com/blog/extended-cd/</link>
		<comments>http://www.kingsrook.com/blog/extended-cd/#comments</comments>
		<pubDate>Thu, 16 Jun 2011 03:02:12 +0000</pubDate>
		<dc:creator>dkelkhoff</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Darin]]></category>
		<category><![CDATA[Development Tools]]></category>

		<guid isPermaLink="false">http://www.kingsrook.com/?p=299</guid>
		<description><![CDATA[If you&#8217;ve spent a lot of time working in a UNIX-like shell environment, you&#8217;ve no doubt quickly become an expert at the cd command.  It&#8217;s pretty much the first thing you learn to do in the shell.  Then one day you learn the cd - option, to switch back to $OLDPWD (ie, the last place [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;ve spent a lot of time working in a UNIX-like shell environment, you&#8217;ve no doubt quickly become an expert at the <code>cd</code> command.  It&#8217;s pretty much the first thing you learn to do in the shell.  Then one day you learn the <code>cd -</code> option, to switch back to <code>$OLDPWD</code> (ie, the last place that you&#8217;d cd&#8217;ed to in that session), and at that point you were a cd master, showing off to all your friends and co-workers.  From there on, you&#8217;re basically resolved to spend the next 30 years or so just cd&#8217;ing around from directory to directory, content, but never really loving cd.  Until&#8230;</p>
<p><span id="more-299"></span></p>
<p>Until you install the <code>extended cd</code> function developed by kingsrook (which is available in our <a href="/downloads">Downloads</a> section).  Extended cd defines a bash function, named &#8220;cd&#8221;, meaning that it replaces the shell&#8217;s built-in cd command.  At first it might sound like a bad idea to replace the built-in cd command, but don&#8217;t worry &#8211; extended cd adds a number of great features to this most basic command, making your navigation through your system&#8217;s directory tree fast, easy, and everything you ever dreamed of (if you have very sad dreams, like me).</p>
<p>The first set of features in extended cd were inspired by that one trick you learned about built-in cd, which was passing an argument of &#8220;-&#8221; to switch back to the your last working directory (per environment variable $OLDPWD).  Extended cd takes it a few steps further, by introducing the argument &#8220;_&#8221; (that&#8217;s an underscore, instead of a dash).  If you run extended cd with only an underscore as it&#8217;s argument (ie, <code>cd _</code>), it will take you to the last directory you cd&#8217;ed into from ANY of your current or previous shell sessions on that computer.  Actually, this could extend across multiple machines, if your home directory were shared across multiple computers, as it&#8217;s based on the cd history file (which is located at <code>~/.cd_history</code>), which is maintained by the extended cd function.</p>
<p>So why is <code>cd _</code> useful?  My main use case for it would be when I first boot my PC, and I make several new PuTTY connections to a development server, and I want them all to be in the same working directory.  I only have to type/tab out that path in the first one, then in the others I can just run a <code>cd _</code> to go to that same directory (the most recent entry in the cd history file).</p>
<p>However, that&#8217;s only the beginning of what extended cd does with the underscore argument and the cd history file.  To go a step beyond, you can add a number right after that underscore (as the same word or argument &#8211; no spaces between them), to go to the number&#8217;th most recent entry in your cd history.  For example, to go to the 2nd most recent entry in your file, you&#8217;d run <code>cd _2</code>.  For the third most recent, <code>cd _3</code>. (You may note that <code>cd _1</code> would have the same effect as <code>cd _</code>).</p>
<p>You might ask, why is that useful?  For me, it&#8217;s great in the situation when you&#8217;re popping back and forth between a few different directories, that aren&#8217;t necessarily close to one another, and you don&#8217;t want to have to re-type them, or find them in your shell command history.  Or, if you know you&#8217;ve recently been in a directory, and you want to get back there, you can just start trying cd _# options, and you know you&#8217;ll quickly get back, with just a few keystrokes (i.e., try <code>cd _2</code>, if that&#8217;s not right, try <code>cd _3</code>, <code>cd _4</code>, <code>cd _5</code>, and soon enough, you&#8217;ll be there).</p>
<p>Now if you can&#8217;t remember when you&#8217;ve recently been in a directory, and you don&#8217;t feel like playing a guessing game to try to get there, you can use one more extended cd underscore variation, by adding a question mark after the underscore, as in:  <code>cd _?</code>.  When invoked like this, extended cd will print the contents of your cd history file, sorted with most recent entries last, printing the number of each entry before and after it, then will drop you at a prompt where you can enter the number of an entry to be switched directly to that directory.  If you don&#8217;t want to see your full cd history file, you can also add a number after the question mark, to only see that many entries from the file (i.e., <code>cd _?10</code> to see the 10 most recent entries from the file).  Useful, eh?  Here&#8217;s a &#8220;screenshot&#8221;:</p>
<pre>dkelkhof@king:~&gt; cd _?10
    10  /home/dkelkhof/development/foobar_site/trunk/src/com/kingsrook/content/foobar 10
     9  /home/dkelkhof/development/foobar_site/trunk/src/com 9
     8  /home/dkelkhof/development/foobar_site/trunk/src/com/kingsrook/cgi/qdim/projects/foobar/tables/voucher 8
     7  /home/dkelkhof/development/foobar_site/trunk/src/com/kingsrook 7
     6  /home/dkelkhof/development/foobar_site/trunk/src/com/kingsrook/cgi/qdim/projects/foobar 6
     5  /home/dkelkhof/development/foobar_site/trunk 5
     4  /home/dkelkhof/development/foobar_site/trunk/src/com/kingsrook/content 4
     3  /home/dkelkhof/development/infrastructure/trunk/CRONTAB 3
     2  /home/dkelkhof/development/sas_applications/trunk/src/com/kingsrook/cgi/mcf/deployments 2
     1  /home/dkelkhof/development/webapps/trunk 1
cd&gt; 7
dkelkhof@mlrnd02:~/development/foobar_site/trunk/src/com/kingsrook&gt;</pre>
<p>The next bag of tricks in extended-cd are also built on that cd history file.  This time, if you know part of a path that you have recently been to, but you don&#8217;t want to type/tab out the whole thing, you can pass it to extended cd preceded by a question mark.  For example, to get back to the <code>utilities</code> directory in some project you know you&#8217;ve recently worked on, you can simply run <code>cd ?utilities</code>. If extended cd finds one or more matches in your cd history, it prints that same menu for you, showing the matches, prompting you to enter the one you want to go back to. Beautiful.</p>
<p>The magic of extended cd doesn&#8217;t end there:  The next feature is great for when you&#8217;re working in a very deep directory path, and you want to go some distance up the the tree, but you don&#8217;t want to guess how many <code>../</code>&#8216;s you need to get there. What you can do in extended cd is use a third dot, followed by part of the directory name you want to end in, for example <code>cd ...foo</code> to move upward, however many directories are needed, until the basename of your working directory is (or contains) <code>foo</code> &#8212; a far shot better than <code>cd ../../../../</code>, then not being far enough, so doing another <code>cd ../../../../</code>, then going too far and having to go back down. (For reference, when working on java projects for kingsrook, I always find myself either doing <code>cd ...ook</code> to get back up to the top of our java packages, or <code>cd ...src</code> to get back to the root of our source code, or <code>cd ...unk</code> to get back to the root of my svn checkout).</p>
<p>The last feature available in extended cd mimics a shell trick I saw a college professor use once, where you can re-run your previous command after applying a basic find/replace to it, via <code>^find^replace</code>. In this case, you can run <code>cd ^foo^bar</code>, and extended cd will take your current working path, apply the requested find/replace to it, and switch you the resulting path. This is nice if you&#8217;ve got two similar directory tress under different roots (for example, two svn working copies, let&#8217;s call them <code>trunk</code> and <code>cool_branch</code>), and you quickly want to jump from a given sub directory of one into the other (in our example, <code>cd ^trunk^cool_branch</code> might take you from <code>~/development/trunk/src/com/kingsrook/templates/site/macros/</code> to<br />
<code>~/development/<strong>cool_branch</strong>/src/com/kingsrook/templates/site/macros/</code> in one quick easy step).</p>
<p>Here&#8217;s a demo of the double-carat mode (both for general shell commands, and with extended cd):</p>
<pre>## the shell's builtin for general commands:
dkelkhof@king:~&gt; ls -l foo
ls: foo: No such file or directory
dkelkhof@king:~&gt; ^foo^bar
ls -l bar
-rw-rw-r-- 1 dkelkhof group 0 2011-06-24 16:11 bar
## extended cd's version:
dkelkhof@king:~/development/trunk/src/com/kingsrook/&gt; cd ^trunk^cool_branch
dkelkhof@king:~/development/cool_branch/src/com/kingsrook/&gt;</pre>
<p>So that&#8217;s it &#8211; the full feature set of extended cd. It turns that most basic, boring bash builtin into something that can truly make your development faster, more fun, and almost futuristic. Oh, it also has a <code>-help</code> screen, shown here, which serves as a nice remind of everything we&#8217;ve gone through here:</p>
<pre>dkelkhof@king:~&gt; cd -help
cd: usage: cd [-L|-P] [dir]

For extended features, use the following for [dir] (not compatible with [-L|-P] flags):
   _          - Go to last entry in cd_history.
   _number    - Go to &lt;number&gt;'th last entry in cd_history.
   _?         - List cd_history, prompt to select directory.
   _?number   - List last &lt;number&gt; cd_history entries, prompt to select directory.
   ?pattern   - Pick directory from cd_history matching &lt;pattern&gt;.
   .?pattern  - Pick directory from cd_history matching &lt;pattern&gt;, under cwd.
   ...pattern - Go up (multiple ../'s) to directory matching &lt;pattern&gt;.
   ^old^new   - Go to pwd, with pattern &lt;old&gt; replaced with &lt;new&gt;</pre>
<div class='et-box et-download'>
					<div class='et-box-content'><a href="http://www.kingsrook.com/wp-content/uploads/2011/06/extended_cd.zip">download extended-cd</a></p>
<p>To install:
Unzip, place somewhere &#8220;handy&#8221;, and add a sourcing of it to your <code>.bashrc</code></div></div>
<a name='fb_share' type='button_count' href='http://www.facebook.com/sharer.php'>Share</a><script src='http://static.ak.fbcdn.net/connect.php/js/FB.Share' type='text/javascript'></script><br />
<a href='http://twitter.com/share' class='twitter-share-button' data-count='vertical'>Tweet</a><script type='text/javascript' src='http://platform.twitter.com/widgets.js'></script>
]]></content:encoded>
			<wfw:commentRss>http://www.kingsrook.com/blog/extended-cd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>k-Profile</title>
		<link>http://www.kingsrook.com/projects/k-profile/</link>
		<comments>http://www.kingsrook.com/projects/k-profile/#comments</comments>
		<pubDate>Thu, 09 Jun 2011 19:46:00 +0000</pubDate>
		<dc:creator>jmaes</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://www.kingsrook.com/?p=134</guid>
		<description><![CDATA[Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque consequat, odio et porta faucibus, est justo suscipit libero, vitae bibendum libero eros ut felis. Fusce gravida, orci nec tempus viverra, purus orci consectetur elit, eu ultricies est odio in lectus. Ut vitae justo ornare quam porta pretium quis eget nisl. Ut non iaculis dui. Nam [...]]]></description>
			<content:encoded><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque consequat, odio et porta faucibus, est justo suscipit libero, vitae bibendum libero eros ut felis.<span id="more-134"></span> Fusce gravida, orci nec tempus viverra, purus orci consectetur elit, eu ultricies est odio in lectus. Ut vitae justo ornare quam porta pretium quis eget nisl. Ut non iaculis dui. Nam in dui non mi feugiat lacinia quis ut lectus. Etiam quis eros vitae metus congue auctor eget eu ligula. Integer at eros ac elit auctor iaculis. Nulla non metus vel diam tincidunt tincidunt. Sed ut arcu tortor, sed pharetra orci. Morbi dignissim aliquam lorem eget gravida. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla pellentesque auctor consectetur. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed tortor magna, dictum in tincidunt ut, condimentum vitae dui. Vestibulum lectus metus, molestie vitae adipiscing vel, consectetur id neque. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Quisque et sapien at justo fringilla sodales ac nec mi. Cras adipiscing lobortis sapien, eget fringilla mi sagittis et. Vestibulum nec fringilla leo.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kingsrook.com/projects/k-profile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>k-Vi(m)</title>
		<link>http://www.kingsrook.com/projects/k-vim/</link>
		<comments>http://www.kingsrook.com/projects/k-vim/#comments</comments>
		<pubDate>Thu, 09 Jun 2011 19:45:44 +0000</pubDate>
		<dc:creator>jmaes</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://www.kingsrook.com/?p=132</guid>
		<description><![CDATA[Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque consequat, odio et porta faucibus, est justo suscipit libero, vitae bibendum libero eros ut felis. Fusce gravida, orci nec tempus viverra, purus orci consectetur elit, eu ultricies est odio in lectus. Ut vitae justo ornare quam porta pretium quis eget nisl. Ut non iaculis dui. Nam [...]]]></description>
			<content:encoded><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque consequat, odio et porta faucibus, est justo suscipit libero, vitae bibendum libero eros ut felis.<span id="more-132"></span> Fusce gravida, orci nec tempus viverra, purus orci consectetur elit, eu ultricies est odio in lectus. Ut vitae justo ornare quam porta pretium quis eget nisl. Ut non iaculis dui. Nam in dui non mi feugiat lacinia quis ut lectus. Etiam quis eros vitae metus congue auctor eget eu ligula. Integer at eros ac elit auctor iaculis. Nulla non metus vel diam tincidunt tincidunt. Sed ut arcu tortor, sed pharetra orci. Morbi dignissim aliquam lorem eget gravida. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla pellentesque auctor consectetur. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed tortor magna, dictum in tincidunt ut, condimentum vitae dui. Vestibulum lectus metus, molestie vitae adipiscing vel, consectetur id neque. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Quisque et sapien at justo fringilla sodales ac nec mi. Cras adipiscing lobortis sapien, eget fringilla mi sagittis et. Vestibulum nec fringilla leo.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kingsrook.com/projects/k-vim/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>k-Bash</title>
		<link>http://www.kingsrook.com/projects/k-bash-2/</link>
		<comments>http://www.kingsrook.com/projects/k-bash-2/#comments</comments>
		<pubDate>Thu, 09 Jun 2011 19:45:27 +0000</pubDate>
		<dc:creator>jmaes</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://www.kingsrook.com/?p=130</guid>
		<description><![CDATA[Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque consequat, odio et porta faucibus, est justo suscipit libero, vitae bibendum libero eros ut felis. Fusce gravida, orci nec tempus viverra, purus orci consectetur elit, eu ultricies est odio in lectus. Ut vitae justo ornare quam porta pretium quis eget nisl. Ut non iaculis dui. Nam [...]]]></description>
			<content:encoded><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque consequat, odio et porta faucibus, est justo suscipit libero, vitae bibendum libero eros ut felis.<span id="more-130"></span> Fusce gravida, orci nec tempus viverra, purus orci consectetur elit, eu ultricies est odio in lectus. Ut vitae justo ornare quam porta pretium quis eget nisl. Ut non iaculis dui. Nam in dui non mi feugiat lacinia quis ut lectus. Etiam quis eros vitae metus congue auctor eget eu ligula. Integer at eros ac elit auctor iaculis. Nulla non metus vel diam tincidunt tincidunt. Sed ut arcu tortor, sed pharetra orci. Morbi dignissim aliquam lorem eget gravida. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla pellentesque auctor consectetur. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed tortor magna, dictum in tincidunt ut, condimentum vitae dui. Vestibulum lectus metus, molestie vitae adipiscing vel, consectetur id neque. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Quisque et sapien at justo fringilla sodales ac nec mi. Cras adipiscing lobortis sapien, eget fringilla mi sagittis et. Vestibulum nec fringilla leo.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kingsrook.com/projects/k-bash-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>k-QDIM</title>
		<link>http://www.kingsrook.com/projects/k-qdim-2/</link>
		<comments>http://www.kingsrook.com/projects/k-qdim-2/#comments</comments>
		<pubDate>Thu, 09 Jun 2011 19:45:10 +0000</pubDate>
		<dc:creator>jmaes</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://www.kingsrook.com/?p=128</guid>
		<description><![CDATA[Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque consequat, odio et porta faucibus, est justo suscipit libero, vitae bibendum libero eros ut felis. Fusce gravida, orci nec tempus viverra, purus orci consectetur elit, eu ultricies est odio in lectus. Ut vitae justo ornare quam porta pretium quis eget nisl. Ut non iaculis dui. Nam [...]]]></description>
			<content:encoded><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque consequat, odio et porta faucibus, est justo suscipit libero, vitae bibendum libero eros ut felis.<span id="more-128"></span> Fusce gravida, orci nec tempus viverra, purus orci consectetur elit, eu ultricies est odio in lectus. Ut vitae justo ornare quam porta pretium quis eget nisl. Ut non iaculis dui. Nam in dui non mi feugiat lacinia quis ut lectus. Etiam quis eros vitae metus congue auctor eget eu ligula. Integer at eros ac elit auctor iaculis. Nulla non metus vel diam tincidunt tincidunt. Sed ut arcu tortor, sed pharetra orci. Morbi dignissim aliquam lorem eget gravida. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla pellentesque auctor consectetur. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed tortor magna, dictum in tincidunt ut, condimentum vitae dui. Vestibulum lectus metus, molestie vitae adipiscing vel, consectetur id neque. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Quisque et sapien at justo fringilla sodales ac nec mi. Cras adipiscing lobortis sapien, eget fringilla mi sagittis et. Vestibulum nec fringilla leo.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kingsrook.com/projects/k-qdim-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>better &gt; best</title>
		<link>http://www.kingsrook.com/blog/better-better-than-best/</link>
		<comments>http://www.kingsrook.com/blog/better-better-than-best/#comments</comments>
		<pubDate>Thu, 09 Jun 2011 19:39:31 +0000</pubDate>
		<dc:creator>jmaes</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[James]]></category>

		<guid isPermaLink="false">http://www.kingsrook.com/?p=125</guid>
		<description><![CDATA[better is better than best wow &#8211; what? i&#8217;ll say it again. better is better than best We have all heard it before. a bird in the hand is better than two in the bush there comes a time in every project when you&#8217;ve got to shoot the engineer and goto production 20% of 100% is [...]]]></description>
			<content:encoded><![CDATA[<p><strong><em>better </em>is better than <em>best</em></strong></p>
<p>wow &#8211; what?<br />
i&#8217;ll say it again.</p>
<p><strong><em>better </em>is better than <em>best<span id="more-125"></span></em></strong></p>
<p>We have all heard it before.</p>
<ul>
<li>a bird in the hand is better than two in the bush</li>
<li>there comes a time in every project when you&#8217;ve got to shoot the engineer and goto production</li>
<li>20% of 100% is 80% &#8211; and 80% is damn good</li>
</ul>
<p>The point is, that we all too often get caught up on &#8220;more&#8221;.  We get caught up on the perfection; on the grand idea.  We can spend years getting it &#8220;just right&#8221; and in the end never do anything (think GNU Hurd).</p>
<p>In manufacturing, its called Lean Product Development (started by Toyota long ago).  In construction, its called &#8220;Good Enough&#8221;.  In software engineering, its called&#8230;&#8230;  well &#8211; we don&#8217;t have a great name for it.   it doesn&#8217;t happen enough.</p>
<p>The problem is with everyone &#8211; but we will start with those who enable it and encourage it.</p>
<p>Us; we the programmers, we the architects, we the system administrators.  We love solving problems.  We love the &#8220;Next Great Idea&#8221;.  We love the challenge.</p>
<p>When the project manager or the user or the customer says, &#8220;wow, this is good, but it would be great if it just had X&#8221; &#8211; instead of letting them know, that yes, we agree that X would be a &#8220;Great Thing&#8221;, but we currently have a working system that can start solving problems and saving money ready NOW and that we should go with what we have and then see what is really needed for the next step, we instead reply like a little doggy just happy to see it&#8217;s master after a long day at work.  We wag our tail, try to lick their face and say &#8220;Yeppers!  That would be awesome &#8211; let me go do it!&#8221;.</p>
<p>With each repeat of this, and it can happen at each and every step, the project slips future from the finish line.</p>
<p>The most amazing piece of software ever written isn&#8217;t the one the that will solve every problem and make the company wealthy beyond belief.  It&#8217;s the simple program that was released 5 years ago, after a week of development and updated a little here and little there, that has been running the company and paying the bills week after week.</p>
<p>Linux was the &#8220;Good Enough&#8221; answer to Hurd.</p>
<p>There is no &#8220;Best&#8221; &#8211; there is only &#8220;Better than what we have right now&#8221;.   Continue to give your customers &#8220;Better&#8221; and everything will be a &#8220;Good Thing&#8221;</p>
<p><a name='fb_share' type='button_count' href='http://www.facebook.com/sharer.php'>Share</a><script src='http://static.ak.fbcdn.net/connect.php/js/FB.Share' type='text/javascript'></script> <a href='http://twitter.com/share' class='twitter-share-button' data-count='vertical'>Tweet</a><script type='text/javascript' src='http://platform.twitter.com/widgets.js'></script><br />
&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kingsrook.com/blog/better-better-than-best/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

