<?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"
	>

<channel>
	<title>MacksMind</title>
	<atom:link href="http://macksmind.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://macksmind.net</link>
	<description>Technical Wizardry, Rants, and just a Whiff of Insanity</description>
	<pubDate>Fri, 15 Aug 2008 14:08:22 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Installing mod_rails on Ubuntu Hardy</title>
		<link>http://macksmind.net/2008/08/15/installing-mod_rails-on-ubuntu-hardy/</link>
		<comments>http://macksmind.net/2008/08/15/installing-mod_rails-on-ubuntu-hardy/#comments</comments>
		<pubDate>Fri, 15 Aug 2008 14:06:49 +0000</pubDate>
		<dc:creator>Mack Earnhardt</dc:creator>
		
		<category><![CDATA[technology]]></category>

		<category><![CDATA[ubuntu mod_rails]]></category>

		<guid isPermaLink="false">http://macksmind.net/?p=13</guid>
		<description><![CDATA[First, install these packages using apt-get or aptitude:

ruby
rubygems
ruby1.8-dev
build-essential
apache2-mpm-prefork
apache2-prefork-dev


Add the following line to /etc/bash.bashrc

export PATH=$PATH:/var/lib/gems/1.8/bin

Install mod_rails (passenger) using gem:

gem update
gem install passenger

Run passenger-install-apache2-module to checks for prerequisites and build the necessary modules. It&#8217;s important to note the highlighted output that begins with LoadModule, because we&#8217;ll be pasting that directly into an apache configuration file later. If [...]]]></description>
			<content:encoded><![CDATA[<p>First, install these packages using apt-get or aptitude:</p>
<ul>
<li>ruby</li>
<li>rubygems</li>
<li>ruby1.8-dev</li>
<li>build-essential</li>
<li>apache2-mpm-prefork</li>
<li>apache2-prefork-dev</li>
</ul>
<p><span id="more-13"></span><br />
Add the following line to /etc/bash.bashrc</p>
<pre><code>
export PATH=$PATH:/var/lib/gems/1.8/bin
</code></pre>
<p>Install mod_rails (passenger) using gem:</p>
<pre><code>
gem update
gem install passenger
</code></pre>
<p>Run passenger-install-apache2-module to checks for prerequisites and build the necessary modules. It&#8217;s important to note the highlighted output that begins with LoadModule, because we&#8217;ll be pasting that directly into an apache configuration file later. If you let the info get away from you, it&#8217;s fine to run the install again.</p>
<p>Now it&#8217;s time to configure the server. I prefer not to touch the original configuration files, so I create the file /etc/apache2/conf.d/passenger.conf with the information provided by passenger-install-apache2-module. The contents are <em>similar</em> to this:</p>
<pre><code>
# DON'T USE THIS. USE THE OUTPUT FROM passenger-install-apache2-module ON YOUR SERVER
LoadModule passenger_module /var/lib/gems/1.8/gems/passenger-2.0.3/ext/apache2/mod_passenger.so
PassengerRoot /var/lib/gems/1.8/gems/passenger-2.0.3
PassengerRuby /usr/bin/ruby1.8
</code></pre>
<p>Finally, we need a virtual host configuration for you application. Put this in /etc/apache2/sites-available/<em>sitename</em>. This is very close to the sample provided by passenger-install-apache2-module, but I&#8217;ve added the rewrite rule that allows &#8216;cap deploy:web:[dis|en]able&#8217; to operate.</p>
<pre><code>
&lt;VirtualHost *:80&gt;
  ServerName www.yourhost.com
  DocumentRoot /somewhere/public

  RewriteEngine On

  # Check for maintenance file and redirect all requests
  RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f
  RewriteCond %{SCRIPT_FILENAME} !maintenance.html
  RewriteRule ^.*$ /system/maintenance.html [L]
&lt;/VirtualHost&gt;
</code></pre>
<p>Run the commands a2dissite default and a2ensite <em>sitename </em>to turn the site on, and a2enmod rewrite to turn on the rewrite module. Once you restart apache, your application should Just Work™.</p>
]]></content:encoded>
			<wfw:commentRss>http://macksmind.net/2008/08/15/installing-mod_rails-on-ubuntu-hardy/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Moments of Clarity</title>
		<link>http://macksmind.net/2008/07/13/moments-of-clarity/</link>
		<comments>http://macksmind.net/2008/07/13/moments-of-clarity/#comments</comments>
		<pubDate>Sun, 13 Jul 2008 14:19:35 +0000</pubDate>
		<dc:creator>Mack Earnhardt</dc:creator>
		
		<category><![CDATA[musings]]></category>

		<category><![CDATA[clarity]]></category>

		<category><![CDATA[mentor]]></category>

		<guid isPermaLink="false">http://macksmind.net/?p=14</guid>
		<description><![CDATA[How do you use your Windshield Time? You know, the time you spend alone in your car. Many use it to listen to music or talk radio. Others may catch up on phone calls or, faith defend us, email and text messages! If you tell me you don&#8217;t use it, you&#8217;re wrong. Even using it [...]]]></description>
			<content:encoded><![CDATA[<p>How do you use your Windshield Time? You know, the time you spend alone in your car. Many use it to listen to music or talk radio. Others may catch up on phone calls or, faith defend us, email and text messages! If you tell me you don&#8217;t use it, you&#8217;re wrong. Even using it to contemplate is using the time, and you have consciously or unconsciously chosen to use it in that particular way. But maybe that&#8217;s not the real question. Meander with me for a bit&#8230;</p>
<p><span id="more-14"></span></p>
<p>This week I engaged a business coach. This is my 3rd foray into this realm. I used coaches two separate times while running my old business, but those experiments ended in failure. We communicated, or at least I think we did. I learned things, although perhaps not what I expected to learn. The engagements ended amicably, and I still enjoy talking to both coaches when the opportunity presents itself. However my business was not changed, at least not for the better. Together, we plotted tactics to change the business, but in the end all that changed was me. I learned much, but became frustrated in doing so. That story ends in the sale of the business so I could focus my efforts elsewhere.</p>
<p>I didn&#8217;t see the ways my thinking was impeding my success. I envisioned a series of stages that would eventually allow me to do what I enjoy most in business: Creating elegant software solutions which solve problems or create opportunities. After I sold that business I immediately started another, but without a clear concept of what it would become. Then came a Moment of Clarity™; Move immediately to the finish line, do not pass go, do not collect $200. That &#8217;series of stages&#8217; was only necessary to transform a business that was holding back my dreams, and I justified it to myself and others as pragmatism. When you have a Moment of Clarity, the Head Trash&trade; you carry recedes for just a moment. You may see an opportunity. You may realize a mistake. A Moment of Clarity alters your fate.</p>
<p>Over the past year or so, I&#8217;ve come to realize that it&#8217;s not my so much my actions that control my destiny, but the thoughts behind those actions. A course of action that feels wrong might or might not BE wrong but your mind will betray you, wreck your execution, and doom your plan to failure. If you believe in your plan with all your soul, you&#8217;ll win the hearts and minds of those around you, and together you can reach your goal. Whether your plan was the &#8216;best&#8217; choice is immaterial.</p>
<h4>Moments of Clarity &#8211;&gt; Dynamic Action &#8211;&gt; Transcendent Results</h4>
<p>Which brings us back to business coaches. My new coach is my friend, mentor, and sometime drinking buddy <a href="http://www.getculturedrive.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.getculturedrive.com');">Tony Scelzo</a>. His approach to coaching is atypical, which is to say typical for Tony. It&#8217;s a good fit for me because one of the traits we share is neither of us feels bound by convention. Tony focuses his attention, if I can put words in his mouth, on assumptions and accountability. All your decisions rely one way or another on a set of assumptions. Challenging the assumptions you&#8217;ve made is a necessary step to reach your potential, and it&#8217;s very difficult to do by yourself because you&#8217;re too close to the problem. In fact you probably ARE the problem. Tony helps you see your situation more clearly, define a course of action, and holds you accountable for carrying it out.</p>
<p>But I digress&#8230;</p>
<p>One of the the actions I committed to was to read a particular book. There are many highly regarded business titles I&#8217;ve been meaning to get to, and Tony has recommended for several years now that driving time should be used for audio books. I&#8217;ve always preferred killing trees, but I&#8217;m so energized lately that I&#8217;ve started to see my driving time as wasted. The last barrier in my head was my CD-player-less vehicle. But why have I allowed that to continue? Yesterday I took action. My 1998 Honda CR-V with $2000 worth of accident damage now sports a shiny new CD &amp; iPod playing Alpine stereo. I get a little crazy sometimes in bookstores and spent more than I&#8217;d like to say on audio books, about half of which have been gathering dust for months in paper form at my home. It may sound frivolous to buy a title I already own, but the key part of that statement is &#8220;gathering dust for months.&#8221; Those books contain the seeds of the next Google if they trigger a powerful enough Moment of Clarity.</p>
<p>So how do you use your Windshield Time?</p>
]]></content:encoded>
			<wfw:commentRss>http://macksmind.net/2008/07/13/moments-of-clarity/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Longoria Identity</title>
		<link>http://macksmind.net/2008/04/27/the-longoria-identity/</link>
		<comments>http://macksmind.net/2008/04/27/the-longoria-identity/#comments</comments>
		<pubDate>Sun, 27 Apr 2008 20:35:20 +0000</pubDate>
		<dc:creator>Mack Earnhardt</dc:creator>
		
		<category><![CDATA[insanity]]></category>

		<category><![CDATA[longoria]]></category>

		<guid isPermaLink="false">http://macksmind.net/?p=11</guid>
		<description><![CDATA[Playing the Hot Corner
If you&#8217;re confused about Eva Longoria of Desperate Housewives vs. Evan Longoria of the Tampa Bay Rays, I say it doesn&#8217;t matter. They&#8217;re both winners&#8230; they just play for different teams. ;-)
]]></description>
			<content:encoded><![CDATA[<h3>Playing the Hot Corner</h3>
<p>If you&#8217;re confused about <a href="http://en.wikipedia.org/wiki/Eva_Longoria" onclick="javascript:pageTracker._trackPageview('/outbound/article/en.wikipedia.org');">Eva Longoria</a> of Desperate Housewives vs. <a href="http://mlb.com/team/player.jsp?player_id=446334" onclick="javascript:pageTracker._trackPageview('/outbound/article/mlb.com');">Evan Longoria</a> of the Tampa Bay Rays, I say it doesn&#8217;t matter. They&#8217;re both winners&#8230; they just play for different teams. ;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://macksmind.net/2008/04/27/the-longoria-identity/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Using belongs_to in Rails model validations when the parent is unsaved</title>
		<link>http://macksmind.net/2008/04/26/using-belongs_to-in-rails-model-validations-when-the-parent-is-unsaved/</link>
		<comments>http://macksmind.net/2008/04/26/using-belongs_to-in-rails-model-validations-when-the-parent-is-unsaved/#comments</comments>
		<pubDate>Sat, 26 Apr 2008 20:11:58 +0000</pubDate>
		<dc:creator>Mack Earnhardt</dc:creator>
		
		<category><![CDATA[programming]]></category>

		<category><![CDATA[belongs_to]]></category>

		<category><![CDATA[rails]]></category>

		<category><![CDATA[ruby]]></category>

		<category><![CDATA[validate]]></category>

		<guid isPermaLink="false">http://macksmind.net/?p=10</guid>
		<description><![CDATA[Can&#8217;t get there from here
In one of my Ruby on Rails projects, I have a model validation which is dependent on attributes from a belongs_to parent. Normally, you can refer to a parent model as child.parent and access the parent&#8217;s attributes as child.parent.attr. The difficulty arises when the parent object is unsaved. Let&#8217;s look at [...]]]></description>
			<content:encoded><![CDATA[<h3>Can&#8217;t get there from here</h3>
<p>In one of my Ruby on Rails projects, I have a model validation which is dependent on attributes from a belongs_to parent. Normally, you can refer to a parent model as child.parent and access the parent&#8217;s attributes as child.parent.attr. The difficulty arises when the parent object is unsaved. Let&#8217;s look at the code:</p>
<p><span id="more-10"></span></p>
<pre><code>
class Item &lt; ActiveRecord::Base
  has_many :quantity_limits
  has_many :locations, :through =&gt; :quantity_limits
  has_many :line_items
  has_many :orders, :through =&gt; :line_items
end

class Location &lt; ActiveRecord::Base
  has_many :orders
  has_many :quantity_limits
  has_many :items, :through =&gt; :quantity_limits
end

class QuantityLimit &lt; ActiveRecord::Base
  belongs_to :item
  belongs_to :location

  #Attribute quantity is the max quantity of an item which may be ordered for a location
end

class Order &lt; ActiveRecord::Base
  has_many :line_items, :dependent =&gt; :destroy
  belongs_to :location
end

class LineItem &lt; ActiveRecord::Base
  belongs_to :order
  belongs_to :item

  def quantity_limit
    if self.order
      QuantityLimit.find(:first, :conditions =&gt; {:location_id =&gt; self.order.location_id, :item_id =&gt; self.item_id})
    else
      nil
    end
  end

  def validate
    if self.quantity_requested
      if self.quantity_limit
        limit = self.quantity_limit.quantity
      else
        limit = 0
      end

      errors.add(:quantity_requested,"above maximum of " + limit.to_s)if self.quantity_requested &gt; limit
    end
  end
end
</code>
</pre>
<p>The key element is LineItem#quantity_limit, which retrieves the relevant QuantityLimit object. You might expect self.order.location_id to be valid once the LineItem has been added to the Order#line_items collection (order.line_items &lt;&lt; new LineItem). If the parent has been saved (i.e. Order#new_record? is false) then LineItem[:order_id] is updated with Order[:id] and everything is copacetic. However, if the parent is unsaved, the child is added to the has_many collection Order#line_items but the LineItem object <em>is not changed</em>. The underlying reason is the has_many collection Order#line_items is more or less an array and doesn&#8217;t need a primary key to describe the relationship. The belongs_to reference, on the other hand, stores only the primary key of the parent and can&#8217;t be referenced if the primary key hasn&#8217;t been established.</p>
<p>OK, I know the smokers are ready for a cigarette after all that, but bear with me. The upshot of all this is a line for a saved Order is properly validated. But if the Order is unsaved, limit is always 0 because self.order is nil and the relevant QuantityLimit cannot be found. But there is a solution&#8230;</p>
<h3>Ruby to the Rescue</h3>
<p>The Ruby core language includes a module called <a href="http://www.ruby-doc.org/core/classes/ObjectSpace.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.ruby-doc.org');">ObjectSpace</a> which allows direct interaction with the garbage collector. Using this, we&#8217;re able to determine which Order object contains our LineItem. Let&#8217;s look at the new code:</p>
<pre><code>
def quantity_limit
  parent_order = self.order

  if !parent_order
    ObjectSpace.each_object(Order) {|o| parent_order = o if o.line_items.include?(self)}
  end

  return nil if !parent_order

  QuantityLimit.find(:first, :conditions =&gt; {:location_id =&gt; parent_order.location_id, :item_id =&gt; self.item_id})
end
</code></pre>
<p>This time we&#8217;re still checking the normal primary key based reference first, but if it&#8217;s nil we take another approach. We iterate through all the live objects of the Order class to find the one that references our LineItem. We&#8217;re assuming that only one Order will contain our LineItem, which will be true unless we&#8217;ve re-parented a LineItem. Once we&#8217;ve located the correct Order, the validation can proceed as before.</p>
<p>While we&#8217;re spending a few extra cycles and lines of code to use this method, I think the maintainability benefits of a DRY solution make it the right choice. Please let me know how it works for you!</p>
]]></content:encoded>
			<wfw:commentRss>http://macksmind.net/2008/04/26/using-belongs_to-in-rails-model-validations-when-the-parent-is-unsaved/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Integrating your WordPress Blog with Google Analytics</title>
		<link>http://macksmind.net/2008/04/22/integrating-your-wordpress-blog-with-google-analytics/</link>
		<comments>http://macksmind.net/2008/04/22/integrating-your-wordpress-blog-with-google-analytics/#comments</comments>
		<pubDate>Wed, 23 Apr 2008 02:50:38 +0000</pubDate>
		<dc:creator>Mack Earnhardt</dc:creator>
		
		<category><![CDATA[marketing]]></category>

		<category><![CDATA[technology]]></category>

		<category><![CDATA[awstats]]></category>

		<category><![CDATA[blogging]]></category>

		<category><![CDATA[google-analytics]]></category>

		<category><![CDATA[SEO]]></category>

		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://macksmind.net/?p=9</guid>
		<description><![CDATA[If you&#8217;re like me, you&#8217;d like to know whether anyone is paying attention to what you have to say online. There are plugins for WordPress that will make this information available through the wp-admin pages. There are also tools such as AWStats that your hosting provider can likely provide. If you&#8217;ve outgrown those options, you [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re like me, you&#8217;d like to know whether anyone is paying attention to what you have to say online. There are plugins for <a href="http://wordpress.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/wordpress.org');">WordPress</a> that will make this information available through the wp-admin pages. There are also tools such as <a href="http://awstats.sourceforge.net/" onclick="javascript:pageTracker._trackPageview('/outbound/article/awstats.sourceforge.net');">AWStats</a> that your hosting provider can likely provide. If you&#8217;ve outgrown those options, you may get what you need from <a href="http://www.google.com/analytics/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');">Google Analytics</a>. Whether you need it or just want it because you can, here are the basic steps:</p>
<p><span id="more-9"></span><br />
There are several plugins available, but for MacksMind I chose the one offered by <a href="http://www.joostdevalk.nl/wordpress/google-analytics/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.joostdevalk.nl');">Joost de Valk</a>. You need to download the .zip file and load its contents into your site&#8217;s wp-content/plugins directory. Once you&#8217;ve done that, you&#8217;ll find a new &#8216;Google Analytics&#8217; option on the Plugins tab. Click that and the first thing you&#8217;ll probably notice is analytics is inactive because it needs your &#8216;Analytics User Account.&#8217; That&#8217;s fine for now, it&#8217;s time to jump to Google. :-)</p>
<p>At <a href="http://www.google.com/analytics/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');">Google Analytics</a> you can register for free account and create a website profile. You only need one account, so if you already have an account just add another website profile! Once your website profile has been created, you need to locate your site key in the example code provided. It will look something like this:</p>
<p><code><br />
&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;<br />
&lt;/script&gt;<br />
&lt;script type="text/javascript"&gt;<br />
_uacct = "UA-1234567-2";<br />
urchinTracker();<br />
&lt;/script&gt;<br />
</code></p>
<p>The piece you need is the <code>UA-1234567-2</code> in the example above. Go back to the &#8216;Google Analytics&#8217; page of your site and type in this key. This creates the linkage between you pages and Google. Once, you &#8216;Update Settings&#8217; your account is active!</p>
<p>The &#8216;Analytics Settings&#8217; page at Google gives you feedback regarding whether data is being received. Be aware of two things though. By default, your page doesn&#8217;t send data when you&#8217;re an admin viewing your own site. That a Good Thing&trade;, but it also means you need to Log Out from you site in order to test that Google is receiving data. Also, the Reports section is only updated once every day. From my experience, it seems that the previous days data is always ready when I wake up, but don&#8217;t waste your time clicking refresh every 5 minutes from midnight until 3am. That would be Madness&trade;.</p>
<p>That&#8217;s really about it. Your site sends the information to Google, and Google gives you more ways to slice and dice it than most people will use.</p>
]]></content:encoded>
			<wfw:commentRss>http://macksmind.net/2008/04/22/integrating-your-wordpress-blog-with-google-analytics/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Moving to WordPress</title>
		<link>http://macksmind.net/2008/04/19/moving-to-wordpress/</link>
		<comments>http://macksmind.net/2008/04/19/moving-to-wordpress/#comments</comments>
		<pubDate>Sat, 19 Apr 2008 19:20:52 +0000</pubDate>
		<dc:creator>Mack Earnhardt</dc:creator>
		
		<category><![CDATA[technology]]></category>

		<category><![CDATA[trackback]]></category>

		<category><![CDATA[typo]]></category>

		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://macksmind.net/?p=3</guid>
		<description><![CDATA[Well, here it is my blog is only a week old and I&#8217;m already switching to a different engine on the back end. As I find my way around WordPress I&#8217;ll get the old content moved over.
My primary reason for moving is the apparent lack of full support for trackback in Typo.
]]></description>
			<content:encoded><![CDATA[<p>Well, here it is my blog is only a week old and I&#8217;m already switching to a different engine on the back end. As I find my way around WordPress I&#8217;ll get the old content moved over.</p>
<p>My primary reason for moving is the apparent lack of full support for trackback in Typo.</p>
]]></content:encoded>
			<wfw:commentRss>http://macksmind.net/2008/04/19/moving-to-wordpress/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Speeding School Bus</title>
		<link>http://macksmind.net/2008/04/19/speeding-school-bus/</link>
		<comments>http://macksmind.net/2008/04/19/speeding-school-bus/#comments</comments>
		<pubDate>Sat, 19 Apr 2008 17:46:00 +0000</pubDate>
		<dc:creator>Mack Earnhardt</dc:creator>
		
		<category><![CDATA[rants]]></category>

		<category><![CDATA[wtf]]></category>

		<guid isPermaLink="false">urn:uuid:4695ec65-d7fc-4d5d-9c77-b2d6523aa3da</guid>
		<description><![CDATA[So I was rolling through a 25MPH School Zone yesterday at 35MPH. I know, I&#8217;m bad, I should be punished. ;-) Then why the hell was the Washington Township school bus passing me!
]]></description>
			<content:encoded><![CDATA[<p>So I was rolling through a 25MPH School Zone yesterday at 35MPH. I know, I&#8217;m bad, I should be punished. ;-) Then why the hell was the <a href="http://www.msdwt.k12.in.us/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.msdwt.k12.in.us');">Washington Township</a> school bus <em>passing me</em>!</p>
]]></content:encoded>
			<wfw:commentRss>http://macksmind.net/2008/04/19/speeding-school-bus/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Economic Misfortune</title>
		<link>http://macksmind.net/2008/04/19/economic-misfortune/</link>
		<comments>http://macksmind.net/2008/04/19/economic-misfortune/#comments</comments>
		<pubDate>Sat, 19 Apr 2008 17:27:00 +0000</pubDate>
		<dc:creator>Mack Earnhardt</dc:creator>
		
		<category><![CDATA[insanity]]></category>

		<category><![CDATA[Madonna]]></category>

		<category><![CDATA[Timbaland]]></category>

		<category><![CDATA[Timberlake]]></category>

		<guid isPermaLink="false">urn:uuid:499168f7-860b-424f-bd1f-5a0165b67673</guid>
		<description><![CDATA[Apparently, Madonna, Justin Timberlake, and Timbaland originally had 5 minutes to save the world. Until, that is, Warner Bros insisted on a 20% across the board cost reduction.
]]></description>
			<content:encoded><![CDATA[<p>Apparently, <a href="http://www.madonna.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.madonna.com');">Madonna</a>, <a href="http://www.justintimberlake.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.justintimberlake.com');">Justin Timberlake</a>, and <a href="http://www.timbalandmusic.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.timbalandmusic.com');">Timbaland</a> originally had 5 minutes to save the world. Until, that is, <a href="http://www.warnerbrosrecords.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.warnerbrosrecords.com');">Warner Bros</a> insisted on a 20% across the board cost reduction.</p>
]]></content:encoded>
			<wfw:commentRss>http://macksmind.net/2008/04/19/economic-misfortune/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Twitter is the new CNN</title>
		<link>http://macksmind.net/2008/04/18/twitter-is-the-new-cnn/</link>
		<comments>http://macksmind.net/2008/04/18/twitter-is-the-new-cnn/#comments</comments>
		<pubDate>Fri, 18 Apr 2008 10:43:00 +0000</pubDate>
		<dc:creator>Mack Earnhardt</dc:creator>
		
		<category><![CDATA[technology]]></category>

		<category><![CDATA[CAP]]></category>

		<category><![CDATA[CNN]]></category>

		<category><![CDATA[earthquake]]></category>

		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">urn:uuid:7ed8ef1f-81a6-4391-a29f-3180f6ece2c8</guid>
		<description><![CDATA[I noted with some interest Douglass Karr’s post on Twitter as a search engine last month. I don’t have enough contacts to receive the benefits he describes, but I found another raison d’etre for Twitter this morning. While drinking coffee and contemplating the best use of the hour before my kids awake, Something gently picked [...]]]></description>
			<content:encoded><![CDATA[<p>I noted with some interest Douglass Karr’s post on <a href="http://www.douglaskarr.com/2008/03/15/twitter-is-my-new-search-engine/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.douglaskarr.com');">Twitter as a search engine</a> last month. I don’t have enough contacts to receive the benefits he describes, but I found another raison d’etre for Twitter this morning. While drinking coffee and contemplating the best use of the hour before my kids awake, Something gently picked up my apartment and shook it. There was a rattle of dishes, and I could see my refrigerator wobbling to and fro. My 8 year old was roused from her bed by the shaking and of course wanted an explanation.</p>
<p><span id="more-7"></span><br />
Now I said to myself, was that an Earthquake, or is some large piece of machinery being operated with somewhat less grace than is appropriate for 5:38AM. I didn’t hear any large diesel engines, so my first guess was Earthquake. But how to confirm? The Twitterverse has a cool feature called the <a href="http://twitter.com/public_timeline" onclick="javascript:pageTracker._trackPageview('/outbound/article/twitter.com');">Public Timeline</a> which display the most recent pageful of posts. I say Cool because before today I would have been hard-press to call it Useful. Not Anymore! On that page, with it’s 10 second of so slice of time, I saw immediately that the tremor had been felt as far away as an unspecified city in Ohio, and in St. Louis.</p>
<p>This indicated to my non-geologist mind that the <a href="http://en.wikipedia.org/wiki/New_Madrid_Seismic_Zone" onclick="javascript:pageTracker._trackPageview('/outbound/article/en.wikipedia.org');">New Madrid Fault</a> is in motion today. A major event along this fault has been one of the training scenarios for <a href="http://cap.gov/" onclick="javascript:pageTracker._trackPageview('/outbound/article/cap.gov');">Civil Air Patrol</a> and other agencies for some time now. But I digress..</p>
<p>Twitter is instant. Twitter is pervasive. Twitter is the stream of consciousness of the human race! The ability of Twitter to answer the question ‘Did you see that?’ on a grand scale is unparalleled. By the way, in the hour it’s taken for me to write this, CNN has published <a href="http://www.cnn.com/2008/US/04/18/illinois.earthquake/index.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cnn.com');">more info</a> on the quake. Sorry, CNN, Twitter got the scoop!</p>
]]></content:encoded>
			<wfw:commentRss>http://macksmind.net/2008/04/18/twitter-is-the-new-cnn/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Installing Typo Blog Engine and mod_rails for Multiple Accounts</title>
		<link>http://macksmind.net/2008/04/13/installing-typo-blog-engine-and-mod_rails-for-multiple-accounts/</link>
		<comments>http://macksmind.net/2008/04/13/installing-typo-blog-engine-and-mod_rails-for-multiple-accounts/#comments</comments>
		<pubDate>Sun, 13 Apr 2008 23:04:00 +0000</pubDate>
		<dc:creator>Mack Earnhardt</dc:creator>
		
		<category><![CDATA[technology]]></category>

		<category><![CDATA[apache]]></category>

		<category><![CDATA[debian]]></category>

		<category><![CDATA[mod_rails]]></category>

		<category><![CDATA[rails]]></category>

		<category><![CDATA[typo]]></category>

		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">urn:uuid:cbfdcc3b-2cc6-44ad-a637-bba0628a9b32</guid>
		<description><![CDATA[I decided my to use Typo for my new blog, but I wasn’t satisfied to install it in the usual way because I want multiple blogs. This is also my first hands-on experience with mod_rails, so it’s a nice opportunity to play.

The following instructions work for Ubuntu 7.10 (gutsy gibbon), and I’m assuming some level of familiarity with Ubuntu and/or Debian. Same ideas should apply elsewhere though (YMMV). If I’ve glossed over too much, leave a comment and I’ll try to clarify.]]></description>
			<content:encoded><![CDATA[<p>I decided my to use <a href="http://www.typosphere.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.typosphere.org');">Typo</a> for my new blog, but I wasn’t satisfied to install it in the usual way because I want multiple blogs. This is also my first hands-on experience with mod_rails, so it’s a nice opportunity to play.</p>
<p>The following instructions work for Ubuntu 7.10 (gutsy gibbon), and I’m assuming some level of familiarity with Ubuntu and/or Debian. Same ideas should apply elsewhere though (YMMV). If I’ve glossed over too much, leave a comment and I’ll try to clarify.</p>
<p><span id="more-8"></span></p>
<h2>Install these packages using apt-get</h2>
<ul>
<li>mysql-server</li>
<li>ruby</li>
<li>libmysql-ruby</li>
<li>rdoc1.8</li>
<li>ri1.8</li>
<li>apache2-mpm-prefork</li>
<li>ruby1.8-dev</li>
<li>build-essential</li>
<li>apache2-prefork-dev</li>
<li>libapr1-dev</li>
<li>libopenssl-ruby1.8</li>
</ul>
<h2>Install RubyGems</h2>
<ul>
<li>Download the latest RubyGems from <a href="http://rubyforge.org/frs/?group_id=126" onclick="javascript:pageTracker._trackPageview('/outbound/article/rubyforge.org');">RubyForge</a></li>
<li>Unpack and cd into the created directory</li>
<li>Install with: ruby setup.rb</li>
<li>I created a symbolic link, but it’s not a requirement: cd /usr/bin; ln -s gem1.8 gem</li>
<li>Add to your path, or append to ~/.bashrc:</li>
</ul>
<div class="typocode">
<pre><code class="typocode_default">export PATH=$PATH:/usr/lib/ruby/gems/1.8/bin</code></pre>
</div>
<h2>Install these using gem</h2>
<ul>
<li>passenger</li>
<li>rcov</li>
</ul>
<h2>Configure Apache</h2>
<ul>
<li>passenger-install-apache2-module</li>
<li>Create /etc/apache2/mods-available/rails.load</li>
</ul>
<div class="typocode">
<pre><code class="typocode_default">LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-1.0.1/ext/apache2/mod_passenger.so</code></pre>
</div>
<ul>
<li>Create /etc/apache2/mods-available/rails.conf</li>
</ul>
<div class="typocode">
<pre><code class="typocode_default">&lt;IfModule passenger_module&gt;
  RailsSpawnServer /usr/lib/ruby/gems/1.8/gems/passenger-1.0.1/bin/passenger-spawn-server
  RailsRuby /usr/bin/ruby1.8
&lt;/IfModule&gt;</code></pre>
</div>
<ul>
<li>a2enmod rails</li>
<li>a2enmod rewrite</li>
<li>/etc/init.d/apache restart</li>
</ul>
<h2>Get Typo</h2>
<p>Download the <a href="http://typosphere.org/pages/download" onclick="javascript:pageTracker._trackPageview('/outbound/article/typosphere.org');">latest</a> and stash it somewhere, like /var/tmp perhaps.</p>
<h2>Per-Blog Setup</h2>
<ul>
<li>Create a standard user to own the site.</li>
<li>In mysql as root</li>
</ul>
<div class="typocode">
<pre><code class="typocode_default">create database macksmind;
grant all on macksmind.* to macksmind identified by 'dontyouwish';</code></pre>
</div>
<ul>
<li>su - username</li>
<li>unpack the copy of typo that you stashed</li>
<li>create <code>&lt;typodir&gt;/config/database.yml</code></li>
</ul>
<div class="typocode">
<pre><code class="typocode_default">login: &amp;login
  adapter: mysql
  socket: /var/run/mysqld/mysqld.sock
  username: macksmind
  password: dontyouwish

development:
  database: macksmind_dev
  &lt;&lt;: *login

test:
  database: macksmind_tests
  &lt;&lt;: *login

production:
  database: macksmind
  &lt;&lt;: *login</code></pre>
</div>
<ul>
<li>Create /etc/apache2/sites-available/username</li>
</ul>
<div class="typocode">
<pre><code class="typocode_default">&lt;VirtualHost *&gt;
  ServerName macksmind.net
  ServerAlias www.macksmind.net
  DocumentRoot /home/macksmind/typo/public
&lt;/VirtualHost&gt;</code></pre>
</div>
<ul>
<li>a2ensite username</li>
<li>/etc/init.d/apache reload</li>
</ul>
<p>That should be it. Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://macksmind.net/2008/04/13/installing-typo-blog-engine-and-mod_rails-for-multiple-accounts/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
