<?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>Theodicius</title>
	<atom:link href="http://www.theodicius.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.theodicius.net</link>
	<description>Good. Evil. Bratwurst.</description>
	<lastBuildDate>Mon, 14 Nov 2011 18:01:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Choose Your Own Coding Adventure?</title>
		<link>http://www.theodicius.net/archives/2011/11/14/choose-your-own-coding-adventure/</link>
		<comments>http://www.theodicius.net/archives/2011/11/14/choose-your-own-coding-adventure/#comments</comments>
		<pubDate>Mon, 14 Nov 2011 18:01:53 +0000</pubDate>
		<dc:creator>arlen</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.theodicius.net/?p=472</guid>
		<description><![CDATA[You remember the Choose Your Own Adventure series? You&#8217;d read a paragraph or two, then be presented with a question, the answer determining which of several pages you&#8217;d turn to in order to continue the story. I may be giving too much credit to Mike Stackpole, Rick Loomis and the rest of the crew at [...]]]></description>
			<content:encoded><![CDATA[<p>You remember the Choose Your Own Adventure series? You&#8217;d read a paragraph or two, then be presented with a question, the answer determining which of several pages you&#8217;d turn to in order to continue the story.</p>
<p>I may be giving too much credit to Mike Stackpole, Rick Loomis and the rest of the crew at Flying Buffalo for inventing the genre, but I give them credit for coming up with an interesting way of bringing interactivity to paper.</p>
<p>Creative as it was, the resulting stories were difficult to read.<span id="more-472"></span> I had to stop every few sentences to turn pages, and jumping around through the book like a peripatetic kangaroo kept me from getting involved in the story itself, kept me all too aware of the medium rather than the message.</p>
<p>Yet how many of us today follow this noble, but failed, experiment when writing our code?</p>
<p>We begin writing our methods with the best of intentions. We lay out the opening scene (the arguments) and launch into the gripping tale of what is happening to them.</p>
<p>Yet only a few lines into the story, we stop. We interrupt the narrative flow in order to make a decision and send the reader off to somewhere else, with no regard for what is happening in the main storyline.</p>
<p>It might be something simple. We might break the reader’s concentration with something like:</p>
<p><code>id = params[:id].nil? ? 1 : params[:id]<br />
Model.find(id)</code></p>
<p>Not only that, but if you wanted to be sure you weren&#8217;t getting slipped something troubling, you&#8217;d also have to check to see if what you were handed as the id actually is a numeric, and if not, handle that separately. It may be a small thing, but it distracts the reader (and ourselves) from the main point of the adventure, which is what we’re about to do with that id.</p>
<p>But we have to be sure there’s something both safe and useful in that id before we use it, I hear you say? Of course we do. It&#8217;s just there’s a better, more reader-friendly, way to word that. A way that will do less to distract our reader from our main plot.</p>
<p>If we use the fetch() method instead of simply [] to get the value, we can specify a default to use if the index is unset. This means we&#8217;ll get a real value back, no matter what, and won&#8217;t have to test for Nil and do any conditional branching to handle it as a special case.</p>
<p>Adding the .to_i method at the end of that (something we couldn&#8217;t do so long as the possibility of getting a Nil remained) will make the received value safer to use, by returning zero (a number) if the id value is anything but a number, which means the find method will always have a parameter it can work with, so we can drop it directly into the find:</p>
<p><code>Model.find(params.fetch(:id, 1).to_i)</code></p>
<p>This single line pulls from the model by id, supplies a default value of 1 if the id has not been given, and makes sure the given id is in fact a number, returning a zero if it isn&#8217;t.</p>
<p>By doing this we&#8217;ve handled the problems of Nil and non-numeric input at the same time, so we can guarantee the model will get a type of input it can use; failure in finding the zero id (the result of trying a non-numeric id) can be handled exactly the same as any failure to find an id not present in the database.</p>
<p>Look at your own code, this time realizing you&#8217;re telling the story of what happens to the data it encounters. Remember, the code you write today will be read tomorrow, either by yourself or someone else. Use good storytelling techniques to make that easier.</p>
<p>Tell the story of your code clearly, keeping digressions like error handling out if the main narrative flow as much as possible. Keep the main purpose of the code in a smooth unified narrative flow, so as not to confuse your reader. Your reader (who might also be yourself at some future date) will thank you for it.</p>
<p>And so will your code.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.theodicius.net/archives/2011/11/14/choose-your-own-coding-adventure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby 1.9 and Nginx on FreeBSD</title>
		<link>http://www.theodicius.net/archives/2011/11/01/ruby-1-9-and-nginx-on-freebsd/</link>
		<comments>http://www.theodicius.net/archives/2011/11/01/ruby-1-9-and-nginx-on-freebsd/#comments</comments>
		<pubDate>Wed, 02 Nov 2011 01:10:54 +0000</pubDate>
		<dc:creator>arlen</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.theodicius.net/?p=466</guid>
		<description><![CDATA[Noticed some, um, interesting, gotchas when setting up ruby 1.9 and the nginx web server on FreeBSD. The issue with the ruby install is subtle, and doesn&#8217;t really show up until long after you have installed it. The issue is it points the gem repository to the wrong place. It points the gem repository to [...]]]></description>
			<content:encoded><![CDATA[<p>Noticed some, um, interesting, gotchas when setting up ruby 1.9 and the nginx web server on FreeBSD.</p>
<p>The issue with the ruby install is subtle, and doesn&#8217;t really show up until long after you have installed it. The issue is it points the gem repository to the wrong place. It points the gem repository to /usr/local/lib/ruby/gems/1.8 which is where the 1.8 gems should reside, not the 1.9 gems.<span id="more-466"></span></p>
<p>The ruby 1.9 gems should reside at /usr/local/lib/ruby/gems/1.9. And the default install doesn&#8217;t set that up. A sure way to make that happen is to put:</p>
<p><code>RUBY_DEFAULT_VER=1.9</code></p>
<p>in the /etc/make.conf file. It&#8217;s possible that adding the &#8220;-E RUBY_DEFAULT_VER=1.9&#8243; flag on the make command will do the same thing, but I found the make.conf change worked, so I stopped at that point.</p>
<p>Make that change before you install ruby19 from the ports:</p>
<p><code>cd /usr/ports/lang/ruby19<br />
make install clean</code></p>
<p>After that, the gems will install in the right location and everything will be work the way it&#8217;s supposed.</p>
<h3>Nginx</h3>
<p>The regular ports install for Nginx, on the other hand, is defective from the get-go. While the ruby issue is a subtle one that may not even pose a problem in some circumstances, the ningx issue will prevent the server from responding to any control scripts.</p>
<p>The issue here is the default configuration script points the .pid file to the wrong location. In the default nginx.conf file installed by the ports system is the line:</p>
<p><code>pid        logs/nginx.pid;</code></p>
<p>This means the control scripts will not be able to find the nginx.pid file in order to send it signals. Instead the line needs to read:</p>
<p><code>pid        /var/run/nginx.pid;</code></p>
<p>This will locate the nginx.pid file where the control scripts can find it, and everything will work.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.theodicius.net/archives/2011/11/01/ruby-1-9-and-nginx-on-freebsd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting Rails 3.0.3/Nginx/Passenger Up On Dreamhost VPS</title>
		<link>http://www.theodicius.net/archives/2011/10/21/getting-rails-3-0-3nginxpassenger-up-on-dreamhost-vps/</link>
		<comments>http://www.theodicius.net/archives/2011/10/21/getting-rails-3-0-3nginxpassenger-up-on-dreamhost-vps/#comments</comments>
		<pubDate>Fri, 21 Oct 2011 20:12:46 +0000</pubDate>
		<dc:creator>arlen</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://www.theodicius.net/?p=450</guid>
		<description><![CDATA[(Edited 2001/10/24 to add apache notes at end.) Rails isn&#8217;t always an easy proposition on Dreamhost, and this was no exception. BTW, this is *not* the rvm version. I wanted to get the Dreamhost default setup working before I started playing with rvm. I&#8217;ll probably post an rvm-related set of instructions later. In this case, [...]]]></description>
			<content:encoded><![CDATA[<p>(Edited 2001/10/24 to add apache notes at end.)</p>
<p>Rails isn&#8217;t always an easy proposition on Dreamhost, and this was no exception. BTW, this is *not* the rvm version. I wanted to get the Dreamhost default setup working before I started playing with rvm. I&#8217;ll probably post an rvm-related set of instructions later.</p>
<p>In this case, I wanted to move some sites over to NginX as a trial, because the apache/passenger combination had been seeming rather slow and memory-intensive of late. I wanted to see how much time and RAM NginX would save me.<span id="more-450"></span></p>
<p><a href="http://www.theodicius.net/wp-content/uploads/2011/10/dhcp.png"><img src="http://www.theodicius.net/wp-content/uploads/2011/10/dhcp.png" alt="Dreamhost Control Panel Settings -- NginX on and mod_php off" title="dhcp" height="200" style="float:left;padding:10px;" /></a>The first bits were simple. Setting up the VPS using the Dreamhost CP went easily, then came time to configure it. The settings are pretty much self-explanatory, as you can see. The idea is to select the NginX web server, then turn mod_php off. (I did the latter just because I&#8217;m anal-retentive: mod_php is an apache module, so it wouldn&#8217;t work with NginX anyway. But even if it did, I wouldn&#8217;t want it; I want to run PHP as a fastCGI/FPM process, anyway.)</p>
<p>Setting those gives you the basic setup for the domain. Unfortunately, that in itself isn&#8217;t enough to get the default Rails setup on Dreamhost (Rails 3.0.3 at the time of this writing) working properly. The fun starts now.</p>
<p>After<br />
<code><br />
rails new appname --database=mysql<br />
bundle install<br />
</code><br />
builds the rails app, but there are more issues to come. The first is that Passenger doesn&#8217;t find the bundler to load. This is because it&#8217;s not looking for it (and, by extension, <em>all</em> your site&#8217;s gems) in the right place.</p>
<p>I recommend covering this in a couple of places, because this is something that will end up biting you again and again if you don&#8217;t. So, first, in the .bashrc file of your home directory you&#8217;ll want:</p>
<p><code>export GEM_HOME="$HOME/.gems/"<br />
export GEM_PATH="$GEM_HOME:/usr/lib/ruby/gems/1.8"<br />
export PATH="$HOME/bin:$HOME/.gems/bin:$PATH"<br />
</code></p>
<p>This will make sure your deployment tools, like capistrano, will see the gems. The &#8216;/user/lib/ruby/gems/1.8&#8242; path is the default path Dreamhost is storing its own set of gems. You should check to ensure that&#8217;s where it is on your system, and if it&#8217;s different change it to whatever it is on your site.</p>
<p>Then you need to do something similar in /config/setup_load_paths.rb (you&#8217;ll need to create the file yourself, it&#8217;s not in the standard Rails 3.0.3 setup):</p>
<p><code>ENV['GEM_HOME']='/home/username/.gems'<br />
# You can also set GEM_PATH if needed<br />
ENV['GEM_PATH']="#{ENV['GEM_HOME']}:/usr/lib/ruby/gems/1.8"</code></p>
<p>You need it here, so that Rack can find the gems; it loads before Rails, after all, so putting them in the Rails config area wouldn&#8217;t help.</p>
<p>You&#8217;re probably not done yet. There&#8217;s another bug waiting to bite you in your Gemfile. I built this Rails app for mySQL, remember? This line:</p>
<p><code>gem 'mysql2'</code></p>
<p>was put in the Gemfile by Rails as a default. It resulted (in my case) in bundler using the Dreamhost-supplied mysql2-0.3.7 gem. And you&#8217;ll probably trigger an ActiveRecord error with that, along the lines of &#8220;this version of mySQL2 doesn&#8217;t ship with the ActiveRecord adapter.&#8221; Oops.</p>
<p>The solution is to drop back to a previous version of the mysql2 adapter for this, by changing the mysql2 line in your Gemfile to be</p>
<p><code>gem 'mysql2', '< 0.3'</code></p>
<p>That tells bundler you want one earlier than 0.3. I've seen it work with 0.2.7 and 0.2.13, so it doesn't seem to be too picky. It may even work with later ones than that; all I can say is I know 0.3.7 doesn't work with it.</p>
<p>That was the extra work it took me up front to get just a vanilla Rails install functioning on Dreamhost VPS. Hope it saves someone else the hours of searching and trial and error I spent getting it to work.</p>
<h4>And Of Course Apache Is Different</h4>
<p>It can't be so simple as to be the same changes with both. With apache, you need to place the gem path code at the top of config.ru:<br />
</code><code><br />
ENV['GEM_HOME']='/home/demorails/.gems'<br />
# You can also set GEM_PATH if needed<br />
ENV['GEM_PATH']="#{ENV['GEM_HOME']}:/usr/lib/ruby/gems/1.8"<br />
</code><br />
and it doesn&#8217;t need the setup_load_paths.rb file to be present.</p>
<p>Of course, you can always put the path code in both places. Having the setup_load_paths.rb file doesn&#8217;t seem to disturb apache and the extra code in config.ru doesn&#8217;t bother NginX. It&#8217;s not DRY, no, but it&#8217;s also not something that will be changing very often, if at all, so I can live with it.</p>
<h4>Credits</h4>
<ul>
<li><a href="http://iceboundflame.com/2010/12/setting-gem_home-on-phusion-passenger-3" title="David Liu">David Liu</a></li>
<li><a href="http://stackoverflow.com/questions/3467054/problem-with-mysql2-and-rails3-bundler" title="mysql2 issue">Trinitronix</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.theodicius.net/archives/2011/10/21/getting-rails-3-0-3nginxpassenger-up-on-dreamhost-vps/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Secret to Reality Distortion</title>
		<link>http://www.theodicius.net/archives/2011/10/18/the-secret-to-reality-distortion/</link>
		<comments>http://www.theodicius.net/archives/2011/10/18/the-secret-to-reality-distortion/#comments</comments>
		<pubDate>Tue, 18 Oct 2011 15:04:04 +0000</pubDate>
		<dc:creator>arlen</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.theodicius.net/?p=448</guid>
		<description><![CDATA[I know the secret to the (in)famous Steve Jobs Reality Distortion Field. I&#8217;ve even used it myself, though I make no claim to equal his mastery of it. But the point is, it&#8217;s available to all of us. And now, in the wake of his passing, the time has come to talk about it. It [...]]]></description>
			<content:encoded><![CDATA[<p>I know the secret to the (in)famous Steve Jobs Reality Distortion Field. I&#8217;ve even used it myself, though I make no claim to equal his mastery of it. But the point is, it&#8217;s available to all of us. And now, in the wake of his passing, the time has come to talk about it.</p>
<p>It is at once both the easiest, and the hardest, stunt to perform. The key is, it&#8217;s not a stunt. You can&#8217;t fake it, you can&#8217;t call it up on demand for any little thing you&#8217;re trying to sell.<span id="more-448"></span></p>
<p>It&#8217;s passion.</p>
<p>Passion needs a specific target. You can be an effective salesperson with a passion for selling, but unless you have a passion for <em>what</em> you&#8217;re selling, you can&#8217;t change reality.</p>
<p>And you can&#8217;t simulate passion effectively, not in the amounts a functioning Reality Distortion Field consumes. You might be able to bend it for one person for a brief time, but that&#8217;s not distorting reality, that&#8217;s simple persuasion.</p>
<p>It&#8217;s not an intellectual thing; you can&#8217;t use numbers and figures to produce it. They stimulate the wrong side of the brain. That side specializes in reality; in the cold dispassionate analysis of hard facts. It&#8217;s true you can bamboozle with figures (Mark Twain once wrote &#8216;Figures don&#8217;t lie, but Liars can figure&#8217;) but again, that&#8217;s not really distorting reality.</p>
<p>But passion, genuinely felt and genuinely expressed, makes its way into our emotions, into that place where numbers can&#8217;t reach &#8212; unless you&#8217;re a member of that minority whose real passion <em>is</em> for numbers.</p>
<p>Passion is contagious. You&#8217;ve felt it, any time you&#8217;ve been among passionate people. Expressed clumsily, it can be off-putting. But smooth out the expression of it, purify it, let it drip over your words as they come out, and it becomes a hundred times more contagious than any virus.</p>
<p>You want to distort reality like a pro? The first step is the easiest; find what you&#8217;re passionate about. You can&#8217;t assign this sort of passion by an act of will; you can&#8217;t become really passionate about just anything. You&#8217;re not wired that way.</p>
<p>But somewhere, there <em>is</em> something to excite those passions within you. It&#8217;s got to be honestly felt. It has to exist. You can&#8217;t manufacture it, you can only refine it. Find your passion and trust it, you&#8217;ll know it when you see it, and nurse that passion. Smooth it out, refine it until it becomes stronger than any steel.</p>
<p>And while you&#8217;re refining it, learn to wield it. This takes practice, like anything else, and you&#8217;ll fail. Don&#8217;t worry about that. It even happened to Jobs himself, on occasion. Learn from it and continue. Keep at it.</p>
<p>Archimedes once wrote, &#8220;Give me a lever long enough and a place to stand, and I can move the world.&#8221; Your lever is your passion, refined until it cannot break. The target of this passion is where you stand.</p>
<p>Go ahead, start moving us.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.theodicius.net/archives/2011/10/18/the-secret-to-reality-distortion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lemme Get This Straight</title>
		<link>http://www.theodicius.net/archives/2011/10/12/lemme-get-this-straight/</link>
		<comments>http://www.theodicius.net/archives/2011/10/12/lemme-get-this-straight/#comments</comments>
		<pubDate>Wed, 12 Oct 2011 22:06:07 +0000</pubDate>
		<dc:creator>arlen</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.theodicius.net/?p=442</guid>
		<description><![CDATA[More and more I hear the refrain that as a developer you can &#8220;circumvent&#8221; Apple&#8217;s AppStore and &#8220;walled garden&#8221; by developing web apps for iOS devices. I even hear Apple and Steve Jobs positioned as wanting to &#8220;destroy the web&#8221; with their focus on &#8220;native apps.&#8221; That their &#8220;focus on native apps&#8221; is &#8220;splintering the [...]]]></description>
			<content:encoded><![CDATA[<p>More and more I hear the refrain that as a developer you can &#8220;circumvent&#8221; Apple&#8217;s AppStore and &#8220;walled garden&#8221; by developing web apps for iOS devices.</p>
<p>I even hear Apple and Steve Jobs positioned as wanting to &#8220;destroy the web&#8221; with their focus on &#8220;native apps.&#8221; That their &#8220;focus on native apps&#8221; is &#8220;splintering the web.&#8221;<span id="more-442"></span></p>
<p>Now that I&#8217;ve laughed myself silly at the irony, it&#8217;s time to take a closer look at the facts in the case. But before we do so, some full disclosure. I use more than one Apple product. I also build Windows machines from parts for my church, contribute to Open Source projects, and run Ubuntu as well as Windows 7 and OSX in my house (in fact, there are more Windows licenses than OSX licenses around here). My prime work is done on OSX, not because it&#8217;s perfect, but because it and I get along better than Windows or Ubuntu and I. If that changes, I&#8217;ll have no compunction about switching. My computer is a tool, and like any competent workman I use the tool that fits my hand best.</p>
<p>So let&#8217;s turn back the pages of time and look at the iPhone launch. A <a href="http://www.engadget.com/2007/06/11/apple-announces-third-party-software-details-for-iphone/" title="Chris Ziegler's Note">note from Chris Zeigler</a> on Engadget from that time says Apple was encouraging developers to code web apps and download them from their own servers. If Chris&#8217;s word isn&#8217;t good enough for you, here&#8217;s <a href="http://www.apple.com/pr/library/2007/06/11iPhone-to-Support-Third-Party-Web-2-0-Applications.html" title="iPhone Supports 3rd party apps">an official Apple press release</a>: that says the same thing. Apple even set up <a href="http://www.apple.com/webapps/" title="Apple's Web Apps Directory">a directory</a> specifically to point to those web apps.</p>
<p>But the devs in Apple&#8217;s customer base clamored for the ability to write native apps, so Apple shipped an SDK, and created the AppStore to distribute those apps. No, not out of the goodness of their hearts. Of course they knew they would make money off it.</p>
<p>But note the chronology, here. Apple intended, even encouraged, devs to write web apps that could be hosted on their (the devs&#8217;) servers, uncontrolled by Apple. In short, Apple was pushing open web access on Day One of the iPhone launch. And, so far as I can tell, has never backed off that.</p>
<p>So go ahead and build web apps. It&#8217;s fun, the technology is open to all, you can build and ship what you like and keep all the money for yourself, if you wish. Just don&#8217;t say you&#8217;re &#8220;circumventing Apple&#8217;s iron control&#8221; when you do it. Have the integrity to say you&#8217;re taking Steve Jobs advice for how to develop for the iPhone, because that&#8217;s <em>really</em> what you&#8217;re doing.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.theodicius.net/archives/2011/10/12/lemme-get-this-straight/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Terra Incognita</title>
		<link>http://www.theodicius.net/archives/2011/09/15/terra-incognita/</link>
		<comments>http://www.theodicius.net/archives/2011/09/15/terra-incognita/#comments</comments>
		<pubDate>Thu, 15 Sep 2011 17:53:08 +0000</pubDate>
		<dc:creator>arlen</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Science Fiction/Fantasy]]></category>

		<guid isPermaLink="false">http://www.theodicius.net/?p=434</guid>
		<description><![CDATA[OK, let&#8217;s get the disclaimers out of the way right up front. Klout.com tossed me a free Fox VIP hoodie to take a sneak peek at the pilot for Fox&#8217;s new series Terra Nova. Like I needed to be paid to peek at a new science fiction TV show. And they encouraged (but did not [...]]]></description>
			<content:encoded><![CDATA[<p>OK, let&#8217;s get the disclaimers out of the way right up front. Klout.com tossed me a free Fox VIP hoodie to take a sneak peek at the pilot for Fox&#8217;s new series Terra Nova. Like <em>I</em> needed to be paid to peek at a new science fiction TV show. <em>And</em> they encouraged (but did not demand) that I write about it. Again, as if I needed incentive to write something. They did <em>not</em> try and tell me what to write (and those who know me are now laughing hysterically at the prospect of <strong>that</strong> ever happening).</p>
<p>As with most TV shows, they drive through the setup so hard and fast you don&#8217;t have time to care much about anything. The 22nd century is Blade Runner Time, loving cop fathers one too many kids, gets tossed in the slammer. Loving wife is doctor, skill wanted desperately at Terra Nova (more later) so is recruited, but can only take two kids, and must leave husband in jail. Do I <em>really</em> need to explain what happens next?<span id="more-434"></span></p>
<p>Let&#8217;s jump past the completely unbelievable escape sequence and get to Terra Nova, shall we? Someone discovered a fracture in time and space. They didn&#8217;t know where and when it led to so they sent a probe through, and then looked for its signal. With an arrogance only a TV &#8220;scientist&#8221; could muster, they concluded that since the probe signal didn&#8217;t turn up anywhere it <em>must</em> represent an alternate time stream (the alternate time stream thingummy is required to get around the Butterfly Effect, and if you don&#8217;t know what that is, you need to find a copy of Ray Bradbury&#8217;s <b>The Sound Of Thunder</b> and read it, like now).</p>
<p>So the where of Terra Nova is an alternate timeline of Earth, roughly 85 million years ago (no explanation of how they determined that, as well; after all, an alternate timeline means there may be no end to divergences from anything we know about our past). The who is the standard family set of loving parents, rebellious but sensitive teenage boy, awkward nerdy teenage girl, fearless five year old innocent girl. Boy leaves love of his life behind (of course) and finds a new love interest (of course). Encouraged by New Crowd, boy breaks rules.</p>
<p>Which sets up the family tension, because, you see, father, being an ex-cop does what every ex-cop would do, leaves his agricultural duties  behind to follow Man With A Gun, and long story short (too late) gets hired on as Security.</p>
<p>What we&#8217;re looking at here is <b>Jurassic Park</b> (hi there, Mr. Spielberg, executive producer) meets <b>Lost</b>. Oh, and we can&#8217;t go away without a mention of the Bad Guys. They&#8217;re called &#8220;sixers,&#8221; not because they played basketball in Philadelphia, but because they came in as part of the Sixth Migration, and seem intent on taking over Terra Nova.</p>
<p>If I&#8217;ve seemed snarky it&#8217;s because this is so standard, so trite, that it begs for it. But then, that&#8217;s so for a lot of television shows at the beginning; television, it seems, always selects its starting characters &#8220;off the rack.&#8221; What counts is where they go from here.</p>
<p>The object of a pilot is to set up the board for the rest of the season; to show the players and get them in place, and provide enough to hook you into coming back next week so we can see what they will do, now they are in position.</p>
<p>What will keep me coming back is how unpredictable they are, or (failing that) how much they make me enjoy a ride in familiar territory. Spielberg, at least, is a master of that. The credits for the rest of the executive producer lot (Castle, The 4400, 24) is spotty. Castle is saved by Nathan Fillion&#8217;s grown-up little boy (I&#8217;d call it an act, but I know better), the 4400 had a good season or two, then ran out of steam, and 24 wasn&#8217;t tolerable after the middle of the second season.</p>
<p>My expectations (after seeing the first hour of the two-hour pilot) are that the Commander has a spy among the sixers, the sixers are attempting to get rid of the dictatorial, even  tyrannical, government of Terra Nova and set up something blissfully democratic. Good Cop Dad will find some disturbing things, probably someone playing games with the food supply, that will make him start to question. The boy will hate his father until near the middle of the season (for daring to let himself be put in prison for trying to protect his illegally large family) but honestly, the longer they let that go on, the less likely I&#8217;m going to stay around. Maybe it&#8217;s my age, but overblown teenage angst makes me more and more twitchy.</p>
<p>So yes, I mean to imply I&#8217;ll be watching, at least the early part of the season. I want to see real people grow out of these cardboard cutouts they&#8217;ve been parading around in front of me. I want to see the older girl&#8217;s knowledge get used for something besides making herself blush. (Honestly, I&#8217;m sooo tired of the sexist tripe that makes her embarrassed by how smart she is, I almost hit the back button on the browser. Cut it out, you cretinous writers!) But I&#8217;d better see signs of life soon.</p>
<p>It&#8217;s fashionable to rate things like this with numbers, so I&#8217;m not going to. Instead I&#8217;m simply going to say that Terra Nova is starting out in a hole, burdened with ideas and characters that haven&#8217;t been new for a half-century or more, but it has enough potential that I&#8217;m willing to invest a few more hours in it waiting to see something of that potential realized. I&#8217;ll give it chance to either surprise me or make me care (I <em>almost</em> care about dad and older girl right now; doctor mom lost me when she just pulled a leech-like thing another doctor had placed on a man off his back without knowing anything about it, including what it was, let alone the proper way of removing it).</p>
<p>But seriously, television, science fiction is the literature of ideas. It&#8217;d help to have a few before you try this again, OK?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.theodicius.net/archives/2011/09/15/terra-incognita/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Matter of Will</title>
		<link>http://www.theodicius.net/archives/2011/08/29/a-matter-of-will/</link>
		<comments>http://www.theodicius.net/archives/2011/08/29/a-matter-of-will/#comments</comments>
		<pubDate>Mon, 29 Aug 2011 16:28:23 +0000</pubDate>
		<dc:creator>arlen</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Science Fiction/Fantasy]]></category>

		<guid isPermaLink="false">http://www.theodicius.net/?p=428</guid>
		<description><![CDATA[Just finished working in Program Operations for the latest WorldCon (Renovation) and started planning for the next one, in Chicago, when I&#8217;m running the department. Not because I&#8217;m going to do it so much differently (let&#8217;s face it, when you learn from the best, there&#8217;s not a lot of ways to improve on it) but [...]]]></description>
			<content:encoded><![CDATA[<p>Just finished working in Program Operations for the latest WorldCon (Renovation) and started planning for the next one, in Chicago, when I&#8217;m running the department. Not because I&#8217;m going to do it so much differently (let&#8217;s face it, when you learn from the best, there&#8217;s not a lot of ways to improve on it) but because it&#8217;ll be me.</p>
<p>Still, I&#8217;m fairly nervous about it, and the why of that didn&#8217;t become clear until the train ride home from Reno, when I had time to think.<span id="more-428"></span></p>
<p>After Raleigh (last year&#8217;s NASFic) I&#8217;m convinced that I can handle most anything a convention can throw at me. But the unsettling question is <strong>will</strong> I?</p>
<p>That&#8217;s what it all comes down to, each and every day, for all of us. We most definitely <em>can</em>, if we have the will. I&#8217;m reminded of a quote attributed to Vince Lombardi (while there is no proof he said precisely this, it&#8217;s close enough to his thought that I&#8217;m sure he won&#8217;t mind being associated with it):</p>
<blockquote><p>The difference between the successful man and the rest is not a matter of luck, or intelligence, or even talent; it is a matter of will.</p></blockquote>
<p>The &#8220;matter of will&#8221; is not the &#8220;I wish&#8221; type so many of us confuse with will. It&#8217;s the determination and mental discipline to do what it takes to achieve what we are willing. If my will falters, I cannot achieve, and that&#8217;s not a lack of ability, but a lack of will.</p>
<p>As so often with quotations from St Vincent of Lambeau, it applies to so much more than football. Success, no matter how we define it, is never free of cost. It has a price, rarely measured in mere money.</p>
<p>The only question that matters is: will I pay it?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.theodicius.net/archives/2011/08/29/a-matter-of-will/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Postel&#8217;s Law and Human Interaction</title>
		<link>http://www.theodicius.net/archives/2011/02/05/postels-law-and-human-interaction/</link>
		<comments>http://www.theodicius.net/archives/2011/02/05/postels-law-and-human-interaction/#comments</comments>
		<pubDate>Sat, 05 Feb 2011 16:18:26 +0000</pubDate>
		<dc:creator>arlen</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.theodicius.net/?p=419</guid>
		<description><![CDATA[Back in the day, the unutterably brilliant Jon Postel framed what will forever be known as &#8220;Postel&#8217;s Law:&#8221; Be conservative in what you emit, and liberal in what you accept. It stems from RFC 761, and it was originally intended to guide the creation of computer-computer interactions. In a nutshell, the law describes the nature [...]]]></description>
			<content:encoded><![CDATA[<p>Back in the day, the unutterably brilliant Jon Postel framed what will forever be known as &#8220;Postel&#8217;s Law:&#8221;</p>
<blockquote><p>Be conservative in what you emit, and liberal in what you accept.</p></blockquote>
<p>It stems from <a href="http://tools.ietf.org/html/rfc761">RFC 761</a>, and it was originally intended to guide the creation of computer-computer interactions. In a nutshell, the law describes the nature of a robust system: when sending to another system, adhere as closely to a rigid standard as possible, but when receiving data from another system, allow for as much variability as possible.</p>
<p>I&#8217;ve since taken this principle as foundational for computer human interaction. Humans are by nature vague, imprecise, and sloppy beasts, so the computer should be prepared to accept a great deal of variability from them, while delivering precision to them.</p>
<p>But lately, I&#8217;ve been musing on this as also a fundamental principle of human-human interaction.<span id="more-419"></span></p>
<p>It&#8217;s not a new idea. We all know humans are inaccurate, imprecise, and vague creatures; we&#8217;ve known it for centuries. But I think in the digital age we live in, it may be wise to revisit the brilliant scientist who made so much of it possible, and take some advice.</p>
<p>Postel&#8217;s Law is a principle of robustness, meaning it makes sure the system continues to work, even under stress. Think about it: isn&#8217;t that what we expect from, and even need in, human interactions?</p>
<p>A system that follows the path set by Jon Postel will continue to function in the presence of garbage input. Shouldn&#8217;t <em>we</em> do as much?</p>
<p>If I&#8217;m following Postel&#8217;s Law and you say something that I disagree with, or am even offended by, I don&#8217;t blow up. Also I don&#8217;t immediately cut you off. I try and make sense first of what you say, and if I can&#8217;t I say so and ask for clarification. In worst case, I identify the offensive bits, drop them, and get on with the meaningful ones. &#8220;Be liberal in what you accept.&#8221;</p>
<p>From the other side, &#8220;Be conservative in what you emit&#8221; means I don&#8217;t call you names. I don&#8217;t shout at you. I don&#8217;t call you stupid because you don&#8217;t see what I see.</p>
<p>I don&#8217;t make the claim that applying Postel&#8217;s Law to human-human interaction is either a novel or a unique idea. In times past it went by the names of courtesy and civility. &#8220;Turn the other cheek&#8221; could be part of it, as could &#8220;A soft answer turns away wrath.&#8221; Proverbs like this abound in the world&#8217;s Wisdom Literature.</p>
<p>But perhaps we need a new, digital, formulation of the policy to reach the citizens of this digital world.</p>
<p>I&#8217;m not saying be phony or two-faced. &#8220;Be liberal in what you accept&#8221; doesn&#8217;t mean that, nor does it mean be a doormat. I&#8217;m saying you don&#8217;t need to retaliate for every offense, you can pass on by, noting the bad behavior of your communicant, like a warning flag from a compiler.</p>
<p>I&#8217;m also not saying you have a license to be deliberately offensive or hostile, to abuse the protocol. &#8220;Be conservative in what you emit.&#8221; No matter how you&#8217;re treated, you treat others with a high standard.</p>
<p>I realize we&#8217;re none of us computers, so we won&#8217;t follow <em>any</em> protocol laid out for us perfectly. At bottom line, I&#8217;m saying we should all try to behave as civilly toward other people as our computer behaves toward other computers, thanks to Jon Postel.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.theodicius.net/archives/2011/02/05/postels-law-and-human-interaction/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Just Not Git-ing It</title>
		<link>http://www.theodicius.net/archives/2010/09/15/just-not-git-ing-it/</link>
		<comments>http://www.theodicius.net/archives/2010/09/15/just-not-git-ing-it/#comments</comments>
		<pubDate>Wed, 15 Sep 2010 05:00:39 +0000</pubDate>
		<dc:creator>arlen</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.theodicius.net/?p=414</guid>
		<description><![CDATA[Phil Taylor recently tried to get up close and personal with git. He ran into difficulties, in no small part because he treated git like subversion, which it decidedly isn&#8217;t. So in the interests of helping out anyone else out there with the same idea, that of wanting to try out something new in hopes [...]]]></description>
			<content:encoded><![CDATA[<p>Phil Taylor <a href="http://www.phil-taylor.com/2010/09/13/installing-git-on-a-cpanel-based-linux-server/">recently tried</a> to get up close and personal with git. He ran into difficulties, in no small part because he treated git like subversion, which it decidedly isn&#8217;t.</p>
<p>So in the interests of helping out anyone else out there with the same idea, that of wanting to try out something new in hopes of finding something better, here&#8217;s a quick-and-dirty glimpse at the way I use git around here.<br />
<span id="more-414"></span></p>
<h3>Git isn&#8217;t SVN</h3>
<p>The first thing to remember is that git isn&#8217;t svn. It&#8217;s not server-based. It&#8217;s a distributed code management system, meaning there could be potentially hundreds of repositories involved. You can use it just like svn, and have a single repository on a single server, but that would be like buying a minivan to drive two people around town. Of course, I have a repository on my server (and I honestly question the wisdom of anyone who doesn&#8217;t) but that&#8217;s only one repository, and it isn&#8217;t the first one I create.</p>
<p>I start out by creating the repository in my project directory on my development machine:<br />
<code><br />
git init<br />
git add .<br />
</code></p>
<p>Those two lines of code initialize an empty repository and then add every file in my current directory to the repository. The second line might instead be broken into several lines, if I didn&#8217;t want to add every file, but this is the quickest. (If there arejust a few files you want to leave out of the repository, you&#8217;ll want to check out how <a href="http://book.git-scm.com/4_ignoring_files.html">&#8220;git ignore&#8221;</a> works.)</p>
<h3>What About The Server?</h3>
<p>Well, that&#8217;s all fine and good for your local development, but what about shared development? Don&#8217;t you need a server for that?</p>
<p>Yes, but you don&#8217;t need git on the server. After all, a git repository is simply files. All you really need is ssh access to the server.<br />
<code><br />
ssh user@server.com<br />
mkdir projectname.git<br />
cd projectname.git<br />
git init<br />
</code><br />
The first line above gets you into the server, the second line creates the directory you&#8217;ll be using for your remote repository. The final two lines above create the empty repository. After those, you can log out and return back to your local machine.</p>
<p>You send your changes from your local repository to your remote one by using the &#8220;git push&#8221; command. But first you&#8217;ll need to tell git where the remote repository is:<br />
<code><br />
git remote add origin user@server.com:projectname.git<br />
</code><br />
This line creates a reference to a remote repository and calls it &#8220;origin&#8221; (it&#8217;s a longstanding custom that the main remote repository be called origin, but it&#8217;s not a necessity). It points &#8220;origin&#8221; at the remote repository we set up earlier.</p>
<p><code><br />
git push origin master<br />
</code><br />
This line pushes the changes in the local repository up to the remote one identified as origin.</p>
<p>Now you can continue to develop on your local machine, committing changes to your local repository, and once you&#8217;re finished, you can push all (or just some of) the changes up to the server.</p>
<p>(And yes, the obvious &#8220;git pull&#8221; would be how you bring changes pushed to the server by other members of the team down to your local repository.)</p>
<p><a href="http://www.kernel.org/pub/software/scm/git/docs/everyday.html">A quick sheet of &#8220;normal&#8221; git commands.</a></p>
<p><a href="http://www.kernel.org/pub/software/scm/git/docs/user-manual.html">Git User&#8217;s Manual</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.theodicius.net/archives/2010/09/15/just-not-git-ing-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Talk Radio Comes to Open Source</title>
		<link>http://www.theodicius.net/archives/2010/08/30/talk-radio-comes-to-open-source/</link>
		<comments>http://www.theodicius.net/archives/2010/08/30/talk-radio-comes-to-open-source/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 12:43:20 +0000</pubDate>
		<dc:creator>arlen</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.theodicius.net/?p=409</guid>
		<description><![CDATA[I&#8217;ve been noticing a depressing trend among some contributors to OS projects. More and more I&#8217;m seeing people deliberately saying and doing outrageous things, and then excusing their behavior under the guise &#8220;I had to to that to make a point,&#8221; or some similar trash. The idea itself isn&#8217;t new, talking heads on TV and [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been noticing a depressing trend among some contributors to OS projects. More and more I&#8217;m seeing people deliberately saying and doing outrageous things, and then excusing their behavior under the guise &#8220;I had to to that to make a point,&#8221; or some similar trash.</p>
<p>The idea itself isn&#8217;t new, talking heads on TV and radio have been doing that for decades. The theory behind it goes something like this: When the show&#8217;s host says something eminently reasonable, the listeners will sagely nod their heads and agree, but no one picks up the phone to call in and congratulate the host on being reasonable. On the other hand, if the host says something outrageous, people will call in by the droves, either to argue vehemently or to cheer the host on into further outrages.</p>
<p>Either way, the phones ring and the host has something to do for the next hour. If the callers are rational, the host backs down from the outrageous claim with the excuse that the hyperbole was necessary to get people thinking. Of course, that&#8217;s a convenient fiction, because the host really wasn&#8217;t trying to get people to think; the goal was to make people talk, not to make them think.<br />
<span id="more-409"></span><br />
That&#8217;s the real goal of talk radio, to make people talk, either to the host on-air or about the host to their friends. Then more people talk about the show, and more people will tune in, either to hear the next outrageous statement, or to hear things they can argue with or complain about.</p>
<p>So that process works brilliantly, for Talk Radio. But the goals of an Open Source project aren&#8217;t to get people to talk and argue. The primary goals of an OS project are to ship good code, and to rationally evaluate proposed code. Stimulating argumentation and complaints runs almost directly counter to those goals.</p>
<p>Anything that draws attention away from the code causes a problem. Being obnoxious is fun, don&#8217;t get me wrong. There&#8217;s a certain amount of gratification gained when you see a thousand knees jerking in time to your words. But while those knees are jerking, there&#8217;s no thinking going on, and without thought, code dies.</p>
<p>Whenever you do or say something to cause outrage or controversy, you&#8217;re diverting attention away from your point, which is about the code change you&#8217;re proposing. In addition, you&#8217;re giving people that <em>might</em> otherwise have been convinced by your code an excuse to ignore it. You&#8217;re giving people who would resist your proposed change, for whatever reason, more ammunition to use against you, giving them a way to, if not defeat the proposed change, at least derail it for quite some time.</p>
<p>And all the while you&#8217;re doing nothing at all to forward the proposed change. People who would have been inclined to accept the change, will accept (aside from those whom your conduct scares away from it, that is) and people who would not be inclined to accept are even farther away from the decision to accept. You stirred things up, alright, but in doing so only made it harder for the change to go through, not easier.</p>
<p>Keep a civil finger on your keyboard, and the opposition will have to mount arguments to reject the change based solely on the code. Your code change will stand or fall on its own.</p>
<p>And isn&#8217;t that the whole idea?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.theodicius.net/archives/2010/08/30/talk-radio-comes-to-open-source/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

