<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Cooncat Publishing</title>
	<atom:link href="http://jimcooncat.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://jimcooncat.wordpress.com</link>
	<description>Advanced technology, only as you need it.</description>
	<lastBuildDate>Thu, 14 May 2009 21:00:36 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='jimcooncat.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/7120b0fadace4b3a28d0b6f141d2316e?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Cooncat Publishing</title>
		<link>http://jimcooncat.wordpress.com</link>
	</image>
			<item>
		<title>Attempting to remove U3 with Linux</title>
		<link>http://jimcooncat.wordpress.com/2009/05/14/attempting-to-remove-u3-from-linux/</link>
		<comments>http://jimcooncat.wordpress.com/2009/05/14/attempting-to-remove-u3-from-linux/#comments</comments>
		<pubDate>Thu, 14 May 2009 16:09:08 +0000</pubDate>
		<dc:creator>jimcooncat</dc:creator>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://jimcooncat.wordpress.com/?p=94</guid>
		<description><![CDATA[A friend found a 2 GB SanDisk Cruzer left in a Walmart shopping cart. There wasn&#8217;t anything fun on it, but it did have an annoying auto-run program on it called U3.
I’m trying this method from a post at:
http://noisetheatre.blogspot.com/2006/08/uninstall-u3-and-free-your-usb-drive.html
—–
Peter wrote at 21 January, 2009 05:21…
So hopefully someone will find this useful. After lots of googling [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=94&subd=jimcooncat&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>A friend found a 2 GB SanDisk Cruzer left in a Walmart shopping cart. There wasn&#8217;t anything fun on it, but it did have an annoying auto-run program on it called <a href="http://en.wikipedia.org/wiki/U3">U3</a>.</p>
<p>I’m trying this method from a post at:<br />
http://noisetheatre.blogspot.com/2006/08/uninstall-u3-and-free-your-usb-drive.html</p>
<p>—–</p>
<p>Peter wrote at 21 January, 2009 05:21…<br />
So hopefully someone will find this useful. After lots of googling I found that there weren’t any instructions for removing U3 under linux. Truth be told, it’s really easy, but the solution is as obscure as it is easy.</p>
<p>1)Mount the U3 “cd” partition<br />
2)Run Mount to find out the name of the device that U3 is on. It should be some thing like scd#, the important part is the number there.<br />
2.5) Just to be sure you’ve got the right device check that /dev/sr# is a symlink to /dev/scd# that you just found.<br />
3) Now that you know which device you’re looking for you can start the actual removal. cd to /sys/class/block/sr#/device/<br />
4)In this directory is a file named delete, it’s write only by root, and if you write to it (I’ve only ever tried with “1″) the U3 partition will be removed. With root privileges ‘echo “1″ &gt; delete’ removes it quite nicely.</p>
<p>——<br />
Here was my results:</p>
<p>1) I just plugged it in, it automounted<br />
2) jim@mickey:~$ mount<br />
… /dev/sdb1 on /media/disk type vfat (rw,nosuid,nodev,shortname=mixed,uid=1000,utf8,umask=077)<br />
2.5) jim@mickey:~$ ls -l /dev/sr0<br />
lrwxrwxrwx 1 root root 4 2009-05-12 07:04 /dev/sr0 -&gt; scd0<br />
3) jim@mickey:~$ cd /sys/block/sr0/device/<br />
jim@mickey:/sys/block/sr0/device$ ls -l delete<br />
–w——- 1 root root 4096 2009-05-14 11:32 delete<br />
jim@mickey:/sys/block/sr0/device$ sudo -i<br />
root@mickey:~# cd /sys/block/sr0/device<br />
root@mickey:/sys/block/sr0/device# echo “1″ &gt; delete<br />
root@mickey:/sys/block/sr0/device# exit</p>
<p>After all that, it didn’t appear to do anything. I must be missing a step. I plugged it into a Win2k machine, and the U3 launchpad came up. I removed the software using the uninstall feature of U3.</p>
<p>So I guess that was a bust, but I’ll have more drives in the future to try this with.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jimcooncat.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jimcooncat.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jimcooncat.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jimcooncat.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jimcooncat.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jimcooncat.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jimcooncat.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jimcooncat.wordpress.com/94/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jimcooncat.wordpress.com/94/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jimcooncat.wordpress.com/94/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=94&subd=jimcooncat&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jimcooncat.wordpress.com/2009/05/14/attempting-to-remove-u3-from-linux/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jimcooncat</media:title>
		</media:content>
	</item>
		<item>
		<title>Server Wishlist</title>
		<link>http://jimcooncat.wordpress.com/2009/03/22/server-wishlist/</link>
		<comments>http://jimcooncat.wordpress.com/2009/03/22/server-wishlist/#comments</comments>
		<pubDate>Sun, 22 Mar 2009 11:09:47 +0000</pubDate>
		<dc:creator>jimcooncat</dc:creator>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://jimcooncat.wordpress.com/?p=91</guid>
		<description><![CDATA[I wrote these comments in response to Søren Hansen&#8217;s post about the future direction of Ubuntu Server development. I&#8217;m thankful for the recent discussion started by Thierry Carrez.
    My wishlist:
    Automatic installation. I&#8217;m using network preseeding to install servers and desktops, and it works like a charm. I&#8217;ve got [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=91&subd=jimcooncat&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I wrote these comments in response to Søren Hansen&#8217;s <a href="http://warma.dk/blog/article/98/">post</a> about the future direction of Ubuntu Server development. I&#8217;m thankful for the recent <a href="http://fnords.wordpress.com/2009/03/20/what-i-want-ubuntu-server-to-be/">discussion</a> started by Thierry Carrez.</p>
<p>    My wishlist:</p>
<p>    <strong>Automatic installation.</strong> I&#8217;m using network preseeding to install servers and desktops, and it works like a charm. I&#8217;ve got apt-cacher in the mix, and when I install a new machine, it pulls only the updates from the Internet. I keep a custom repository, and have been successful in setting things like /etc/network/interfaces by making a small .deb packages to make these customizations. Setting up and adding to the custom repository is a pain, because I don&#8217;t understand the tools well enough yet &#8212; especially signing the packages so I don&#8217;t get security warnings.</p>
<p>    <strong>Ability to review updates. </strong>I&#8217;d like a simple way, either through a chroot or virtualization, to subject updates to a vetting process before making it available for installation. Again, repository management tools are needed.</p>
<p>    <strong>High Availability. </strong>Even in a small office, downtime is expensive. I&#8217;d like to see packages like drbd-primary and drbd-secondary, where you install each on a different machine, and you have simple redundant storage. Same for essential services like dns, dhcp, internet gateways, font servers, etc.</p>
<p>    <strong>Guided networking schemes. </strong>When setting up a local network, there should be sensible defaults and alternatives to a standardized addressing scheme. IP addresses to use 192.168&#8230; or 10.0&#8230;? Internal services available at gateway.lan, dns.lan, printers.lan?</p>
<p>   <strong> File-based LAN configuration. </strong>The underpinnings of configuration could be based on files, which can be altered and administered through custom .debs. A database-driven front-end could be used to help define the network, which spews out custom .debs to be distributed through the dpkg updating already in place. If you want to migrate to LDAP or some other &#8220;registry&#8221; type scheme, have it read from existing files like dnsmasq reads /etc/hosts as a starting point. Don&#8217;t force complexity on the network, offer it as alternatives to a simple, robust default. </p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jimcooncat.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jimcooncat.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jimcooncat.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jimcooncat.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jimcooncat.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jimcooncat.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jimcooncat.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jimcooncat.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jimcooncat.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jimcooncat.wordpress.com/91/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=91&subd=jimcooncat&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jimcooncat.wordpress.com/2009/03/22/server-wishlist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jimcooncat</media:title>
		</media:content>
	</item>
		<item>
		<title>Bulk deleting Gmail contacts</title>
		<link>http://jimcooncat.wordpress.com/2008/12/22/bulk-deleting-gmail-contacts/</link>
		<comments>http://jimcooncat.wordpress.com/2008/12/22/bulk-deleting-gmail-contacts/#comments</comments>
		<pubDate>Mon, 22 Dec 2008 17:31:57 +0000</pubDate>
		<dc:creator>jimcooncat</dc:creator>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://jimcooncat.wordpress.com/?p=85</guid>
		<description><![CDATA[I&#8217;m migrating from a hosted Zimbra email setup to Gmail. When importing my contact data I had some glitches, and wanted an easy way to delete all the Gmail contacts. But no! Gmail only allows you to delete 500 at a time. And to do that, you have to click-click 500 times to select the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=85&subd=jimcooncat&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I&#8217;m migrating from a hosted Zimbra email setup to Gmail. When importing my contact data I had some glitches, and wanted an easy way to delete all the Gmail contacts. But no! Gmail only allows you to delete 500 at a time. And to do that, you have to click-click 500 times to select the contacts you want deleted. That wasn&#8217;t good for me.</p>
<p>After searching the net and trying a couple of things from posts, I was going to do some major bash scripting. I went out and plowed the driveway, and got a good idea. I&#8217;ll just make a little <a href="https://addons.mozilla.org/en-US/firefox/addon/748">GreaseMonkey</a> script to check off the boxes for me.</p>
<p>I signed into the Gmail account, and clicked the link at the bottom of the page marked &#8220;basic HTML&#8221;. Then I clicked &#8220;Contacts&#8221;, then &#8220;All Contacts&#8221;. I loaded the greasemonkey script shown below, and refreshed the page. The first 400 checkboxes were checked off, so all I had to do was press the Delete button. The page reloads automatically with the next 400 boxes checked. In about a minute, all the contacts were deleted!</p>
<p>Note: I&#8217;m using Google Apps for Gmail, your &#8220;namespace&#8221; below might be different for regular Gmail, I&#8217;m not sure.</p>
<pre>
// ==UserScript==
// @name           Select 400 Checkboxes
// @namespace      https://mail.google.com/a/
// @description    Checks off the first 400 checkboxes; good for removing Gmail contacts
// @include        https://addons.mozilla.org/en-US/firefox/addon/748
// ==/UserScript==

var allCheckboxes, thisCheckbox;
allCheckboxes = document.evaluate(
    "//input[@type='checkbox']",
    document,
    null,
    XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
    null);

for (var i = 0; i &lt; 400; i++) {
    thisCheckbox = allCheckboxes.snapshotItem(i);
    thisCheckbox.checked=true
}</pre>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jimcooncat.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jimcooncat.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jimcooncat.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jimcooncat.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jimcooncat.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jimcooncat.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jimcooncat.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jimcooncat.wordpress.com/85/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jimcooncat.wordpress.com/85/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jimcooncat.wordpress.com/85/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=85&subd=jimcooncat&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jimcooncat.wordpress.com/2008/12/22/bulk-deleting-gmail-contacts/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jimcooncat</media:title>
		</media:content>
	</item>
		<item>
		<title>Learn Technology with Monit</title>
		<link>http://jimcooncat.wordpress.com/2008/11/25/learn-technology-with-monit/</link>
		<comments>http://jimcooncat.wordpress.com/2008/11/25/learn-technology-with-monit/#comments</comments>
		<pubDate>Tue, 25 Nov 2008 13:56:50 +0000</pubDate>
		<dc:creator>jimcooncat</dc:creator>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[learning technology]]></category>
		<category><![CDATA[monit]]></category>

		<guid isPermaLink="false">http://jimcooncat.wordpress.com/?p=60</guid>
		<description><![CDATA[Over the past few days I&#8217;ve been playing with software called Monit.
 Monit is a utility for managing and monitoring, processes, files, directories and filesystems on a UNIX system. Monit conducts automatic maintenance and repair and can execute meaningful causal actions in error situations.
Translated to a simpler phrasing, Monit sits in the background and runs [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=60&subd=jimcooncat&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Over the past few days I&#8217;ve been playing with software called <a href="http://mmonit.com/monit/">Monit</a>.</p>
<blockquote><p> Monit is a utility for managing and monitoring, processes, files, directories and filesystems on a UNIX system. Monit conducts automatic maintenance and repair and can execute meaningful causal actions in error situations.</p></blockquote>
<p>Translated to a simpler phrasing, Monit sits in the background and runs tests that you tell it to on your computer, and sends you an email about the results of those tests. Optionally, it can restart programs that stop working, or do any kind of trick you can dream up based on the results of the tests.</p>
<p>Monit comes with it&#8217;s own email sender, so you don&#8217;t have to set up anything extra to get it to send you an alert. You will need to specify an email server, though. </p>
<p>Getting Monit to run is very simple. Thanks to no-names.biz, I&#8217;ve modified their <a href="http://no-names.biz/2008/09/12/monit-in-ubuntu-804-server/">howto posting</a> to show you how to just get it running on Ubuntu 8.04 (Hardy), and I&#8217;ve used nano instead of vim as an easy-to-use editor for the configuration files. Before using this, <a href="https://help.ubuntu.com/community/Nano">get familiar</a> with nano. I&#8217;ve <strong>highlighted</strong> any portion where you need to substitute anything unique to you, like your email address: </p>
<p>#sudo aptitude install monit</p>
<p>#sudo cp /etc/monit/monitrc /etc/monit/monitrc_orginal</p>
<p>#sudo nano -w /etc/default/monit</p>
<p>startup=1<br />
CHECK_INTERVALS=60</p>
<p><em>Ctrl-O to save the file, Ctrl-X to exit nano.</em></p>
<p>#sudo nano -w /etc/monit/monitrc</p>
<p>set daemon 60<br />
set logfile syslog facility log_daemon</p>
<p># If you run your own mailserver (use this <em>or</em> the next entry):<br />
set mailserver <strong>mail.mycompany.com</strong></p>
<p>#For gmail instead of your own mailserver (all on one line):<br />
set mailserver smtp.gmail.com port 587 username &#8220;<strong>you</strong>@<strong>gmail.com</strong>&#8221; password &#8220;<strong>password</strong>&#8221; using tlsv1 with timeout 30 seconds </p>
<p>set mail-format { from: monit@$HOST.<strong>mycompany.com</strong> }<br />
set alert <strong>you@mycompany.com</strong><br />
set httpd port 2812<br />
use address localhost<br />
allow localhost<br />
allow<strong> you</strong>:<strong>password</strong><br />
## Services<br />
## You put your tests here.</p>
<p><em>Ctrl-O to save the file, Ctrl-X to exit nano.</em></p>
<p>#sudo invoke-rc.d monit start</p>
<p>&#8212;&#8212;&#8212;&#8211;<br />
If all goes right, you should get an email shortly with the subject &#8220;monit alert &#8212;  Monit instance changed localhost&#8221;. Because we used the $HOST variable in the mail-format section, you can tell which computer sent you this by looking at the from: address of the email. If you don&#8217;t get an email within a few minutes, well, the aggravation can start now while you fix the /etc/monit/monitrc file, probably by monkeying with the mailserver line.</p>
<p># tail /var/log/daemon.log</p>
<p>The above command will give you some clues if it&#8217;s not working right, as monit will log the errors.</p>
<p>Now the fun begins, as we add tests to the end of the /etc/monit/monitrc file. </p>
<p>#sudo nano -w /etc/monit/monitrc<br />
<em>Scroll down to the end of the file, you can just mash the down-arrow button until you get there.</em><br />
## Services<br />
## You put your tests here.<br />
check host <strong>mycompany.com</strong> with address <strong>mycompany.com</strong><br />
       if failed port 80 proto http for 3 times within 5 cycles then alert<br />
#<br />
check host example.com with address example.com<br />
       if failed port 80 proto http for 3 times within 5 cycles then alert</p>
<p><em>Ctrl-O to save the file, Ctrl-X to exit nano.</em></p>
<p>#sudo invoke-rc.d monit restart<br />
&#8212;&#8212;<br />
What this will do is check your remotely-hosted website, as well as the little website at example.com. If your website isn&#8217;t up in three out of five minutes, monit will email you an alert. I&#8217;m also including a check against example.com, because there&#8217;s the possibility that your computer might not be connecting to the internet properly. So if you get an email that both are failing, then it&#8217;s a good chance your website is still up, but your internal network&#8217;s got a boo-boo.</p>
<p>A huge amount of tests are available, and many different technologies have tests written for them. By playing these tests and researching what they do, you will get a huge dose of technology learning across many different topics. Guaranteed.</p>
<p><a href="http://mmonit.com/wiki/Monit/ConfigurationExamples">Configuration examples from the monit wiki</a><br />
<a href="http://mmonit.com/monit/documentation/monit.html#service_tests">Service test documentation</a></p>
<p>I&#8217;m currently running this one and trying to figure out how best to tweak it to my in-house server:</p>
<p>## Check the general system resources such as load average,<br />
## cpu and memory usage. Each rule specifies the tested resource,<br />
## the limit and the action which will be performed in the case<br />
## that the test failed.<br />
#<br />
check system localhost<br />
    if loadavg (1min) &gt; 4 then alert<br />
    if loadavg (5min) &gt; 2 then alert<br />
    if memory usage &gt; 75% then alert<br />
    if cpu usage (user) &gt; 70% then alert<br />
    if cpu usage (system) &gt; 30% then alert<br />
    if cpu usage (wait) &gt; 20% then alert</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jimcooncat.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jimcooncat.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jimcooncat.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jimcooncat.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jimcooncat.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jimcooncat.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jimcooncat.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jimcooncat.wordpress.com/60/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jimcooncat.wordpress.com/60/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jimcooncat.wordpress.com/60/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=60&subd=jimcooncat&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jimcooncat.wordpress.com/2008/11/25/learn-technology-with-monit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jimcooncat</media:title>
		</media:content>
	</item>
		<item>
		<title>Hi, Ubuntu Users!</title>
		<link>http://jimcooncat.wordpress.com/2008/11/20/hi-ubuntu-users/</link>
		<comments>http://jimcooncat.wordpress.com/2008/11/20/hi-ubuntu-users/#comments</comments>
		<pubDate>Thu, 20 Nov 2008 15:32:23 +0000</pubDate>
		<dc:creator>jimcooncat</dc:creator>
				<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://jimcooncat.wordpress.com/?p=54</guid>
		<description><![CDATA[I&#8217;m excited to have my blog listed on Ubuntu Weblogs, aka Planet Ubuntu Users. I haven&#8217;t missed a day of reading your entries for a few months now, after I discovered my favorite newsreader, Liferea.
I&#8217;m a private accountant in Maine U.S.A., and have been working with computers since 1986. I have many interests, and am [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=54&subd=jimcooncat&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I&#8217;m excited to have my blog listed on Ubuntu Weblogs, aka Planet Ubuntu Users. I haven&#8217;t missed a day of reading your entries for a few months now, after I discovered my favorite newsreader, Liferea.</p>
<p>I&#8217;m a private accountant in Maine U.S.A., and have been working with computers since 1986. I have many interests, and am enthusiastic about Ubuntu &#8212; especially the LTS releases. I run Ubuntu exclusively at home, and leverage it just as much as possible at work, though I do have to use Windows for several applications.</p>
<p>My past blogging has been long diatribes about the experiences I&#8217;ve had with projects I&#8217;ve taken on. I&#8217;ll try to put a few special, shorter tips in for you from time to time as I run across them. You&#8217;ll see me around on Ubuntu Forums and IRC as <em><strong>jimcooncat</strong></em>.</p>
<p>My current project at work is setting up a two-server system with a shared data partition (drbd), and I&#8217;ll be adding a healthy dose of KVM virtualization.</p>
<p>At home, I&#8217;m learning to build associative databases using SqLite and Tcl/tk to use for automated publishing. I plan on opening a very small business called &#8220;Cooncat Publishing&#8221;. I&#8217;ll be mostly repurposing publicly available data in a wide variety of formats and media.</p>
<p>Here&#8217;s some of my earlier Ubuntu related entries I&#8217;ve made before getting on this Planet:</p>
<h4><a title="Permanent link to Almost everthing has purpose, including Microsoft Windows" rel="bookmark" href="../2008/08/19/almost-everthing-has-purpose-including-microsoft-windows/">Almost everthing has purpose, including Microsoft Windows</a></h4>
<p class="postdate">August 19, 2008 at 5:09 am</p>
<p>I work with two computer operating systems every day, Ubuntu Linux and Microsoft Windows. I post new things I find on web forums, both problems I’m having and tips for others. Whenever I get help from someone for my problems, I try to help at least one other. Once in a while, I hang out in IRC channels for a quicker fix of my community addiction&#8230;.</p>
<h4><a title="Permanent link to A grand computing scheme" rel="bookmark" href="../2008/09/23/a-grand-computing-scheme/">A grand computing scheme</a></h4>
<p class="postdate">September 23, 2008 at 5:33 am	</p>
<h5>The plan</h5>
<p>A few years in the planning, with several false starts, the dream of a smarter computing environment is taking shape. Like many small businesses, ours has a central point of data that is crucial to the business’s survival. Financial data, correspondence, photos, the publications we generate, and contact databases are our office’s lifeblood, and reside on a shared drive on a Windows computer&#8230;.</p>
<h4><a title="Permanent link to Agonizing’s over, accept success when you can" rel="bookmark" href="../2008/11/16/agonizings-over-accept-success-when-you-can/">Agonizing’s over, accept success when you can</a></h4>
<p class="postdate">November 16, 2008 at 6:26 am					</p>
<h5>When you don’t know where to start, attack everything at once.</h5>
<p>I’d say the heading speaks for itself, yet a new project of this magnitude always seems to boggle me. Other things it my personal life were also in flux, as much as they are now I’m settled. So instead of setting real goals, I had to come to terms with all the relationships that are involved in a reliable, robust computer network&#8230;.</p>
<p>&#8212;-</p>
<p>Thanks for listing my blog!</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jimcooncat.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jimcooncat.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jimcooncat.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jimcooncat.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jimcooncat.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jimcooncat.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jimcooncat.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jimcooncat.wordpress.com/54/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jimcooncat.wordpress.com/54/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jimcooncat.wordpress.com/54/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=54&subd=jimcooncat&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jimcooncat.wordpress.com/2008/11/20/hi-ubuntu-users/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jimcooncat</media:title>
		</media:content>
	</item>
		<item>
		<title>Agonizing&#8217;s over, accept success when you can</title>
		<link>http://jimcooncat.wordpress.com/2008/11/16/agonizings-over-accept-success-when-you-can/</link>
		<comments>http://jimcooncat.wordpress.com/2008/11/16/agonizings-over-accept-success-when-you-can/#comments</comments>
		<pubDate>Sun, 16 Nov 2008 11:26:31 +0000</pubDate>
		<dc:creator>jimcooncat</dc:creator>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[d-i]]></category>
		<category><![CDATA[debian installer]]></category>
		<category><![CDATA[dpkg-repack]]></category>
		<category><![CDATA[multiple ethernet cards]]></category>
		<category><![CDATA[personal packaging]]></category>
		<category><![CDATA[repositories]]></category>

		<guid isPermaLink="false">http://jimcooncat.wordpress.com/?p=37</guid>
		<description><![CDATA[A long, technical update on my computer work over the last couple of weeks. Describes the now-resolved problems I ran into, the tools I'm using, and philosophy behind a part of the setup that deals with custom configuration and automatic, hands-off installation.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=37&subd=jimcooncat&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><h4>When you don&#8217;t know where to start, attack everything at once.</h4>
<p>I&#8217;d say the heading speaks for itself, yet a new project of this magnitude always seems to boggle me. Other things it my personal life were also in flux, as much as they are now I&#8217;m settled. So instead of setting real goals, I had to come to terms with all the relationships that are involved in a reliable, robust computer network.</p>
<p>So, mulling over what I&#8217;ve learned about technology over the last umpteen years, I agonized. Over stupid stuff: users, groups, hard drives, network cards, virtualization, file systems, updating, customizations, preferences, and so many more things.</p>
<h4>Don&#8217;t bite off more than you can chew at a time. Especially if it&#8217;s not appropriate to spit chunks.</h4>
<p>Well, I rechecked the preseed setup I had installed on my computer to start with. Now preseeding, when it&#8217;s set up well, is a magical beast. But like most magic, it has some serious problems with fixes when things don&#8217;t happen as you expect. To explain, preseeding involves setting up a computer automatically, so if you have to reinstall everything on the computer you can do so quickly without remembering complicated steps. Or referring to half-assed notes you took before.</p>
<p>Therefore I set up two of the big computers to automatically load the Ubuntu Hardy Server operating system. In it&#8217;s current state, it&#8217;s a very open, stable, practical system with the option of easily adding fancier features that make it robust. But the most advantageous feature is what it inherited from the Debian project; the apt package management system.</p>
<p>So I got the computers to be able to be wiped clean and reloaded with a basic operating system in about seven minutes. I played with this over and over again, adding a few tweaks as I went. When things went well, I&#8217;d hit the backup button I installed to make sure my work wouldn&#8217;t be in vain if a hard drive failed. Looks like I was in sight of my goal, to be able to install a new server with a minimum of steps that a non-tech would be able to follow by purchasing the right equipment, plugging it in, and not have to make any decisions to get to a working state.</p>
<p>I hit a big snag when I installed two more network cards into the computer, which only had the one attached to the motherboard. I had searched for hours trying to find good cards that would work with Linux and give me the most bang I could out of the office wiring. It was my plan that I was to use one of these to install from, yet during the installation process there was a problem. The card tries to connect to the network twice during the process, and the second time through it couldn&#8217;t connect. It was maddening!</p>
<h4>Network card Russian Roulette.</h4>
<p>Fortunately, the Ubuntu installer has some very nice features, and I found that pressing Alt-F2 I could log into the system at the point it was hung up; and Alt-F4 to see all the messages the installer had spit out. It took me a while, but I realized that it was switching network cards on me between the first and second connection. I googled for hours to find the right answers &#8212; I couldn&#8217;t have the computer switching network cards on me in some random manner. If I rebooted, or the power went out so long it had to shut down, then I would be the only one able to get it back running correctly. So much for reliability &#8212; I felt I was falling back into the hole I&#8217;d been spending all this time, and the boss&#8217;s money, to dig out of.</p>
<p>After many reboots, I discovered that the computer would assign the network cards at random. Usually, the one on the motherboard would get named &#8220;eth0&#8243;, but occasionally it would end up as &#8220;eth2&#8243;. And the other two cards posed a problem as well, in that all I could see was their make and model; since I&#8217;d bought them at the same time from the same place, they were indistinguishable.</p>
<p>So as I googled my fortieth page to find some answers, I discovered that the nice folks that provide Ubuntu had solved this problem with some more magic called udev, but it only kicks in after the system is installed. That&#8217;s great, but I do wish that it had been more obvious; the configuration file is buried deep in the system. I do have to remember that if I change out cards that I have to find that file again, or the new card will be mounted in a new place, rather than the system automatically replacing the one I&#8217;ve taken out.</p>
<p>As much as I hated to, I resigned myself to installing from the original network card that came with the machine. It did have me rethink my security plan, and after agonizing over that for a while I realized that I just had to document plugging a cable in here to start, there when it&#8217;s ready to become a second router. No biggie, and it&#8217;s embarrassing to worry too much about such a minor thing. But if you know me, that&#8217;s not my nature; I cogitate on puzzles until they are solved or something else forces me to abandon it. Then I realized that this whole situation was forcing me to unplug the computer from the jack that goes to the internet while the installation was taking place.</p>
<p>Computers have no soul, and much as you&#8217;d like to be friends with them and assign human characteristics, they&#8217;ll never watch your back. Yet, this whole project has developed some life of its own; or it seems that way to me. Resolving this problem forced me back to what was smart, and made me realize that the one thing I&#8217;d always done during Windows installations &#8212; unplugging from the public network &#8212; was always a smart thing to do. Even for an operating system that we may feel secure with once it&#8217;s up and running.</p>
<h4>Hacking is fun, and will cause you much heartache.</h4>
<p>So now I had a good basic system going, and it was time to decide what my next move would be. Well, slick as a new Ubuntu installation is, it doesn&#8217;t make much of a server out of the box. That&#8217;s because any software that talks to the network, that is any process that uses outgoing ports, is disabled even after installation. That&#8217;s a very smart move on their part, as the liability of opening a port to the outside world can potentially be huge &#8212; or at least screw up your week.</p>
<p>But server software isn&#8217;t very useful if it&#8217;s not serving, and it&#8217;s left to the admin to figure and configure it out. Normally, the process goes like this: you install software, configure it and all the related pieces, it doesn&#8217;t work as you expect, you try some features in it you think you may want, you find out you don&#8217;t need all that junk, you get it working, and you make some comments along the way if you think you need to do it again.</p>
<p>It works for now. A year later, you install a new computer or some software that changes how things are set up. You go back to what you&#8217;ve done before, and remember how clever you were at the time. When you look again, you find you can&#8217;t get back to the mindset you were at before. What seemed obvious at the time when you had originally installed the software you&#8217;d left out of your comments is now coming back to bite you. And some of the relationships to other software are no longer applicable. Almost always, it ends up feeling simpler just to start from scratch again, so you do.</p>
<p>You know that putting in good comments and achieving a consistent state for others to follow is the right thing to do, but at that point you feel as if you&#8217;ve wasted your time. If you&#8217;re taking over someone else&#8217;s work, its much worse unless they wrote an entire step-by-step how-to document. It&#8217;s much better to configure software as an installable package, and keep consistency with the rest of the system. Keep commenting and provide a list of changes you&#8217;ve made to it over time, but you really only need to fully explain what makes your customized version different from the default. So, when it comes time for someone else (or you at a later stage in your life) to consider whether to use this version or go back to the drawing board, they only need to evaluate if your package does what they want it to do; and you make it easy for them to make that decision by keeping your notes very simple.</p>
<h4>Enjoy the nice things that are right in front of you.</h4>
<p>Ubuntu inherited something very nice from the Debian project; it&#8217;s not only an operating system, it&#8217;s a software publishing platform. Much thought and care has been put into the publishing tools, and hundreds of little helper programs are available to round out your setup. You can list these programs as &#8220;dependencies&#8221; to your software, and call on them to provide services so you don&#8217;t have to write the functionality yourself. That&#8217;s great if you&#8217;re the official maintainer of the software package, and it works extremely well for their developers.</p>
<p>Now I want to make packages for myself, to set up this new network automatically to a custom configuration. It turns out that the huge effort to develop the operating system does not support this well with how-to documents; or rather that these documents are huge and unwieldy as they address things such as how to submit new work to the society for inclusion in the distribution.</p>
<p>Here&#8217;s the choice I was facing: either do things the old fashioned hacking way, or learn how to apply what was already available. I thought some more about how things are normally done by system administrators to maintain and distribute custom configurations. I was looking at developing my own way of pulling down a custom configuration, applying it to the software, restarting the software if needed, etc. Or I could use tools others had developed to do similar things, having to learn their arcane nomenclature and understand their mindset. As I looked at this hard, I could see very clearly that a different system would require much more work on my part than just learning how to do it right in the first place.</p>
<h4>Old dog learns new tricks.</h4>
<p>So after poring over more how-to documents and bugging the nice people at the Freenode&#8217;s #ubuntu-motu chat room, I&#8217;ve realized a very simple way to make and distribute software configured to my needs. Note that this is just a starting point, I&#8217;ll be refining and better documenting this method as I learn more.</p>
<ul>
<li>Start with a clean working system.</li>
<li>Install the official package you want to customize.</li>
<li>Tweak the configuration as desired, making comments along the way.</li>
<li>Test, re-tweak, and test again until all bugs are resolved or acceptable.</li>
<li>In an empty directory, run &#8220;sudo dpkg-repack &#8211;generate&#8221;. This will make the guts of a .deb package with all your configuration changes intact.</li>
<li>Edit the DEBIAN/control file to bump the version number up higher than the original software.</li>
<li>Run &#8220;sudo dpkg-deb -b &lt;your directory&gt;&#8221;. This makes a file called &#8220;.deb&#8221;, which is a hidden file.</li>
<li>Rename the .deb file to a standardized package name with your new version.</li>
<li>Copy the renamed file to your repository.</li>
<li>In your repository, run &#8220;dpkg-scanpackages . /dev/null | gzip -9c &gt; Packages.gz&#8221;.</li>
<li>On the computers you want to install or update, make sure your repository is listed in &#8220;/etc/apt/sources.list&#8221; or &#8220;/etc/apt/sources.list.d/&#8221;.</li>
<li>Run &#8220;sudo aptitude update&#8221;. This will make your new package available.</li>
<li>Run &#8220;sudo aptitude purge &lt;your package&gt;&#8221; if there&#8217;s an older version of the software installed. This wipes out any configuration files on the target system as well.</li>
<li>Run &#8220;sudo aptitude install &lt;your package&gt;&#8221;. That&#8217;s it!</li>
</ul>
<p>If this looks complex, of course it is. The method has many advantages to it though:</p>
<ul>
<li>You can install the custom configuration on as many computers as you want simply once this process is done.</li>
<li>If you want to share your customized package with others, you make a publicly assessable repository and upload/update it.</li>
<li>You can include your customized package in a preseeded, hands-off install.</li>
</ul>
<p>I&#8217;m missing some steps I&#8217;ll want to include once I learn how, mainly how to proper document the changes. That looks very simple, I just haven&#8217;t gotten that far yet. And I&#8217;ll be automating this process along the way so I won&#8217;t have to copy and paste the somewhat arcane commands. Thank you for reading, I&#8217;ll look forward to writing another overly-long post on some irregular date in the future.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jimcooncat.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jimcooncat.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jimcooncat.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jimcooncat.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jimcooncat.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jimcooncat.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jimcooncat.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jimcooncat.wordpress.com/37/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jimcooncat.wordpress.com/37/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jimcooncat.wordpress.com/37/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=37&subd=jimcooncat&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jimcooncat.wordpress.com/2008/11/16/agonizings-over-accept-success-when-you-can/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jimcooncat</media:title>
		</media:content>
	</item>
		<item>
		<title>A grand computing scheme</title>
		<link>http://jimcooncat.wordpress.com/2008/09/23/a-grand-computing-scheme/</link>
		<comments>http://jimcooncat.wordpress.com/2008/09/23/a-grand-computing-scheme/#comments</comments>
		<pubDate>Tue, 23 Sep 2008 10:33:04 +0000</pubDate>
		<dc:creator>jimcooncat</dc:creator>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://jimcooncat.wordpress.com/?p=29</guid>
		<description><![CDATA[The plan
A few years in the planning, with several false starts, the dream of a smarter computing environment is taking shape. Like many small businesses, ours has a central point of data that is crucial to the business&#8217;s survival. Financial data, correspondence, photos, the publications we generate, and contact databases are our office&#8217;s lifeblood, and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=29&subd=jimcooncat&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><h4>The plan</h4>
<p>A few years in the planning, with several false starts, the dream of a smarter computing environment is taking shape. Like many small businesses, ours has a central point of data that is crucial to the business&#8217;s survival. Financial data, correspondence, photos, the publications we generate, and contact databases are our office&#8217;s lifeblood, and reside on a shared drive on a Windows computer.</p>
<p>Backing up this drive was initially a nightmare. A consultant installed a tape drive with terrible software, and it was my job to change the tapes daily. This wouldn&#8217;t have been so bad, but restoring any file would take a matter of two hours &#8212; if I was lucky. I was having a 50% rate of recovery. I suppose that if I had spent another $500 of the company&#8217;s cash and gone to a training session on the software, I may have improved my efficiency somewhat.</p>
<p>A couple years later, I switched my PC to Ubuntu Linux. After some research, I settled on a backup tool called rsnapshot. Once I started using that software, my nightmare went away. I was able not only to back up our drive, but in a fashion that was automatic and very easy to live with. It not only stores the files, but also the changes to them, so I can easily go back to previous edits. The backups are on my hard disk, which I trust much more than tapes that stretch and wind and grind. Restoring is super-simple &#8212; I just go into the appropriate directory and copy a file, no need to run any special software to restore.</p>
<p>As time wore on, our computers started wearing out. A power supply here, a hard drive there, entropy was starting to catch up with us. Our boss was reluctant to shell out for new hardware, and I was reluctant to keep installing software onto new computers. I&#8217;d spend two days reinstalling Windows and all the software we use, only to wind up with an environment that wasn&#8217;t an exact clone of what the worker had before &#8212; so they&#8217;d spend at least a couple days worth of work getting used to it.</p>
<p>I started again to think about that shared drive, and realized that if the machine it was on went south, it would mean some hours of downtime to restore it. Many times in the office it would not affect our bottom line much; but there are hectic moment where downtime would be disastrous. At some point, and I&#8217;m not sure when, computers turned from an efficiency tool into a production mechanism. And we need a production-grade environment.</p>
<p>Doing some heavy research on disaster recovery and high availability scenarios, I found that small businesses are greatly under-served by commercial computing vendors. The marketing teams generate huge amounts of hype for bad products that don&#8217;t work correctly, or try to take a product made for larger business and shoehorn it into cheap hardware. They didn&#8217;t seem to take value into account at all.</p>
<p>Like many in my situation, I played with the idea of getting a big box and using RAID1 or RAID5; that is multiple drives that would allow for one to crash and still be able to work. It seemed workable to me, and then we lost a computer entirely to a power spike. Not only the power supply burned out, but the drive fried as well. A few weeks later, our huge web hosting provider went down. The reason? A RAID controller in one of their servers burned out, and they had to wait for delivery from the other side of the state to get back up and running. All the while, they had been touting the safety and redundancy of their service. I was disgusted.</p>
<p>It was apparent that we needed to not only protect the drive itself, but the whole environment. Single points of failure are not a permanent option for a business that provides my livelihood. Back to scouring the internet for solutions, I came across the Linux-HA project, which provides tools called drbd and heartbeat. These tools make two drives on two separate computers appear as one drive to the rest of the machines. If one of the computers goes bad, the other takes over in about 15 seconds. The only downtime is that the worker would probably have to restart their machine. This was what I was looking for!</p>
<p>After making a few sales pitches to my boss, he agreed to allow me to construct a new server setup. I purchased three new identical machines, with additional large hard drives and filled with 4 Gigabytes of RAM. So there they were, sitting on my newly-cleared-off workbench in the basement &#8212; and then I had to wait. Other projects screamed for my attention, and the staff was going through some changes. So there it sat for a full year almost untouched. I am very thankful for the patience my life experiences have trained me for; yet stuck in my mind was this project I needed to build and knew that distraction wouldn&#8217;t cut it.</p>
<h4>Setting up my computer</h4>
<p>Last week I finally was able to start on the project. Ubuntu Linux has progressed to the point where I will be able to have support for the operating system without massive changes for another four years. The hardware purchased has proven to be wonderful, as I had taken one of the boxes and used it to run two virtualized copies of Windows with fair success. And I had done plenty of research, so I understood to a management level what I wanted out of this &#8212; but now for the implementation.</p>
<p>The primary focus of this project is simplicity. Taking complex situations and boiling them down to their underlying substance is the kind of puzzle I thrive on. So what I want to do with this setup is to turn each piece into a appliance, which can be fixed and maintained with a minimum of instruction.</p>
<p>So I&#8217;ve started by turning my work computer into a &#8220;netboot installer&#8221;. This is probably the most magical thing I&#8217;ve ever seen a computer do in all the years I&#8217;ve worked with them. I take one of the new computers, plug it into the network, and reboot it. When it starts up, I press a key (the F8 key on these) and tell it to boot from the network. It finds my work computer, and automatically wipes out everything on the drive, installs the operating system (plus any additional software I want loaded), and reboots. When it&#8217;s done, it&#8217;s completely loaded with the most current versions of everything; I don&#8217;t even need to go through another long round of updates!</p>
<p>Setting up this kind of environment wasn&#8217;t simple, of course. There are four pieces of software that I had to install and configure the hell out of on my work computer: dhcpd3 (the network magic), tftpd-hpa (serves configuration files and kernel for the installation software), apt-cacher (temporarily store the operating system files) and apache2 (a web server for the operating system files).</p>
<p>So we take the new machine and plug it into the network. Start it up, and when it first beeps mash the F8 key and tell it to boot from the network card. It&#8217;s hands-off from then on if the configuration is right. The new machine looks for the DHCP server that&#8217;s broadcasting on a special address. When it finds it, it downloads the installer operating system and starts it up. This temporary installer then looks again at the DHCP server, and gets its first instructions from it based on the new machine&#8217;s network hardware address. It then downloads the &#8220;preseed&#8221;; a series of answers to the questions it normally asks during installation.</p>
<p>I have the preseed set up to reformat the hard drive and set up new partitions. It also does many other things automatically, like telling the computer to use English, a US keyboard, and set the time zone.</p>
<p>It then starts to download the packages of the operating system from the internet. Since this normally takes more than an hour for a server (even longer for a desktop), we have it download through apt-cacher. What this does is to automatically store each package locally on my work computer, so it won&#8217;t have to be downloaded again unless it gets a new update. Once you&#8217;ve done one install, subsequent installs take only a few minutes; I&#8217;m down to seven minutes for a subsequent server install, and I believe a desktop install (with graphics) will take about twenty based on a test I did last year. So far, I&#8217;ve only done the first desktop install on this new setup, as I realize this isn&#8217;t the current project &#8212; but I may need to use it for another computer at some point.</p>
<p>Once the new computer has been installed, it reboots itself and loads the new operating system from the hard drive. So if I had to talk the boss through re-installation of a computer over the phone, it would go like this:</p>
<ol>
<li>Plug the computer into the network jack.</li>
<li>Start it up, and press F8 (several times if you want) at the first beep.</li>
<li>Press the down arrow until you reach the menu item &#8220;NVIDIA Boot Age&#8221;</li>
<li>Watch for half a minute to make sure nothing gets stuck. If it does within that time, restart.</li>
<li>Go do something else for a while. If you hear another beep from the computer, it&#8217;s done and will show a login screen.</li>
</ol>
<h4>Customizing</h4>
<p>Well, the workbench is in the basement with the new computers on it, but my office is on the upstairs floor. The first day I was working, I was running up and down two flights of stairs to reboot, adding to the distraction of my co-worker at the front desk. Well, I did move the hardware upstairs on the second day, so that&#8217;s much better.</p>
<p>My next step was to check out the new operating system environment to see how the installation went. So I added a remote-control program called openssh-server to the setup. Now once I hear the second beep (much easier now that it&#8217;s upstairs) I can log into the new computer and check it out.</p>
<p>The installer configuration lets me do some of the customization I need to do the operating system, but not everything. I can add packages to the setup, like I did with openssh-server. But beyond some very simple options, it installs everything to the default, which in some cases means that a program I want started automatically is not set up to. Well, I need to customize, and with that comes a problem.</p>
<p>In the many years I&#8217;ve worked with computers, I&#8217;ve seen a lot of installations. The tech setting them up would load the operating system, then play around with the settings until they get it the way they want. Most times, they would only document what they believe wasn&#8217;t obvious, invariably leaving out an important detail or two. Subsequent installs meant doing the same thing, relying on notes or memory from previous times.</p>
<p>This is no way to ensure quality installation every time. But we have another option, which is to customize the software packages. With the high quality package management that Ubuntu inherited from the Debian project, I can make my own repository of customized packages that will seamlessly integrate with the setup.  So one package at a time, I&#8217;ll unpack it, tweak it, package it back up, and test it. If I hose the whole computer doing so, oh well &#8212; it will cost me another twenty minutes (or less) to reinstall the whole machine. Since I have two machines right now to test the installation, I just work on the other one while the reinstall is going on.</p>
<h4>Time to back up</h4>
<p>As I was driving home after the second day, I was quite pleased I got the bugs out of the installer setup (there had been many, almost all my fault for not understanding the manuals) and was looking forward to starting the package customization portion. Then it dawned on my that my setup on my work computer wasn&#8217;t backed up! First thing the next workday, I installed a simple backup program. Now after I test changes to the setup, I can press a button and make a new backup of my installer setup. Whew!</p>
<p>The third day at this I needed to get some other work done, but I was able to research how to make a simple &#8220;software repository&#8221; for my customized packaging. It turns out that this is a deceptively simple thing to do, but there was very little available on the internet to point me to the right documentation; so the research took me some time that I didn&#8217;t expect.</p>
<h4>Next steps</h4>
<p>Now I have two major tasks ahead of me, to set up the drbd and heartbeat on the two computers to test it out; and clone my installer setup to the new computers. These are both fairly major undertakings since it&#8217;s new-to-me software; but I believe using the methods I have so far will let me plug away at it easily while doing other work as well during the day. I&#8217;m also going to be installing two monitoring tools; a generalized package called &#8220;monit&#8221; that can test for all sorts of things, and a specialized &#8220;smartmon-tools&#8221; that will notify me of potential hard drive problems before anything actually goes bad with them.</p>
<p>I&#8217;m so looking forward to this work!</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jimcooncat.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jimcooncat.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jimcooncat.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jimcooncat.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jimcooncat.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jimcooncat.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jimcooncat.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jimcooncat.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jimcooncat.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jimcooncat.wordpress.com/29/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=29&subd=jimcooncat&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jimcooncat.wordpress.com/2008/09/23/a-grand-computing-scheme/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jimcooncat</media:title>
		</media:content>
	</item>
		<item>
		<title>Almost everthing has purpose, including Microsoft Windows</title>
		<link>http://jimcooncat.wordpress.com/2008/08/19/almost-everthing-has-purpose-including-microsoft-windows/</link>
		<comments>http://jimcooncat.wordpress.com/2008/08/19/almost-everthing-has-purpose-including-microsoft-windows/#comments</comments>
		<pubDate>Tue, 19 Aug 2008 10:09:03 +0000</pubDate>
		<dc:creator>jimcooncat</dc:creator>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[work in progress]]></category>
		<category><![CDATA[Add new tag]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://jimcooncat.wordpress.com/?p=23</guid>
		<description><![CDATA[I work with two computer operating systems every day, Ubuntu Linux and Microsoft Windows. I post new things I find on web forums, both problems I&#8217;m having and tips for others. Whenever I get help from someone for my problems, I try to help at least one other. Once in a while, I hang out [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=23&subd=jimcooncat&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I work with two computer operating systems every day, Ubuntu Linux and Microsoft Windows. I post new things I find on web forums, both problems I&#8217;m having and tips for others. Whenever I get help from someone for my problems, I try to help at least one other. Once in a while, I hang out in IRC channels for a quicker fix of my community addiction.</p>
<p>A good number of people I give help and get help from aren&#8217;t blinded by people who detract from what others like to use for an operating system. It&#8217;s difficult for us practical people though, because there are many others out there that shout to promote their favourite toys and disparage those who use other, competing wares. It seems that it should be hard to tune out this noise, yet an interesting article will have huge strings of posts fuelled by these &#8220;fanbois&#8221;; making the few interesting comments that practical people offer difficult to find.</p>
<p>In my view, an operating system is only a means to an end &#8212; tools to manipulate some bits into, hopefully, doing what you want. At this point, and for what I can see will be for the next few years, there is no one affordable operating system that can do everything a person needs. (A note to Mac fanbois, your financial priorities are much different than mine.) I use Ubuntu exclusively at home, and for the majority of my work. However, there are a few Windows programs that I can&#8217;t do without, such as Quickbooks, MS Access, MS Excel, and Irfanview. Coworkers that I support also have a few other programs that they wouldn&#8217;t want to swap out; not being wildly computer-oriented they also dislike changes in the what they see on the screen.</p>
<p>Microsoft Windows (and by that I mean the affordable XP Home, XP Pro, Vista Basic) is best for:</p>
<ul>
<li>running software made for Microsoft Windows;</li>
<li>enabling the use of hardware devices that have only been on the market for a few months;</li>
</ul>
<p>but it doesn&#8217;t:</p>
<ul>
<li>give a simple way to seamlessly export its windows to other machines*;</li>
<li>provide a set of signed repositories that includes most software a person needs;</li>
<li>allow a technician to update or configure the software without a big production of user distraction and downtime;</li>
<li>stay easy for a person to keep updated and secure;</li>
<li>make it simple and frugal to use in a multi-user networked environment.</li>
</ul>
<p>So what I envision as a workable solution is a combination of machines that offer the best of both operating systems. In an office or large household, it&#8217;s quite normal for there to be several machines; and that can be a huge advantage.</p>
<p>Newer machines with lots of RAM can be run with virtualization software (KVM, Virtualbox, VMWare). This allows for multiple operating systems (aka &#8220;virtual machines&#8221;) to be run on one piece of hardware. For these machines, I&#8217;ve been suggesting using AMD over Intel, as it&#8217;s simpler to know in advance of purchase that vitualization is fully supported by the hardware. However, I believe most newer computers have no problems doing this or need very quick adjustments to the system.</p>
<p>Older machines, regardless of the amount of RAM, can be used as thin clients to the larger machine. I&#8217;m appalled by the amount of computers people discard as junk that can be used for this purpose. Also, I&#8217;ve set up and used some very nice new specialized thin client boxes that use little electricity and are super-nice to the wallet.</p>
<p>A combination of those machines takes care of the first requirement, running software made for Microsoft Windows.</p>
<p>Older machines that have a good amount of RAM can be used to meet the second requirement, enabling the use of hardware devices that have only been on the market for a few months.</p>
<p><span id="more-23"></span></p>
<p>* A method to seamlessly export MS Windows applications is described at https://help.ubuntu.com/community/SeamlessVirtualization, yet I don&#8217;t have the time or cash to experiment with it.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jimcooncat.wordpress.com/23/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jimcooncat.wordpress.com/23/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jimcooncat.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jimcooncat.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jimcooncat.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jimcooncat.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jimcooncat.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jimcooncat.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jimcooncat.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jimcooncat.wordpress.com/23/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jimcooncat.wordpress.com/23/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jimcooncat.wordpress.com/23/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=23&subd=jimcooncat&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jimcooncat.wordpress.com/2008/08/19/almost-everthing-has-purpose-including-microsoft-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jimcooncat</media:title>
		</media:content>
	</item>
		<item>
		<title>Teaching a machine</title>
		<link>http://jimcooncat.wordpress.com/2008/06/22/teaching-a-machine/</link>
		<comments>http://jimcooncat.wordpress.com/2008/06/22/teaching-a-machine/#comments</comments>
		<pubDate>Sun, 22 Jun 2008 10:20:49 +0000</pubDate>
		<dc:creator>jimcooncat</dc:creator>
				<category><![CDATA[philosophy]]></category>
		<category><![CDATA[work in progress]]></category>

		<guid isPermaLink="false">http://jimcooncat.wordpress.com/?p=21</guid>
		<description><![CDATA[A relationship with the truth
Basis
Source
Once you come to the realization that you&#8217;ve committed a falsehood into your knowledge repository, and your basis for an assertion is junk, then it would be very helpful for you to know the source of that basis. If one thing is wrong, why would not other assertions from the same [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=21&subd=jimcooncat&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><h4>A relationship with the truth</h4>
<h4>Basis</h4>
<h4>Source</h4>
<p>Once you come to the realization that you&#8217;ve committed a falsehood into your knowledge repository, and your basis for an assertion is junk, then it would be very helpful for you to know the source of that basis. If one thing is wrong, why would not other assertions from the same place?</p>
<blockquote><p>When I think back<br />
On all the crap I learned in high school<br />
It&#8217;s a wonder<br />
I can think at all <em>&#8211; Rhymin&#8217; Simon</em></p></blockquote>
<h4>Good enough for this purpose</h4>
<h4>Creeping Doubt</h4>
<h4>Re-evaluation</h4>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jimcooncat.wordpress.com/21/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jimcooncat.wordpress.com/21/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jimcooncat.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jimcooncat.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jimcooncat.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jimcooncat.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jimcooncat.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jimcooncat.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jimcooncat.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jimcooncat.wordpress.com/21/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jimcooncat.wordpress.com/21/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jimcooncat.wordpress.com/21/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=21&subd=jimcooncat&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jimcooncat.wordpress.com/2008/06/22/teaching-a-machine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jimcooncat</media:title>
		</media:content>
	</item>
		<item>
		<title>The Smallest Seeds of Knowledge</title>
		<link>http://jimcooncat.wordpress.com/2008/03/27/the-smallest-seeds-of-knowledge/</link>
		<comments>http://jimcooncat.wordpress.com/2008/03/27/the-smallest-seeds-of-knowledge/#comments</comments>
		<pubDate>Thu, 27 Mar 2008 10:21:04 +0000</pubDate>
		<dc:creator>jimcooncat</dc:creator>
				<category><![CDATA[Unique IDs]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[work in progress]]></category>

		<guid isPermaLink="false">http://jimcooncat.wordpress.com/?p=20</guid>
		<description><![CDATA[The Polluted Namespace of Database Applications
Wikipedia will tell you about  relational databases with terminology that will confuse any person used to the English language. Drilling down to the source of the term &#8220;relational&#8221;, we find in the article Relational model that
&#8220;Relation&#8221; is a mathematical term for &#8220;table&#8221;, and thus &#8220;relational&#8221; roughly means &#8220;based on [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=20&subd=jimcooncat&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><h4>The Polluted Namespace of Database Applications</h4>
<p>Wikipedia will tell you about  <a href="http://en.wikipedia.org/wiki/Relational_database">relational databases</a> with terminology that will confuse any person used to the English language. Drilling down to the source of the term &#8220;relational&#8221;, we find in the article <a href="http://en.wikipedia.org/wiki/Relational_model"><em></em>Relational model</a> that</p>
<blockquote><p>&#8220;<a title="Relation (mathematics)" href="http://en.wikipedia.org/wiki/Relation_%28mathematics%29">Relation</a>&#8221; is a mathematical term for &#8220;table&#8221;, and thus &#8220;relational&#8221; roughly means &#8220;based on tables&#8221;.</p></blockquote>
<p>You can keep drilling down through the articles until you get into set theory and start approaching the <em>human usage</em> of the word &#8220;relation&#8221;, which I understand to be: A logical or natural association between two or more things; relevance of one to another. (From <a href="http://www.answers.com/relation&amp;r=67"><em>relation</em></a>.)</p>
<p>I don&#8217;t want to knock the work of <a href="http://en.wikipedia.org/wiki/E.F._Codd">Dr. E.F. Codd</a>; his invention of the relational database has helped support my livelihood for half my lifetime. All I take issue with is the terminology, and understandably when the terms were coined, there wasn&#8217;t the familiarity with how this invention would be used that would lend it to better wordage.</p>
<h4>More Questions than Answers</h4>
<p>Anyone who has used a table of data knows that there&#8217;s a lot of knowledge being presented in a small space. The very simple table below seems at first glance to show the most basic of relationship representation:</p>
<pre>   id    name     team
   1     Amy      Blues
   2     Bob      Reds
   3     Chuck    Blues
   4     Dick     Blues
   5     Ethel    Reds</pre>
<p>But the apparent simplicity actually assumes a greater knowledge. Boiling it down to pieces, we find that:</p>
<ul>
<li>id is probably a unique integer the database uses to keep track of the link between name and team</li>
<li>name is the first name of a person</li>
<li>team is the name of a group of people</li>
</ul>
<p>And so when we use the table, we have lots of questions.</p>
<ul>
<li>Can a person be on more than one team?</li>
<li>Can a team exist if there are no people assigned to it?</li>
<li>What do we do if there is more than one person with the same first name? Do we put the last name in the <em>name</em> field, or do we make a separate field for a last name? And if there are two people with the same first and last name, what do we do then? If a team changes its name, how does that change the assignments?</li>
<li>Who is recorded this information? Did they spell everyone&#8217;s name right? Did they make any mistakes as to which team the people were assigned?</li>
<li>Who actually assigned these people to a team? What was their basis for assigning these people to one team over another?</li>
<li>Are there constraints to how many people are to be on a team? Do you have a minimum number in order to play? Do you have a maximum to play at a time? What do you do with additional people?</li>
</ul>
<h4>The Start of a Good Relationship</h4>
<p>One thing that&#8217;s obvious to start with is that there are two teams. Those teams could, and might very well want to, change their names to something more sporty &#8212; lets say the Lobsters  and Clams. So there is a relationship here between the name of the team and the team itself.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jimcooncat.wordpress.com/20/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jimcooncat.wordpress.com/20/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jimcooncat.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jimcooncat.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jimcooncat.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jimcooncat.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jimcooncat.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jimcooncat.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jimcooncat.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jimcooncat.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jimcooncat.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jimcooncat.wordpress.com/20/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=20&subd=jimcooncat&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jimcooncat.wordpress.com/2008/03/27/the-smallest-seeds-of-knowledge/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jimcooncat</media:title>
		</media:content>
	</item>
		<item>
		<title>Unique Identifiers &#8211; Part 3, Values</title>
		<link>http://jimcooncat.wordpress.com/2008/01/29/unique-identifiers-part-3-values/</link>
		<comments>http://jimcooncat.wordpress.com/2008/01/29/unique-identifiers-part-3-values/#comments</comments>
		<pubDate>Tue, 29 Jan 2008 17:42:58 +0000</pubDate>
		<dc:creator>jimcooncat</dc:creator>
				<category><![CDATA[Unique IDs]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://jimcooncat.wordpress.com/?p=19</guid>
		<description><![CDATA[So far in this series, I&#8217;ve been describing a scheme for Unique ID&#8217;s. We&#8217;ve gone through the mental gyrations of what the parts of an ID should consist of, but haven&#8217;t come to a conclusion yet of the final format. As you&#8217;ve seen by now, the more characters we have available, the more comprehensive our [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=19&subd=jimcooncat&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>So far in this series, I&#8217;ve been describing a scheme for Unique ID&#8217;s. We&#8217;ve gone through the mental gyrations of what the parts of an ID should consist of, but haven&#8217;t come to a conclusion yet of the final format. As you&#8217;ve seen by now, the more characters we have available, the more comprehensive our ID format can be. With registration, we can also cut down the size to a short string.</p>
<p>Before we cut it down to it&#8217;s minimum, though, let&#8217;s look at values. I&#8217;d like to format to not only be able to store unique ID&#8217;s, but also values so that we can map relationships against a number. Once we find a minimal length for useful numbers, then we can determine how to wedge our ID scenario into that space.</p>
<p>Through the many years I&#8217;ve been crunching number, I&#8217;ve been bitten so many times by software, especially Microsoft Excel, using floating point values. For the unaware, when a program stores a value, it has a choice &#8212; it can either store it as an integer, or use much less space by storing an approximation. The software very seldom tells you this, and if you rely on your numbers, <i>your computer lies to you</i>. I just can&#8217;t describe how wrong that situation is. By the time you notice the tiny bit off you are, you&#8217;re already layers deep in hundreds of calculations. Good accounting programs store numbers as integers, and even in MS Access currency is normally stored as an integer with four decimal places.</p>
<p>Hey, I don&#8217;t mind if a computer program can&#8217;t store pi accurately, but I want it to tell me that what it displays is an approximation if I need to know that for my purposes. So if it&#8217;s an approximation, how was it done? Was it truncated, rounded up, rounded down, an exact half? If a computer makes a mess of things on my behalf, I want to know about it.</p>
<p>When computers give you a number, such as 5,000, there is no information as to how many significant digits there are in that number. If this represents 5 boxes of 1000 paper clips, you can be pretty sure that each box is almost exact, maybe have one or two extra clips in it. But I could have derived this from the number of feet I guessed was equal to  one inch I measured on a map. If I make a mess of things, I want to be able to document it.</p>
<p>If I know that a value is wonky, I can, if needed, use techniques such as<a href="http://en.wikipedia.org/wiki/Significance_arithmetic"> significance arithmetic</a> to make known how much an end result is off. It makes a big difference if the basis of the number is measured or counted.</p>
<p>Now we can start to enumerate the relationship of a value to a stored number in a computer: the basis of how it was derived, the number of significant digits, the accuracy of the final digit, it&#8217;s sign, and exponent. Some of these can be encapsulated in the way most computers <a href="http://en.wikipedia.org/wiki/IEEE754">store a floating point number</a>; sign, exponent, and fraction are encapsulated in 32 or 64 bits of binary data.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jimcooncat.wordpress.com/19/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jimcooncat.wordpress.com/19/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jimcooncat.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jimcooncat.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jimcooncat.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jimcooncat.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jimcooncat.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jimcooncat.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jimcooncat.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jimcooncat.wordpress.com/19/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jimcooncat.wordpress.com/19/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jimcooncat.wordpress.com/19/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=19&subd=jimcooncat&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jimcooncat.wordpress.com/2008/01/29/unique-identifiers-part-3-values/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jimcooncat</media:title>
		</media:content>
	</item>
		<item>
		<title>Unique Identifiers &#8211; Part 2, About Time</title>
		<link>http://jimcooncat.wordpress.com/2008/01/29/unique-identifiers-part-2-about-time/</link>
		<comments>http://jimcooncat.wordpress.com/2008/01/29/unique-identifiers-part-2-about-time/#comments</comments>
		<pubDate>Tue, 29 Jan 2008 15:05:44 +0000</pubDate>
		<dc:creator>jimcooncat</dc:creator>
				<category><![CDATA[Unique IDs]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://jimcooncat.wordpress.com/?p=18</guid>
		<description><![CDATA[Time pervades all things. I remember in my first Geometry class, the teacher talked about three dimensions, and time being the fourth. This concept bothered me for months, it just didn&#8217;t seem right to me. A line, for instance, cannot be if it doesn&#8217;t exist for a period of time. And when old teach was [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=18&subd=jimcooncat&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Time pervades all things. I remember in my first Geometry class, the teacher talked about three dimensions, and time being the fourth. This concept bothered me for months, it just didn&#8217;t seem right to me. A line, for instance, cannot <i>be</i> if it doesn&#8217;t exist for a period of time. And when old teach was trying to describe to us what a point was, the geometric concept of it, my confusion cleared up. A point, he said, had no length, breadth, or height, it was only a point. At which one of my little imaginary friends whispered in my ear, &#8220;But it has time. It is a point in time.&#8221;</p>
<p>I digress from the subject at hand to make my own point. Mankind&#8217;s understanding of the true nature of time is weak. We may think we can go back and forth in time if we can just find a De Lorean and build a flux capacitor out of junk parts in the garage. Or we can accept Stephen King&#8217;s explanation of the <i>Langoliers</i>, that eat away the past after the present is gone.</p>
<p>In my previous missive on Unique ID&#8217;s, I went through all the mental hoops I could to describe how an ID generator could be itself identified by thread, process, computer, and public parts. Now, we&#8217;re only required a series of numbers to finish off the Unique ID. That could be as simple as a counting loop within the thread of execution, and we might want to keep that in mind.</p>
<p>But usually, computer programs have a very simple way to get a time value, and that can come to our aid. At the risk of defying the <a href="http://en.wikipedia.org/wiki/You_Ain't_Gonna_Need_It">You Ain&#8217;t Gonna Need It</a> (YAGNI) concept, we&#8217;ll go on to figure out how we can incorporate time into our Unique ID&#8217;s, or at least leave room for implentation if we want.</p>
<p>Suppose we have gone through all the hoops to figure out &#8220;the best thing to do&#8221; for our computer process, and we have two or more items of equal weight (whatever we&#8217;ve defined that to be) in contention to be the winner.  We could pick a random choice, or as random as our machine will give us, and hope that luck will lead us clearly to our goals. But if we keep arriving at this same decision, we could end up that a value is never chosen, that our luck has gone sour and karma has caught up with us. So, one way out of this mess is to choose the oldest value.</p>
<p>Having a timestamp at this point in the consideration process is extremely handy, in that we don&#8217;t need to implement another decision level. We just pick the ID with the smallest time value. Next time we&#8217;re at this juncture, our old value will have been gone, and we&#8217;ll pick the oldest ID now available.</p>
<p>One of the downsides of doing this is that we&#8217;re now shifting our decision process from a comparison of whole ID&#8217;s to a relation of embedded values.  That will add additional complexity to our program thread, and we&#8217;ll only be able to determine its effectiveness when we finally get to implementation.</p>
<p>If we look back at the <a href="http://www.ietf.org/rfc/rfc4122.txt">original spec</a> for UUID&#8217;s, we see that time is captured at 100 nanosecond intervals, or 10 million of these values per second is our granularity.  When programming, though, we&#8217;re very lucky if we can get anything better than granularity to the second without using an external library or weird procedure. I&#8217;ll suggest here, then, we keep our programming simple and call seconds as &#8220;close enough&#8221; for our purpose. This will probably bite me in the butt later as well, because YAGNI.</p>
<p>So, let&#8217;s look at the value that gets returned when we ask for a <a href="http://en.wikipedia.org/wiki/Unix_time">POSIX time </a>value. It is &#8220;the number of seconds elapsed since midnight UTC of January 1, 1970, not counting leap seconds.&#8221; If we store this value in 32 bits of information, we&#8217;ll run out of space on <a href="http://en.wikipedia.org/wiki/Year_2038_problem">January 19th, 2038</a>. But this doesn&#8217;t bother us, as we&#8217;re adamant to store our ID in <a href="http://en.wikipedia.org/wiki/Base32">base 32</a>, and that will get us through the rest of this millennium with seven characters.</p>
<p>Something cropped up when I was originally researching UUID&#8217;s for this project a few years back, what do you do when someone sets the clock backwards? Well, we could just ignore it if we trusted our system to check for duplicate values. That&#8217;s not in my nature, though, as we should try to do always be doing right thing when dealing with lower level functionality.</p>
<p>The UUID spec says they would use a Clock ID set at a random value, then increment the ID by one if a reset was detected. Well, that&#8217;s fine, it keeps the ID unique. But it doesn&#8217;t help with the sorting, because you&#8217;d have to intersperse the clock ID into the right spot in the series somehow. Thankfully, these resets are few and far between, and hopefully the clock resets on a fairly regular basis.</p>
<p>That just about wipes me out as far as using time as part of our Unique ID scheme. I ain&#8217;t gonna use it, mostly because of the shifting context problem. We&#8217;ll think about keeping space for it in our final version, as we can capture it with eight characters.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jimcooncat.wordpress.com/18/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jimcooncat.wordpress.com/18/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jimcooncat.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jimcooncat.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jimcooncat.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jimcooncat.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jimcooncat.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jimcooncat.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jimcooncat.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jimcooncat.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jimcooncat.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jimcooncat.wordpress.com/18/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=18&subd=jimcooncat&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jimcooncat.wordpress.com/2008/01/29/unique-identifiers-part-2-about-time/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jimcooncat</media:title>
		</media:content>
	</item>
		<item>
		<title>Unique Identifiers &#8211; Part 1, Identifying the Generator</title>
		<link>http://jimcooncat.wordpress.com/2008/01/26/unique-identifiers/</link>
		<comments>http://jimcooncat.wordpress.com/2008/01/26/unique-identifiers/#comments</comments>
		<pubDate>Sat, 26 Jan 2008 10:30:03 +0000</pubDate>
		<dc:creator>jimcooncat</dc:creator>
				<category><![CDATA[Unique IDs]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://jimcooncat.wordpress.com/?p=17</guid>
		<description><![CDATA[Is a UUID really unique? This post seems to think there are problems. http://blog.joeware.net/2005/06/19/42/
There are several types of UUID&#8217;s, the most common being (supposedly) randomly generated, and one based on time and MAC addresses.  There are problems with each of these.
The above link has good opinions on the fallacy of randomly generated addresses. Besides [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=17&subd=jimcooncat&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Is a UUID really unique? This post seems to think there are problems. <a href="http://blog.joeware.net/2005/06/19/42/">http://blog.joeware.net/2005/06/19/42/</a></p>
<p>There are several types of UUID&#8217;s, the most common being (supposedly) randomly generated, and one based on time and MAC addresses.  There are problems with each of these.</p>
<p>The above link has good opinions on the fallacy of randomly generated addresses. Besides bad implementations, there is also a great reason for not using them &#8212; they are so damn unique, there is no way to look them up unless you have a database of all which are in use. You can&#8217;t specify ranges where you can divide the database into segments.</p>
<p>MAC addresses have nothing to do with Apple Macintosh computers, although the computers have MAC addresses in them. MAC addresses are unique identifiers brazed in read-only on your computer&#8217;s network card. Ranges of MAC addresses are doled out by a central authority to network card manufacturers.</p>
<p>There is something obviously wrong with that scheme in that we&#8217;re expecting the network card manufacturers to police themselves to ensure that addresses aren&#8217;t duplicated. When you pay sixteen dollars for a piece of hardware, made in the poorest manufacturing environment in the world, do you really feel that good that the manufacturer has paid their dues and been in compliance with this directive, that isn&#8217;t even backed by law? OK, but just be sure you take that painted wooden play block out of the baby&#8217;s mouth.</p>
<p>If that wasn&#8217;t enough, there&#8217;s a real possibility that someone has set up duplicate MAC addresses on their LAN intentionally. Some ISP&#8217;s (Internet Service Providers) and wireless configurations use MAC addresses to allow access to the next network over. Of course, you and I wouldn&#8217;t come up with a scheme like that since it relies only on the obscurity of the address, and not a shared secret or hashed password. But that&#8217;s the nature of the market.</p>
<p>So what happens is that the customer registers his MAC address with the ISP, and is now allowed into the network as long as he&#8217;s using that ethernet card. Later on, the customer trades in his computer, or replaces the ethernet card that&#8217;s gone bum, or sticks a router in between his computer and the internet. Whatever he&#8217;s done, he needs to change is MAC address; either register his new one with the ISP, or change the new hardware back to the old MAC address. Given the choice, he will probably not want to spend quality time listening to muzak while waiting for customer service to answer the phone and then find someone at the ISP that has a clue.</p>
<p>So, especially with the &#8220;insert a router in the mix&#8221; scenario, there&#8217;s a good possibility that there is a duplicate MAC address on the LAN. Intentionally done, with good intentions. The intentions don&#8217;t even have to be good, as one could use this scheme to leech access from the ISP from multiple locations.</p>
<p>Finally, MAC addresses are a lousy way to do generate unique ID&#8217;s that represent real-world data. That&#8217;s because in order to look up an unknown piece of information, you need a map of MAC addresses to computers. When collaborating with others outside your LAN, you&#8217;d have to replace your UUID&#8217;s to some central MAC address.</p>
<p>You also have a problem within one computer itself. You may want multiple programs to be able to generate unique ID&#8217;s, but there is only one MAC address per computer. So, you would have to have some locking mechanism so that more than one process can&#8217;t have access to the ID generator at a time. This scenario is even specified in the UUID specification document, <a href="http://www.opengroup.org/dce/info/draft-leach-uuids-guids-01.txt"><font size="-1"><span class="a">www.opengroup.org/dce/info/draft-<b>leach</b>-<b>uuid</b>s-guids-01.txt </span></font></a></p>
<p>Providing a system-wide lock makes programming a tool much harder; harder than it has to be. At a particular time, a process has a unique process id, which the computer uses to keep track and schedule each thing that&#8217;s going on. Well, with Linux 2.6 (the current version), there are a maximum of  1,073,741,824 process id&#8217;s. Encoding that many numbers in base32 takes six characters. And in the future, Linus and crew might up that number &#8212; you would think a million things going on with a computer at once would be enough for anybody!</p>
<p>So it&#8217;s probable that when implementing a unique ID with a process ID incorporated, we&#8217;ll need to cut this number down to size. That would mean some extra programming in order to have a registry of processes allowed to give out an ID. So we&#8217;re back to a locking mechanism, but arguably more effective, since you only need to register the process one time, and provide some way to clean up the mess after you&#8217;re done.</p>
<p>But let&#8217;s say we didn&#8217;t want to make a registry, and just confine our ID&#8217;s to the computer we&#8217;re using right now. After all, we don&#8217;t need to come up with an ID for the computer until we&#8217;re ready to share the information outside of it, right? So we can flag the ID with a code that says we&#8217;re only going to have it valid on the current computer, then list the process ID after it. We could even have a multithreaded program be able to give a short ID to each thread; creating a in-memory mapping within a single program would be fairly easy, you&#8217;d just map the thread id when creating the thread, if mapping is really needed.</p>
<p>Now, if we&#8217;re not using MAC addresses as the primary way to identify the computer, what&#8217;s the best way to go about it? More registries, please! We&#8217;ll want to make some kind of global registry so that an unknown value can be looked up, and if the author wants to share that information, then you&#8217;d be able to get its definition.</p>
<p>At the public side, we may want to consider a range of five characters, which our base32 converter tells us will provide over 35 million identifiers. So that&#8217;s how many public domains would be available, and is still in the realm of a Sqlite database lookup without making a small computer go dizzy.  Five&#8217;s a good number, since a sequence of characters can be read off over the phone and copied down without the recipient losing track of the characters spoken.</p>
<p>Now we have to have some layers of redirection from the public identifier to the individual computer. For one, this gives us some sense of privacy. But even more important, this allows a large organization to give a level of autonomy to its divisions.</p>
<p>Two base32 characters provide up to 1024 values, while one character is 32.  So with five more characters, we can allocate one character to the process id registration (32 processes per computer), 1024 computers per division, then 1024 divisions per public identifier. Now, I&#8217;m curious if that would be a good spread. What do you think?</p>
<p>Another way would be to have 1024 process id&#8217;s per computer, using two characters, then let the public ID have 32,768 computer id&#8217;s to dole out as they see fit. Any more than that, they&#8217;d just need to get another public ID. Now I feel better about using that spread.</p>
<p>If we wanted to go whole hog, then five characters would be enough to directly convert internal IP addresses to computer id&#8217;s, no matter if they used the 10.x.x.x, 172.x.x.x or 192.161.x.x scheme, or even a combination of those. But now that we&#8217;re at our five-character maximum, we have to allocate even more characters for our process id. And if the company started using sub-sub-nets, which may be common with virtualized OS&#8217;s, internal IP addresses can very possibly be duplicated, as I&#8217;ve seen with VirtualBox.</p>
<p>For giggles, the full range of IPv4 address space comes to 4000000 in base 32. Some expect exhaustions of address ranges as early as two years from now; but I just don&#8217;t think it&#8217;ll happen for a while. But if the world moves to IPv6, that&#8217;s over ten with 38 zeroes after it &#8212; way to big for us to make a usable ID format out of anyway.</p>
<p>Well, I think that about covers all the scenarios we&#8217;d want to identify who generated the ID. Note that I am not making any effort to conceal privacy, if one wants to keep the data anonymous then they will have to arrange for an anonymous computer to do their dirty work. I would rather forsake simple anonymity than to make our ID&#8217;s so that they are incompatible with any type of accountancy.</p>
<p>Now we need a series of unique numbers for our ID generator to use. Which will bring me to my next post, about the strange concept we call time &#8230;.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jimcooncat.wordpress.com/17/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jimcooncat.wordpress.com/17/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jimcooncat.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jimcooncat.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jimcooncat.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jimcooncat.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jimcooncat.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jimcooncat.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jimcooncat.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jimcooncat.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jimcooncat.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jimcooncat.wordpress.com/17/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=17&subd=jimcooncat&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jimcooncat.wordpress.com/2008/01/26/unique-identifiers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jimcooncat</media:title>
		</media:content>
	</item>
		<item>
		<title>Generic Program</title>
		<link>http://jimcooncat.wordpress.com/2008/01/19/generic-program/</link>
		<comments>http://jimcooncat.wordpress.com/2008/01/19/generic-program/#comments</comments>
		<pubDate>Sat, 19 Jan 2008 12:06:07 +0000</pubDate>
		<dc:creator>jimcooncat</dc:creator>
				<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://jimcooncat.wordpress.com/2008/01/19/generic-program/</guid>
		<description><![CDATA[The ultimate flexible program starts out totally ignorant. It uses a database to determine &#8220;the best thing to do at a particular time.&#8221;
The database returns: what to do (action), and how to do it (method).
How to do it, also know as the method:

Do it and report success or failure.
Do it and report what happened at [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=16&subd=jimcooncat&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>The ultimate flexible program starts out totally ignorant. It uses a database to determine &#8220;the best thing to do at a particular time.&#8221;</p>
<p>The database returns: what to do (action), and how to do it (method).</p>
<p>How to do it, also know as the <i>method</i>:</p>
<ul>
<li>Do it and report success or failure.</li>
<li>Do it and report what happened at each step.</li>
<li>Do it and report how long it took, along with success or failure.</li>
</ul>
<p>Success or Failure reports include:</p>
<ul>
<li>I don&#8217;t know how to do that action.</li>
<li>I don&#8217;t know the method in which you want me to do that.</li>
<li>I don&#8217;t know how to do that action, nor do I know the method in which you want me to do that.</li>
<li>I tried to do that action, but it was unsuccessful. The method was successful.</li>
<li>I tried to do that action using the method you wanted me to, but the method was unsuccessful.</li>
<li>I tried to do that action using that method, but something went wrong. I don&#8217;t know if it was the action, or the method used.</li>
<li>I did it. Success.</li>
</ul>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jimcooncat.wordpress.com/16/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jimcooncat.wordpress.com/16/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jimcooncat.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jimcooncat.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jimcooncat.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jimcooncat.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jimcooncat.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jimcooncat.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jimcooncat.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jimcooncat.wordpress.com/16/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jimcooncat.wordpress.com/16/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jimcooncat.wordpress.com/16/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=16&subd=jimcooncat&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jimcooncat.wordpress.com/2008/01/19/generic-program/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jimcooncat</media:title>
		</media:content>
	</item>
		<item>
		<title>Software Limitations</title>
		<link>http://jimcooncat.wordpress.com/2008/01/16/15/</link>
		<comments>http://jimcooncat.wordpress.com/2008/01/16/15/#comments</comments>
		<pubDate>Wed, 16 Jan 2008 11:25:34 +0000</pubDate>
		<dc:creator>jimcooncat</dc:creator>
				<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://jimcooncat.wordpress.com/2008/01/16/15/</guid>
		<description><![CDATA[Over the many years I&#8217;ve been using computer programs, I&#8217;ve been disheartened by how limiting most databases are. A programmer&#8217;s job is to make a useful tool, and if that tool is supposed to model the physical world, it needs to be able to capture more than just enough to supposedly do the work it [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=15&subd=jimcooncat&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Over the many years I&#8217;ve been using computer programs, I&#8217;ve been disheartened by how limiting most databases are. A programmer&#8217;s job is to make a useful tool, and if that tool is supposed to model the physical world, it needs to be able to capture more than just enough to supposedly do the work it set out. Even if the tool doesn&#8217;t use the data, the user always has a need to record their thoughts as they are working on something, and it&#8217;s not very expensive to at least allow a &#8220;comments&#8221; area for anything they may happen to dream up while using the tool.</p>
<p>It mounts the frustration of people using a program to find its inadequate for their needs after they&#8217;ve already invested a load of data entry into it. We&#8217;ll use a contact database for an example. Let&#8217;s say that one of the co-workers is going on vacation, and some new vacation contact information will only be good for a set duration, perhaps a phone number they use. What would be wonderful is if they wanted to call someone during that period the database would give the vacation number, but after the vacation&#8217;s over it would revert back to the old number. But if putting in that functionality is so difficult, why not give the database the tools to capture a message, and possibly incorporate an email reminder system?</p>
<p>As needs get more complex, we wind up with multiple records of the same thing across many databases. A person&#8217;s records in our office is in our contacts database, and in our accounting systems (up to three times, if they have multiple relationships to the business, such as customer, vendor, and employee). They might also be a member of one of the organizations we do staff support for, hence a record in yet another database that provides functionality our accounting system doesn&#8217;t do. When that person calls in to be helped, there are far too many places that we have to look to retrieve information on them, and it is a burden to update if they have a change.</p>
<p>The solution is to recognize that these databases don&#8217;t have a record of the person themselves; they have  a record of the relationship between that person and &#8220;yourself&#8221;, as defined by the program. In the physical plane, your needs are greater than one programmer&#8217;s vision of what their tool is going to provide. They don&#8217;t recognize that, and ego plays a lot in it &#8212; they feel that somehow their tool is going to give you everything you need to manage what you have going on. Yet most all programs have very little capture of your own information, for some reason they objectify you as the <a href="http://en.wikipedia.org/wiki/Luser">luser,</a> and some even punish you for all the trauma that programming for your needs has cost them as a programmer.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jimcooncat.wordpress.com/15/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jimcooncat.wordpress.com/15/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jimcooncat.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jimcooncat.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jimcooncat.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jimcooncat.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jimcooncat.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jimcooncat.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jimcooncat.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jimcooncat.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jimcooncat.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jimcooncat.wordpress.com/15/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=15&subd=jimcooncat&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jimcooncat.wordpress.com/2008/01/16/15/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jimcooncat</media:title>
		</media:content>
	</item>
		<item>
		<title>Programming tools</title>
		<link>http://jimcooncat.wordpress.com/2008/01/15/programming-tools/</link>
		<comments>http://jimcooncat.wordpress.com/2008/01/15/programming-tools/#comments</comments>
		<pubDate>Tue, 15 Jan 2008 21:24:45 +0000</pubDate>
		<dc:creator>jimcooncat</dc:creator>
				<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://jimcooncat.wordpress.com/2008/01/15/programming-tools/</guid>
		<description><![CDATA[I&#8217;m trying to come up with the ultimate simple programming environment.  I&#8217;d like to be able to support most any type of user interface, such as CLI (command line), ncurses (maybe via dialog), zenity, tk (I think it&#8217;s ugly, but might make a good fallback) and wxwidgets. And I&#8217;d like to be able to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=14&subd=jimcooncat&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I&#8217;m trying to come up with the ultimate simple programming environment.  I&#8217;d like to be able to support most any type of user interface, such as CLI (command line), ncurses (maybe via dialog), zenity, tk (I think it&#8217;s ugly, but might make a good fallback) and wxwidgets. And I&#8217;d like to be able to daemonize it simply and use it as a web server, or to be able to called by one.</p>
<p>I&#8217;ve been debating TCL vs. Python.  Python is very nice, but it seems that I would have trouble making small executables with it. One of my main goals is for the deliverables to remain small as possible. A program call freewrap is advertised as making small executables, for which I could make TCL programs, and (optionally) a TK interface. Unfortunately, it seems freewrap doesn&#8217;t appear to work with the newest 8.5 Tcl/Tk, so therefore ugly GUI without Tk&#8217;s new theming. But maybe it&#8217;s still possible, or will be by the time I need it.</p>
<p>Since I want to make a generic view (from the Model, View, Controller pattern), I might still be able to use wxwidgets (and probably Python) if I want to deliver a beautiful interface &#8212; at the expense of deliverables size. How I&#8217;d wrap this into an installable deliverable I don&#8217;t know yet. That&#8217;s later, anyway, as well.</p>
<p>Sqlite and Tcl seem to be a very nice fit for what I want. D. Richard Hipp has some <a href="http://www.tcl.tk/community/tcl2004/Papers/D.RichardHipp/drh.html">wonderful ideas</a> about using Sqlite for a generic storage backend that would replace use of arrays; becoming part of the code itself.  This goes along with my philosophy for a super-generalized computer program.</p>
<p>The program itself would know very little, not even its own name. It&#8217;s function is to run a loop: What&#8217;s the best thing to do, then do it. It would provide error messages if it couldn&#8217;t initialize. And that&#8217;s about it. The database would load code as needed.</p>
<p>I spent a good part of this morning reviewing Expect, as it has a signal handling functionality. It&#8217;s important that anything I write (and should be anything I do) maintain its cleanliness. So if there&#8217;s something dirty that should be cleaned up before exiting, Expect can trap SIGTERM (hopefully on Windows too) and run a cleanup function. It looks now as if there&#8217;s nothing dirty about opening the database, even with a table that&#8217;s only in memory. If so, I could load the cleanup functionality from the database, and keep it very simple.</p>
<p>Data would be stored as either a unique ID or as a value. From the past research I&#8217;ve done (which I seem to have misplaced at the moment), I came up with a scheme using 32 numbers and letters, which I called ZILO encoding. I named it that, since those would be the letters I would omit, since they look like other letters or numbers. Using 128 bits plus a few more, I&#8217;d end up with (if I remember right) 30 digits that could be handwritten and reread without error. This would store a GUID, a big integer, or just raw data.</p>
<p>Part of the ZILO encoding is the ability to sort data, which the default GUID format doesn&#8217;t lend itself to. Important data that&#8217;s part of the GUID should be available: where the ID came from, and what time it was when formed. Note I don&#8217;t subscribe to random GUID&#8217;s as MS devs do, as they are not truly unique.</p>
<p>The basic table format I described came in three parts: an ID, a subject, and an object. A representation of any unique or commodity object would get a GUID. Values stored in big integers would play a big part. Every object would be a class, an individual being a class with one object.</p>
<p>Subsequent entries would compound upon another, and a freeform database (within a database) would emerge. Every assumption made would be linked to a basis, which can be revised. Revisions would stay within the database, and bogus assumptions would be culled by a garbage collection routine. So there are no Updates or Deletes involved, just Inserts and Selects. The most valid truth would just come from the relationship which has the most recent good basis.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jimcooncat.wordpress.com/14/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jimcooncat.wordpress.com/14/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jimcooncat.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jimcooncat.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jimcooncat.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jimcooncat.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jimcooncat.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jimcooncat.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jimcooncat.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jimcooncat.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jimcooncat.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jimcooncat.wordpress.com/14/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=14&subd=jimcooncat&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jimcooncat.wordpress.com/2008/01/15/programming-tools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jimcooncat</media:title>
		</media:content>
	</item>
		<item>
		<title>Why use a web hosting agency?</title>
		<link>http://jimcooncat.wordpress.com/2007/12/18/why-use-a-web-hosting-broker/</link>
		<comments>http://jimcooncat.wordpress.com/2007/12/18/why-use-a-web-hosting-broker/#comments</comments>
		<pubDate>Tue, 18 Dec 2007 17:49:01 +0000</pubDate>
		<dc:creator>jimcooncat</dc:creator>
				<category><![CDATA[Cooncat Publishing]]></category>
		<category><![CDATA[agency]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[publishing]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://jimcooncat.wordpress.com/2007/12/18/why-use-a-web-hosting-broker/</guid>
		<description><![CDATA[The concept.
An independent web hosting agency doesn&#8217;t look out for the hosting company&#8217;s best interest, they look out for yours. With Cooncat Publishing as your web hosting agent, your web presence is insulated from vendor lock-in, outages are minimized, your name is protected, and publishing procedures are customized to match your workflow. For businesses that [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=12&subd=jimcooncat&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><h4>The concept.</h4>
<p>An independent web hosting agency doesn&#8217;t look out for the hosting company&#8217;s best interest, they look out for yours. With Cooncat Publishing as your web hosting agent, your web presence is insulated from vendor lock-in, outages are minimized, your name is protected, and publishing procedures are customized to match your workflow. For businesses that maintain multiple websites, the cost of using Cooncat Publishing to arrange for web hosting costs less than if they purchased hosting themselves.</p>
<h4>The risks.</h4>
<p>It&#8217;s no secret that web hosting is a volatile business. Companies fold frequently, often leaving their customers with no easy access to their own data. Hardware fails after years of use, and they won&#8217;t tell you that they don&#8217;t keep a spare &#8220;RAID controller&#8221; in the house. Servers are loaded, often overloaded, with several customers&#8217; data, and popularity of (or network attacks against) one companies website may cause your own to go down.</p>
<p>Sometime we&#8217;re own own worst enemy, especially when it comes to computers. We might delete a necessary file inadvertently, and can&#8217;t find the backup for it. We could update a web page on our main site, and forget to copy it to your backup server. Or we might get someone else to write our web page, and find out what they publish wasn&#8217;t at all what we wanted — after several other people have already seen it!</p>
<h4>The benefits.</h4>
<h5>Uptime</h5>
<p>Monitoring software installed in several locations around the internet keeps track of whether your site is accessable, and switches automatically to a backup server if there&#8217;s a problem. You&#8217;ll be notified along with easy-to-understand details as to what happened. Redundancy is built into each part of the setup. Image files are kept on separate machines, so in case the traffic on your site becomes overwhelming, the visitors will still get your message. Our monitoring software will pick up on this, and adjust for the increased traffic in minutes.</p>
<h5>Workflow</h5>
<p>Editing  your website is always done on a draft copy.  Publishing the draft is a separate, one-click step that&#8217;s done after the draft is approved, and multiple levels of approval can be set up. Once approved, copies of the draft are automatically published not only to the main site, but to all backups as well.</p>
<p>Two types of backups are used. A <em>mirror</em> is a full copy of your website, ready to serve if your main site goes down. An <em>archive</em> is also kept, that keeps the details of the changes you&#8217;ve made to the site, in case you ever need to retrieve deleted pages, or parts of pages.</p>
<h5>Ownership</h5>
<p>Cooncat Publishing&#8217;s hosting agency ensures that you always have ownership of the media you entrust with us. We share all the information with you about the services we arrange on your behalf in clear, concise documentation. We provide you the tools for you to automatically include your own computers as a place to store your backups. We even provide you with everything you&#8217;d need to do your own arrangements in case you no longer wish to use our services. Our philosophy is that we abhor vendor lock-in; service providers should compete for your business by providing excellent value.</p>
<h4>No silver bullet exists.</h4>
<p>Unfortunately, the very nature of the World Wide Web keeps us from being able to achieve full reliability. This is because there is no way to quickly switch a computer, whether a name server or web hosting server <em>for everyone who may visit your website</em>.</p>
<p>The problem is that your visitors&#8217; internet provider may keep stale information in their own computers.  So they visit your site at www.foobar.com, and get an error message. The monitoring software has already told &#8220;the internet&#8221; that you&#8217;ve moved the site to a host that works, but the visitor&#8217;s computer doesn&#8217;t get that information for hours later.</p>
<p>While this problem might not be completely solvable — mostly because some internet providers don&#8217;t follow the standards — there are steps that can be taken to minimize disruption. That involves recurring testing, and informing you if you have visitors who may not be able to visit your web site; as well as what to tell them so they can fix the problem. These simple changes on their end will also fix their setup so they will see many other websites they&#8217;ve been having problems viewing as well.</p>
<p>We understand the web, and give you the tools you need to get your message out.</p>
<h4>Related articles:</h4>
<blockquote><p><a href="http://www.thewhir.com/features/brokerage.cfm">Impartiality Key in Hosting Brokerage Business</a></p></blockquote>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jimcooncat.wordpress.com/12/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jimcooncat.wordpress.com/12/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jimcooncat.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jimcooncat.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jimcooncat.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jimcooncat.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jimcooncat.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jimcooncat.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jimcooncat.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jimcooncat.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jimcooncat.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jimcooncat.wordpress.com/12/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=12&subd=jimcooncat&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jimcooncat.wordpress.com/2007/12/18/why-use-a-web-hosting-broker/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jimcooncat</media:title>
		</media:content>
	</item>
		<item>
		<title>Blogging Applications</title>
		<link>http://jimcooncat.wordpress.com/2007/12/18/blogging-applications/</link>
		<comments>http://jimcooncat.wordpress.com/2007/12/18/blogging-applications/#comments</comments>
		<pubDate>Tue, 18 Dec 2007 17:39:56 +0000</pubDate>
		<dc:creator>jimcooncat</dc:creator>
				<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://jimcooncat.wordpress.com/2007/12/18/blogging-applications/</guid>
		<description><![CDATA[A blogging app should be immediately available.
A typical session now.

Wake up with a great idea for your blog.
Turn on the coffee pot.
Open blogging app and wait for it to initiate.
Connect to blog.
Jot down a quick outline of what you&#8217;re going to write about.
Make up a filename and save it.
What does the advanced toolbar do?
An operating [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=8&subd=jimcooncat&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>A blogging app should be immediately available.</p>
<p>A typical session now.</p>
<ol>
<li>Wake up with a great idea for your blog.</li>
<li>Turn on the coffee pot.</li>
<li>Open blogging app and wait for it to initiate.</li>
<li>Connect to blog.</li>
<li>Jot down a quick outline of what you&#8217;re going to write about.</li>
<li>Make up a filename and save it.</li>
<li>What does the advanced toolbar do?</li>
<li>An operating system update is flashing. Guess I should run that while I&#8217;m just blogging.</li>
<li>Switch back to the blog, and write down the part of the main idea that I remember right now.</li>
<li>I&#8217;m in my browser, and can&#8217;t think of anything this second; would it hurt to check my news site? I promise myself I&#8217;ll only read one headline.</li>
<li>Oh, coffee&#8217;s ready. My throat&#8217;s dry. One more line and I&#8217;ll get a cup.</li>
<li>Switch back to the blog, and write down anything just so I can get my cup of coffee.</li>
<li>She comes in. &#8220;While you&#8217;re on the computer, dear, why don&#8217;t you go through this stack of bills?&#8221;</li>
<li>Open online banking site so she can see you&#8217;re being helpful. While it&#8217;s loading, start ripping open envelopes.</li>
<li>She went to get a cup of coffee. I can finally get back to blogging!</li>
<li>Switch to blog. Write down the punch line of the blog post.</li>
<li>Hear large crashing sounds coming from the kitchen. Jump up, &#8220;Are you alright?&#8221;</li>
<li>Find out she&#8217;s knocked over the sugar bowl you&#8217;d left hanging precariously off the counter. Help pick up glass and sugar mixture.</li>
<li>Back to the bills, she wants to know how much electric you used last month. Try to justify the usage increase.</li>
<li>Check bank balance, and find out you&#8217;ll have to make a decision between electricity and food. Put off decision until you open rest of bills.</li>
<li>OS update&#8217;s done, according to the annoying popup. Dismiss the popup, and leave the nagging icon on the screen. You&#8217;ll restart your browser later, right now you have work to do!</li>
<li>Switch back to your blog. Start rereading what you&#8217;ve written so far to refresh your own memory.</li>
<li>Hear commotion from the cellar. Run downstairs and find angry cat in the water of sump pump hole. Bring wet cat upstairs and wipe him down in the sink with the dishrag. Get hand scratched before done.</li>
<li>Wipe up water and blood from around sink area. See you have five minutes before you have to start getting ready to go to work. Hang dishrag up to dry in laundry room and find replacement.</li>
<li>Get back to computer. Your blog&#8217;s there awaiting attention. Mindful of the time, you switch back to the banking site. You&#8217;ve timed out, so you have to go back to the front page of the banking site to log in.</li>
<li>Before the bank site lets you in, it asks you to pick a security question and come up with an answer. You choose &#8220;what&#8217;s your pet&#8217;s name?&#8221; and write down &#8220;scratching little sump pump bastard&#8221;. The phishers won&#8217;t guess that!</li>
<li>Choose bill pay, and throw the electric company a thirty dollar bone. Hope they don&#8217;t shut you off before next payday, or you finish your blog post, whichever comes first.</li>
<li>Close bank website, and your news page shows. Do a quick scan of the headlines.</li>
<li>Check the time. You should be in the shower right now.</li>
<li>Write down the partial payment on your electric bill.</li>
<li>Close news site, and see your unfinished blog entry.</li>
<li>Save your blog without starting to read it again.</li>
<li>Open checkbook spreadsheet and type in the payment.</li>
<li>Close browser and tell the computer to reboot for good measure.</li>
<li>Take shower, get dressed, all that good stuff. While in the shower you remember some major thing you wanted in your blog post.</li>
<li>Get back to computer. Dismiss the &#8220;Can&#8217;t shut down right now&#8221; popup and hit save for the checkbook spreadsheet.</li>
<li>Spend a disappointing few seconds realizing your computer is going to reboot without giving you the chance to type your idea.</li>
<li>Put some oil in the car so you can make it to work. She&#8217;s in the window waiting impatiently. Run back in and kiss her, acting like you didn&#8217;t forget about that at all.</li>
<li>Cat give you a dirty, accusing look. Hiss at the cat while walking out the door.</li>
<li>Drive to work, holding throbbing scratched hand, trying to remember what you were blogging about.</li>
<li>Money worries pop up in your thought process, or rather that you&#8217;ll be giving up beer and lunchtime snacks until next payday.</li>
<li>Make a mental note that you need to make up with the cat or life will become unbearable.</li>
<li>Get to work late and walk into a large staff meeting you&#8217;d forgotton about. Everyone looks tired, sad, scared or angry.</li>
<li>Realize you&#8217;re not going to get back to that blog post today.</li>
</ol>
<p>Help develop the future of blogging apps. Please leave your comments on how to avoid the problems.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jimcooncat.wordpress.com/8/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jimcooncat.wordpress.com/8/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jimcooncat.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jimcooncat.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jimcooncat.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jimcooncat.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jimcooncat.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jimcooncat.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jimcooncat.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jimcooncat.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jimcooncat.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jimcooncat.wordpress.com/8/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=8&subd=jimcooncat&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jimcooncat.wordpress.com/2007/12/18/blogging-applications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jimcooncat</media:title>
		</media:content>
	</item>
		<item>
		<title>Decisions</title>
		<link>http://jimcooncat.wordpress.com/2007/12/11/decisions/</link>
		<comments>http://jimcooncat.wordpress.com/2007/12/11/decisions/#comments</comments>
		<pubDate>Tue, 11 Dec 2007 11:11:41 +0000</pubDate>
		<dc:creator>jimcooncat</dc:creator>
				<category><![CDATA[philosophy]]></category>

		<guid isPermaLink="false">http://jimcooncat.wordpress.com/2007/12/11/decisions/</guid>
		<description><![CDATA[A decision has to be accompanied by a basis. Why did you make the choice for action? If this isn&#8217;t recorded, and you forget, you won&#8217;t be able to defend your actions.
If those who are affected by your choice wonder if they are benefitted, they should be able to research your rationale without having to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=7&subd=jimcooncat&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>A decision has to be accompanied by a basis. Why did you make the choice for action? If this isn&#8217;t recorded, and you forget, you won&#8217;t be able to defend your actions.</p>
<p>If those who are affected by your choice wonder if they are benefitted, they should be able to research your rationale without having to interrupt your life to recall the basis of your decision. That is, if you&#8217;ve recorded the basis of your decision understandably, and haven&#8217;t changed your mind since then without updating your basis. In that latter case, you&#8217;re in trouble.</p>
<p>By not sticking with the program, your crappy decision is about to affect someone else. If they are more cognizant of the situation than you were at the time of your original decision, they will call you on it. But if they take faith in your basis, take action on the same conclusion you did, they will go happily down a false path.</p>
<p>Depending on the potentials along the way, you&#8217;ve set them up for disaster. Now what will you do, plead ignorance?</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/jimcooncat.wordpress.com/7/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/jimcooncat.wordpress.com/7/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/jimcooncat.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/jimcooncat.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/jimcooncat.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/jimcooncat.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/jimcooncat.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/jimcooncat.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/jimcooncat.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/jimcooncat.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/jimcooncat.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/jimcooncat.wordpress.com/7/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=jimcooncat.wordpress.com&blog=205028&post=7&subd=jimcooncat&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://jimcooncat.wordpress.com/2007/12/11/decisions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">jimcooncat</media:title>
		</media:content>
	</item>
	</channel>
</rss>