<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <title>Redline's Weblog - Home</title>
  <id>tag:weblog.redlinesoftware.com,2008:mephisto/</id>
  <generator version="0.7.3" uri="http://mephistoblog.com">Mephisto Noh-Varr</generator>
  <link href="http://weblog.redlinesoftware.com/feed/atom.xml" rel="self" type="application/atom+xml"/>
  <link href="http://weblog.redlinesoftware.com/" rel="alternate" type="text/html"/>
  <updated>2008-08-13T17:49:59Z</updated>
  <entry xml:base="http://weblog.redlinesoftware.com/">
    <author>
      <name>andrew</name>
    </author>
    <id>tag:weblog.redlinesoftware.com,2008-08-13:603</id>
    <published>2008-08-13T05:46:00Z</published>
    <updated>2008-08-13T17:49:59Z</updated>
    <category term="Features"/>
    <category term="Redzone Leagues"/>
    <link href="http://weblog.redlinesoftware.com/2008/8/13/redzone-forum-rss-feeds" rel="alternate" type="text/html"/>
    <title>Redzone News &amp; Forum RSS Feeds</title>
<content type="html">
            &lt;p&gt;We&#8217;ve added &lt;span class=&quot;caps&quot;&gt;RSS&lt;/span&gt; feeds for news items as well as each forum that you create for your league.  There&#8217;s also a feed for all of the forums combined.  See your browsers docs and/or use your favourite &lt;span class=&quot;caps&quot;&gt;RSS&lt;/span&gt; reader to make use of them.&lt;/p&gt;


	&lt;p&gt;Enjoy!&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://weblog.redlinesoftware.com/">
    <author>
      <name>andrew</name>
    </author>
    <id>tag:weblog.redlinesoftware.com,2008-08-11:602</id>
    <published>2008-08-11T06:40:00Z</published>
    <updated>2008-08-17T17:20:54Z</updated>
    <category term="Ruby on Rails"/>
    <link href="http://weblog.redlinesoftware.com/2008/8/11/file_column-image-regeneration" rel="alternate" type="text/html"/>
    <title>file_column image regeneration</title>
<content type="html">
            &lt;p&gt;If you use file_column for some projects and find that you want to change the thumbnail sizes that you&#8217;ve been using for models, then hopefully this little bit of code can help.&lt;/p&gt;


	&lt;p&gt;Add this as a rake task and run it as &lt;code&gt;filecolumn:regenerate[Model, field] RAILS_ENV=production&lt;/code&gt; where &lt;em&gt;Model&lt;/em&gt; is the model you want to regenerate images for and &lt;em&gt;field&lt;/em&gt; is the filecolumn field on the model.  The task uses Rake arguments, so you&#8217;ll need Rake 0.8.&lt;/p&gt;


