<?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:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
	xmlns:media="http://search.yahoo.com/mrss/"
>

<channel>
	<title>Cheerful Curmudgeon &#187; Software</title>
	<atom:link href="http://cheerfulcurmudgeon.com/category/technology/software/feed/" rel="self" type="application/rss+xml" />
	<link>http://cheerfulcurmudgeon.com</link>
	<description>A complete lack of ideas and the power to express them.</description>
	<lastBuildDate>Tue, 24 Aug 2010 01:23:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
	<!-- podcast_generator="podPress/8.8" - maintenance_release="8.8.4" -->
		<copyright>Copyright &#xA9; 2010 Cheerful Curmudgeon </copyright>
		<managingEditor>art@zemon.name (Art Zemon)</managingEditor>
		<webMaster>art@zemon.name (Art Zemon)</webMaster>
		<category>posts</category>
		<ttl>1440</ttl>
		<itunes:keywords></itunes:keywords>
		<itunes:subtitle></itunes:subtitle>
		<itunes:summary>A complete lack of ideas and the power to express them.</itunes:summary>
		<itunes:author>Art Zemon</itunes:author>
		<itunes:category text="Society &amp; Culture"/>
		<itunes:owner>
			<itunes:name>Art Zemon</itunes:name>
			<itunes:email>art@zemon.name</itunes:email>
		</itunes:owner>
		<itunes:block>No</itunes:block>
		<itunes:explicit>no</itunes:explicit>
		<itunes:image href="http://cheerfulcurmudgeon.com/wp-content/plugins/podpress/images/powered_by_podpress_large.jpg" />
		<image>
			<url>http://cheerfulcurmudgeon.com/wp-content/plugins/podpress/images/powered_by_podpress.jpg</url>
			<title>Cheerful Curmudgeon</title>
			<link>http://cheerfulcurmudgeon.com</link>
			<width>144</width>
			<height>144</height>
		</image>
		<item>
		<title>Real Virtual Alchemy</title>
		<link>http://cheerfulcurmudgeon.com/2010/07/14/real-virtual-alchemy/</link>
		<comments>http://cheerfulcurmudgeon.com/2010/07/14/real-virtual-alchemy/#comments</comments>
		<pubDate>Wed, 14 Jul 2010 12:16:36 +0000</pubDate>
		<dc:creator>Art Zemon</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[eBooks]]></category>

		<guid isPermaLink="false">http://cheerfulcurmudgeon.com/?p=1173</guid>
		<description><![CDATA[I have learned to change lead into gold, and back again, for real! Well, sort of. Thus far, it only works within the virtual world of programming languages like Python. Here is the recipe. (If you are not into geek-speak, skip to the bottom where I natter on about reading ebooks on an iPad.) class [...]]]></description>
			<content:encoded><![CDATA[<p>I have learned to change lead into gold, and back again, for real! Well, sort of. Thus far, it only works within the virtual world of programming languages like Python. Here is the recipe. <em>(If you are not into geek-speak, skip to the bottom where I natter on about reading ebooks on an iPad.)</em></p>
<pre>
class Lead(object):
    def prestoChango(self):
        self.__class__ = Gold

class Gold(object):
    def prestoChango(self):
        self.__class__ = Lead

pb = Lead()
print pb             # prints Lead
pb.prestoChango()
print pb             # prints Gold
pb.prestoChango()
print pb             # prints Lead
</pre>
<p>Voila! First it&#8217;s lead. Then it&#8217;s gold. Then it&#8217;s lead again.</p>
<p>I understand why you might want to do something like this but, at least within the projects that I work on, it would obfuscate the program too much for my liking.</p>
<p>I learned this from reading the <em><a href="http://oreilly.com/catalog/9780596007973" target="_blank">Python Coookbook</a></em> ebook on my iPad, which has been thoroughly enjoyable. I like the <a href="http://www.apple.com/ipad/features/ibooks.html" target="_blank">iBooks</a> app more than I expected to. I can highlight portions of the book, without actually trashing the pages. I can scribble notes next to my highlights. I can easily browse a list of the sections that I highlighted/noted. Perhaps even more useful, I can select a word or phrase from the text of the book and instantly search either Google or Wikipedia for it.</p>
]]></content:encoded>
			<wfw:commentRss>http://cheerfulcurmudgeon.com/2010/07/14/real-virtual-alchemy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python Generators Neatly Untangle Loops</title>
		<link>http://cheerfulcurmudgeon.com/2010/07/02/python-generators-neatly-untangle-loops/</link>
		<comments>http://cheerfulcurmudgeon.com/2010/07/02/python-generators-neatly-untangle-loops/#comments</comments>
		<pubDate>Fri, 02 Jul 2010 22:00:07 +0000</pubDate>
		<dc:creator>Art Zemon</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://cheerfulcurmudgeon.com/?p=1136</guid>
		<description><![CDATA[The Python programming language has become my first choice for most tasks over the last year or so. The more I use it, the more I find to like about it. I just stumbled across generators in a way that made them make sense to me and it is so cool that I want to [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://www.python.org/" target="_blank">Python</a> programming language has become my first choice for most tasks over the last year or so. The more I use it, the more I find to like about it. I just stumbled across <em>generators</em> in a way that made them make sense to me and it is so cool that I want to share it with you. A generator can make a program immensely more readable by separating the task of producing (or generating) data from the task of processing the data.</p>
<p>This will make more sense with an example: print an alphabetized list of all the usernames for a Linux system. On a computer running Linux, the file /etc/passwd contains information about all of the users. Here is the file for my laptop:</p>
<pre>root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
syslog:x:101:102::/home/syslog:/bin/false
klog:x:102:103::/home/klog:/bin/false
hplip:x:103:7:HPLIP system user,,,:/var/run/hplip:/bin/false
avahi-autoipd:x:104:110:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false
gdm:x:105:111:Gnome Display Manager:/var/lib/gdm:/bin/false
saned:x:106:113::/home/saned:/bin/false
pulse:x:107:114:PulseAudio daemon,,,:/var/run/pulse:/bin/false
messagebus:x:108:117::/var/run/dbus:/bin/false
polkituser:x:109:118:PolicyKit,,,:/var/run/PolicyKit:/bin/false
avahi:x:110:119:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
haldaemon:x:111:120:Hardware abstraction layer,,,:/var/run/hald:/bin/false
art:x:1000:1000:Art Zemon,,,:/home/art:/bin/bash
postfix:x:112:124::/var/spool/postfix:/bin/false
candy:x:1001:1002:Candy Zemon,,,:/home/candy:/bin/bash
sshd:x:113:65534::/var/run/sshd:/usr/sbin/nologin
mediatomb:x:114:126:MediaTomb Server,,,:/var/lib/mediatomb:/usr/sbin/nologin
couchdb:x:115:116:CouchDB Administrator,,,:/var/lib/couchdb:/bin/bash
speech-dispatcher:x:116:29:Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/sh
kernoops:x:117:65534:Kernel Oops Tracking Daemon,,,:/:/bin/false
usbmux:x:118:46:usbmux daemon,,,:/home/usbmux:/bin/false
festival:x:119:29::/home/festival:/bin/false
rtkit:x:120:128:RealtimeKit,,,:/proc:/bin/false</pre>
<p>Since the username is the first &#8220;word&#8221; on each line, up to the first colon, most of that file is drek and can be ignored. So given that file of stuff, the program breaks down into these tasks:</p>
<ol>
<li>Open the file /etc/passwd.</li>
<li>Read every line from the file and get the username, the first word, off of each line.</li>
<li>Construct a list of all the usernames.</li>
<li>Sort the list.</li>
<li>Print the results.</li>
</ol>
<p>My first attempt at such a program would have been something like this:</p>
<pre>namelist = []
passwd = open('/etc/passwd')
for line in passwd:
    username, drek = line.split(':', 1)
    namelist.append(username)
passwd.close()
namelist.sort()
for name in namelist:
    print name</pre>
<p>This little Python program does what I just described, producing this output:</p>
<pre>art
avahi
avahi-autoipd
backup
bin
candy
couchdb
daemon
festival
games
gdm
gnats
haldaemon
hplip
irc
kernoops
klog
libuuid
list
lp
mail
man
mediatomb
messagebus
news
nobody
polkituser
postfix
proxy
pulse
root
rtkit
saned
speech-dispatcher
sshd
sync
sys
syslog
usbmux
uucp
www-data</pre>
<p>The ugliness is that the for-loop does two things which are unrelated to each other: It finds the usernames within the /etc/passwd file and it constructs a list of the usernames. Why does a piece of a program which finds usernames care what happens to the usernames after they have been found? Why does a piece of a program which constructs a list of usernames need to care where the names came from? This is an artificially contrived example, so each of these pieces is very simple, but it is generally A Good Thing if each piece of a program does exactly one task. This makes everything easier: design, coding, testing, and debugging.</p>
<p>By using a generator, we can pry these two tasks apart and the program becomes easier to understand:</p>
<pre>def usernames():
    passwd = open('/etc/passwd')
    for line in passwd:
        username, drek = line.split(':', 1)
        yield username
    passwd.close()

namelist = []
for name in usernames():
    namelist.append(name)
namelist.sort()
for name in namelist:
    print name</pre>
<p>The generator at the top does just one thing: it produces usernames, one at a time. Python takes care of all the complexities. We can simply use the generator wherever we need a list of usernames. On first use, the /etc/passwd file is opened. Then each line is read, the username split off the beginning of the line, and the username yielded up to whatever other part of the program needs it. When the file has been completely processed, it is closed.</p>
<p>The second part of the program has become an easy-to-read loop: <code>for name in usernames()</code> This loop processes each name. We can understand that without being distracted by the details of processing the /etc/passwd file. Sweet.</p>
<p><em>[Update: I particularly enjoy programming because there is </em>always<em> something new to be learned. I have updated the following example, shortening it by one line while simultaneously making it easier to understand.]</em></p>
<p>Of course, Python offers more shortcuts and we can make the program more concise. Try this flavor:</p>
<pre>def usernames():
    passwd = open('/etc/passwd')
    for line in passwd:
        username, drek = line.split(':', 1)
        yield username
    passwd.close()

print '\n'.join(sorted(usernames()))</pre>
<p>Reading from the inside to the outside: <code>usernames()</code> produces the list of usernames. <code>sorted(...)</code> produces an alphabetized list of usernames. <code>'\n'.join(...)</code> takes the alphabetized list of names and joins them together into a string, one name per line, which is ready to be printed.</p>
<p>I hope that this has not been too deep a peek into the machinations of a programmer&#8217;s mind. <img src='http://cheerfulcurmudgeon.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://cheerfulcurmudgeon.com/2010/07/02/python-generators-neatly-untangle-loops/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Server Backups are Important</title>
		<link>http://cheerfulcurmudgeon.com/2010/03/06/server-backups-are-important/</link>
		<comments>http://cheerfulcurmudgeon.com/2010/03/06/server-backups-are-important/#comments</comments>
		<pubDate>Sat, 06 Mar 2010 13:32:52 +0000</pubDate>
		<dc:creator>Art Zemon</dc:creator>
				<category><![CDATA[Recommendations]]></category>
		<category><![CDATA[Safety]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://cheerfulcurmudgeon.com/?p=1075</guid>
		<description><![CDATA[I got a frantic email from a friend this week. One of his subcontractors went crazy and trashed several of my friend&#8217;s clients&#8217; web sites as well as my friend&#8217;s own business site. The police have been involved but much damage has already been done. I wish I had been hosting my friend&#8217;s sites. Had I [...]]]></description>
			<content:encoded><![CDATA[<p>I got a frantic email from a friend this week. One of his subcontractors went crazy and trashed several of my friend&#8217;s clients&#8217; web sites as well as my friend&#8217;s own business site. The police have been involved but much damage has already been done. I wish I had been hosting my friend&#8217;s sites. Had I been, I could have recovered everything from backups. As it is, all I could do was sit by and fume, wishing that his hosting company had had something to offer him in the way of assistance.</p>
<p>I know my friend&#8217;s pain. In the 30 years that I have been doing system administration, there have been numerous times when my own bacon has been saved by backups. I have been struck by the dread BUOD error (Bad User On Device) in which a glitch sitting between the chair and the keyboard has made the computer do all kinds of hideous deeds. The worst, early in my career, idled a team of a dozen programmers for three days. Why three full days? You guessed it: no backups. At the other end of the spectrum, a member of my team recently trashed a critical configuration file on one of our servers. This, however, resulted in no downtime; we simply grabbed a copy from the backups and continued on our merry ways.</p>
<p>If you accidentally delete a file from your web site (or, in my friend&#8217;s case, <em>all</em> of the files), can you recover it? Does your hosting company provide backups and, if so, can  <em>you</em> recover files from their backup? In many cases, hosting companies&#8217; backups are only for their use in cases of disk drive failure.</p>
<p>My company offers one (excellent, in my opinion) solution, <a href="http://www.hens-teeth.net/html/products/nest_egg_backup.php" target="_blank">Nest Egg Backup for Web Servers</a>. There are many other alternatives. Do choose and implement one. When you go comparison shopping, ask the key question: How long are the backups retained? If only for one night, that means that your window of opportunity is extremely limited. If you delete a file at 10:00pm and wait until 8:00am to try to get it back, you are out of luck. You should have <em>at least</em> three days of retention, preferably more, preferably <em>a lot more</em>. Thirty days can give you a nice warm, fuzzy feeling of safety and security.</p>
<p>Lesson of the day: Back up your hosting accounts! And be sure to include everything (email folders, MySQL databases, PHP config files, etc. etc. etc.) The day disaster strikes is a day too late to start backing stuff up.</p>
]]></content:encoded>
			<wfw:commentRss>http://cheerfulcurmudgeon.com/2010/03/06/server-backups-are-important/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Step 3: Google Chrome to Replace Microsoft Windows, Apple OSX, and Linux</title>
		<link>http://cheerfulcurmudgeon.com/2009/07/09/step-3-google-chrome-to-replace-microsoft-windows-apple-osx-and-linux/</link>
		<comments>http://cheerfulcurmudgeon.com/2009/07/09/step-3-google-chrome-to-replace-microsoft-windows-apple-osx-and-linux/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 12:19:32 +0000</pubDate>
		<dc:creator>Art Zemon</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://cheerfulcurmudgeon.com/?p=928</guid>
		<description><![CDATA[As I predicted in Google Chrome to Replace Microsoft Windows, Apple OSX, and Linux (September 2008) and again in Step 2: Google Chrome to Replace Microsoft Windows, Apple OSX, and Linux (December 2008), Google is moving to replace the operating system, not just the browser. What changed two days ago is that Google is finally [...]]]></description>
			<content:encoded><![CDATA[<p>As I predicted in <a href="http://cheerfulcurmudgeon.com/2008/09/02/google-chrome-to-replace-microsoft-windows-apple-osx-and-linux/">Google Chrome to Replace Microsoft Windows, Apple OSX, and Linux</a> (September 2008) and again in <a href="http://cheerfulcurmudgeon.com/2008/12/06/step-2-google-chrome-to-replace-microsoft-windows-apple-osx-and-linux/">Step 2: Google Chrome to Replace Microsoft Windows, Apple OSX, and Linux</a> (December 2008), Google is moving to replace the <em>operating system</em>, not just the browser. What changed two days ago is that Google is finally being up-front about it, instead of masquerading their plans as &#8220;only&#8221; a browser.</p>
<p>In <a href="http://googleblog.blogspot.com/2009/07/introducing-google-chrome-os.html" target="_blank">Introducing the Google Chrome OS</a> on the Official Google Blog, Google writes,</p>
<blockquote><p>We designed Google Chrome for people who live on the web — searching for information, checking email, catching up on the news, shopping or just staying in touch with friends&#8230;.</p>
<p>Google Chrome OS is an open source, lightweight operating system that will initially be targeted at netbooks. Later this year we will open-source its code, and netbooks running Google Chrome OS will be available for consumers in the second half of 2010&#8230;.</p>
<p>Speed, simplicity and security are the key aspects of Google Chrome OS. We&#8217;re designing the OS to be fast and lightweight, to start up and get you onto the web in a few seconds. The user interface is minimal to stay out of your way, and most of the user experience takes place on the web&#8230;.</p>
<p>Google Chrome OS will run on both x86 as well as ARM chips and we are working with multiple OEMs to bring a number of netbooks to market next year&#8230;.</p></blockquote>
<p>What does this mean to you? Several things, all good if you a) use your computer mostly for stuff on the web, and b) like to save money, and c) don&#8217;t mind that virtually all of your files will be &#8220;elsewhere&#8221; instead of stored on your own computer.</p>
<ol>
<li>Turn on your Google Chrome OS based computer and, within a very few seconds, you will be up and running on the web (using Google Chrome, of course).</li>
<li>No (or at least few) worries about viruses and Trojans which exploit Microsoft Windows, Internet Explorer, Microsoft Outlook, or Microsoft Office. You will have the security of Linux without the geeky requirements that you actually <em>understand</em> Linux.</li>
<li>You will be able to run this on existing hardware, which ought to breathe new life into old machines.</li>
</ol>
<p>The kicker is that, in Google&#8217;s grand vision, all of your email, letters, documents, spreadsheets, databases, etc., will be stored on Google&#8217;s servers. You will use GMail for your mail and Google Apps instead of Microsoft Office or OpenOffice.org. If you are big, you will use the paid versions of these apps. If you are small, ads might be in your face all the time. It is not coincidence that GMail and <a href="http://googleblog.blogspot.com/2009/07/google-apps-is-out-of-beta-yes-really.html" target="_blank">Google Apps came out of &#8220;beta&#8221;</a> the same day that Google introduced Google Chrome OS.</p>
<p>Is this good for you? How much do you trust Google? It is certainly cool technology, certainly priced right, and certainly convenient.</p>
]]></content:encoded>
			<wfw:commentRss>http://cheerfulcurmudgeon.com/2009/07/09/step-3-google-chrome-to-replace-microsoft-windows-apple-osx-and-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NSA Illegally Collecting US Citizens&#8217; Email</title>
		<link>http://cheerfulcurmudgeon.com/2009/06/19/nsa-illegally-collecting-us-citizens-email/</link>
		<comments>http://cheerfulcurmudgeon.com/2009/06/19/nsa-illegally-collecting-us-citizens-email/#comments</comments>
		<pubDate>Fri, 19 Jun 2009 14:07:15 +0000</pubDate>
		<dc:creator>Art Zemon</dc:creator>
				<category><![CDATA[Communicating]]></category>
		<category><![CDATA[Government]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://cheerfulcurmudgeon.com/?p=905</guid>
		<description><![CDATA[I am not surprised, but I am still dismayed, by the continued erosion of our personal privacy in the shadow of George W. Bush&#8217;s administration. The New York Times reports in E-Mail Surveillance Renews Concerns in Congress that the National Security Agency (NSA), as recently as early this year, is illegally collecting email from Americans: [...]]]></description>
			<content:encoded><![CDATA[<p>I am not surprised, but I am still dismayed, by the continued erosion of our personal privacy in the shadow of George W. Bush&#8217;s administration. The New York Times reports in <a href="http://www.nytimes.com/2009/06/17/us/17nsa.html?_r=2&amp;hp=&amp;pagewanted=all" target="_blank">E-Mail Surveillance Renews Concerns in Congress</a> that the National Security Agency (NSA), as recently as early this year, is illegally collecting email from Americans:</p>
<blockquote><p>Since April, when it was disclosed that the intercepts of some private communications of Americans went beyond legal limits in late 2008 and early 2009, several Congressional committees have been investigating. Those inquiries have led to concerns in Congress about the agency’s ability to collect and read domestic e-mail messages of Americans on a widespread basis, officials said. Supporting that conclusion is the account of a former N.S.A. analyst who, in a series of interviews, described being trained in 2005 for a program in which the agency routinely examined large volumes of Americans’ e-mail messages without court warrants. Two intelligence officials confirmed that the program was still in operation.</p></blockquote>
<p>A decade ago, I was a strong proponent of OpenPGP-encrypted email. I gave up when I got tired of trying to push that rope uphill. Maybe it&#8217;s time to try again.</p>
<p>Did you know that, unless you encrypt your email, it is as easy to read as a note written on a postcard? Now before you say, &#8220;So what? I don&#8217;t care,&#8221; consider how you would feel if NSA wanted to listen to all of your phone calls or wanted to read all of your regular mail. I suspect that, even though you are a law-abiding citizen and have nothing to hide, you might object a tad to that invasion of your privacy.</p>
<p>I have published my <a href="/about-me/key/">PGP key</a> on this web site (and it is in the popular key servers). Using this key, you can send encrypted messages to me and you can confirm that messages which I sign electronically actually were signed by <em>me</em>.</p>
<p>I sign and encrypt my email messages using <a href="http://enigmail.mozdev.org/" target="_blank">EnigMail</a> and <a href="http://www.gnupg.org/" target="_blank">GnuPG</a> (Gnu Privacy Guard) with <a href="http://www.mozilla.com/thunderbird" target="_blank">Thunderbird</a>, all highly reliable and free software. If you use something other than Thunderbird for your email (like Outlook or Eudora), here is a list of other <a href="http://www.gnupg.org/related_software/frontends.html#mua" target="_blank">mail user agent frontends</a>. And if you use Gmail or any of the other email systems though a web browser, <a href="http://getfiregpg.org/s/home" target="_blank">FireGPG</a> is just the ticket.</p>
<p>Setting up the software is a little bit of work, but you will probably be done in less time than it would take you to drive to Office Depot and buy a box of envelopes. Once you have the software installed, you can encrypt an email message faster than you can lick and seal an envelope.</p>
]]></content:encoded>
			<wfw:commentRss>http://cheerfulcurmudgeon.com/2009/06/19/nsa-illegally-collecting-us-citizens-email/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>It&#8217;s a Boy!</title>
		<link>http://cheerfulcurmudgeon.com/2009/05/20/its-a-boy/</link>
		<comments>http://cheerfulcurmudgeon.com/2009/05/20/its-a-boy/#comments</comments>
		<pubDate>Thu, 21 May 2009 01:30:26 +0000</pubDate>
		<dc:creator>Art Zemon</dc:creator>
				<category><![CDATA[Family]]></category>
		<category><![CDATA[Rants & Raves]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://cheerfulcurmudgeon.com/?p=881</guid>
		<description><![CDATA[Cindy and Geoff did a great job and produced Caedmon Geoffrey, a wonderful, healthy baby boy at 7:12pm on May 20. He&#8217;s 9 lbs 1 oz, 21 inches tall. His plumbing works so well that he peed on the doctor during delivery. I take that as a great omen!]]></description>
			<content:encoded><![CDATA[<p>Cindy and Geoff did a great job and produced Caedmon Geoffrey, a wonderful, healthy baby boy at 7:12pm on May 20. He&#8217;s 9 lbs 1 oz, 21 inches tall. His plumbing works so well that he peed on the doctor during delivery. I take that as a great omen!</p>
<p><a href="http://cheerfulcurmudgeon.com/wp-content/uploads/2009/05/2009-05-21-14-04-45-small.jpg"><img class="alignnone size-full wp-image-889" title="2009-05-21-14-04-45-small" src="http://cheerfulcurmudgeon.com/wp-content/uploads/2009/05/2009-05-21-14-04-45-small.jpg" alt="2009-05-21-14-04-45-small" width="480" height="316" /></a></p>
<p><a href="http://cheerfulcurmudgeon.com/wp-content/uploads/2009/05/2009-05-21-14-13-36-small.jpg"><img class="alignnone size-full wp-image-893" title="2009-05-21-14-13-36-small" src="http://cheerfulcurmudgeon.com/wp-content/uploads/2009/05/2009-05-21-14-13-36-small.jpg" alt="2009-05-21-14-13-36-small" width="480" height="359" /></a></p>
<p><a href="http://cheerfulcurmudgeon.com/wp-content/uploads/2009/05/2009-05-21-14-07-31-small.jpg"><img class="alignnone size-full wp-image-891" title="2009-05-21-14-07-31-small" src="http://cheerfulcurmudgeon.com/wp-content/uploads/2009/05/2009-05-21-14-07-31-small.jpg" alt="2009-05-21-14-07-31-small" width="359" height="480" /></a></p>
<p><a href="http://cheerfulcurmudgeon.com/wp-content/uploads/2009/05/2009-05-21-14-10-07-crop.jpg"><img class="alignnone size-full wp-image-892" title="2009-05-21-14-10-07-crop" src="http://cheerfulcurmudgeon.com/wp-content/uploads/2009/05/2009-05-21-14-10-07-crop.jpg" alt="2009-05-21-14-10-07-crop" width="480" height="453" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://cheerfulcurmudgeon.com/2009/05/20/its-a-boy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Programming Feeds the Mad Scientist</title>
		<link>http://cheerfulcurmudgeon.com/2009/05/04/programming-feeds-the-mad-scientist/</link>
		<comments>http://cheerfulcurmudgeon.com/2009/05/04/programming-feeds-the-mad-scientist/#comments</comments>
		<pubDate>Mon, 04 May 2009 12:49:36 +0000</pubDate>
		<dc:creator>Art Zemon</dc:creator>
				<category><![CDATA[Pyschology]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://cheerfulcurmudgeon.com/?p=865</guid>
		<description><![CDATA[I have been writing a new program, having a ball doing it, and it has brought to consciousness something which I have not thought about for years: There is a bit of Dr. Henry Frankenstein in me. I love to create things which do stuff autonomously and, when I create these things, bigger is definitely [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/File:Frankenstein13.jpg" target="_blank"><img class="alignleft size-full wp-image-866" title="Dr. Henry Frankenstein" src="http://cheerfulcurmudgeon.com/wp-content/uploads/2009/05/henryfrankenstein.jpg" alt="Dr. Henry Frankenstein" width="125" height="166" /></a> I have been writing a new program, having a ball doing it, and it has brought to consciousness something which I have not thought about for years: There is a bit of Dr. Henry Frankenstein in me. I love to create <em>things</em> which do stuff <em>autonomously</em> and, when I create these things, <em>bigger is definitely better</em>.</p>
<p>My current creation has lots of parts, including:</p>
<ol>
<li>A <a href="http://www.freebsd.org/copyright/daemon.html" target="_blank">daemon</a> (I love that word, all the more since daemon&#8217;s are useful and not evil at all) which runs all the time and wakes up once a minute to see if anything interesting has happened and decide whether it should <em>do</em> something.</li>
<li>A script which watches for people to click special links in email messages. It leaves a &#8220;note&#8221; for the daemon, telling it that a human being received the email and did something. Cool; my program is making humans do things!</li>
<li>A script which watches for secret messages sent from another program on another computer. This script also leaves notes for the daemon, telling it that the other computer is set up and running and ready to do a human being&#8217;s bidding.</li>
</ol>
<p>The daemon gets to do all sorts of fun things, including summoning new (virtual) computers into existance and turning them loose on the world. In the end, the daemon even gets to kill off the computers. The daemon spends real money (hopefully, this part does not get out of control!) with a real multi-national company.  And as the daemon works, it attracts the attention of people at <em>four</em> different companies, all of which are <em>very</em> interested in what this little beastie is doing.</p>
<p>Not bad for a creation which only exists in the virtual world inside a computer. If you see me walking around with a smug smile on my face, now you know why.</p>
]]></content:encoded>
			<wfw:commentRss>http://cheerfulcurmudgeon.com/2009/05/04/programming-feeds-the-mad-scientist/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Checking In, Avoiding Hidden Dependencies</title>
		<link>http://cheerfulcurmudgeon.com/2009/03/31/checking-in-avoiding-hidden-dependencies/</link>
		<comments>http://cheerfulcurmudgeon.com/2009/03/31/checking-in-avoiding-hidden-dependencies/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 15:18:36 +0000</pubDate>
		<dc:creator>Art Zemon</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Communicating]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://cheerfulcurmudgeon.com/?p=821</guid>
		<description><![CDATA[I woke up in a good mood this morning and then&#8230; Sometimes one piece of technology makes another, seemingly unrelated, piece of technology misbehave. It happened this morning at 12:15am CDT when an automated program that I run in Amazon EC2 failed to do its thing. The EC2 instances (that&#8217;s geek speak for &#8220;virtual machines&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>I woke up in a good mood this morning and then&#8230;</p>
<p>Sometimes one piece of technology makes another, seemingly unrelated, piece of technology misbehave. It happened this morning at 12:15am CDT when an automated program that I run in Amazon EC2 failed to do its thing. The EC2 instances (that&#8217;s geek speak for &#8220;virtual machines&#8221; which is geek speak for &#8220;computers which aren&#8217;t really there but act like they are&#8221;) started up but never got around to doing any useful work. Six hours later, all of the instances were still running; they should have finished their work and died off in about two hours. I killed all of the instances, grumbling because I had paid for six hours of time and gotten nothing for it and did not even know why.</p>
<p>The underlying problem, it turned out, was a new SSL certificate that we had installed on our e-commerce store yesterday. One of the first things that each EC2 instance does is to fetch the latest version of the software from a Subversion server, which, coincidentally, is on the same machine as our e-commerce store. With a new SSL certificate on the server, each instance was waiting for a human being to say that the new certificate was OK. Inconveniently, the human being was sound asleep.</p>
<p>Who would have thought that renewing the SSL certificate for our on-line store would break an unrelated Amazon EC2-based application? Hidden dependencies suck.</p>
<p>Now I am in a bad mood, grumbling because I did not get my relaxed waking-up time after my shower, sitting next to my wife, drinking coffee, cruising blogs. Instead I dove directly from the shower into debugging and it left me feeling edgy.</p>
<p>We have a mechanism at Hen&#8217;s Teeth Network which works pretty well to keep emotional baggage like this from blindsiding our coworkers: we check-in every morning. It is a chance for me to say, &#8220;I&#8217;m in a bad mood. Better watch out; I may bite.&#8221; Better forewarned than not.</p>
<p><em>I am finishing this post a couple of hours later, after checking in with my coworkers. The check-in worked beautifully, giving me a chance to blow off some of the steam. I am more relaxed and I got some support from sympathetic ears. We even laughed a bit about the situation.</em></p>
<p><em>We missed the hidden dependency between the e-commerce store&#8217;s SSL certificate and the EC2 application and were caught unawares. Fortunately, we did not miss the hidden dependency between my early morning upset and my interactions with my co-workers. Knowing about the dependency and having tools at hand and in daily use for handling the dependency, proved a good thing for all of us.<br />
</em></p>
]]></content:encoded>
			<wfw:commentRss>http://cheerfulcurmudgeon.com/2009/03/31/checking-in-avoiding-hidden-dependencies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Step 2: Google Chrome to Replace Microsoft Windows, Apple OSX, and Linux</title>
		<link>http://cheerfulcurmudgeon.com/2008/12/06/step-2-google-chrome-to-replace-microsoft-windows-apple-osx-and-linux/</link>
		<comments>http://cheerfulcurmudgeon.com/2008/12/06/step-2-google-chrome-to-replace-microsoft-windows-apple-osx-and-linux/#comments</comments>
		<pubDate>Sat, 06 Dec 2008 14:01:17 +0000</pubDate>
		<dc:creator>Art Zemon</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://cheerfulcurmudgeon.com/?p=722</guid>
		<description><![CDATA[Do you remember when I predicted that Google Chrome would take over the world replace Microsoft Windows, Apple OSX, and Linux? Here is the next step, to be released for CES which begins January 8, 2009. If all you want from your computer is to read your email (Gmail) and surf the web and use [...]]]></description>
			<content:encoded><![CDATA[<p>Do you remember when I predicted that <a href="/2008/09/02/google-chrome-to-replace-microsoft-windows-apple-osx-and-linux/">Google Chrome would <del datetime="2008-12-06T13:46:56+00:00">take over the world</del> replace Microsoft Windows, Apple OSX, and Linux</a>? Here is the next step, to be released for CES which begins January 8, 2009.</p>
<p>If all you want from your computer is to read your email (Gmail) and surf the web and use the other applications that Google provides, it is just seven seconds away. No, that is not a typo. In less time than you have spent reading this article, you will be able to boot your computer and be doing useful stuff.</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/9wI6Tr0Tz5U&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/9wI6Tr0Tz5U&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p>Of course, you could use this system for web-based applications other than Google&#8217;s, but how many people will bother. I wonder how long it will be until you can get a free, ad-supported computer with this operating system pre-installed.</p>
]]></content:encoded>
			<wfw:commentRss>http://cheerfulcurmudgeon.com/2008/12/06/step-2-google-chrome-to-replace-microsoft-windows-apple-osx-and-linux/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>What if the Matrix Ran on Windows?</title>
		<link>http://cheerfulcurmudgeon.com/2008/11/10/what-if-the-matrix-ran-on-windows/</link>
		<comments>http://cheerfulcurmudgeon.com/2008/11/10/what-if-the-matrix-ran-on-windows/#comments</comments>
		<pubDate>Tue, 11 Nov 2008 04:21:20 +0000</pubDate>
		<dc:creator>Art Zemon</dc:creator>
				<category><![CDATA[Fun]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://cheerfulcurmudgeon.com/?p=675</guid>
		<description><![CDATA[See more funny videos and funny pictures at CollegeHumor.]]></description>
			<content:encoded><![CDATA[<p><object type="application/x-shockwave-flash" data="http://www.collegehumor.com/moogaloop/moogaloop.swf?clip_id=1886349&#038;fullscreen=1" width="400" height="225" ><param name="allowfullscreen" value="true" /><param name="AllowScriptAccess" value="true" /><param name="movie" quality="best" value="http://www.collegehumor.com/moogaloop/moogaloop.swf?clip_id=1886349&#038;fullscreen=1" /></object>
<div style="padding:5px 0; text-align:center; width:640px;">See more <a href="http://www.collegehumor.com/videos">funny videos</a> and <a href="http://www.collegehumor.com/pictures">funny pictures</a> at <a href="http://www.collegehumor.com/">CollegeHumor</a>.</div>
]]></content:encoded>
			<wfw:commentRss>http://cheerfulcurmudgeon.com/2008/11/10/what-if-the-matrix-ran-on-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
