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

<channel>
	<title>Richard K Miller &#187; Tech</title>
	<atom:link href="http://richardkmiller.com/category/tech/feed" rel="self" type="application/rss+xml" />
	<link>http://richardkmiller.com</link>
	<description></description>
	<lastBuildDate>Wed, 01 Feb 2012 15:26:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>How to Password Protect Redmine with Apache, mod_perl, and Redmine.pm</title>
		<link>http://richardkmiller.com/932/how-to-password-protect-redmine-with-apache-mod_perl-redmine-pm</link>
		<comments>http://richardkmiller.com/932/how-to-password-protect-redmine-with-apache-mod_perl-redmine-pm#comments</comments>
		<pubDate>Sun, 13 Nov 2011 01:16:01 +0000</pubDate>
		<dc:creator>Richard K Miller</dc:creator>
				<category><![CDATA[Main]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://richardkmiller.com/?p=932</guid>
		<description><![CDATA[Today I needed to password-protect a Redmine installation. I&#8217;ve typically used mod_auth_mysql for similar projects, but Redmine uses a salted password format that&#8217;s incompatible with mod_auth_mysql. So, I turned to Apache/Perl authentication, a first for me (I rarely touch Perl) &#8230; <a href="http://richardkmiller.com/932/how-to-password-protect-redmine-with-apache-mod_perl-redmine-pm">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class='microid-36009b2faccc89c3eb8fe905eb5d37cd1cffcf97'><p>Today I needed to password-protect a <a href="http://www.redmine.org/">Redmine</a> installation. I&#8217;ve typically used mod_auth_mysql for similar projects, but Redmine uses a salted password format that&#8217;s incompatible with mod_auth_mysql. So, I turned to Apache/Perl authentication, a first for me (I rarely touch Perl) and was able to make it work.</p>
<ol>
<li>Install mod_perl, and the DBI, MySQL, and Digest (SHA1) Perl modules.
<pre class="brush: bash; title: ;">
$ apt-get install libapache-dbi-perl libapache2-mod-perl2 libdbd-mysql-perl libdigest-sha1-perl
</pre>
</li>
<li>Copy Redmine.pm to the appropriate Perl location.
<pre class="brush: bash; title: ;">
$ cd /path/to/redmine
$ mkdir -p /usr/lib/perl5/Apache/Authn
$ cp extra/svn/Redmine.pm /usr/lib/perl5/Apache/Authn/
</pre>
</li>
<li>Perhaps I&#8217;m not using Redmine&#8217;s projects/members/permissions correctly, but I had to patch Redmine.pm to get it to work for me. I greatly simplified the SQL statement used to authenticate a user. There&#8217;s no sense of permissions; it&#8217;s simply a yes/no for authenticated users.
<pre class="brush: diff; title: ;">
--- Redmine.pm	2011-11-12 17:33:10.000000000 -0700
+++ Redmine.richardkmiller.pm	2011-11-12 17:37:26.000000000 -0700
@@ -148,16 +148,11 @@
   my ($self, $parms, $arg) = @_;
   $self-&gt;{RedmineDSN} = $arg;
   my $query = &quot;SELECT
-                 hashed_password, salt, auth_source_id, permissions
-              FROM members, projects, users, roles, member_roles
+                 hashed_password, salt
+              FROM users
               WHERE
-                projects.id=members.project_id
-                AND member_roles.member_id=members.id
-                AND users.id=members.user_id
-                AND roles.id=member_roles.role_id
-                AND users.status=1
-                AND login=?
-                AND identifier=? &quot;;
+                    users.status=1
+                AND login=?&quot;;
   $self-&gt;{RedmineQuery} = trim($query);
 }

@@ -336,11 +331,12 @@
   }
   my $query = $cfg-&gt;{RedmineQuery};
   my $sth = $dbh-&gt;prepare($query);
-  $sth-&gt;execute($redmine_user, $project_id);
+  $sth-&gt;execute($redmine_user);

   my $ret;
-  while (my ($hashed_password, $salt, $auth_source_id, $permissions) = $sth-&gt;fetchrow_array) {
-
+  while (my ($hashed_password, $salt) = $sth-&gt;fetchrow_array) {
+      my $permissions = &quot;:commit_access&quot;;
+      my $auth_source_id = 0;
       unless ($auth_source_id) {
 	  			my $method = $r-&gt;method;
           my $salted_password = Digest::SHA1::sha1_hex($salt.$pass_digest);
</pre>
</li>
<li>Configure and restart Apache.
<pre class="brush: perl; title: ;">
&lt;virtualhost *:80&gt;
    ServerName example.com
    DocumentRoot &quot;/var/www/sites/example.com/public&quot;
    RailsEnv production

    PerlLoadModule Apache::Authn::Redmine

    &lt;directory &quot;/var/www/sites/example.com/public&quot;&gt;
        AuthType basic
        AuthName &quot;Private Area&quot;
        Require valid-user
        PerlAccessHandler Apache::Authn::Redmine::access_handler
        PerlAuthenHandler Apache::Authn::Redmine::authen_handler
        RedmineDSN &quot;DBI:mysql:database=my_database;host=localhost&quot;
        RedmineDbUser my_db_user
        RedmineDbPass my_db_password
    &lt;/directory&gt;
&lt;/virtualhost&gt;
</pre>
</li>
</ol>
<p>By the way, I&#8217;m running Ubuntu 11.10 (oneiric), Apache 2.2, MySQL 5.1, and Redmine 1.2.2.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://richardkmiller.com/932/how-to-password-protect-redmine-with-apache-mod_perl-redmine-pm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Script to enable/disable SOCKS proxy on Mac OS X</title>
		<link>http://richardkmiller.com/925/script-to-enabledisable-socks-proxy-on-mac-os-x</link>
		<comments>http://richardkmiller.com/925/script-to-enabledisable-socks-proxy-on-mac-os-x#comments</comments>
		<pubDate>Thu, 17 Feb 2011 22:19:31 +0000</pubDate>
		<dc:creator>Richard K Miller</dc:creator>
				<category><![CDATA[Main]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://richardkmiller.com/?p=925</guid>
		<description><![CDATA[I&#8217;m working in a Starbucks today and, as usual on the road, used SSH and SOCKS to browse the Internet securely, but today I decided to take it a step further and automate the process with a shell script. Here&#8217;s &#8230; <a href="http://richardkmiller.com/925/script-to-enabledisable-socks-proxy-on-mac-os-x">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class='microid-a558ef71801f92db73a8311241816f7f72d7a0f6'><p>I&#8217;m working in a Starbucks today and, as usual on the road, used <a href="http://richardkmiller.com/337/how-to-browse-securely-with-ssh-and-a-socks-proxy">SSH and SOCKS to browse the Internet securely</a>, but today I decided to take it a step further and automate the process with a shell script. Here&#8217;s the script, for what it&#8217;s worth:</p>
<pre class="brush: bash; title: ;">
#!/bin/bash
disable_proxy()
{
        networksetup -setsocksfirewallproxystate Wi-Fi off
        networksetup -setsocksfirewallproxystate Ethernet off
        echo &quot;SOCKS proxy disabled.&quot;
}
trap disable_proxy INT

networksetup -setsocksfirewallproxy Wi-Fi 127.0.0.1 9999
networksetup -setsocksfirewallproxy Ethernet 127.0.0.1 9999
networksetup -setsocksfirewallproxystate Wi-Fi on
networksetup -setsocksfirewallproxystate Ethernet on
echo &quot;SOCKS proxy enabled.&quot;
echo &quot;Tunneling...&quot;
ssh -ND 9999 MYHOST.macminicolo.net
</pre>
<p>Instructions:</p>
<ol>
<li>Save this to a file. I saved it to &#8220;/Users/richard/bin/ssh_tunnel&#8221;.</li>
<li>Make it executable and run it.
<pre>
$ chmod a+x /Users/richard/bin/ssh_tunnel
$ /Users/richard/bin/ssh_tunnel
</pre>
</li>
<li>It creates an SSH tunnel to my dedicated server at <a href="http://macminicolo.net">macminicolo.net</a> and routes Internet traffic through that server.</li>
<li>Hit Control-C to quit. The proxy is disabled. No need to fiddle with Network Preferences manually.</li>
</ol>
<p>UPDATE March 18, 2011: I haven&#8217;t tried it, but <a href="http://chetansurpur.com/projects/sidestep/">Sidestep</a> appears to be a free Mac OS X app that will enable SSH tunneling automatically when you connect to an insecure network.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://richardkmiller.com/925/script-to-enabledisable-socks-proxy-on-mac-os-x/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Script to enable/disable DMZ on Linksys and Verizon routers</title>
		<link>http://richardkmiller.com/879/script-to-enable-disable-dmz-on-linksys-and-verizon-routers</link>
		<comments>http://richardkmiller.com/879/script-to-enable-disable-dmz-on-linksys-and-verizon-routers#comments</comments>
		<pubDate>Mon, 05 Jul 2010 22:49:28 +0000</pubDate>
		<dc:creator>Richard K Miller</dc:creator>
				<category><![CDATA[Facebook]]></category>
		<category><![CDATA[FamilyLink.com]]></category>
		<category><![CDATA[How To]]></category>
		<category><![CDATA[Main]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[dmz]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[linksys]]></category>
		<category><![CDATA[router]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[verizon]]></category>

		<guid isPermaLink="false">http://richardkmiller.com/?p=879</guid>
		<description><![CDATA[Your home Internet router gives you some protection against direct attacks on your computer by keeping your home network safely encapsulated. Each of your home computers can access the Internet (this is called NAT), but no outsider can access your &#8230; <a href="http://richardkmiller.com/879/script-to-enable-disable-dmz-on-linksys-and-verizon-routers">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class='microid-213dec2bb13a80e3975bcc3aee3d230c3f6b044f'><p>Your home Internet router gives you some protection against direct attacks on your computer by keeping your home network safely encapsulated. Each of your home computers can access the Internet (this is called NAT), but no outsider can access your computers directly. Outsiders only see the router. However, sometimes you want your computer to be &#8220;fully&#8221; online. Enter the &#8220;DMZ&#8221; feature of your router. <strong>Your router&#8217;s DMZ allows one of your computers to be fully exposed to the Internet (for better or worse).</strong></p>
<p>Reasons to enable your DMZ:</p>
<ul>
<li>Access your files while away from home.</li>
<li>Serve web pages from your computer.</li>
<li>Make BitTorrent transfers faster. BitTorrent transfers are usually faster when your computer is directly exposed to the Internet.</li>
</ul>
<p>For my work at FamilyLink.com, I develop directly on my local machine. While working on our Facebook application, I need to allow Facebook servers to directly access my machine. (When you use a Facebook app, you&#8217;re accessing Facebook&#8217;s servers and Facebook servers are, in turn, accessing the developer&#8217;s server via a callback URL. While working on our Facebook app, Facebook directly accesses my local machine.) This requires me to open my machine to the DMZ.</p>
<p>Reasons not to enable your DMZ:</p>
<ul>
<li>Your computer is more likely to be hacked</li>
<li>Your private data is more likely to be accessed</li>
</ul>
<p>If you enable your DMZ, know which services are enabled on your machine and which files and data are being shared. There may be files you&#8217;re comfortable sharing on your local network that you wouldn&#8217;t want to share with the world. Only enable the DMZ as long as necessary.</p>
<p>Enabling the DMZ can be a pain &#8212; logging into your router and navigating to the correct setting &#8212; so I wrote the following Ruby scripts to make it easy. The first worked with the Linksys router I had. (I believe it was a WRT54G.) To use, fill in your router&#8217;s IP address and password, and your computer&#8217;s hardware address, then type &#8220;linksys_dmz.rb on&#8221; or &#8220;linksys_dmz.rb off&#8221; at the command-line. The script looks up your computer&#8217;s hardware address in the table of local IP addresses so the IP address can safely change from time to time.</p>
<pre class="brush: ruby; title: ;">
#!/usr/bin/env ruby
# linksys_dmz.rb

router = '10.1.1.1'
user = 'admin'
pass = 'your_password'
hardware_address = '00:23:6C:00:00:00'

leases = `curl -su #{user}:#{pass} http://#{router}/DHCPTable.asp`
leases.scan(%r{'([^']+)', hardware_address}) do |m|
  ip_address = m[0].strip.to_s
  last_digit = ip_address.split('.').last
  if $*[0] == 'open' || $*[0] == 'on'
    post_values = &quot;submit_button=DMZ&amp;change_action=&amp;action=Apply&amp;dmz_enable=1&amp;dmz_ipaddr=#{last_digit}&quot;
    print &quot;Opening DMZ to #{ip_address}\n\n&quot;
  else
    post_values = &quot;submit_button=DMZ&amp;change_action=&amp;action=Apply&amp;dmz_enable=0&quot;
    print &quot;Closing DMZ\n\n&quot;
  end
  `curl -su #{user}:#{pass} -e http://#{router}/DMZ.asp -d '#{post_values}' http://#{router}/apply.cgi`
end
</pre>
<p>Last year I switched to Verizon FIOS, which came with its own wireless router, so I had to write a new script. Again, fill in the password, then type &#8220;verizon_dmz.rb on&#8221; or &#8220;verizon_dmz.rb off&#8221; in Terminal. (This script assumes a 10.1.1.* network. Change it to 192.168.1.* if that&#8217;s what you have.)</p>
<p>As a side note, the Verizon router was a bit of beast to automate. It uses a hashed signature to try to enforce JavaScript-enabled browsers. Writing this script required using TamperData, Charles Proxy, and a lot of trial and error to discover which POST data were necessary.</p>
<p>I use this script to open the DMZ before working on our Facebook app, then I close it when I&#8217;m done for the day. Eventually, it&#8217;d be nice to find a way to enable the DMZ remotely &#8212; maybe via email or something.</p>
<pre class="brush: ruby; title: ;">
#!/usr/bin/env ruby
# verizon_dmz.rb

require 'rubygems'
require 'mechanize'
require 'digest/md5'

user = 'admin'
pass = 'your_password'

localhost = `ifconfig`.scan(/inet (\d+\.\d+\.\d+\.\d+).*broadcast 10.1.1.255/).join
router    = localhost.gsub(/\d+$/,'1')

begin
    agent = Mechanize.new
    page = agent.get(&quot;http://#{router}:81&quot;)
rescue Exception
    abort &quot;Unable to connect to Verizon Router! Check the IP address.&quot;
end

form = page.forms[0]
auth_key = form.fields.find {|f| f.name == 'auth_key'}.value
form.fields.find {|f| f.name == 'user_name'}.value = user
form.fields.find {|f| f.name == 'md5_pass'}.value = Digest::MD5.hexdigest(pass + auth_key)
form.fields.find {|f| f.name == 'mimic_button_field'}.value = 'submit_button_login_submit%3A+..'
form.method = &quot;POST&quot;
form.submit

post = {
    'dmz_host_cb_watermark' =&gt; '1',
    'dmz_host_ip0' =&gt; localhost.split('.')[0],
    'dmz_host_ip1' =&gt; localhost.split('.')[1],
    'dmz_host_ip2' =&gt; localhost.split('.')[2],
    'dmz_host_ip3' =&gt; localhost.split('.')[3],
    'active_page'  =&gt; '9013',
    'mimic_button_field' =&gt; 'submit_button_login_submit%3A+..',
}

if $*[0] == 'open' || $*[0] == 'on'
   post['dmz_host_cb'] = '1'
   puts &quot;Opening DMZ to #{localhost}&quot;
else
    puts &quot;Closing DMZ&quot;
end

agent.post('/index.cgi', post)
</pre>
</div>]]></content:encoded>
			<wfw:commentRss>http://richardkmiller.com/879/script-to-enable-disable-dmz-on-linksys-and-verizon-routers/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>FamilyLink.com + Kynetx + WordPress</title>
		<link>http://richardkmiller.com/873/familylink-com-kynetx-wordpress</link>
		<comments>http://richardkmiller.com/873/familylink-com-kynetx-wordpress#comments</comments>
		<pubDate>Tue, 16 Feb 2010 02:00:31 +0000</pubDate>
		<dc:creator>Richard K Miller</dc:creator>
				<category><![CDATA[Blogging]]></category>
		<category><![CDATA[Family]]></category>
		<category><![CDATA[FamilyLink.com]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://richardkmiller.com/?p=873</guid>
		<description><![CDATA[Following up on my previous Kynetx post, here&#8217;s a demo of how FamilyLink.com and Kynetx could reveal your relatives on WordPress blogs:]]></description>
			<content:encoded><![CDATA[<div class='microid-cb298249cca6f6c04987883b491de1e092fa9fe0'><p>Following up on <a href="http://richardkmiller.com/860/familylink-com-kynetx-how-websites-could-be-better-with-your-family">my previous Kynetx post</a>, here&#8217;s a demo of how FamilyLink.com and Kynetx could reveal your relatives on WordPress blogs:</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/uP2tvzanx5Q&#038;hl=en_US&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/uP2tvzanx5Q&#038;hl=en_US&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://richardkmiller.com/873/familylink-com-kynetx-wordpress/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>FamilyLink.com + Kynetx: How websites could be better with your family</title>
		<link>http://richardkmiller.com/860/familylink-com-kynetx-how-websites-could-be-better-with-your-family</link>
		<comments>http://richardkmiller.com/860/familylink-com-kynetx-how-websites-could-be-better-with-your-family#comments</comments>
		<pubDate>Thu, 07 Jan 2010 20:54:37 +0000</pubDate>
		<dc:creator>Richard K Miller</dc:creator>
				<category><![CDATA[Family]]></category>
		<category><![CDATA[FamilyLink.com]]></category>
		<category><![CDATA[Main]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://richardkmiller.com/?p=860</guid>
		<description><![CDATA[I&#8217;ve been playing around with Kynetx.com technology. I think it has a lot of cool potential for helping FamilyLink.com users see who their relatives are across multiple websites. For example, What if you could see your FamilyLink.com relatives directly in &#8230; <a href="http://richardkmiller.com/860/familylink-com-kynetx-how-websites-could-be-better-with-your-family">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class='microid-c328364b4ed2bc0cbbde125a8adbfa04eb597c0d'><p>I&#8217;ve been playing around with <a href="http://kynetx.com/">Kynetx.com</a> technology. I think it has a lot of cool potential for helping FamilyLink.com users see who their relatives are across multiple websites.</p>
<p>For example,</p>
<ul>
<li>What if you could see your FamilyLink.com relatives directly in Facebook?</li>
<li>If you knew which LinkedIn users were your relatives, would you be more likely to do business?</li>
<li>If you knew which Twitter users were your relatives, would you be more likely to follow them?</li>
<li>If you discovered that a comment on a political news story with which you strongly disagreed was from a relative, would you be more careful how you responded?</li>
</ul>
<p>Here&#8217;s a demo video:<br />
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/skDe5WGNbHg&#038;hl=en_US&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/skDe5WGNbHg&#038;hl=en_US&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://richardkmiller.com/860/familylink-com-kynetx-how-websites-could-be-better-with-your-family/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Reminiscing about Provo411.com and Scraping the Course Catalog</title>
		<link>http://richardkmiller.com/780/reminiscing-about-provo411-com-and-scraping-the-course-catalog</link>
		<comments>http://richardkmiller.com/780/reminiscing-about-provo411-com-and-scraping-the-course-catalog#comments</comments>
		<pubDate>Thu, 08 Oct 2009 17:58:11 +0000</pubDate>
		<dc:creator>Richard K Miller</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[BYU]]></category>
		<category><![CDATA[Entrepreneurship]]></category>
		<category><![CDATA[Main]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://richardkmiller.com/?p=780</guid>
		<description><![CDATA[One of my first web development projects and biz partnerships with Brian Stucki was Provo411.com. We were roommates at BYU and conceived of a website where students could share events &#8212; parties, concerts, football games, etc. We were already in &#8230; <a href="http://richardkmiller.com/780/reminiscing-about-provo411-com-and-scraping-the-course-catalog">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class='microid-094c99b227bd0f07e51e726ad993de96274495c3'><p>One of my first web development projects and biz partnerships with <a href="http://www.brianstucki.com/blog/">Brian Stucki</a> was <a href="http://www.provo411.com/">Provo411.com</a>. We were roommates at BYU and conceived of a website where students could share events &#8212; parties, concerts, football games, etc. We were already in our beds for the night when the idea came, but we couldn&#8217;t go to sleep before buying the domain. I think it was the first domain I ever bought. It was September 2002.</p>
<p>I developed a calendar in PHP and wrote a few scripts to scrape <a href="http://byucougars.com/">byucougars.com</a> and retrieve the sports schedules. I also developed a <a href="http://en.wikipedia.org/wiki/Wireless_Markup_Language">WML</a> app so Brian and I could add events to the calendar from our pre-iPhone mobile phones. I recall being at a party in south Provo, in a former dental office, and using my Nextel phone to add the party to Provo411. If you go back far enough, you can see <a href="http://www.provo411.com/2003/10">events on the calendar</a>. My brother Alan did the artwork.</p>

<a href='http://richardkmiller.com/780/reminiscing-about-provo411-com-and-scraping-the-course-catalog/byu' title='BYU'><img width="30" height="30" src="http://richardkmiller.com/wp-content/uploads/2009/10/BYU.jpg" class="attachment-thumbnail" alt="BYU" title="BYU" /></a>
<a href='http://richardkmiller.com/780/reminiscing-about-provo411-com-and-scraping-the-course-catalog/concert' title='Concert'><img width="30" height="30" src="http://richardkmiller.com/wp-content/uploads/2009/10/Concert.jpg" class="attachment-thumbnail" alt="Concert" title="Concert" /></a>
<a href='http://richardkmiller.com/780/reminiscing-about-provo411-com-and-scraping-the-course-catalog/dance' title='Dance'><img width="30" height="30" src="http://richardkmiller.com/wp-content/uploads/2009/10/Dance.jpg" class="attachment-thumbnail" alt="Dance" title="Dance" /></a>
<a href='http://richardkmiller.com/780/reminiscing-about-provo411-com-and-scraping-the-course-catalog/football' title='Football'><img width="30" height="30" src="http://richardkmiller.com/wp-content/uploads/2009/10/Football.jpg" class="attachment-thumbnail" alt="Football" title="Football" /></a>
<a href='http://richardkmiller.com/780/reminiscing-about-provo411-com-and-scraping-the-course-catalog/live_band' title='Live_Band'><img width="30" height="30" src="http://richardkmiller.com/wp-content/uploads/2009/10/Live_Band.jpg" class="attachment-thumbnail" alt="Live_Band" title="Live_Band" /></a>
<a href='http://richardkmiller.com/780/reminiscing-about-provo411-com-and-scraping-the-course-catalog/meal' title='Meal'><img width="30" height="30" src="http://richardkmiller.com/wp-content/uploads/2009/10/Meal.jpg" class="attachment-thumbnail" alt="Meal" title="Meal" /></a>
<a href='http://richardkmiller.com/780/reminiscing-about-provo411-com-and-scraping-the-course-catalog/soccer' title='Soccer'><img width="30" height="30" src="http://richardkmiller.com/wp-content/uploads/2009/10/Soccer.jpg" class="attachment-thumbnail" alt="Soccer" title="Soccer" /></a>
<a href='http://richardkmiller.com/780/reminiscing-about-provo411-com-and-scraping-the-course-catalog/talk' title='Talk'><img width="30" height="30" src="http://richardkmiller.com/wp-content/uploads/2009/10/Talk.jpg" class="attachment-thumbnail" alt="Talk" title="Talk" /></a>
<a href='http://richardkmiller.com/780/reminiscing-about-provo411-com-and-scraping-the-course-catalog/theater' title='Theater'><img width="30" height="30" src="http://richardkmiller.com/wp-content/uploads/2009/10/Theater.jpg" class="attachment-thumbnail" alt="Theater" title="Theater" /></a>
<a href='http://richardkmiller.com/780/reminiscing-about-provo411-com-and-scraping-the-course-catalog/volleyball' title='Volleyball'><img width="30" height="30" src="http://richardkmiller.com/wp-content/uploads/2009/10/Volleyball.jpg" class="attachment-thumbnail" alt="Volleyball" title="Volleyball" /></a>

<p>I always wanted Provo411.com to have a course schedule alert system. Perhaps students would pay $3 to receive an email or SMS alert when hard-to-get classes had an opening. It shouldn&#8217;t have been hard technically, but the <a href="http://saas.byu.edu/classSchedule/schedule.php">publicly available course catalog</a> isn&#8217;t updated in real-time. I could have scraped the authenticated course catalog on Route Y, but BYU might have objected and it&#8217;d be a fragile business model.</p>
<p>My brother Michael recently came home from <a href="http://www.youtube.com/watch?v=TbwT4j-mLdw">his mission</a> and started school at <a href="http://www.csn.edu/">CSN</a>. The business classes he wanted were full, so I put the old &#8220;course schedule alert&#8221; idea to the test with some new tools &#8212; Ruby and Mac OS X&#8217;s speech. Here&#8217;s what I came up with:</p>
<pre class="brush: ruby; title: ;">
#!/usr/bin/env ruby

# a list of course call numbers to check
call_numbers = %w{ 46405 46407 46409 46411 46415 46413 53252 53254 53256 53258 53260 53262 53268 53270 53272 53274 46423 46435 53276 46443 }

# auth_token obtained via Firefox+TamperData while my brother logged into CSN
auth_token = &quot;123456789012345&quot;

say &quot;Checking&quot;

call_numbers.uniq.sort.each do |call_number|
    c = `curl -si -d CONVTOKEN=#{auth_token} -d AUDITT=N -d CALLT=#{call_number} -d CONTINUE=Continue &quot;https://bighorn.nevada.edu/sis_csn/XSMBWEBM/SIVRE04.STR&quot;`
    print &quot;Call number #{call_number}: &quot;
    if (c =~ /&lt;p class=&quot;p5&quot;&gt;([^&lt; ]+)&lt;br\/&gt;/m)
        if $1.strip.empty?
            puts &quot;May have openings\n&quot;
            3.times {say &quot;Michael, class number #{call_number} may be open!&quot;}
        else
            puts &quot;#{$1.strip}\n&quot;
        end
    else
        puts &quot;could not find message&quot;
        say &quot;Help. I cannot access the C S N website.&quot;
        return
    end
    sleep 5
end

# Ouput an audible message via Mac OS X's speech function
def say(message)
    `say &quot;#{message}&quot;`
end
</pre>
<p>We set this to run every 15 minutes on the living room iMac, and we turned up the volume. Every 15 minutes we could hear &#8220;Checking&#8221; from the computer. A few hours later we heard the script announce that a class had opened up. Michael, I&#8217;m still waiting for my $3.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://richardkmiller.com/780/reminiscing-about-provo411-com-and-scraping-the-course-catalog/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>iPhone tip: Use a Silent Ringtone to Screen Calls in Your Sleep</title>
		<link>http://richardkmiller.com/702/iphone-tip-use-a-silent-ringtone-to-screen-calls-in-your-sleep</link>
		<comments>http://richardkmiller.com/702/iphone-tip-use-a-silent-ringtone-to-screen-calls-in-your-sleep#comments</comments>
		<pubDate>Fri, 07 Aug 2009 04:33:30 +0000</pubDate>
		<dc:creator>Richard K Miller</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Communication]]></category>
		<category><![CDATA[Getting Things Done]]></category>
		<category><![CDATA[How To]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Main]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://richardkmiller.com/?p=702</guid>
		<description><![CDATA[Have you ever wished your iPhone would ring only when certain people call? Here&#8217;s how to do it: Download the &#8220;Silence&#8221; ringtone here: silence.m4r Copy this file into the Ringtones section of your iTunes. (Click to enlarge.) Sync your iPhone &#8230; <a href="http://richardkmiller.com/702/iphone-tip-use-a-silent-ringtone-to-screen-calls-in-your-sleep">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class='microid-77038d20900c5f596e02c0e0978d89896b5387ee'><p>Have you ever wished your iPhone would ring only when <em>certain</em> people call? Here&#8217;s how to do it:</p>
<ol>
<li>Download the &#8220;Silence&#8221; ringtone here: <a href="http://richardkmiller.com/wp-content/uploads/2009/08/silence_ringtone.php">silence.m4r</a></li>
<li>Copy this file into the Ringtones section of your iTunes. (Click to enlarge.)<br />
<br />
<a href="http://richardkmiller.com/wp-content/uploads/2009/08/adding_ringtone_to_itunes.png" rel="lightbox[702]"><img src="http://richardkmiller.com/wp-content/uploads/2009/08/adding_ringtone_to_itunes-300x192.png" alt="adding_ringtone_to_itunes" title="adding_ringtone_to_itunes" width="300" height="192" class="alignnone size-medium wp-image-715" /></a>
</li>
<li>Sync your iPhone with iTunes to load the ringtone.</li>
<li>On your iPhone, change your ringtone to &#8220;Silence&#8221; (under <em>Settings</em> -> <em>Sounds</em> -> <em>Ringtone</em>). You&#8217;ll no longer hear your phone calls.<br />
<br />
<a href="http://richardkmiller.com/wp-content/uploads/2009/08/2_iphone_silence_ringtone.png" rel="lightbox[702]"><img src="http://richardkmiller.com/wp-content/uploads/2009/08/2_iphone_silence_ringtone-200x300.png" alt="2_iphone_silence_ringtone" title="2_iphone_silence_ringtone" width="200" height="300" class="alignnone size-medium wp-image-709" /></a>
</li>
<li>For each person whose calls you still want to hear, change his or her Custom Ringtone to something audible: Click the name in your contact list, choose <em>Ringtone</em>, then choose something besides <em>Default</em><br />
<br />
<a href="http://richardkmiller.com/wp-content/uploads/2009/08/3_iphone_important_caller.png" rel="lightbox[702]"><img src="http://richardkmiller.com/wp-content/uploads/2009/08/3_iphone_important_caller-200x300.png" alt="3_iphone_important_caller" title="3_iphone_important_caller" width="200" height="300" class="alignnone size-medium wp-image-710" /></a> <a href="http://richardkmiller.com/wp-content/uploads/2009/08/4_iphone_audible_ringtone.png" rel="lightbox[702]"><img src="http://richardkmiller.com/wp-content/uploads/2009/08/4_iphone_audible_ringtone-200x300.png" alt="4_iphone_audible_ringtone" title="4_iphone_audible_ringtone" width="200" height="300" class="alignnone size-medium wp-image-711" /></a>
</li>
</ol>
<p>Now you can screen calls in your sleep. Because Sunday afternoons are for napping.</p>
<p>UPDATE (Apr 14, 2011): I haven&#8217;t used it, but <a href="http://mrnumber.com/">MrNumber.com</a> appears to be an interesting service for identifying phone numbers belonging to telemarketers and blocking them.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://richardkmiller.com/702/iphone-tip-use-a-silent-ringtone-to-screen-calls-in-your-sleep/feed</wfw:commentRss>
		<slash:comments>230</slash:comments>
		</item>
		<item>
		<title>3 Uses for iPhone Screenshots</title>
		<link>http://richardkmiller.com/676/3-uses-for-iphone-screenshots</link>
		<comments>http://richardkmiller.com/676/3-uses-for-iphone-screenshots#comments</comments>
		<pubDate>Wed, 24 Jun 2009 06:31:33 +0000</pubDate>
		<dc:creator>Richard K Miller</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Getting Things Done]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Main]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://richardkmiller.com/?p=676</guid>
		<description><![CDATA[For all the iPhone users out there: You probably know you can take a snapshot of whatever you see on your screen: Briefly press the top and front buttons at the same time. The screen will flash white and you&#8217;ll &#8230; <a href="http://richardkmiller.com/676/3-uses-for-iphone-screenshots">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class='microid-8fc2c9a90eb500aa078b5f8531e06b1e12527c4b'><p>For all the iPhone users out there: You probably know you can take a snapshot of whatever you see on your screen:</p>
<ol>
<li>Briefly press the top and front buttons at the same time.</li>
<li>The screen will flash white and you&#8217;ll hear a &#8220;snapshot&#8221; sound.</li>
<li>A picture of your screen is now in your iPhone &#8220;Photos&#8221;.</li>
</ol>
<p>I&#8217;ve found it extremely helpful to make screenshots, and I do it all the time. Here are a few reasons:</p>
<h3>Remember an Interesting Part of a Podcast</h3>
<p>If I&#8217;m driving and hear something I like in a podcast, I make a quick screenshot of the playback screen. When I get back to my computer, I can return to that spot in the podcast and take notes.</p>
<p><a href="http://richardkmiller.com/wp-content/uploads/2009/06/iphone_screenshot_podcast.png" rel="lightbox[676]"><img src="http://richardkmiller.com/wp-content/uploads/2009/06/iphone_screenshot_podcast-200x300.png" alt="iphone_screenshot_podcast" title="iphone_screenshot_podcast" width="200" height="300" class="alignnone size-medium wp-image-681" /></a></p>
<h3>Save a Point on a Map</h3>
<p>Sometimes I want to &#8220;bookmark&#8221; a location on the map before looking up something else. A screenshot is a fast way to do this.</p>
<p><a href="http://richardkmiller.com/wp-content/uploads/2009/06/iphone_screenshot_map.png" rel="lightbox[676]"><img src="http://richardkmiller.com/wp-content/uploads/2009/06/iphone_screenshot_map-200x300.png" alt="iphone_screenshot_map" title="iphone_screenshot_map" width="200" height="300" class="alignnone size-medium wp-image-679" /></a></p>
<h3>Save a Website Address Without Interrupting Your Reading</h3>
<p>Sometimes when I&#8217;m reading in Google Reader, I want to save the location of an article to read later. (I don&#8217;t want to leave Google Reader immediately because it has to entirely reload when I return.)</p>
<p>If you hold your finger on a link for a few seconds, a menu will popup with the address of the link. Sometimes I simply save a screenshot of the link, then hit Cancel and go back to my reading. Later I read the items I saved in my screenshots.</p>
<p><a href="http://richardkmiller.com/wp-content/uploads/2009/06/iphone_screenshot_opened_link.png" rel="lightbox[676]"><img src="http://richardkmiller.com/wp-content/uploads/2009/06/iphone_screenshot_opened_link-200x300.png" alt="iphone_screenshot_opened_link" title="iphone_screenshot_opened_link" width="200" height="300" class="alignnone size-medium wp-image-680" /></a></p>
<p>Screenshots can help you practice &#8220;ubiquitous capture&#8221; &#8212; capturing all notes, thoughts, and ideas, as they come to you, so you don&#8217;t have to keep them in your head.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://richardkmiller.com/676/3-uses-for-iphone-screenshots/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How to Save Voicemail Forever on Your Mac</title>
		<link>http://richardkmiller.com/391/how-to-save-voicemail-forever-on-your-mac</link>
		<comments>http://richardkmiller.com/391/how-to-save-voicemail-forever-on-your-mac#comments</comments>
		<pubDate>Sun, 18 Jan 2009 07:18:45 +0000</pubDate>
		<dc:creator>Richard K Miller</dc:creator>
				<category><![CDATA[Communication]]></category>
		<category><![CDATA[How To]]></category>
		<category><![CDATA[Main]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Audacity]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Phone]]></category>
		<category><![CDATA[Skype]]></category>
		<category><![CDATA[Soundflower]]></category>
		<category><![CDATA[Soundflowerbed]]></category>
		<category><![CDATA[Voicemail]]></category>

		<guid isPermaLink="false">http://richardkmiller.com/?p=391</guid>
		<description><![CDATA[With a combo of free Mac applications, you can record and save voicemails from your mobile phone. You&#8217;ll need to install the following Mac applications: Skype. You&#8217;ll use Skype to make a call to your mobile phone and listen to &#8230; <a href="http://richardkmiller.com/391/how-to-save-voicemail-forever-on-your-mac">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class='microid-f6e7a91602a9e692ffade1b0d74d8061bab8145e'><p>With a combo of free Mac applications, you can record and save voicemails from your mobile phone.</p>
<p>You&#8217;ll need to install the following Mac applications:</p>
<p><img src="http://richardkmiller.com/wp-content/uploads/2009/01/skype.png" alt="skype" title="skype" width="48" height="48" class="alignleft size-full wp-image-408" /> <a href="http://skype.com/">Skype</a>. You&#8217;ll use Skype to make a call to your mobile phone and listen to your voicemail. Though the app is free, you&#8217;ll need to buy Skype Credit to make a &#8220;Skype Out&#8221; call to your mobile phone.</p>
<div style="clear:both;">&nbsp;</div>
<p><img src="http://richardkmiller.com/wp-content/uploads/2009/01/audacity.png" alt="audacity" title="audacity" width="48" height="48" class="alignleft size-full wp-image-407" /> <a href="http://audacity.sourceforge.net/">Audacity</a>. You&#8217;ll use this free application to record your phone call.</p>
<div style="clear:both;">&nbsp;</div>
<p><img src="http://richardkmiller.com/wp-content/uploads/2009/01/soundflowerbed.png" alt="soundflowerbed" title="soundflowerbed" width="48" height="48" class="alignleft size-full wp-image-409" /> <a href="http://www.cycling74.com/products/soundflower">Soundflower and Soundflowerbed</a>. This free system extension will connect Skype to Audacity. It&#8217;s like a laundry chute for audio; you can direct audio from any application to another. It does this by adding a pseudo &#8220;device&#8221; to your list of audio devices in System Preferences.</p>
<h3>Instructions:</h3>
<ol>
<li>Open Audacity, then Audacity Preferences. In the Audio I/O section, change the <strong>Recording device</strong> to <strong>Core Audio: Soundflower (2ch)</strong>. <img src="http://richardkmiller.com/wp-content/uploads/2009/01/audacity_preferences.png" alt="audacity_preferences" title="audacity_preferences" width="403" height="140" class="size-full wp-image-399" /></li>
<li>Open Skype, then Skype Preferences. Under the Audio tab, change <strong>Audio Output</strong> to <strong>Soundflower (2ch)</strong>. <br /> <img src="http://richardkmiller.com/wp-content/uploads/2009/01/skype_preferences.png" alt="skype_preferences" title="skype_preferences" width="439" height="133" class="size-full wp-image-402" /></li>
<li>Open Soundflowerbed in your menu bar, then under <strong>Soundflower (2ch)</strong>, select <strong>Built-in Output</strong>. Soundflowerbed allows you to monitor the audio passing through Soundflower, like having a window into the laundry shoot to watch clothes that fall past. <br /> <img src="http://richardkmiller.com/wp-content/uploads/2009/01/soundflower_preferences.png" alt="soundflower_preferences" title="soundflower_preferences" width="278" height="122" class="size-full wp-image-404" /></li>
<li>Back in Audacity, click the <strong>Record</strong> button to begin recording.
<p> <img src="http://richardkmiller.com/wp-content/uploads/2009/01/audacity_record_button.png" alt="audacity_record_button" title="audacity_record_button" width="151" height="76" class="size-full wp-image-400" /></li>
<li>In Skype, make a call to your cell phone. When your greeting begins playing, press the sequence of keys that accesses your voicemail (probably the asterisk key followed by your password.) Listen to your voicemail as you normally would. Then hang up. <img src="http://richardkmiller.com/wp-content/uploads/2009/01/skype_phonecall.png" alt="skype_phonecall" title="skype_phonecall" width="350" height="342" class="size-full wp-image-435" /></li>
<li>Switch back to Audacity and click the <strong>Stop</strong> button. You should see the zig-zaggy waveform of the message you just recorded.<br /> <img src="http://richardkmiller.com/wp-content/uploads/2009/01/audacity_stop_button.png" alt="audacity_stop_button" title="audacity_stop_button" width="115" height="71" class="size-full wp-image-433" /> <br /> <img src="http://richardkmiller.com/wp-content/uploads/2009/01/audacity_waveform.png" alt="audacity_waveform" title="audacity_waveform" width="306" height="143" class="size-full wp-image-434" /></li>
<li>Click the Audacity cursor directly before your message. (You can find out where this is by using the <strong>Play</strong> and <strong>Stop</strong> buttons.) From the Edit menu, choose <strong>Select</strong> then <strong>Track Start to Cursor</strong>. Push the <strong>Delete</strong> key on your keyboard. This will remove extraneous audio before your message. <img src="http://richardkmiller.com/wp-content/uploads/2009/01/audacity_before.png" alt="audacity_before" title="audacity_before" width="476" height="182" class="size-full wp-image-431" /></li>
<li>Click the Audacity cursor directly after your message. From the Edit menu, choose <strong>Select</strong> then <strong>Cursor to Track End</strong>. Push the <strong>Delete</strong> key. This will remove extraneous audio after your message. <img src="http://richardkmiller.com/wp-content/uploads/2009/01/audacity_after.png" alt="audacity_after" title="audacity_after" width="487" height="182" class="size-full wp-image-430" /></li>
<li>Choose <strong>Export</strong> from the File menu and save your voicemail. You can email it to a friend or save it in iTunes. <img src="http://richardkmiller.com/wp-content/uploads/2009/01/audacity_export.png" alt="audacity_export" title="audacity_export" width="556" height="204" class="size-full wp-image-432" /></li>
</ol>
</div>]]></content:encoded>
			<wfw:commentRss>http://richardkmiller.com/391/how-to-save-voicemail-forever-on-your-mac/feed</wfw:commentRss>
		<slash:comments>40</slash:comments>
		</item>
		<item>
		<title>How to browse securely with SSH and a SOCKS proxy</title>
		<link>http://richardkmiller.com/337/how-to-browse-securely-with-ssh-and-a-socks-proxy</link>
		<comments>http://richardkmiller.com/337/how-to-browse-securely-with-ssh-and-a-socks-proxy#comments</comments>
		<pubDate>Wed, 03 Sep 2008 15:54:52 +0000</pubDate>
		<dc:creator>Richard K Miller</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[Main]]></category>
		<category><![CDATA[Privacy]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Unix]]></category>

		<guid isPermaLink="false">http://www.richardkmiller.com/blog/?p=337</guid>
		<description><![CDATA[I was in Moab this weekend with my family and our motel had free wireless Internet. I used SSH and a SOCKS proxy to create a secure tunnel to my iMac at work. This allowed me to browse Gmail and &#8230; <a href="http://richardkmiller.com/337/how-to-browse-securely-with-ssh-and-a-socks-proxy">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class='microid-f166988fec97ae901087390e86c67a8a931c5c62'><p>I was in Moab this weekend with my family and our motel had free wireless Internet. I used SSH and a SOCKS proxy to create a secure tunnel to my iMac at work. This allowed me to browse Gmail and Facebook securely.</p>
<p>Here&#8217;s a screencast on how to create an SSH tunnel and browse securely in Safari and Firefox:<br />
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/0gmNGMlEMxw&#038;hl=en&#038;fs=1&#038;fmt=18"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/0gmNGMlEMxw&#038;hl=en&#038;fs=1&#038;fmt=18" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p>Here&#8217;s a full-size video:<br />
<a href="http://www.richardkmiller.com/screencasts/secure_connection_ssh_and_socks/">How to browse securely with SSH and a SOCKS proxy</a> (full size video)</p>
<p>These are the basic steps on a Mac:<br />
1. Open Terminal. (In your Applications/Utilities folder.)<br />
2. Type &#8220;ssh -D 9999 username@example.com&#8221;, replacing &#8220;username&#8221; and &#8220;example.com&#8221; with the actual username and address of your remote machine. The remote machine will need the SSH service, or Remote Login service, turned on.<br />
3. Open System Preferences -> Network -> Advanced tab -> Proxies.<br />
4. Turn on the &#8220;SOCKS Proxy&#8221; and enter &#8220;127.0.0.1&#8243; and &#8220;9999&#8243; in the fields. Click OK and Apply.</p>
<p>Now your Internet connection will be tunneled through a secure connection to your remote machine &#8212; a poor man&#8217;s VPN.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://richardkmiller.com/337/how-to-browse-securely-with-ssh-and-a-socks-proxy/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Learn more about WordPress at WordCamp Utah</title>
		<link>http://richardkmiller.com/324/learn-more-about-wordpress-at-wordcamp-utah</link>
		<comments>http://richardkmiller.com/324/learn-more-about-wordpress-at-wordcamp-utah#comments</comments>
		<pubDate>Sat, 16 Aug 2008 19:27:46 +0000</pubDate>
		<dc:creator>Richard K Miller</dc:creator>
				<category><![CDATA[Blogging]]></category>
		<category><![CDATA[Main]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Utah]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.richardkmiller.com/blog/?p=324</guid>
		<description><![CDATA[WordCamp Utah is a 1-day conference all about WordPress, to be held in Provo, Utah, on September 27, 2008. Speakers will include WordPress founder Matt Mullenweg, WordPress guru Alex King, both visiting from out of town, and several local personalities &#8230; <a href="http://richardkmiller.com/324/learn-more-about-wordpress-at-wordcamp-utah">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class='microid-a19bd07a2edfc91594305571159a95c6a5941248'><p>WordCamp Utah is a 1-day conference all about WordPress, to be held in Provo, Utah, on September 27, 2008. Speakers will include WordPress founder <a href="http://utah.wordcamp.org/schedule/matt-mullenweg/">Matt Mullenweg</a>, WordPress guru <a href="http://utah.wordcamp.org/schedule/alex-king/">Alex King</a>, both visiting from out of town, and several local personalities including <a href="http://utah.wordcamp.org/schedule/cameron-moll/">Cameron Moll</a>, <a href="http://utah.wordcamp.org/schedule/cameron-moll/">Thom Allen</a>, <a href="http://utah.wordcamp.org/schedule/ash-buckles/">Ash Buckles</a>, and <a href="http://utah.wordcamp.org/schedule/richard-miller/">yours truly</a>.</p>
<p>I&#8217;ll speak on using WordPress as a Content Management System, demonstrating that you can use WordPress software to power your website even if it&#8217;s not a blog. At our nonprofit foundation, we use WordPress to power over 40 non-blog websites.</p>
<p>This should be a great conference for any blogger, Web developer, or Web publisher. I&#8217;m excited to hear each of the talks.</p>
<p>More information: <a href="http://utah.wordcamp.org/">WordCamp Utah</a> (<a href="http://utah.wordcamp.org/sign-up/">signup</a>)</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://richardkmiller.com/324/learn-more-about-wordpress-at-wordcamp-utah/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>What goes around, comes around</title>
		<link>http://richardkmiller.com/314/what-goes-around-comes-around</link>
		<comments>http://richardkmiller.com/314/what-goes-around-comes-around#comments</comments>
		<pubDate>Thu, 21 Feb 2008 05:57:05 +0000</pubDate>
		<dc:creator>Richard K Miller</dc:creator>
				<category><![CDATA[Main]]></category>
		<category><![CDATA[MediaWiki]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[mediawiki mod_auth_mysql jonudell]]></category>

		<guid isPermaLink="false">http://www.richardkmiller.com/blog/archives/2008/02/what-goes-around-comes-around</guid>
		<description><![CDATA[I&#8217;m not a big believer in karma, but this week I experienced some karma-like effects. Two years ago for work, I developed code to protect wiki websites. Then I published it on my blog. This weekend a software upgrade caused &#8230; <a href="http://richardkmiller.com/314/what-goes-around-comes-around">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class='microid-f1113d8105150d123c3a417f48973f5e57662a94'><p>I&#8217;m not a big believer in karma, but this week I experienced some karma-like effects. Two years ago for work, I developed code to <a href="http://www.richardkmiller.com/blog/archives/2006/05/password-protecting-mediawiki-with-mod_auth_mysql">protect wiki websites</a>. Then I published it on my blog.</p>
<p>This weekend a software upgrade caused this protection code to stop working on our websites. I couldn&#8217;t find an answer. Then yesterday, some chap named Nathan left a comment describing the <a href="http://www.richardkmiller.com/blog/archives/2006/05/password-protecting-mediawiki-with-mod_auth_mysql#comment-144444">solution</a>. I hadn&#8217;t asked for help. He was simply documenting his own experience. But it was just what I needed.</p>
<p>This is fundamental to open source software &#8212; the creation of a software commons. It&#8217;s also what happens on Wikipedia, the creation of a knowledge commons.</p>
<p>In <em>Love Is the Killer App</em>, Tim Sanders suggests freely sharing your knowledge and your network, not hoarding them.</p>
<p>Jon Udell talks of &#8220;narrating&#8221; one&#8217;s work from day to day. This allows everyone to share in your vast brain knowledge, and it becomes your living résumé. I&#8217;d like to do more of that.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://richardkmiller.com/314/what-goes-around-comes-around/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Is the Internet broken?</title>
		<link>http://richardkmiller.com/306/is-the-internet-broken</link>
		<comments>http://richardkmiller.com/306/is-the-internet-broken#comments</comments>
		<pubDate>Thu, 06 Dec 2007 14:14:11 +0000</pubDate>
		<dc:creator>Richard K Miller</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Law]]></category>
		<category><![CDATA[Pornography]]></category>
		<category><![CDATA[Speech]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.richardkmiller.com/blog/archives/2007/12/is-the-internet-broken</guid>
		<description><![CDATA[As amazing as the Internet is for commerce, communication, and education, it might have been better. Imagine opening your email and not finding any spam. Imagine your children or your little brother not happening into any pornography. Pete Ashdown spoke &#8230; <a href="http://richardkmiller.com/306/is-the-internet-broken">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class='microid-b62bb4c40e5325303efd91aa95798d36046b9fd2'><p>As amazing as the Internet is for commerce, communication, and education, it might have been better. Imagine opening your email and not finding any spam. Imagine your children or your little brother not happening into any pornography.</p>
<p><a href="http://en.wikipedia.org/wiki/Pete_Ashdown">Pete Ashdown</a> spoke at the Utah Open Source Conference earlier this year. He touted the virtues of the Internet for open communication and open government. He said the Internet is the &#8220;only working anarchy&#8221; and we &#8220;shouldn&#8217;t change it.&#8221;</p>
<p>At the same conference, Phil Windley quoted <a href="http://en.wikipedia.org/wiki/Vinton_Cerf">Vint Cerf</a>, one of the inventors of the Internet, as saying <a href="http://www.windley.com/archives/2005/04/vint_cerf_on_in.shtml">he would have liked it different</a>. &#8220;Vint wishes that the original design of the Internet had required that each endpoint&#8230;be able to authenticate [itself]&#8230;.&#8221;</p>
<p>Vint is saying every computer on the Internet should identify itself. Anonymity allows bad actors to go unregulated. If authentication and identity were built-in, perhaps we might reduce Internet maladies like spam, phishing, and predatory porn.</p>
<p>Pete, Phil, and Vint are smart people. But they seem to disagree about whether the Internet needs change.</p>
<p>The <a href="http://www.richardkmiller.com/blog/archives/2007/12/harmful-to-minors">H2M</a> and <a href="http://www.richardkmiller.com/blog/archives/2006/03/cp80-internet-channel-initiative">CP80</a> proposals imply that something is broken about the current Internet. If so, it shouldn&#8217;t be hard to imagine changing it. People built the Internet and people can change the Internet. It&#8217;s supposed to serve us, not the other way around.</p>
<p>I tend to agree that we can do a better job of protecting children from pornography. I&#8217;m not sure what the solution is. Perhaps it&#8217;s H2M or CP80, or maybe something else. But if we believe the Internet is broken and can be better, we have every right to fix it. To quote Bill Cosby&#8217;s father: </p>
<blockquote><p>You know, I brought you in this world, and I can take you out. And it don&#8217;t make no difference to me, I&#8217;ll make another one look just like you. (<a href="http://en.wikiquote.org/wiki/Bill_Cosby:_Himself">Wikiquote.org</a>)</p></blockquote>
</div>]]></content:encoded>
			<wfw:commentRss>http://richardkmiller.com/306/is-the-internet-broken/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>The Patriot Act and Customer Service</title>
		<link>http://richardkmiller.com/291/the-patriot-act-and-customer-service</link>
		<comments>http://richardkmiller.com/291/the-patriot-act-and-customer-service#comments</comments>
		<pubDate>Thu, 19 Jul 2007 14:09:15 +0000</pubDate>
		<dc:creator>Richard K Miller</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Government]]></category>
		<category><![CDATA[Law]]></category>
		<category><![CDATA[Main]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Unix]]></category>

		<guid isPermaLink="false">http://www.richardkmiller.com/blog/archives/2007/07/the-patriot-act-and-customer-service</guid>
		<description><![CDATA[I. Mac and Linux computers come with a command called &#8220;rsync&#8221; that makes backup and synchronization easy. Every morning before work I synchronize my 4 year old dying Powerbook to my iMac at work. When I get home, I synchronize &#8230; <a href="http://richardkmiller.com/291/the-patriot-act-and-customer-service">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class='microid-00f01f7f804d02964a960813be288ebaaba0e919'><p>I. Mac and Linux computers come with a command called &#8220;rsync&#8221; that makes backup and synchronization easy. Every morning before work I synchronize my 4 year old dying Powerbook to my iMac at work. When I get home, I synchronize back. This way, I get my same mail, documents, and music wherever I am, and if something were to happen to one computer, I&#8217;d have a backup. I synchronize over the Internet, but I know a local guy that synchronizes to his iPod so he can physically carry his updates in and out of the office.</p>
<div style="width:250px; float:right; margin: 5px;"><a href='http://www.richardkmiller.com/blog/wp-content/uploads/2007/07/canaries.jpg' title='canaries.jpg' rel='lightbox'><img src='http://www.richardkmiller.com/blog/wp-content/uploads/2007/07/canaries.jpg' alt='canaries.jpg' /></a><br />Photo by <a href="http://flickr.com/photos/orqwith/435036918/">quimby</a></div>
<p>II. At work, we&#8217;ve begun using a service called <a href="http://www.rsync.net/">rsync.net</a> for backup. We synchronize our files to their service and pay them $1.60 per gigabyte per month. It&#8217;s a pretty inexpensive way to do backup, and it&#8217;s nice to have the backup offsite. The rsync.net engineers with whom I&#8217;ve spoken have been top notch.</p>
<p>For privacy, we actually use a derivative of rsync called &#8220;duplicity&#8221;, which encrypts our data before storing them at rsync.net. Their website explains how to use duplicity and other encryption techniques, but I thought it was particularly interesting to find they publish a <strong>&#8220;warrant canary&#8221;</strong>. Because the Patriot Act allows the service of secret warrants for the search and seizure of data, and criminal penalties for failing to maintain secrecy, rsync.net publishes a weekly declaration that they haven&#8217;t been served a warrant:</p>
<blockquote><p>rsync.net will also make available, weekly, a &#8220;warrant canary&#8221; in the form of a cryptographically signed message containing the following:</p>
<p>- a declaration that, up to that point, no warrants have been served, nor have any searches or seizures taken place</p>
<p>- a cut and paste headline from a major news source, establishing date</p>
<p>Special note should be taken if these messages ever cease being updated, or are removed from this page.</p>
</blockquote>
<p>Source: <a href="http://www.rsync.net/resources/notices/canary.txt">rsync.net Warrant Canary</a></p>
<p>If the &#8220;canary&#8221; dies, you&#8217;re supposed to close shop and get out.</p>
<p>I don&#8217;t know the legal implications of a warrant canary, but it seems like a particularly unique example of putting the customer first!</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://richardkmiller.com/291/the-patriot-act-and-customer-service/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Amtrak series: Ruby on Rails on Rails</title>
		<link>http://richardkmiller.com/273/amtrak-series-ruby-on-rails-on-rails</link>
		<comments>http://richardkmiller.com/273/amtrak-series-ruby-on-rails-on-rails#comments</comments>
		<pubDate>Thu, 07 Jun 2007 17:00:50 +0000</pubDate>
		<dc:creator>Richard K Miller</dc:creator>
				<category><![CDATA[Amtrak]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Entrepreneurship]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.richardkmiller.com/blog/archives/2007/06/amtrak-series-ruby-on-rails-on-rails</guid>
		<description><![CDATA[This will be the most technical of my posts in the Amtrak series, but it&#8217;s not just for computer geeks so stay with me. Here we go. Ruby on Rails is a &#8220;web application framework&#8221;, a way for programmers to &#8230; <a href="http://richardkmiller.com/273/amtrak-series-ruby-on-rails-on-rails">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class='microid-25ab5b4d4da0e906b96ef5184bc029a41a0bb498'><p>This will be the most technical of my posts in the Amtrak series, but it&#8217;s not just for computer geeks so stay with me. Here we go.</p>
<p><a href="http://www.rubyonrails.org/">Ruby on Rails</a> is a &#8220;web application framework&#8221;, a way for programmers to make web applications more easily and more quickly (and more enjoyably, as its creators would be quick to point out.) It was created by <a href="http://37signals.com/">37signals</a>, the makers of Basecamp and other fine web apps, and has been one of the fastest growing programming environments of the last couple years. &#8220;Ruby&#8221; is the programming language and &#8220;Rails&#8221; is the set of additions that make it &#8220;fast&#8221; and &#8220;easy,&#8221; like a high-speed train. (Not a <a href="http://www.richardkmiller.com/blog/archives/2007/06/amtrak-series-pictures">sight-seeing Amtrak</a>.)</p>
<p><a href='http://www.richardkmiller.com/blog/wp-content/uploads/2007/06/img_0088.jpg' title='img_0088.jpg' rel='lightbox'><img src='http://www.richardkmiller.com/blog/wp-content/uploads/2007/06/img_0088.thumbnail.jpg' alt='img_0088.jpg' style='float:right; margin:1em;' /></a></p>
<p>You probably see where this is going. As an exercise in literalness, I though it would be interesting to do a little Ruby on Rails programming while on the train, or in other words, Ruby on Rails on Rails. (Mitch Hedberg said &#8220;I&#8217;d like to see a forklift lift a crate of forks. It&#8217;d be so&#8230;literal. &#8216;Hey, you&#8217;re using that machine for its exact purpose!&#8217;&#8221;) See the pictures.</p>
<p>I have not delved into Rails as much as my local colleagues, but with the little I&#8217;ve used it, I&#8217;ve been impressed. By taking away the tedious parts of programming, it really does make programming more enjoyable. I know <a href="http://www.johntaber.com/">several</a> <a href="http://www.griffio.com/">good</a> <a href="http://www.apriux.com/">developers</a> who prefer it.</p>
<p>Ruby on Rails enforces an architecture called &#8220;Model-View-Controller&#8221; (MVC), which is used heavily in Mac applications and well written web applications. Though not built on Rails, <a href="http://wordpress.org/">WordPress</a> also uses an MVC architecture. If you have a WordPress blog, you know you can easily change the theme of your blog. This is thanks to the modular MVC architecture with which it was written.</p>
<p><a href='http://www.richardkmiller.com/blog/wp-content/uploads/2007/06/img_0096.jpg' title='img_0096.jpg' rel='lightbox'><img src='http://www.richardkmiller.com/blog/wp-content/uploads/2007/06/img_0096.thumbnail.jpg' alt='img_0096.jpg' style='float:right; margin:1em;' /></a></p>
<p>Here&#8217;s where this applies to everyone: 37signals hasn&#8217;t only extracted Rails from their best programming practices, they&#8217;ve also extracted a book from their best business practices. I highly recommend <a href="http://gettingreal.37signals.com/">Getting Real</a> by 37signals, availably entirely for free on their <a href="http://gettingreal.37signals.com/toc.php">website</a>. They&#8217;ve <a href="http://www.37signals.com/svn/posts/451-whats-your-cookbook">given away their &#8220;cookbook&#8221;</a> &#8212; what they&#8217;ve learned about marketing, project management, time management, hiring, agility, task prioritization, and more. I finished the book believing that small teams can do great things.</p>
<p style='clear:both;'>
</div>]]></content:encoded>
			<wfw:commentRss>http://richardkmiller.com/273/amtrak-series-ruby-on-rails-on-rails/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Skype + Applescript = poor man&#8217;s voice web services</title>
		<link>http://richardkmiller.com/265/skype-applescript-poor-mans-voice-web-services</link>
		<comments>http://richardkmiller.com/265/skype-applescript-poor-mans-voice-web-services#comments</comments>
		<pubDate>Thu, 17 May 2007 14:13:29 +0000</pubDate>
		<dc:creator>Richard K Miller</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Communication]]></category>
		<category><![CDATA[Ideas]]></category>
		<category><![CDATA[Main]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Utah]]></category>

		<guid isPermaLink="false">http://www.richardkmiller.com/blog/archives/2007/05/skype-applescript-poor-mans-voice-web-services</guid>
		<description><![CDATA[Skype is one of my favorite applications. I recently used Skype to call someone in Russia and it only cost a few cents. I&#8217;ve also been studying the Skype API, which opens some interesting possibilities. On a Mac, you can &#8230; <a href="http://richardkmiller.com/265/skype-applescript-poor-mans-voice-web-services">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class='microid-bf406377a489941356bedb70a527b763391bd7d7'><p>Skype is one of my favorite applications. I recently used Skype to call someone in Russia and it only cost a few cents. I&#8217;ve also been studying the <a href="https://developer.skype.com/Docs/ApiDoc/FrontPage">Skype API</a>, which opens some interesting possibilities.</p>
<p>On a Mac, you can combine simple Applescript commands with simple Skype commands to open a lot of possibilities. For example, this Applescript opens Skype and calls the best taco shop in Provo, UT:</p>
<blockquote><p>
tell application &#8220;Skype&#8221;<br />
	send command &#8220;CALL +18013774710&#8243; script name &#8220;Call the best taco shop in Provo, UT&#8221;<br />
end tell
</p></blockquote>
<p>Skype can be scripted to automatically make phone calls, chat by video or text, or send text messages. You can also pipe in any audio or record the phone call.</p>
<p>This has interesting implications for companies like <a href="http://www.macminicolo.net/">MacMiniColo.net</a> that use Macs as servers (disclosure: I&#8217;m a friend of its owner and staff, and I&#8217;ve done contract work for them in the past.) Combining Applescript, Skype, shell scripting, and the <em>say</em> command, your server could be configured to call your cell phone when there&#8217;s an outage and <em>tell you</em> what the problem is.</p>
<p>Jon Udell&#8217;s podcast about <a href="http://weblog.infoworld.com/udell/2006/10/13.html">communications-enabled business processes</a> discusses the integration of voice calls into computer processes. They discuss examples where a business process may need approval from a supervisor. With voice integration, the computer could call a manager with a &#8220;press 1 to approve, press 2 to disapprove&#8221; message.</p>
<p>Skype + Applescript is sort of the poor man&#8217;s version of VOIP web services, but it&#8217;s exciting that you could actually do something interesting with it today.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://richardkmiller.com/265/skype-applescript-poor-mans-voice-web-services/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Seven ways the Internet is changing politics</title>
		<link>http://richardkmiller.com/242/seven-ways-the-internet-is-changing-politics</link>
		<comments>http://richardkmiller.com/242/seven-ways-the-internet-is-changing-politics#comments</comments>
		<pubDate>Fri, 20 Apr 2007 03:59:02 +0000</pubDate>
		<dc:creator>Richard K Miller</dc:creator>
				<category><![CDATA[Main]]></category>
		<category><![CDATA[Politics]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Utah]]></category>

		<guid isPermaLink="false">http://www.richardkmiller.com/blog/archives/2007/04/seven-ways-the-internet-is-changing-politics</guid>
		<description><![CDATA[1. Last week I attended the opening event of Phil Burns&#8217;s new company Politic2.0, a platform for communication between politicians and citizens. When I first heard about the event, I was skeptical that it would be anything more than the &#8230; <a href="http://richardkmiller.com/242/seven-ways-the-internet-is-changing-politics">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class='microid-fdbaeb369e5bdb54b3a646b96229c1a344a10e13'><p>1. Last week I attended the opening event of Phil Burns&#8217;s new company <a href="http://www.politic20.com/">Politic2.0</a>, a platform for communication between politicians and citizens.  When I first heard about the event, I was skeptical that it would be anything more than the buzz-word-ification of another niche, but by the end of the event I was really impressed with what had happened.</p>
<p>Utah Congressman Chris Cannon was the guest of honor, and there were about 25 attendees.  The website allowed us to post and vote on questions, <a href="http://digg.com/">Digg</a> style, and then the MC addressed the most popular questions to Mr. Cannon.  Participation wasn&#8217;t limited to people in the room; anybody online could submit questions, vote, and leave comments on the website. Live video was streamed to the website.</p>
<p>It was a Darwinian press conference.  The most popular questions were asked; no one person could dominate the conversation with his own agenda.  Mr. Cannon said he felt a disconnect because most of our heads were down while we typed and clicked, but because I was able to influence the conversation, I felt very connected.  I liked it so much I contacted a couple friends so they could hop on the website during the event.</p>
<p>The process still needs polishing, but Mr. Cannon&#8217;s participation was commendable and it was a good first draft for Politic2.0.  I hope other politicians will participate.</p>
<p><img src="http://www.richardkmiller.com/blog/wp-content/uploads/2007/04/peteashdown.png" alt="Pete Ashdown" style="float:right; margin:5px;" /></p>
<p>2. The Politic2.0 platform allowed us to collaborate on our questions, but not on the answers.  When Pete Ashdown ran for U.S. Senate last year, he used a <a href="http://peteashdown.org/wiki/index.php/Main_Page">wiki to allow citizens to collaborate on policy solutions</a>.  I personally edited a page or two and found it refreshing that the ideas were being debated on their own merits and that someone (Pete) cared to listen. It&#8217;s humbling and realistic for politicians to realize they don&#8217;t have all the answers.  Maybe together we do.</p>
<p>3. <a href="http://www.itconversations.com/">IT Conversations</a> is my favorite source for podcasts. This week its founder, Doug Kaye, launched <a href="http://www.conversationsnetwork.org/podcorps/">PodCorps</a> (<a href="http://blog.jonudell.net/2007/04/16/doug-kayes-podcorps-launches-today/">via</a>), which aims to &#8220;record and publish important spoken-word events anywhere in the world.&#8221; PodCorps will call on an army of volunteers to record lectures, political events, and talks in their local communities.  These amateur recordings by you and me will be posted online for all to hear. What would otherwise be some inconsequential talk on an obscure topic in a far away place will find far more listeners. Politicians can&#8217;t pander to local interests if everyone is &#8220;watching.&#8221; The transparency will encourage consistency.</p>
<p>4. C-Span, the nonprofit cable network that records Senate and House proceedings (and for most people is the fastest way to fall asleep), keeps ownership of over 85% of its video &#8212; video that should be in the public domain.  Carl Malamud, the creator of the first Internet radio station, recently <a href="http://blog.jonudell.net/2007/03/03/carl-malamud-to-brian-lamb-you-should-not-treat-the-us-congress-like-disney-would-treat-mickey-mouse/">wrote a letter to C-Span</a> petitioning that all its video be released into the public domain and explaining how the Internet makes their mission of promoting open government even easier.</p>
<p>5. Phil Windley <a href="http://www.windley.com/archives/2007/01/senate_radio.shtml">has</a> <a href="http://www.windley.com/archives/2006/05/utah_senate_blo.shtml">blogged</a> <a href="http://www.windley.com/archives/2006/01/blogging_and_de.shtml">repeatedly</a> about the Utah Senate Majority&#8217;s website, <a href="http://www.senatesite.com/">senatesite.com</a>.  At the site Utahns will find a group blog and podcast where local politicians explain and debate policy.</p>
<p>6. Mitt Romney and other presidential candidates are using <a href="http://www.youtube.com/mittromney">YouTube</a> to engage with citizens. <img src="http://www.richardkmiller.com/blog/wp-content/uploads/2007/04/mittromney_on_youtube.thumbnail.png" alt="Mitt Romney on Youtube" style="float:left; margin:5px;" /> In a YouTube video, Mitt asked people &#8220;What is America&#8217;s single greatest challenge?&#8221;  Seventy-one people responded with short videos of their own.</p>
<p>7. Candidates are using Facebook and MySpace to stay connected with supporters. Because of Facebook, I know Mitt is in Iowa today.</p>
<p>Anything else?</p>
<p>As our world becomes more complex and the <a href="http://www.opinionjournal.com/columnists/pnoonan/?id=110008644">job of politician more difficult</a>, it&#8217;s increasingly important that we be closely connected with the people that represent us.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://richardkmiller.com/242/seven-ways-the-internet-is-changing-politics/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Big milestone for CP80 but still many detractors</title>
		<link>http://richardkmiller.com/239/big-milestone-for-cp80-but-still-many-detractors</link>
		<comments>http://richardkmiller.com/239/big-milestone-for-cp80-but-still-many-detractors#comments</comments>
		<pubDate>Fri, 16 Mar 2007 07:18:30 +0000</pubDate>
		<dc:creator>Richard K Miller</dc:creator>
				<category><![CDATA[Politics]]></category>
		<category><![CDATA[Pornography]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Utah]]></category>

		<guid isPermaLink="false">http://www.richardkmiller.com/blog/archives/2007/03/big-milestone-for-cp80-but-still-many-detractors</guid>
		<description><![CDATA[It was a big week for CP80, the anti-pornography group led by Ralph Yarro. The Utah legislature unanimously passed, and Governor Huntsman signed, a non-binding resolution calling on the U.S. government to do something about Internet pornography. The resolution calls &#8230; <a href="http://richardkmiller.com/239/big-milestone-for-cp80-but-still-many-detractors">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class='microid-2823fb8c3c1b03c32dd1b323be9a08911ad460e2'><p>It was a big week for <a href="http://www.richardkmiller.com/blog/archives/2007/01/traffic-control-cp80-would-protect-children-and-families-from-porn">CP80</a>, the anti-pornography group led by Ralph Yarro.  The Utah legislature unanimously passed, and Governor Huntsman signed, a non-binding resolution calling on the U.S. government to do something about Internet pornography.  <a href="http://le.utah.gov/~2007/bills/hbillint/hcr003.htm">The resolution</a> calls on the federal government to &#8220;take action to help stop children and employees from accessing Internet pornography.&#8221;  Mr. Yarro called it a &#8220;shot heard &#8217;round the world.&#8221;</p>
<p>Slashdot.org picked up the story yesterday &#8212; meaning the issue is now in the tech mainstream &#8212; but coverage wasn&#8217;t positive.  Most Slashdot readers carry both an ultra-liberal interpretation of free speech and a disdain for SCO for its <a href="http://en.wikipedia.org/wiki/SCO_v._IBM_Linux_lawsuit">junk law suits against IBM</a>, making a story about <a href="http://en.wikipedia.org/wiki/Ralph_Yarro_III">Ralph Yarro</a> a double negative.  (Ralph Yarro is the chairman of the SCO group.)</p>
<p>Like his Slashdot ideologues, Utah ex-senatorial candidate <a href="http://peteashdown.org/journal/2007/03/15/find-the-porn/">Pete Ashdown criticized CP80</a> as technologically difficult, expensive, and an inappropriate intrusion by government &#8212; three hard-to-believe arguments coming from a techie and left-leaning Democrat.  I&#8217;ve met Pete and heard him speak several times, and while I believe he&#8217;s a family man and a loyal Utahn, I think he&#8217;s missing the point here.</p>
<p>Pornography costs business its dollars and our society its morality.  An unbridled interpretation of free speech is no excuse, the difficulty of the task is no excuse, and concern about the &#8220;image of Utah&#8221; is no excuse.  Sure, there are technical details to work out, but let&#8217;s start somewhere.  Even if CP80 isn&#8217;t the solution, there&#8217;s definitely a problem to solve and Ralph Yarro&#8217;s effort is <a href="http://www.deseretnews.com/dn/view/0,1249,635164794,00.html">commendable</a>.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://richardkmiller.com/239/big-milestone-for-cp80-but-still-many-detractors/feed</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Customer lock-in happens from inside or out</title>
		<link>http://richardkmiller.com/234/customer-lock-in-happens-from-inside-or-out</link>
		<comments>http://richardkmiller.com/234/customer-lock-in-happens-from-inside-or-out#comments</comments>
		<pubDate>Sat, 27 Jan 2007 02:29:52 +0000</pubDate>
		<dc:creator>Richard K Miller</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.richardkmiller.com/blog/archives/2007/01/customer-lock-in-happens-from-inside-or-out</guid>
		<description><![CDATA[Earlier this month my brother, father, and I went to Macworld in San Francisco, waking up at 4:00 AM on Tuesday to get into Steve Jobs&#8217;s keynote. We were amazed by the iPhone &#8212; definitely under the influence of Steve&#8217;s &#8230; <a href="http://richardkmiller.com/234/customer-lock-in-happens-from-inside-or-out">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class='microid-6e695d50d837fc28e53550958a51f0e467557fa5'><p>Earlier this month my brother, father, and I went to Macworld in San Francisco, waking up at 4:00 AM on Tuesday to get into Steve Jobs&#8217;s keynote.  We were amazed by the iPhone &#8212; definitely under the influence of Steve&#8217;s <a href="http://en.wikipedia.org/wiki/Reality_distortion_field">Reality Distortion Field</a>.  It wasn&#8217;t until the Cingular CEO took the stage (snore) that I realized how tired and hungry I was.</p>
<p>During the keynote, I was especially impressed by the idea of developing applications for the iPhone since it runs Mac OS X.  Turns out that will not be a possibility; the phone is locked from outside developers.</p>
<p>There are two kinds of customer lock-in: by the company or by the customer.  (Who holds the knob of the one-knobbed door.)</p>
<p>Some companies lock in customers with contracts, cancellation fees, and being difficult to work with &#8212; mobile phone companies, cable TV companies, 1and1.com, and <a href="http://blogs.zdnet.com/BTL/?p=4316">Tivo</a>.</p>
<p>Other companies lock in customers by building phenomenal products and platforms, fostering great communities, and inspiring loyalty (even evangelism) &#8212; Apple, WordPress, Bluehost.com.  Customers don&#8217;t want to leave companies like these; they lock themselves in.</p>
<p>At $500-600, I&#8217;m not convinced a locked-down iPhone is right for me.  (Maybe.)  But if I had the ability to develop applications for an always-on, Internet-connected device, I&#8217;d lock myself in.</p>
<p>Bonus: This Nightline video covers the announcement of the iPhone, including an exclusive with Steve Jobs.  From :37 to :40 (or 5:16 to 5:13) you can see my father walking along 4th Street early Tuesday morning while my brother and I waited in line.  (He brought us back Denny&#8217;s.)</p>
<p><object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/WxSqBeYCuOc"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/WxSqBeYCuOc" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://richardkmiller.com/234/customer-lock-in-happens-from-inside-or-out/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Macworld 2007</title>
		<link>http://richardkmiller.com/232/macworld-2007</link>
		<comments>http://richardkmiller.com/232/macworld-2007#comments</comments>
		<pubDate>Tue, 09 Jan 2007 03:55:52 +0000</pubDate>
		<dc:creator>Richard K Miller</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Main]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.richardkmiller.com/blog/archives/2007/01/macworld-2007</guid>
		<description><![CDATA[This week I&#8217;m in San Francisco for Macworld. I&#8217;m looking forward to attending Steve Jobs&#8217;s keynote tomorrow, even if it means getting in line at 4:00 AM. I&#8217;m excited too that my father and brother will be joining me this &#8230; <a href="http://richardkmiller.com/232/macworld-2007">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class='microid-39504e25e113baac5c887ad1f4b35647c0a043b6'><p>This week I&#8217;m in San Francisco for Macworld.  I&#8217;m looking forward to attending Steve Jobs&#8217;s keynote tomorrow, even if it means getting in line at 4:00 AM.  I&#8217;m excited too that my <a href="http://www.millervision.org/">father</a> and brother will be joining me this year.</p>
<p>Today I helped <a href="http://www.brianstucki.com/">Brian</a> set up his <a href="http://www.macminicolo.net/">company</a>&#8216;s booth, then we took the BART to the Mission district to eat at El Farolito&#8217;s.  We&#8217;ll be passing out business cards for <a href="http://www.freemacware.com/">Freemacware.com</a> as much as we can.</p>
<p>I&#8217;m also looking forward to a <a href="http://wordpress.org/">WordPress</a> meeting on Friday.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://richardkmiller.com/232/macworld-2007/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Web hosting idea: Ads on over-drawn accounts</title>
		<link>http://richardkmiller.com/231/web-hosting-idea-ads-on-over-drawn-accounts</link>
		<comments>http://richardkmiller.com/231/web-hosting-idea-ads-on-over-drawn-accounts#comments</comments>
		<pubDate>Tue, 02 Jan 2007 17:53:45 +0000</pubDate>
		<dc:creator>Richard K Miller</dc:creator>
				<category><![CDATA[Interesting]]></category>
		<category><![CDATA[Main]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.richardkmiller.com/blog/archives/2007/01/web-hosting-idea-ads-on-over-drawn-accounts</guid>
		<description><![CDATA[When you host your website on a shared account like Bluehost, you&#8217;re given a certain allocation of bandwidth, disk space, and CPU power. If you go over, they shut you down, which is almost certain to happen if your website &#8230; <a href="http://richardkmiller.com/231/web-hosting-idea-ads-on-over-drawn-accounts">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class='microid-19df2ffdfa0a0a3b159041a555517366de87a61e'><p>When you host your website on a shared account like <a href="http://www.bluehost.com/">Bluehost</a>, you&#8217;re given a certain allocation of bandwidth, disk space, and CPU power.  If you go over, they shut you down, which is almost certain to happen if your website makes it to the front page of <a href="http://www.digg.com/">Digg</a> or <a href="http://www.slashdot.org/">Slashdot</a>.  (Hence the &#8220;Slashdot effect&#8221; or &#8220;your site has been Slashdotted&#8221;.)</p>
<p>We&#8217;ve seen this several times at <a href="http://www.freemacware.com/">Freemacware.com</a>.  Our Bluehost account couldn&#8217;t keep up with the &#8220;Digg effect&#8221; so we&#8217;d get &#8220;CPU overage&#8221; errors.  (Turns out Bluehost&#8217;s awesome bandwidth and disk space allowances aren&#8217;t so hot if the CPU can&#8217;t keep up.  And they don&#8217;t offer any upgrades.)  We moved to <a href="http://www.macminicolo.net/">MacMiniColo.net</a> and things have been much better.</p>
<p>(As an aside, we now have enough readers at Freemacware.com that when we link to small-time web sites, we occasionally cause account overages.)</p>
<p>From the consumer point of view, it&#8217;s annoying to find something interesting on Digg and then not be able to read it because the account is maxed out.</p>
<p>MY POINT<br />
When you max out your account, it&#8217;s stupid for web hosting companies to show an error message.  It&#8217;s a lost marketing opportunity.  Web hosting companies ought to display an ad touting themselves and a sponsor, and then redirect to your site.  For example:</p>
<blockquote><p>Welcome Digg readers.  This web site has used more than its share of bandwidth, but we&#8217;d like you to see it anyway. You&#8217;ll be redirected in 5 seconds.  Brought to you by ACME hosting company and XYZ corporate sponsor.</p></blockquote>
</div>]]></content:encoded>
			<wfw:commentRss>http://richardkmiller.com/231/web-hosting-idea-ads-on-over-drawn-accounts/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>What Would Seth Godin Do</title>
		<link>http://richardkmiller.com/227/what-would-seth-godin-do</link>
		<comments>http://richardkmiller.com/227/what-would-seth-godin-do#comments</comments>
		<pubDate>Tue, 19 Dec 2006 20:46:57 +0000</pubDate>
		<dc:creator>Richard K Miller</dc:creator>
				<category><![CDATA[Main]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.richardkmiller.com/blog/archives/2006/12/what-would-seth-godin-do</guid>
		<description><![CDATA[If you&#8217;re a marketer or a WordPress user, you might like the WordPress plugin I recently created. Based on a principle taught by Seth Godin, it lets you treat new visitors to your site different from returning visitors: &#8220;What Would &#8230; <a href="http://richardkmiller.com/227/what-would-seth-godin-do">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class='microid-98548e61d51f29bbc2e71a2c68b05f2b5d3c9804'><p>If you&#8217;re a marketer or a WordPress user, you might like the WordPress plugin I recently created.  Based on a <a href="http://sethgodin.typepad.com/seths_blog/2006/08/in_the_middle_s.html">principle taught by Seth Godin</a>, it lets you treat new visitors to your site different from returning visitors:</p>
<p><a href="http://www.richardkmiller.com/blog/wordpress-plugin-what-would-seth-godin-do/">&#8220;What Would Seth Godin Do&#8221; WordPress plugin</a></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://richardkmiller.com/227/what-would-seth-godin-do/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Berkeley Course on Open Source</title>
		<link>http://richardkmiller.com/214/berkeley-course-on-open-source</link>
		<comments>http://richardkmiller.com/214/berkeley-course-on-open-source#comments</comments>
		<pubDate>Thu, 16 Nov 2006 18:41:47 +0000</pubDate>
		<dc:creator>Richard K Miller</dc:creator>
				<category><![CDATA[Law]]></category>
		<category><![CDATA[Main]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.richardkmiller.com/blog/archives/2006/11/berkeley-course-on-open-source</guid>
		<description><![CDATA[If you&#8217;d like to learn more about &#8220;open source software&#8221; &#8212; what it is and how it fits into society &#8212; Berkeley has a new course entitled Open Source Development and Distribution of Digital Information: Technical, Economic, Social, and Legal &#8230; <a href="http://richardkmiller.com/214/berkeley-course-on-open-source">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class='microid-c06e39868d00fbfebcfbe54d6a05c833d8df73dd'><p>If you&#8217;d like to learn more about &#8220;open source software&#8221; &#8212; what it is and how it fits into society &#8212; Berkeley has a new course entitled <a href="http://webcast.berkeley.edu/courses/archive.php?seriesid=1906978370">Open Source Development and Distribution of Digital Information: Technical, Economic, Social, and Legal Perspectives</a>.  Course lectures are available online as a podcast.</p>
<p>I think these will be great lectures to follow.  Downloading now&#8230;</p>
<p>Via: <a href="http://opencontent.org/blog/archives/284">OpenContent.org</a></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://richardkmiller.com/214/berkeley-course-on-open-source/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>TagJungle coming soon</title>
		<link>http://richardkmiller.com/213/tagjungle-coming-soon</link>
		<comments>http://richardkmiller.com/213/tagjungle-coming-soon#comments</comments>
		<pubDate>Mon, 16 Oct 2006 14:09:07 +0000</pubDate>
		<dc:creator>Richard K Miller</dc:creator>
				<category><![CDATA[Main]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Utah]]></category>

		<guid isPermaLink="false">http://www.richardkmiller.com/blog/archives/2006/10/tagjungle-coming-soon</guid>
		<description><![CDATA[On Friday I attended a luncheon about Tag Jungle, the latest project to come from Phil Burns and his talented development team. I&#8217;m excited for what it promises to be &#8212; a better way of finding blog posts that interest &#8230; <a href="http://richardkmiller.com/213/tagjungle-coming-soon">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class='microid-3cd5966800e38e32525864dab117309d36c58d11'><p>On Friday I attended a luncheon about <a href="http://www.tagjungle.com/">Tag Jungle</a>, the latest project to come from Phil Burns and his talented development team.  I&#8217;m excited for what it promises to be &#8212; a better way of finding blog posts that interest me.  I&#8217;ll be able to browse by keyword, and it will even find related topics.</p>
<p>Just because a blog post contains a certain word doesn&#8217;t mean it&#8217;s what I want.  (E.g. &#8220;apple pie&#8221; when I wanted &#8220;Apple computers&#8221;.) And if it contains a related word (like &#8220;Mac&#8221; instead of &#8220;Apple&#8221;) I still want to see it.  TagJungle promises to distinguish between these differences and help me find what I want in the blogosphere.</p>
<p>Read more at Phil&#8217;s blog:</p>
<p><a href="http://www.phil801.com/wpblog/2006/10/12/adventures-in-the-jungle/">Adventures in the Jungle</a></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://richardkmiller.com/213/tagjungle-coming-soon/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to be a better programmer</title>
		<link>http://richardkmiller.com/212/how-to-be-a-better-programmer</link>
		<comments>http://richardkmiller.com/212/how-to-be-a-better-programmer#comments</comments>
		<pubDate>Sat, 02 Sep 2006 22:59:17 +0000</pubDate>
		<dc:creator>Richard K Miller</dc:creator>
				<category><![CDATA[Main]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.richardkmiller.com/blog/archives/2006/09/how-to-be-a-better-programmer</guid>
		<description><![CDATA[In response to a question about how to become a better programmer, Paul Penrod gave the following tips on a mailing list to which I subscribe. Many of these could apply to any profession. I&#8217;m going to make few suggestions &#8230; <a href="http://richardkmiller.com/212/how-to-be-a-better-programmer">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class='microid-c2fdd05aebf6ef7af61b973c7f339762214bc6f9'><p>In response to a question about how to become a better programmer, Paul Penrod gave the following tips on a mailing list to which I subscribe.  Many of these could apply to any profession.</p>
<blockquote><p>
I&#8217;m going to make few suggestions that might help you.</p>
<p>You don&#8217;t really need to apprentice under anyone, unless it&#8217;s your aim to adopt their style, thinking logic and methodology. The key to being a successful programmer is learning to think properly about the problem at hand, and be fluent enough with the language of choice to express yourself simply, but elegantly. Programming is an algorithmic exercise, that is part science and part art &#8211; mostly art. You need to develop a style that works for you and the problems you wish to solve, and that takes time and experience. It&#8217;s one of the few disciplines where [on the job training] is just as valuable &#8211; if not more so, than hitting the books, and listening to academics.</p>
<p>Over the years I spent a great deal of time studying what others did (along with their code) and figured out for myself what would work best in my situation at the time. There are some basic tenets that have come from all that effort:
</p></blockquote>
<ol>
<li>Understand the problem completely first.</li>
<li>There is no perfect language for all problems, although C comes pretty close.</li>
<li>YOUR perfect language(s) will be the one(s) that is(are) most compatible with YOUR thinking process.</li>
<li>Keep It Simple Stupid &#8211; ALWAYS works.</li>
<li>ALWAYS document completely what you did &#8211; you will thank yourself is six months time.</li>
<li>Never turn down an opportunity to see what someone else did &#8211; they may have figured out a simpler, more effective way.</li>
<li>Always be teachable.</li>
<li>There is almost always a better way. Many solutions are at best, compromises.</li>
<li>Learn what others did wrong and don&#8217;t repeat their mistakes.</li>
<li>Don&#8217;t be offended easily.</li>
<li>There are plenty of intelligent idiots, and few sages &#8211; learn to tell the difference and pay attention.</li>
<li>Just because you can, doesn&#8217;t mean you should.</li>
<li>Develop your own style. You are a unique individual, and you don&#8217;t think the same as anyone else.</li>
<li>It&#8217;s an art form first, and technical second. </li>
<li>Software is never &#8220;done&#8221;. It&#8217;s a work in progress.</li>
<li>Have fun with it. If you aren&#8217;t enjoying the effort, it will show in the results.</li>
<li>Share what you have learned with others. It pays dividends far beyond the code itself.</li>
</ol>
</div>]]></content:encoded>
			<wfw:commentRss>http://richardkmiller.com/212/how-to-be-a-better-programmer/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Provo Labs in the news</title>
		<link>http://richardkmiller.com/211/provo-labs-in-the-news</link>
		<comments>http://richardkmiller.com/211/provo-labs-in-the-news#comments</comments>
		<pubDate>Tue, 29 Aug 2006 16:24:25 +0000</pubDate>
		<dc:creator>Richard K Miller</dc:creator>
				<category><![CDATA[Main]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Utah]]></category>
		<category><![CDATA[Web2.0]]></category>

		<guid isPermaLink="false">http://www.richardkmiller.com/blog/archives/2006/08/provo-labs-in-the-news</guid>
		<description><![CDATA[Today the Las Vegas Review-Journal, the largest newspaper in Las Vegas, published a column on Provo Labs and how Carolynn Duncan landed a job with them through blogging. The column also alludes to the startup- and technology-friendly environment that Utah &#8230; <a href="http://richardkmiller.com/211/provo-labs-in-the-news">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div class='microid-f79b967483f1bfc368b27ec5b81dba76fb1b5d86'><p>Today the <a href="http://www.reviewjournal.com/">Las Vegas Review-Journal</a>, the largest newspaper in Las Vegas, published a column on <a href="http://www.provolabs.com/">Provo Labs</a> and how <a href="http://www.carolynnduncan.com/">Carolynn Duncan</a> landed a job with them through blogging.  The column also alludes to the startup- and technology-friendly environment that Utah is becoming: &#8220;[Geek dinner] is a monthly gathering of the high-tech community in Provo&#8230;.&#8221;</p>
<p>If you&#8217;re an entrepreneur, you can get inexpensive office space and invaluable mentoring through <a href="http://www.provolabs.com/academy/">Provo Labs Academy.</a>  If you&#8217;re looking for development work, <a href="http://www.goodrecruits.com/2006/08/gutsy_web_20_development_team.html">Provo Labs Solutions</a> is a one-stop shop.</p>
<p>This story could easily have been about Russ Page; I heard he also <a href="http://www.russpage.net/jumping-ship-and-my-blog-was-the-catalyst/">landed a job through blogging</a>.</p>
<p>Article: <a href="http://www.reviewjournal.com/lvrj_home/2006/Aug-29-Tue-2006/business/9212342.html">If you write it, it will come about: How a blog landed its author a job</a></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://richardkmiller.com/211/provo-labs-in-the-news/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