&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;namespace :filecolumn do
  desc &amp;quot;Regenerate filecolumn images&amp;quot;
  task :regenerate, :model, :field, :needs =&amp;gt; :environment do |task,args|
    if args.any?{|k,v| v.blank?}
      puts &amp;quot;Usage: #{task.name}[Model,field]&amp;quot;
    else
      klass, field = args.model.constantize, args.field

      klass.all.each do |obj|
        puts &amp;quot;Regenerating #{klass} #{obj.id}&amp;quot;
        next if obj.send(field).nil?
        state = obj.send(&amp;quot;#{field}_state&amp;quot;)
        state.instance_variable_set(:@just_uploaded, true)
        state.transform_with_magick
      end
    end
  end
end&lt;/code&gt;&lt;/pre&gt;

The code essentially boils down to 2 lines&#8230;
	&lt;ul&gt;
	&lt;li&gt;setting @just_uploaded to true on the state object&lt;/li&gt;
		&lt;li&gt;calling the transform_with_magick method on the state object&lt;/li&gt;
	&lt;/ul&gt;
          </content>  </entry>
  <entry xml:base="http://weblog.redlinesoftware.com/">
    <author>
      <name>marc</name>
    </author>
    <id>tag:weblog.redlinesoftware.com,2008-07-31:596</id>
    <published>2008-07-31T06:39:00Z</published>
    <updated>2008-07-31T06:44:05Z</updated>
    <category term="Redzone Leagues"/>
    <link href="http://weblog.redlinesoftware.com/2008/7/31/skittles-and-bowling-now-in-redzone" rel="alternate" type="text/html"/>
    <title>Skittles and Bowling now in Redzone</title>
<content type="html">
            &lt;p&gt;I thought it was just candy, but it turns out Skittles is also a sport. You can now create Skittles leagues in Redzone, and because Bowling is a decedent of it we added that as well.&lt;/p&gt;


	&lt;p&gt;Got a sport that you need league software for? Let us know!&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://weblog.redlinesoftware.com/">
    <author>
      <name>marc</name>
    </author>
    <id>tag:weblog.redlinesoftware.com,2008-07-24:582</id>
    <published>2008-07-24T04:06:00Z</published>
    <updated>2008-07-24T05:45:41Z</updated>
    <category term="Redzone Leagues"/>
    <link href="http://weblog.redlinesoftware.com/2008/7/24/dodgeball-added-to-redzone" rel="alternate" type="text/html"/>
    <title>Dodgeball added to Redzone</title>
<content type="html">
            &lt;p&gt;We&#8217;ve added Dodgeball support to Redzone today.&lt;/p&gt;


	&lt;p&gt;There are &lt;a href=&quot;http://en.wikipedia.org/wiki/List_of_dodgeball_variations&quot;&gt;tons of variations&lt;/a&gt; of Dodgeball, so we tried to keep it simple with the statistics. If you have a variation that you&#8217;d like us to support drop us a line and let us know!&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://weblog.redlinesoftware.com/">
    <author>
      <name>andrew</name>
    </author>
    <id>tag:weblog.redlinesoftware.com,2008-07-19:575</id>
    <published>2008-07-19T01:40:00Z</published>
    <updated>2008-07-19T01:43:22Z</updated>
    <category term="Features"/>
    <category term="Redzone Leagues"/>
    <link href="http://weblog.redlinesoftware.com/2008/7/19/kickball-soccer-baseball-support" rel="alternate" type="text/html"/>
    <title>Kickball (Soccer Baseball) Support</title>
<content type="html">
            Redzone Leagues has recently added kickball as a supported sport.  The stats currently configured are basically the same as those used for softball, but if you don't want to use any of them, you can use the &quot;Statistics Management&quot; feature and turn them all off or select just the ones you want to use.
          </content>  </entry>
  <entry xml:base="http://weblog.redlinesoftware.com/">
    <author>
      <name>marc</name>
    </author>
    <id>tag:weblog.redlinesoftware.com,2008-04-04:382</id>
    <published>2008-04-04T06:10:00Z</published>
    <updated>2008-04-04T06:10:33Z</updated>
    <category term="Ruby on Rails"/>
    <link href="http://weblog.redlinesoftware.com/2008/4/4/using-god-to-monitor-mongrels" rel="alternate" type="text/html"/>
    <title>Using God to automatically monitor mongrels</title>
<summary type="html">&lt;p&gt;Having a process that automatically monitors your system and restarts applications when things get out of wack is pretty important to have. The 2 popular free options are &lt;a href=&quot;http://god.rubyforge.org/&quot;&gt;God&lt;/a&gt; and &lt;a href=&quot;http://www.tildeslash.com/monit&quot;&gt;Monit&lt;/a&gt;. This article is about not only setting up God to monitor your mongrels, but setting up God only &lt;span class=&quot;caps&quot;&gt;ONCE&lt;/span&gt; to do this. If you add another mongrel cluster to your system, all you have to do is restart God.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;Having a process that automatically monitors your system and restarts applications when things get out of wack is pretty important to have. The 2 popular free options are &lt;a href=&quot;http://god.rubyforge.org/&quot;&gt;God&lt;/a&gt; and &lt;a href=&quot;http://www.tildeslash.com/monit&quot;&gt;Monit&lt;/a&gt;. This article is about not only setting up God to monitor your mongrels, but setting up God only &lt;span class=&quot;caps&quot;&gt;ONCE&lt;/span&gt; to do this. If you add another mongrel cluster to your system, all you have to do is restart God.&lt;/p&gt;
&lt;p&gt;Here is a sample god configuration file for monitoring all the mongrels on your system. This script assumes that your mongrel configs are all in /etc/mongrel_cluster and that your pid_file attribute in your config files point to an absolute path. I lifted the majority of this script from the &lt;a href=&quot;http://github.com/macournoyer/thin/tree/master/example/thin.god&quot;&gt;example in thin.&lt;/a&gt;  (Thin is awesome &lt;span class=&quot;caps&quot;&gt;FYI&lt;/span&gt;)&lt;/p&gt;


I have a few mongrel config files in /etc/mongrel_cluster that look similar to:
&lt;pre&gt;
&lt;code&gt;
--- 
user: deploy
group: www-data
cwd: /var/www/apps/sampleapp/current
port: &quot;8200&quot; 
environment: production
address: 127.0.0.1
pid_file: /var/www/apps/sampleapp/shared/pids/mongrel.pid
servers: 2
&lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;When I want to deploy another application on the same machine, I add the config file there and then restart god. It will then begin automatically monitoring the new application.&lt;/p&gt;


My /etc/god.conf:
&lt;pre&gt;
&lt;code&gt;
require 'yaml'
config_path = &quot;/etc/mongrel_cluster&quot; 

Dir[config_path + &quot;/*.yml&quot;].each do |file|
  config = YAML.load_file(file)
  num_servers = config[&quot;servers&quot;] ||= 1

  (0..num_servers-1).each do |i|
    number = config['port'].to_i + i

    God.watch do |w|
      w.group = &quot;mongrel-&quot; + File.basename(file, &quot;.yml&quot;)
      w.name = w.group + &quot;-#{number}&quot; 
      w.interval = 30.seconds

      w.uid = config[&quot;user&quot;]
      w.gid = config[&quot;group&quot;]

      w.start = &quot;mongrel_rails cluster::start -C #{file} --only #{number}&quot; 
      w.start_grace = 10.seconds
      w.stop = &quot;mongrel_rails cluster::stop -C #{file} --only #{number}&quot; 
      w.stop_grace = 10.seconds
      w.restart = &quot;mongrel_rails cluster::restart -C #{file} --only #{number}&quot; 

      # assemble the pid file, pid files look like mongrel.8000.pid, mongrel.8001.pid etc
      pid_path = config[&quot;pid_file&quot;]
      ext = File.extname(pid_path)
      w.pid_file = pid_path.gsub(/#{ext}$/, &quot;.#{number}#{ext}&quot;)
      w.behavior(:clean_pid_file)

      w.start_if do |start|
        start.condition(:process_running) do |c|
          c.interval = 5.seconds
          c.running = false
          c.notify = 'team'
        end
      end

      w.restart_if do |restart|
        restart.condition(:memory_usage) do |c|
          c.above = 150.megabytes
          c.times = [3, 5] # 3 out of 5 intervals
          c.notify = 'team'
        end

        restart.condition(:cpu_usage) do |c|
          c.above = 50.percent
          c.times = 5
          c.notify = 'team'
        end
      end

      # lifecycle
      w.lifecycle do |on|
        on.condition(:flapping) do |c|
          c.to_state = [:start, :restart]
          c.times = 5
          c.within = 5.minute
          c.transition = :unmonitored
          c.retry_in = 10.minutes
          c.retry_times = 5
          c.retry_within = 2.hours
          c.notify = 'team'
        end
      end
    end

  end
end

God::Contacts::Email.message_settings = {
  :from =&amp;gt; 'god@example.com'
}

God::Contacts::Email.server_settings = {
  :address =&amp;gt; &quot;localhost&quot;,
  :port =&amp;gt; 25,
  :domain =&amp;gt; &quot;example.com&quot; 
}

God.contact(:email) do |c|
  c.name = 'team'
  c.email = 'team@example.com'
end

&lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;One thing that the god install doesn&#8217;t do is create a nice init.d script, but you can find one &lt;a href=&quot;http://pastie.caboo.se/110483&quot;&gt;here&lt;/a&gt; which I found from &lt;a href=&quot;http://ezinearticles.com/?Why-Rails-Developers-Need-God&#38;id=845672&quot;&gt;this post&lt;/a&gt; about using God.&lt;/p&gt;


	&lt;p&gt;The God website has an example with explanations of what each of those sections mean. Check it out.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://weblog.redlinesoftware.com/">
    <author>
      <name>marc</name>
    </author>
    <id>tag:weblog.redlinesoftware.com,2008-03-26:375</id>
    <published>2008-03-26T21:48:00Z</published>
    <updated>2008-03-26T22:07:18Z</updated>
    <category term="Ruby on Rails"/>
    <link href="http://weblog.redlinesoftware.com/2008/3/26/looking-for-mephisto-0-8" rel="alternate" type="text/html"/>
    <title>Looking for Mephisto 0.8?</title>
<content type="html">
            &lt;p&gt;I was too, so I popped into the #mephisto channel on freenode and technoweenie set me straight. The subversion trunk in mephisto will be the latest stable release (in this case 0.8) of his github repo.&lt;/p&gt;


	&lt;p&gt;But for an easy way to just download the 0.8 release, go &lt;a href=&quot;http://github.com/technoweenie/mephisto/tree/rel-0.8&quot;&gt;here&lt;/a&gt; and then click on download and you&#8217;ll get a nice shiny tarball.&lt;/p&gt;


	&lt;p&gt;Thanks to the Mepisto team for making a great blogging app!&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://weblog.redlinesoftware.com/">
    <author>
      <name>andrew</name>
    </author>
    <id>tag:weblog.redlinesoftware.com,2008-03-25:360</id>
    <published>2008-03-25T01:12:00Z</published>
    <updated>2008-05-13T21:53:36Z</updated>
    <category term="Features"/>
    <category term="Redzone Leagues"/>
    <link href="http://weblog.redlinesoftware.com/2008/3/25/statistics-management-feature" rel="alternate" type="text/html"/>
    <title>Statistics Management Feature</title>
<content type="html">
            &lt;p&gt;We've recently added the ability to customize the stats you use in your league.&lt;/p&gt;

&lt;p&gt;Not every league tracks the same stats, so instead of cluttering up the interface with stats your league doesn't use, you can now remove them.  Or if you would like to add some additional stats to the defaults provided, you can add stats from any of the predefined stats that are available.&lt;/p&gt;

&lt;p&gt;To add or remove stats, click on the &quot;Manage Statistics&quot; link from the admin dashboard.&lt;/p&gt;

&lt;p&gt;If there are some stats missing that you would like to add to your league, simply contact us via the support link and we'll do our best to add them.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://weblog.redlinesoftware.com/">
    <author>
      <name>andrew</name>
    </author>
    <id>tag:weblog.redlinesoftware.com,2008-03-25:361</id>
    <published>2008-03-25T01:12:00Z</published>
    <updated>2008-03-25T01:12:59Z</updated>
    <category term="Features"/>
    <category term="Redzone Leagues"/>
    <link href="http://weblog.redlinesoftware.com/2008/3/25/ultimate-frisbee-support" rel="alternate" type="text/html"/>
    <title>Ultimate (Frisbee) Support</title>
<content type="html">
            &lt;p&gt;Redzone Leagues has recently added Ultimate as a supported sport.  Currently by default, no stats are tracked, but if you have an Ultimate league that does track some stats, let us know and we can add those to the site for you to use.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://weblog.redlinesoftware.com/">
    <author>
      <name>marc</name>
    </author>
    <id>tag:weblog.redlinesoftware.com,2008-02-24:325</id>
    <published>2008-02-24T21:34:00Z</published>
    <updated>2008-02-24T21:42:23Z</updated>
    <category term="General"/>
    <link href="http://weblog.redlinesoftware.com/2008/2/24/converting-subversion-repositories-to-git" rel="alternate" type="text/html"/>
    <title>Converting Subversion repositories to Git</title>
<summary type="html">&lt;p&gt;A few friends have asked about converting their Subversion repositories to use Git, but also have a central repo that they can push/pull with which mimics their Subversion setup. Here&#8217;s what I do so that I don&#8217;t have to repeat myself :)&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;A few friends have asked about converting their Subversion repositories to use Git, but also have a central repo that they can push/pull with which mimics their Subversion setup. Here&#8217;s what I do so that I don&#8217;t have to repeat myself :)&lt;/p&gt;
&lt;h2&gt;Remote setup&lt;/h2&gt;


	&lt;p&gt;I&#8217;m going to keep this post mostly about converting your &lt;span class=&quot;caps&quot;&gt;SVN&lt;/span&gt; repository into a Git one. As far as setting up your remote server goes, we can get to that in another article. I basically stick with a simple setup. Create a Git user, set the shell to git-shell and use Git via &lt;span class=&quot;caps&quot;&gt;SSH&lt;/span&gt;. You&#8217;ll likely want to play around with Git first before worrying about converting old &lt;span class=&quot;caps&quot;&gt;SVN&lt;/span&gt; repositories into it.&lt;/p&gt;


	&lt;h2&gt;Local setup&lt;/h2&gt;


	&lt;p&gt;I create myself a file called gitauthors which is just a text file which maps &lt;span class=&quot;caps&quot;&gt;SVN&lt;/span&gt; user names to Git user names. For example my gitauthors file looks like:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
    marc = Marc Jeanson &amp;lt;marc@redlinesoftware.com&amp;gt;
    andrew = Andrew Kaspick &amp;lt;andrew@redlinesoftware.com&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;In this example, &#8220;marc&#8221; and &#8220;andrew&#8221; were the &lt;span class=&quot;caps&quot;&gt;SVN&lt;/span&gt; users and the email address style is the Git user names. We&#8217;ll be using this mapping when we convert the &lt;span class=&quot;caps&quot;&gt;SVN&lt;/span&gt; repo into Git so that we can keep the history of who checked in what.&lt;/p&gt;


	&lt;h2&gt;git-svnimport&lt;/h2&gt;


Lets create the new local Git repository. In this example replace &lt;em&gt;projname&lt;/em&gt; with your project&#8217;s name and replace &lt;em&gt;https://your-repo-host.com/projname&lt;/em&gt; with your Subversion url (note this can take a while if your repo has lots of revisions):
&lt;pre&gt;&lt;code&gt;git-svnimport -C projname -r -v -A authors https://your-repo-host.com/projname&lt;/code&gt;&lt;/pre&gt;

	&lt;h2&gt;Bare essentials&lt;/h2&gt;


Now you&#8217;ll have a local Git repository called projname. For your &#8220;central&#8221; repository you won&#8217;t want to have a local checkout in that repo so I do the following:
&lt;pre&gt;&lt;code&gt;
  git clone --bare projname projname.git
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;The projname.git will be the repository that you&#8217;ll want to upload to your remote server. The&#8212;bare option here creates a repository without a local checkout. You might want to look into the&#8212;shared option depending on how you setup your remote server and permissions. After uploading it you can nuke the projname.git repository on your local machine.&lt;/p&gt;


	&lt;h2&gt;Hooking up the remote&lt;/h2&gt;


Since your projname directory is still there and has a nice working version already in it, you can edit the .git/config file and append the following:
&lt;pre&gt;&lt;code&gt;
  [remote &quot;origin&quot;]
    url = git@your-git-remote-server:/home/git/projname.git
    fetch = +refs/heads/*:refs/remotes/origin/*
  [branch &quot;master&quot;]
    remote = origin
    merge = refs/heads/master
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;I&#8217;m assuming that your repository is in the /home/git directory on your server. You&#8217;ll want to change that to wherever you put your repositories.&lt;/p&gt;


	&lt;h2&gt;But my git-svn and git-svnimport are busted!&lt;/h2&gt;


	&lt;p&gt;You might experience some errors when using git-svn. Usually this is caused by not having the correct Perl bindings needed for the git-svn hookup. If you&#8217;re on a Mac and you installed Git using Macports, try doing this:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
    sudo port deactivate git-core
    sudo port install git-core +svn
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;If you&#8217;re on another platform, try running cpan and installing the Perl libraries that you need. For example if you have an error like &#8220;Can&#8217;t locate Blah.pm in @INC&#8221; then you need to install the Blah Perl library.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://weblog.redlinesoftware.com/">
    <author>
      <name>marc</name>
    </author>
    <id>tag:weblog.redlinesoftware.com,2008-02-15:294</id>
    <published>2008-02-15T00:44:00Z</published>
    <updated>2008-02-15T00:44:36Z</updated>
    <category term="Screencasts"/>
    <link href="http://weblog.redlinesoftware.com/2008/2/15/processing-email-with-omnifocus-screencast" rel="alternate" type="text/html"/>
    <title>Processing email with OmniFocus Screencast</title>
<content type="html">
            &lt;p&gt;Integrating OmniFocus and Mail.app makes a much better email experience. By using smart folders along with OmniFocus&#8217;s &#8220;clippings&#8221; I can accomplish &lt;a href=&quot;http://inboxzero.com&quot;&gt;Inbox Zero&lt;/a&gt; most of the time.&lt;/p&gt;


	&lt;p&gt;I&#8217;ve shared my email work flow with a few people already and they also seem to like it, so I decided to make a short screencast demoing what I do. Like I mention in the screencast, most of my workflow is totally ripped off from people like &lt;a href=&quot;http://43folders.com&quot;&gt;Merlin Mann&lt;/a&gt; so check out that site for more email ninja goodness.&lt;/p&gt;


	&lt;p&gt;&lt;a href=&quot;http://media.redlinesoftware.com/screencasts/omnifocus_email.mov&quot;&gt;&lt;span class=&quot;caps&quot;&gt;DOWNLOAD SCREENCAST&lt;/span&gt;&lt;/a&gt; (4.8M, 4:16)&lt;/p&gt;


	&lt;p&gt;Here&#8217;s some links related to the screencast:
&lt;a href=&quot;http://www.omnigroup.com/applications/omnifocus/&quot;&gt;[OmniFocus]&lt;/a&gt;
&lt;a href=&quot;http://www.apple.com/macosx/features/mail.html&quot;&gt;[Mail.app]&lt;/a&gt;
&lt;a href=&quot;http://bargiel.home.pl/iGTD&quot;&gt;[iGTD]&lt;/a&gt;
&lt;a href=&quot;http://www.indev.ca/MailTags.html&quot;&gt;[MailTags]&lt;/a&gt;&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://weblog.redlinesoftware.com/">
    <author>
      <name>marc</name>
    </author>
    <id>tag:weblog.redlinesoftware.com,2008-02-04:250</id>
    <published>2008-02-04T19:07:00Z</published>
    <updated>2008-02-04T19:08:08Z</updated>
    <category term="General"/>
    <link href="http://weblog.redlinesoftware.com/2008/2/4/reverse-dns-and-email" rel="alternate" type="text/html"/>
    <title>Reverse DNS and email</title>
<summary type="html">&lt;p&gt;I&#8217;m not sure how I wrote &lt;a href=&quot;http://weblog.redlinesoftware.com/2007/4/7/hotmail-blocking-emails&quot;&gt;a blog post&lt;/a&gt; about sending email and somehow I left out the part about making sure your mail servers have IP addresses that actually reverse properly.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;I&#8217;m not sure how I wrote &lt;a href=&quot;http://weblog.redlinesoftware.com/2007/4/7/hotmail-blocking-emails&quot;&gt;a blog post&lt;/a&gt; about sending email and somehow I left out the part about making sure your mail servers have IP addresses that actually reverse properly.&lt;/p&gt;
&lt;p&gt;So you&#8217;ve setup your &lt;span class=&quot;caps&quot;&gt;SPF&lt;/span&gt; records and your web app isn&#8217;t sending emails that contain any of the following words &#8220;FREE, enlarge, penis&#8221; etc, but email still isn&#8217;t reaching its destination?&lt;/p&gt;


	&lt;p&gt;&lt;span class=&quot;caps&quot;&gt;RTFL&lt;/span&gt;!  (where L is logs in this case)&lt;/p&gt;


	&lt;p&gt;/var/log/mail.log (or wherever your logs might be) might show something like:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;Feb  4 06:42:49 yourhost postfix/smtp[5381]: 738F212E41A9: host mailin-04.mx.aol.com[64.12.138.88] said: 421-:  (DNS:NR)  http://postmaster.info.aol.com/errors/421dnsnr.html 421 SERVIC
E NOT AVAILABLE (in reply to end of DATA command)
Feb  4 06:42:49 yourhost postfix/smtp[5381]: connect to mailin-02.mx.aol.com[64.12.137.168]: server dropped connection without sending the initial SMTP greeting (port 25)
Feb  4 06:42:51 yourhost postfix/smtp[5381]: 738F212E41A9: to=&amp;lt;somerandomdude2939338829@aol.com&amp;gt;, relay=mailin-04.mx.aol.com[64.12.138.57], delay=1780, status=deferred (host mailin-04.mx.aol.com
[64.12.138.57] said: 421-:  (DNS:NR)  http://postmaster.info.aol.com/errors/421dnsnr.html 421 SERVICE NOT AVAILABLE (in reply to end of DATA command))&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;So you load up &lt;a href=&quot;http://postmaster.info.aol.com/info/rdns.html&quot;&gt;http://postmaster.info.aol.com/info/rdns.html&lt;/a&gt; and find out that your server is missing a reverse &lt;span class=&quot;caps&quot;&gt;DNS&lt;/span&gt; entry. Great now what?&lt;/p&gt;


	&lt;p&gt;Well if you don&#8217;t know what a reverse &lt;span class=&quot;caps&quot;&gt;DNS&lt;/span&gt; entry is, it&#8217;s really not a hard concept. On a normal &lt;span class=&quot;caps&quot;&gt;DNS&lt;/span&gt; lookup you&#8217;re usually asking for an IP address for a given domain name. A reverse entry is asking what domain is assigned to a particular IP address. This is useful in the battle against spammers.&lt;/p&gt;


	&lt;p&gt;First lets use dig to see if you really don&#8217;t have a reverse entry. Let&#8217;s pretend your email server is example.com and your IP address for that mail server is 208.77.188.166.&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;dig -x example.com +short&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;The -x in the dig command will reverse that domain for you and the +short will cut straight to the answer for you. You should hopefully see something like:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;
  dig -x 208.77.188.166 +short
  www.example.com.
&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;Give it a try with your IP, and if you get nothing back then you have no reverse pointer. To get one, you&#8217;ll likely have to request that your &lt;span class=&quot;caps&quot;&gt;ISP&lt;/span&gt; add the record for you. If you&#8217;re on a &lt;span class=&quot;caps&quot;&gt;VPS&lt;/span&gt; or something similar, put in a request to their support team to do this. Many of these companies have a form you can fill out online to do so.&lt;/p&gt;


	&lt;p&gt;Once they add it, give the above command a try again and you should be 1 step closer to being able to send legitimate email. Unfortunately there&#8217;s always more steps, but remember the logs are your friends&#8230;hopefully not your only friends though.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://weblog.redlinesoftware.com/">
    <author>
      <name>andrew</name>
    </author>
    <id>tag:weblog.redlinesoftware.com,2008-01-30:243</id>
    <published>2008-01-30T06:09:00Z</published>
    <updated>2008-07-01T16:11:44Z</updated>
    <category term="General"/>
    <category term="Labs"/>
    <category term="Ruby on Rails"/>
    <link href="http://weblog.redlinesoftware.com/2008/1/30/willpaginate-and-remote-links" rel="alternate" type="text/html"/>
    <title>will_paginate and remote AJAX links</title>
<summary type="html">&lt;p&gt;&lt;em&gt;&lt;strong&gt;Updated for will_paginate 2.3.x&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;


	&lt;p&gt;So you&#8217;re using the &lt;code&gt;will_paginate&lt;/code&gt; plugin and want to use remote &lt;span class=&quot;caps&quot;&gt;AJAX&lt;/span&gt; links.  You&#8217;re not using the will_paginate plugin?  Simply install it with&#8230; &lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;script/plugin install svn://errtheblog.com/svn/plugins/will_paginate&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;


&lt;code&gt;will_paginate&lt;/code&gt; is an alternative to the &lt;code&gt;classic_pagination&lt;/code&gt; plugin, which is the pagination plugin that basically took the pre Rails 2.0 pagination implementation and packaged it in plugin form.  I won&#8217;t discuss the differences between the two plugins here, but there&#8217;s a good video explaining the two from Railscasts &lt;a href=&quot;http://railscasts.com/episodes/51&quot;&gt;here&lt;/a&gt;.

	&lt;p&gt;Out of the box, will_paginate doesn&#8217;t allow remote &lt;span class=&quot;caps&quot;&gt;AJAX&lt;/span&gt; links for page links, so I&#8217;ll show you an easy way to add such functionality&#8230;&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;&lt;em&gt;&lt;strong&gt;Updated for will_paginate 2.3.x&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;


	&lt;p&gt;So you&#8217;re using the &lt;code&gt;will_paginate&lt;/code&gt; plugin and want to use remote &lt;span class=&quot;caps&quot;&gt;AJAX&lt;/span&gt; links.  You&#8217;re not using the will_paginate plugin?  Simply install it with&#8230; &lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;script/plugin install svn://errtheblog.com/svn/plugins/will_paginate&lt;/code&gt;&lt;/pre&gt;&lt;/p&gt;


&lt;code&gt;will_paginate&lt;/code&gt; is an alternative to the &lt;code&gt;classic_pagination&lt;/code&gt; plugin, which is the pagination plugin that basically took the pre Rails 2.0 pagination implementation and packaged it in plugin form.  I won&#8217;t discuss the differences between the two plugins here, but there&#8217;s a good video explaining the two from Railscasts &lt;a href=&quot;http://railscasts.com/episodes/51&quot;&gt;here&lt;/a&gt;.

	&lt;p&gt;Out of the box, will_paginate doesn&#8217;t allow remote &lt;span class=&quot;caps&quot;&gt;AJAX&lt;/span&gt; links for page links, so I&#8217;ll show you an easy way to add such functionality&#8230;&lt;/p&gt;
&lt;p&gt;I&#8217;ve read a number of blogs that seem to go a bit overboard in order to implement remote links, but will_paginate allows you to customize the links quite nicely already.&lt;/p&gt;


	&lt;p&gt;By default will_paginate uses the &lt;strong&gt;&lt;code&gt;WillPaginate::LinkRender&lt;/code&gt;&lt;/strong&gt; class to render links.  So lets use this is a base and add to it.  We can derive from this class and add our own functionality.&lt;/p&gt;


&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;# app/helpers/remote_link_renderer.rb

class RemoteLinkRenderer &amp;lt; WillPaginate::LinkRenderer
  def initialize(collection, options, template)
    @remote = options.delete(:remote)
    super
  end

  def page_link_or_span(page, span_class = 'current', text = nil)
    text ||= page.to_s
    if page and page != current_page
      @template.link_to_remote(text, {:url =&amp;gt; url_options(page), :method =&amp;gt; :get}.merge(@remote))
    else
      @template.content_tag :span, text, :class =&amp;gt; span_class
    end
  end
end&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;All I&#8217;m doing is creating a subclass to the existing renderer and overriding the &lt;code&gt;page_link_or_span&lt;/code&gt; method that makes the link_to method call and replacing it with a call to link_to_remote (I also added the &lt;code&gt;:method =&amp;gt; :get&lt;/code&gt; option to work with my restful code).&lt;/p&gt;


	&lt;p&gt;So how do we use this?  One of two ways.&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;Use the &lt;code&gt;:renderer&lt;/code&gt; and &lt;code&gt;:remote&lt;/code&gt;(optional) option on will_paginate&lt;/li&gt;
	&lt;/ul&gt;


&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;&amp;lt;%= will_paginate :collection, :renderer =&amp;gt; 'RemoteLinkRenderer' , :remote =&amp;gt; {:with =&amp;gt; ’value’, :update =&amp;gt; ‘some_div’} %&amp;gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;ul&gt;
	&lt;li&gt;or set the default renderer in &lt;code&gt;config/environment.rb&lt;/code&gt;&lt;/li&gt;
	&lt;/ul&gt;


&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;WillPaginate::ViewHelpers.pagination_options[:renderer] = 'RemoteLinkRenderer'&lt;/code&gt;&lt;/pre&gt;

	&lt;ul&gt;
	&lt;li&gt;and use it without the &lt;code&gt;:renderer&lt;/code&gt; option.&lt;/li&gt;
	&lt;/ul&gt;


&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;&amp;lt;%= will_paginate :collection, :remote =&amp;gt; {:with =&amp;gt; ’value’, :update =&amp;gt; ‘some_div’} %&amp;gt;&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;That&#8217;s all there is to it.  You could get fancier when creating your LinkRenderer class to allow for additional customization, but this is a good start.&lt;/p&gt;


	&lt;h1&gt;Update for will_paginate 2.3.x&lt;/h1&gt;


	&lt;p&gt;This is even more concise in the new version.&lt;/p&gt;


&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;# app/helpers/remote_link_renderer.rb

class RemoteLinkRenderer &amp;lt; WillPaginate::LinkRenderer
  def prepare(collection, options, template)
    @remote = options.delete(:remote) || {}
    super
  end

protected
  def page_link(page, text, attributes = {})
    @template.link_to_remote(text, {:url =&amp;gt; url_for(page), :method =&amp;gt; :get}.merge(@remote))
  end
end&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;The usage remains the same as above.&lt;/p&gt;


	&lt;p&gt;To use the new version, see the &lt;strong&gt;Installation&lt;/strong&gt; section at &lt;a href=&quot;http://github.com/mislav/will_paginate/tree/master&quot;&gt;http://github.com/mislav/will_paginate/tree/master&lt;/a&gt;&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://weblog.redlinesoftware.com/">
    <author>
      <name>andrew</name>
    </author>
    <id>tag:weblog.redlinesoftware.com,2008-01-05:239</id>
    <published>2008-01-05T22:39:00Z</published>
    <updated>2008-04-23T13:05:47Z</updated>
    <category term="Ruby on Rails"/>
    <link href="http://weblog.redlinesoftware.com/2008/1/5/custom-rails-app-config-options" rel="alternate" type="text/html"/>
    <title>Custom rails app config options</title>
<summary type="html">&lt;p&gt;Do you use &lt;strong&gt;&lt;span class=&quot;caps&quot;&gt;RAILS&lt;/span&gt;_ENV&lt;/strong&gt; in your Rails app to execute different code depending on the environment you&#8217;re running?&lt;/p&gt;


&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;if RAILS_ENV == 'development'
  log_some_data_or_do_something_different
else
  go_with_the_flow
end&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;No?  Ok, great.  Yes?  Ok, not so great.&lt;/p&gt;


	&lt;p&gt;Those from both camps are likely to get something out of this post, so read on.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;Do you use &lt;strong&gt;&lt;span class=&quot;caps&quot;&gt;RAILS&lt;/span&gt;_ENV&lt;/strong&gt; in your Rails app to execute different code depending on the environment you&#8217;re running?&lt;/p&gt;


&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;if RAILS_ENV == 'development'
  log_some_data_or_do_something_different
else
  go_with_the_flow
end&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;No?  Ok, great.  Yes?  Ok, not so great.&lt;/p&gt;


	&lt;p&gt;Those from both camps are likely to get something out of this post, so read on.&lt;/p&gt;
&lt;p&gt;The problem with using &lt;span class=&quot;caps&quot;&gt;RAILS&lt;/span&gt;_ENV in your code has 2 main issues.&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;If you misspell the environment string (RAILS_ENV == &#8216;developent&#8217;) you won&#8217;t be notified of any errors or warnings and you may introduce bugs or other issues into your code (if your tests don&#8217;t catch it)&lt;/li&gt;
		&lt;li&gt;You&#8217;re integrating details of a specific environment into the code when your app logic should have no knowledge of what environment it is currently running in.&lt;/li&gt;
	&lt;/ol&gt;


	&lt;h1&gt;Solution (Partial)&lt;/h1&gt;


	&lt;p&gt;Introduce configuration details for your app in the environment files and use those in your app.&lt;/p&gt;


&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;# config/environments/development.rb
do_extra_neato_stuff = true

# config/environments/production.rb
do_extra_neato_stuff = false

# in the app
send_email_and_log_some_data if do_extra_neato_stuff&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;This keeps the code logic clean from environment specifics and if you spell the variable incorrectly, you&#8217;ll get an error, which is nice.&lt;/p&gt;


	&lt;h1&gt;Solution (The whole 9 yards)&lt;/h1&gt;


	&lt;p&gt;The partial solution can work, but it&#8217;s far from ideal.&lt;/p&gt;


	&lt;p&gt;You can&#8217;t specify default values cleanly for your app and then override a configuration value for a specific environment; things get worse if you introduce additional environments.  Specifying a default value in &lt;em&gt;environment.rb&lt;/em&gt; and then providing an override in &lt;em&gt;development.rb&lt;/em&gt; (for example) doesn&#8217;t really work without some some ugly hacks.  The reason for this is that these new options don&#8217;t work in the same way the existing Rails configuration options do in the environment files.&lt;/p&gt;


	&lt;h3&gt;So how about we use the Rails configuration functionality with our own options?&lt;/h3&gt;


	&lt;p&gt;Not possible?  Well, lets write a plugin to make it possible.  Wait a second, lets first check if somebody else has solved this problem for us.&lt;/p&gt;


	&lt;p&gt;&lt;a href=&quot;http://agilewebdevelopment.com/plugins/app_config&quot;&gt;http://agilewebdevelopment.com/plugins/app_config&lt;/a&gt; BAM!&lt;/p&gt;


	&lt;p&gt;Before I found this plugin, I scoped out the basic details in my head for how I&#8217;d implement my own plugin to enable this new functionality, but no use reinventing the wheel, so I did a quick search first and I was extremely happy to see that this plugin implementation was pretty much identical to what I was thinking, so even better.&lt;/p&gt;


	&lt;p&gt;Using the plugin, I can now specify my options as follows.&lt;/p&gt;


&lt;pre&gt;&lt;code class=&quot;ruby&quot;&gt;# config/environment.rb (the default)
config.app_config.do_extra_neato_stuff = false

# config/environments/development.rb
config.app_config.do_extra_neato_stuff = true

# in the app
send_email_and_log_some_data if AppConfig.do_extra_neato_stuff&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;What the plugin introduces is an additional configuration value called &lt;strong&gt;app_config&lt;/strong&gt; where you can specify any option you like and then in the code you access these options with the &lt;strong&gt;AppConfig&lt;/strong&gt;  value.&lt;/p&gt;


	&lt;p&gt;Now we also get all of the niceties of the Rails configuration functionality!&lt;/p&gt;


	&lt;p&gt;See the plugins &lt;span class=&quot;caps&quot;&gt;README&lt;/span&gt; file and its code for additional details on using this handy plugin.&lt;/p&gt;
          </content>  </entry>
  <entry xml:base="http://weblog.redlinesoftware.com/">
    <author>
      <name>marc</name>
    </author>
    <id>tag:weblog.redlinesoftware.com,2008-01-05:237</id>
    <published>2008-01-05T00:39:00Z</published>
    <updated>2008-05-02T01:29:20Z</updated>
    <category term="General"/>
    <link href="http://weblog.redlinesoftware.com/2008/1/5/migrating-from-mac-osx-tiger-to-leopard" rel="alternate" type="text/html"/>
    <title>Migrating from Mac OSX Tiger to Leopard</title>
<summary type="html">&lt;p&gt;I recently upgraded my Macbook Pro to Leopard, and in the process I took down some notes. Since the &lt;span class=&quot;caps&quot;&gt;MBP&lt;/span&gt; is my first Mac, this is also the first time that I&#8217;ve had to upgrade the OS. I&#8217;m aware that there are upgrade and migration tools that make this whole process quicker and easier, but I&#8217;ve heard mixed results about them. I also wanted my install to be fresh, since most of the old school Mac guys seem to go this route.&lt;/p&gt;</summary><content type="html">
            &lt;p&gt;I recently upgraded my Macbook Pro to Leopard, and in the process I took down some notes. Since the &lt;span class=&quot;caps&quot;&gt;MBP&lt;/span&gt; is my first Mac, this is also the first time that I&#8217;ve had to upgrade the OS. I&#8217;m aware that there are upgrade and migration tools that make this whole process quicker and easier, but I&#8217;ve heard mixed results about them. I also wanted my install to be fresh, since most of the old school Mac guys seem to go this route.&lt;/p&gt;
&lt;h2&gt;Step 1: Backing up my Tiger Install&lt;/h2&gt;


	&lt;p&gt;On Tiger I was using the great backup software called &lt;a href=&quot;http://www.shirt-pocket.com/SuperDuper&quot;&gt;SuperDuper!&lt;/a&gt;, which enables you to make a complete bootable backup of your hard drive. I have an external &lt;span class=&quot;caps&quot;&gt;USB&lt;/span&gt; drive which I backup to, so the plan was to boot off it in the event that Leopard has problems. If you don&#8217;t have an external drive, then go get one, as it will work great with Leopard&#8217;s new &lt;a href=&quot;http://www.apple.com/macosx/features/timemachine.html&quot;&gt;Time Machine&lt;/a&gt; feature.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Major Tip #1:&lt;/strong&gt; To have your Intel Mac boot off of an external &lt;span class=&quot;caps&quot;&gt;USB&lt;/span&gt; drive, you need to first partition that external drive correctly. Using the Disk Utility, partition your external drive but make sure in the options you set the &lt;strong&gt;Partition Map Scheme to &lt;span class=&quot;caps&quot;&gt;GUID&lt;/span&gt; Mode.&lt;/strong&gt; If you don&#8217;t do this, you can&#8217;t boot off of your backup. (If you&#8217;re not on an Intel machine, then this option will be different for you. Google is your friend.)&lt;/p&gt;


	&lt;p&gt;After partitioning the drive, have SuperDuper! do it&#8217;s magic and come back in a couple of hours when your backup is complete. You can take this time to lookup your important software on the web to see if they have Leopard compatible versions. I went and played video games instead, you do what you like.&lt;/p&gt;


	&lt;h2&gt;Step 2: Making sure the backup boots&lt;/h2&gt;


	&lt;p&gt;Once SuperDuper! is done, reboot your mac and hold down the &lt;strong&gt;option key&lt;/strong&gt; when the system is booting back up. This will let you choose your boot drive on startup. Choose your &lt;span class=&quot;caps&quot;&gt;USB&lt;/span&gt; drive and continue. You&#8217;ll find that the system boots a lot slower, but that is expected of course. With any luck, your backup is an exact replica of your system.&lt;/p&gt;


	&lt;h2&gt;Step 3: Installing Leopard&lt;/h2&gt;


	&lt;p&gt;&lt;strong&gt;Important!: Unplug your external drive from the computer &lt;span class=&quot;caps&quot;&gt;BEFORE&lt;/span&gt; installing Leopard!&lt;/strong&gt; I read some reports on some websites where people had problems with Leopard doing all sorts of things to the external drive. Maybe this is false, but regardless &lt;span class=&quot;caps&quot;&gt;THIS IS YOUR BACKUP COPY&lt;/span&gt;. Don&#8217;t take any chances with it!&lt;/p&gt;


	&lt;p&gt;The rest of the install is dirt simple. Put in the Leopard &lt;span class=&quot;caps&quot;&gt;DVD&lt;/span&gt;, restart your computer (hold option down on boot) and select the install disk. I installed with pretty much the default options, but the major option that I selected was to &lt;strong&gt;not transfer any information&lt;/strong&gt; from an existing install. I figured I&#8217;d either use this Migration Assistant later or just manually move what I wanted.&lt;/p&gt;


	&lt;h2&gt;Step 4: Software Update&lt;/h2&gt;


	&lt;p&gt;After Leopard booted up, the first thing I did was run the software update utility and let it do its thing. I also choose to have it run daily.&lt;/p&gt;


	&lt;h2&gt;Step 5: Installing Software&lt;/h2&gt;


	&lt;p&gt;At this point you can go off and install whatever software you like. I installed the Xcode tools off the Leopard disk so I could get the development tools that I would need later on. I also configured all the other stuff like my time zone, dashboard widgets, turned on the firewall, etc.&lt;/p&gt;


	&lt;h2&gt;Step 6: Migration&lt;/h2&gt;


	&lt;p&gt;Here&#8217;s where hopefully this blog post can save you a bit of time (step 1 should too). 
Now as you can see, I didn&#8217;t export any settings from my Tiger apps, I just took a backup and then wiped my drive. It&#8217;s shooting from the hip, but hey that&#8217;s how I roll.&lt;/p&gt;


	&lt;p&gt;At this point, it should be safe to plugin your backup drive to your machine again. We&#8217;re going to use it to restore some applications, some data, some music etc. One of the folders you are about to become familiar with is your &lt;strong&gt;~/Library/Application Support&lt;/strong&gt; folder. Note that the ~ means your home directory. There is also a /Library/Application Support folder for system wide stuff.&lt;/p&gt;


	&lt;p&gt;For the following, assume &lt;span class=&quot;caps&quot;&gt;BACKUP&lt;/span&gt; is your backup drive and username is your username&lt;/p&gt;


	&lt;h4&gt;Documents&lt;/h4&gt;


	&lt;p&gt;Go grab your documents folder and drag it across to your new home folder. You can do this with other files like downloads, desktop items, music, pictures, whatever else you like.&lt;/p&gt;


	&lt;h4&gt;Safari 3 Bookmarks&lt;/h4&gt;


	&lt;p&gt;I mostly use del.icio.us for my bookmarks, but there was some things I have stored in my bookmarks bar that I wanted. Close Safari. Copy &lt;span class=&quot;caps&quot;&gt;BACKUP&lt;/span&gt;/Users/username/Library/Safari/Bookmarks.plist from &lt;span class=&quot;caps&quot;&gt;BACKUP&lt;/span&gt; to Leopard in the same folder.&lt;/p&gt;


	&lt;h4&gt;Address Book&lt;/h4&gt;


	&lt;p&gt;I followed the instructions on &lt;a href=&quot;http://www.marketanomaly.com/node/202&quot;&gt;this site&lt;/a&gt; and it worked great. I&#8217;ll copy the instructions here so that we&#8217;ll have it all in one spot:&lt;/p&gt;


	&lt;p&gt;If you have addresses in your new AddressBook, make a backup of the AddressBook folder (Leopard home folder)/Library/Application .
Here are the steps:&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;Quit all applications&lt;/li&gt;
		&lt;li&gt;Open a Finder window and go to (home folder)/Library/Application Support/AddressBook/&lt;/li&gt;
		&lt;li&gt;Drag AddressBook-v22.abcddb (the Leopard database) to the trash&lt;/li&gt;
		&lt;li&gt;Make sure the AddressBook folder contains AddressBook.data file (the Tiger database)&lt;/li&gt;
		&lt;li&gt;Rename the Metadata folder (you could call it Metadata.leopard for example)&lt;/li&gt;
		&lt;li&gt;Launch Address Book.app (this will import the Tiger data, create a new Metadata folder, and fill it with the Tiger contact info)&lt;/li&gt;
		&lt;li&gt;Wait several minutes for the Metadata to be written out, then quit Address Book&lt;/li&gt;
		&lt;li&gt;Drag AddressBook-v22.abcddb to the trash again&lt;/li&gt;
		&lt;li&gt;Go into the Metadata.leopard folder that you renamed in step 5&lt;/li&gt;
		&lt;li&gt;Copy all of the files in that folder, and drag or paste them into the new Metadata folder that was created in the AddressBook folder&lt;/li&gt;
		&lt;li&gt;Launch Address Book.app again&lt;/li&gt;
	&lt;/ol&gt;


	&lt;p&gt;Thanks again to Adam for posting that.&lt;/p&gt;


	&lt;h4&gt;iCal&lt;/h4&gt;


	&lt;p&gt;This one is also a bit annoying. In Leopard they store the iCal data in ~/Library/Calendars, but on Tiger the data you want is in &lt;strong&gt;&lt;span class=&quot;caps&quot;&gt;BACKUP&lt;/span&gt;/Users/username/Library/Application Support/iCal/Sources&lt;/strong&gt; where you will have a folder for each calendar with a crazy name like 734B0524-3D68-4EC7-8215-2A06EBA30B29.calendar. Inside those folders are 2 files of interest: &lt;strong&gt;Info.plist&lt;/strong&gt; which contains some general information about the calendar (most importantly the name), and another file named &lt;strong&gt;corestorage.ics&lt;/strong&gt;, which is used to store the real calendar&#8217;s data.
What I did is went through each folder, opened the Info.plist and looked at the title. If it was a calendar I still wanted, I double clicked the corestoreage.ics file and renamed it in iCal after importing. I had less than 10 calendars so doing this was no big deal. Plus I purged a few calendars that I just don&#8217;t use anymore.&lt;/p&gt;


	&lt;h4&gt;dot files&lt;/h4&gt;


	&lt;p&gt;If you use the terminal a lot for things like subversion or ssh, you&#8217;ll have some directories in your home folder that you might want to copy over. I use ssh keys a lot so I wanted my private/public keys from my tiger install on Leopard. This part is easier to do in the terminal so launch that up.&lt;/p&gt;


	&lt;p&gt;To get to your external drive, it should be mounted in /Volumes/. So you can copy a few things like:
/Volumes/BACKUP/Users/username/.subversion to your home folder on Leopard.
You can do &lt;strong&gt;ls -a&lt;/strong&gt; in a directory if you want to list the dot files/dirs as well. I did the .ssh directory too so that I&#8217;d have my keys.&lt;/p&gt;


	&lt;h4&gt;iLife 06&lt;/h4&gt;


	&lt;p&gt;I don&#8217;t really use the iLife apps that much so I&#8217;m not going to upgrade to &#8216;08. Instead I just dragged the apps like iMovie, iDVD, GarageBand and iPhoto from my Tiger drive to my Leopard. The only one that gave a hassle was GarageBand, as it also needs the /Library/Application Support/GarageBand folder copied too. It will tell you what it needs on startup though, so copy over what it wants and restart it.&lt;/p&gt;


	&lt;h4&gt;Email&lt;/h4&gt;


	&lt;p&gt;I use &lt;a href=&quot;http://www.google.com/a&quot;&gt;Google Apps&lt;/a&gt; for my email so I can take advantage of &lt;span class=&quot;caps&quot;&gt;IMAP&lt;/span&gt;, so I really didn&#8217;t migrate much here. &lt;span class=&quot;caps&quot;&gt;IMAP&lt;/span&gt; seems to work nicer in the new Mail.app.&lt;/p&gt;


	&lt;h4&gt;Other Applications&lt;/h4&gt;


	&lt;p&gt;I had a few other applications that I just dragged over from the Applications folder on my Tiger drive and they all seemed to work just fine. Some of them thought they were starting up for the first time, but that was no big deal. For some other commercial apps, I just redownloaded them and reentered my license key. There isn&#8217;t any app that I wasn&#8217;t able to get working with one of these 2 methods. I opted to reinstall the apps when I could. Most of them also use the Libary/Application Support folder so you can also look there for additional files if something is acting weird.&lt;/p&gt;


	&lt;p&gt;Note: I take no responsibility if you&#8217;ve followed these steps and you can&#8217;t get application &lt;span class=&quot;caps&quot;&gt;XYZ&lt;/span&gt; to work. Remember you can still boot off that backup if you need to export data to a format so that you can import it into your new setup. Do what you need to here. I might have gotten lucky for once.&lt;/p&gt;


	&lt;h3&gt;Leopard Terminal&lt;/h3&gt;


	&lt;p&gt;The terminal seems to be a bit better than in Tiger. One setting I had to turn on though so that I could get the backspace working properly when I ssh to remote hosts, was to go under Preferences&#8230;Settings and then on the Advanced tab, choose &lt;strong&gt;Delete sends Ctrl-H&lt;/strong&gt;.&lt;/p&gt;


	&lt;h3&gt;MacPorts&lt;/h3&gt;


	&lt;p&gt;As an aside, I really hate &lt;a href=&quot;http://www.macports.org/install.php&quot;&gt;MacPorts&lt;/a&gt;, and from what I can tell Fink might be worse since it&#8217;s way out of date. Coming from a Linux background where they have awesome things like apt-get and yum, port is really a hoof to the schnutz.&lt;/p&gt;


	&lt;p&gt;Having said that, I still installed MacPorts like a chump because it&#8217;s still better than hand compiling stuff (sometimes).&lt;/p&gt;


	&lt;h3&gt;Other Stuff&lt;/h3&gt;


	&lt;p&gt;Of course during the new setup, I installed a bunch of things, configured a bunch of things, and played with all the new stuff in Leopard. Here&#8217;s some additional apps that I installed that you may or may not know about, I&#8217;ll let their respective marketing pages do the talking for them:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.obdev.at/products/littlesnitch/index.html&quot;&gt;Little Snitch&lt;/a&gt; &#8211; Still not sure why there really isn&#8217;t a good free alternative to this, but it&#8217;s a nicely done app none the less. Use your Mac OS firewall for incoming connections and Little Snitch for your outgoing. (This should be a part of Mac &lt;span class=&quot;caps&quot;&gt;OSX&lt;/span&gt; dammit)&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;http://www.clamxav.com&quot;&gt;ClamXav AntiVirus&lt;/a&gt; &#8211; I have all my apps dump their downloads into the same folder, and then have ClamXav watch out for that directory.&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Got any other great system related apps? Post in the comments please!&lt;/p&gt;


	&lt;h2&gt;Issues&lt;/h2&gt;


	&lt;p&gt;The only 1 glaring problem I&#8217;m having right now is that &lt;a href=&quot;http://www.blacktree.com/&quot;&gt;Quicksilver&lt;/a&gt; isn&#8217;t behaving like it used to. There seems to be an issue with Proxy Objects not working in Leopard anymore. If you know how to fix this one, please please let me know. Quicksilver is like crack.&lt;/p&gt;


Related information:
	&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;http://blacktree.cocoaforge.com/forums/viewtopic.php?p=30027&#38;sid=cfeb68340ee116126aa23715ed5b3e14&quot; title=&quot;site currently down&quot;&gt;Forum&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;http://lifehacker.com/software/quicksilver/video-demonstration--quicksilver-proxies-243710.php&quot;&gt;Demonstration of the feature I miss&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;


	&lt;h2&gt;Conclusion&lt;/h2&gt;


	&lt;p&gt;I never once had to go back and boot my backup drive, but being able to made the whole upgrade/migration process a lot less tense. I&#8217;m sure some of you used the Mac OS upgrade option and it probably worked just great, but I know some other people on the net who didn&#8217;t have much luck. I wanted to wipe my drive anyway to get rid of a lot of old stuff that I had installed when I was still learning about &lt;span class=&quot;caps&quot;&gt;OSX&lt;/span&gt;. My fresh install is running a lot quicker and smoother.&lt;/p&gt;


	&lt;p&gt;I probably burnt up a day messing around with this install, so if you&#8217;re going this route try to schedule around that. To get a working Leopard up is pretty quick, but you&#8217;ll want some time to tinker with every little detail. I didn&#8217;t use the migration assistant, but maybe I should&#8217;ve looked into that. Either way, I got to learn a bit about how Mac OS apps store their data and migrating a system the slow way.&lt;/p&gt;
          </content>  </entry>
</feed>
