<?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>Software and Opinions &#187; dreamhost</title>
	<atom:link href="http://ianloic.com/tag/dreamhost/feed/" rel="self" type="application/rss+xml" />
	<link>http://ianloic.com</link>
	<description>from Ian McKellar</description>
	<lastBuildDate>Sat, 06 Feb 2010 16:07:39 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<atom:link rel='hub' href='http://ianloic.com/?pushpress=hub'/>
		<item>
		<title>Tracking WordPress using Git</title>
		<link>http://ianloic.com/2008/09/06/tracking-wordpress-using-git/</link>
		<comments>http://ianloic.com/2008/09/06/tracking-wordpress-using-git/#comments</comments>
		<pubDate>Sat, 06 Sep 2008 20:40:38 +0000</pubDate>
		<dc:creator>Ian McKellar</dc:creator>
				<category><![CDATA[Default]]></category>
		<category><![CDATA[dreamhost]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://ianloic.com/?p=60</guid>
		<description><![CDATA[Update: I don't do this anymore.
I publish this blog through WordPress, for reasons I've outlined before. I run it with a custom theme and a bunch of plugins though, and I wanted a convenient way to keep my WordPress install up to date without having to reinstall everything all the time. I wanted source control [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Update</strong>: <a href="http://ianloic.com/2009/12/29/give-me-convenience/">I don't do this anymore</a>.</p>
<p>I publish this blog through <a href="http://www.wordpress.org/">WordPress</a>, for reasons I've <a href="http://ianloic.com/2008/01/12/moving-from-drupal-to-wordpress-for-blogging/">outlined before</a>. I run it with a custom theme and a bunch of plugins though, and I wanted a convenient way to keep my WordPress install up to date without having to reinstall everything all the time. I wanted source control for my blog install.</p>
<p>My first attempt involved mirroring WordPress SVN into a <a href="http://git.or.cz/">Git</a> repository on <a href="http://www.github.com/">github</a> so that I had a Git version of the SVN tree (including branches, tags and every checkin separate) and seperate repository holding the changes I'd made for my web site. This eventually failed for two reasons, first the script I was using to mirror the SVN into Git had a habit of failing in bizarre ways and secondly having two repositories confused me.</p>
<p>Yesterday I decided to update my fairly outdated WordPress install, it had been missing security fixes for some time and was one minor version behind. Since tracking SVN hadn't worked I tried a simpler approach, a single Git repository containing a <em>master</em> branch that tracks releases and an <em>ianloic.com</em> branch to track the state of my site.</p>
<p>I set up <em>master</em> with a fresh download of WordPress 2.5 from wordpress.com, created my <em>ianloic.com</em> branch and applied the differences between my site and the <em>2.5</em> SVN tag (for all it's failures my old approach at least let me do this easily). I switched back to the <em>master</em> branch, deleted all the files (leaving my .git directory intact) and unpacked the new WordPress 2.6.1 tarball. I checked that in (to the <em>master</em> branch), tagged it <em>2.6.1</em> and then merged that into my <em>ianloic.com</em> branch. I pushed all that to <a href="http://github.com/ianloic/wordpress/">github</a> and then checked it out on my web server (at <a href="http://www.dreamhost.com/r.cgi?235928">Dreamhost</a>).</p>
<p>Normally with Git you're tracking just the <em>master</em> branch, but I want both <a href="http://github.com/ianloic/wordpress/commits/master"><em>master</em></a> and <a href="http://github.com/ianloic/wordpress/commits/ianloic.com"><em>ianloic.com</em></a> branches to be tracked so my .<em>git/config</em> contains:</p>
<pre>[remote "origin"]
	url = git@github.com:ianloic/wordpress.git
	fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
	remote = origin
	merge = refs/heads/master
[branch "ianloic.com"]
	remote = origin
	merge = refs/heads/ianloic.com</pre>
<p>Now it's easy to track changes that I'm making to my site and update to the latest WordPress without risking losing anything. The process for updating to a new WordPress release is:</p>
<ul>
<li>on my laptop check out the <em>master</em> branch</li>
<li><em>rm</em> all the files except for <em>.git</em> from the directory</li>
<li>unpack the new release into the directory</li>
<li><em>git-add .</em> — now <em>git-status</em> will indicate what has changed, been added or removed</li>
<li><em>git-commit</em> to check in the new version of wordpress</li>
<li><em>git-tag versionnum</em> to tag which version is currently in master</li>
<li><em>git-checkout ianloic.com</em></li>
<li><em>git-merge versionnum</em> to merge the latest version into the site's branch</li>
<li><em>git-push --all --tags</em> to push all the branches and tags to github</li>
<li>on my web server, <em>git-pull</em> to update to the latest release</li>
</ul>
<p>I end up with a tree that looks like this:</p>
<div class="mceTemp mceIEcenter">
<dl id="attachment_62" class="wp-caption aligncenter" style="width: 433px;">
<dt class="wp-caption-dt"><a href="http://ianloic.com/wp-content/uploads/2008/09/qgit.png"><img class="size-full wp-image-62" title="WordPress in Git" src="http://ianloic.com/wp-content/uploads/2008/09/qgit.png" alt="ianloic.com WordPress in Git" width="423" height="241" /></a></dt>
</dl>
</div>
]]></content:encoded>
			<wfw:commentRss>http://ianloic.com/2008/09/06/tracking-wordpress-using-git/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Installing Ruby Gems in your home directory</title>
		<link>http://ianloic.com/2007/08/29/installing_ruby_gems_in_your_home_directory/</link>
		<comments>http://ianloic.com/2007/08/29/installing_ruby_gems_in_your_home_directory/#comments</comments>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<dc:creator>Ian McKellar</dc:creator>
				<category><![CDATA[Default]]></category>
		<category><![CDATA[dreamhost]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[I've been playing with Ruby in my <a href="http://www.dreamhost.com/r.cgi?235928">cheap shared hosting provider</a>. They don't include everything I need so I had to install <a href="http://www.rubygems.org/">Ruby Gems</a> in my home directory. The <a href="http://www.rubygems.org/read/chapter/15#page101">instructions</a> don't work. So here's what I did...

First set up environment variables to tell Ruby and Gems where to find stuff:<code>
export GEM_HOME=$HOME/lib/ruby/gems/1.8
export RUBYLIB=$HOME/lib/ruby:/home/ian/lib/site_ruby/1.8
</code>

Download and unpack the Gems source (this is the version I downloaded, you should grab the <a href="http://rubyforge.org/frs/?group_id=126">latest</a>:<code>
wget http://rubyforge.org/frs/download.php/20989/rubygems-0.9.4.tgz
tar xzvf rubygems-0.9.4.tgz
cd rubygems-0.9.4
</code>

Run the setup.rb script with the right arguments to install into your home directory:<code>
ruby setup.rb all --prefix=$HOME --siterubyver=$HOME/lib/site_ruby/1.8
</code>

This will install the gem command (and a couple of others) into <code>$HOME/bin</code> and the Gems source into <code>$HOME/lib/site_ruby</code>. Gems will be installed into <code>$HOME/lib/ruby/gems/1.8</code>. You should add <code>$HOME/bin</code> to your path. If you want to install it somewhere else replace <code>$HOME</code> with the prefix you'd like to use.]]></description>
			<content:encoded><![CDATA[<p>I've been playing with Ruby in my <a href="http://www.dreamhost.com/r.cgi?235928">cheap shared hosting provider</a>. They don't include everything I need so I had to install <a href="http://www.rubygems.org/">Ruby Gems</a> in my home directory. The <a href="http://www.rubygems.org/read/chapter/15#page101">instructions</a> don't work. So here's what I did...</p>
<p>First set up environment variables to tell Ruby and Gems where to find stuff:
<pre class="prettyprint">
export GEM_HOME=$HOME/lib/ruby/gems/1.8
export RUBYLIB=$HOME/lib/ruby:/home/ian/lib/site_ruby/1.8
</pre>
<p>Download and unpack the Gems source (this is the version I downloaded, you should grab the <a href="http://rubyforge.org/frs/?group_id=126">latest</a>:
<pre class="prettyprint">
wget http://rubyforge.org/frs/download.php/20989/rubygems-0.9.4.tgz
tar xzvf rubygems-0.9.4.tgz
cd rubygems-0.9.4
</pre>
<p>Run the setup.rb script with the right arguments to install into your home directory:
<pre class="prettyprint">
ruby setup.rb all --prefix=$HOME --siterubyver=$HOME/lib/site_ruby/1.8
</pre>
<p>This will install the gem command (and a couple of others) into <code>$HOME/bin</code> and the Gems source into <code>$HOME/lib/site_ruby</code>. Gems will be installed into <code>$HOME/lib/ruby/gems/1.8</code>. You should add <code>$HOME/bin</code> to your path. If you want to install it somewhere else replace <code>$HOME</code> with the prefix you'd like to use.</p>
]]></content:encoded>
			<wfw:commentRss>http://ianloic.com/2007/08/29/installing_ruby_gems_in_your_home_directory/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>OpenID for the mathematically challenged</title>
		<link>http://ianloic.com/2007/05/16/openid_for_the_mathematically_challenged/</link>
		<comments>http://ianloic.com/2007/05/16/openid_for_the_mathematically_challenged/#comments</comments>
		<pubDate>Wed, 30 Nov -0001 00:00:00 +0000</pubDate>
		<dc:creator>Ian McKellar</dc:creator>
				<category><![CDATA[Default]]></category>
		<category><![CDATA[dreamhost]]></category>
		<category><![CDATA[drupal]]></category>
		<category><![CDATA[openid]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[The other day I got the <a href="http://openid.net/">OpenID</a> bee in my bonnet and grabbed <a href="http://walkah.net/">James Walker</a>'s <a href="http://drupal.org/project/openid">module</a> and installed it on my server. Actually I grabbed it from CVS, and then discovered that the CVS version is half-ported to some new Drupal 6 form API, so I ended up using the DRUPAL-5 tag.

Anyway, I use <a href="http://www.dreamhost.com/">Dreamhost</a> which I love for many many reasons (primarilly it's really cheap and seems to work really well). Unfortunately they don't build their PHP with <a href="http://php.net/bc">BCMath</a> or even <a href="http://www.php.net/manual/en/ref.gmp.php">GMP</a>, which means my PHP can't do the <a href="http://openid.net/specs/openid-authentication-2_0-11.html#sign_algos">hard math</a> that's required for crypto. Luckily there's a mode of OpenID that doesn't require any work on the relaying party side. So I made a small change that allows James' module to work in this "dumb" mode.
]]></description>
			<content:encoded><![CDATA[<p>The other day I got the <a href="http://openid.net/">OpenID</a> bee in my bonnet and grabbed <a href="http://walkah.net/">James Walker</a>'s <a href="http://drupal.org/project/openid">module</a> and installed it on my server. Actually I grabbed it from CVS, and then discovered that the CVS version is half-ported to some new Drupal 6 form API, so I ended up using the DRUPAL-5 tag.</p>
<p>Anyway, I use <a href="http://www.dreamhost.com/">Dreamhost</a> which I love for many many reasons (primarilly it's really cheap and seems to work really well). Unfortunately they don't build their PHP with <a href="http://php.net/bc">BCMath</a> or even <a href="http://www.php.net/manual/en/ref.gmp.php">GMP</a>, which means my PHP can't do the <a href="http://openid.net/specs/openid-authentication-2_0-11.html#sign_algos">hard math</a> that's required for crypto. Luckily there's a mode of OpenID that doesn't require any work on the relaying party side. So I made a small change that allows James' module to work in this "dumb" mode.</p>
<pre class="prettyprint">
Index: openid.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/openid/openid.install,v
retrieving revision 1.2
diff -u -p -r1.2 openid.install
--- openid.install      25 Mar 2007 06:38:00 -0000      1.2
+++ openid.install      16 May 2007 22:59:56 -0000
@@ -2,24 +2,6 @@</code>

/**
- * OpenID module requires bcmath
- */
-function openid_requirements($phase) {
-  if ($phase == 'runtime') {
-    $requirements['bcmath']['title'] = t('BCMath');
-    if (function_exists('bcadd')) {
-      $requirements['bcmath']['severity'] = REQUIREMENT_OK;
-      $requirements['bcmath']['value'] = t('Enabled');
-    }
-    else {
-      $requirements['bcmath']['severity'] = REQUIREMENT_ERROR;
-      $requirements['bcmath']['description'] = t('OpenID needs the bcmath extension for encryption.');
-    }
-  }
-  return $requirements;
-}
-
-/**
* Implementation of hook_install
*/
function openid_install() {
Index: openid.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/openid/openid.module,v
retrieving revision 1.2
diff -u -p -r1.2 openid.module
--- openid.module       25 Mar 2007 06:38:00 -0000      1.2
+++ openid.module       16 May 2007 22:59:56 -0000
@@ -133,10 +133,14 @@ function openid_login_form_submit($formi

$idp_endpoint = $services[0]['uri'];
$_SESSION['openid_idp_endpoint'] = $idp_endpoint;
-  $assoc_handle = openid_association($claimed_id, $idp_endpoint);
-  if (empty($assoc_handle)) {
-    drupal_set_message(t('OpenID Association failed'), 'error');
-    return;
+
+  // if we have BCMath, we should use OpenID smart mode
+  if (function_exists('bcadd')) {
+      $assoc_handle = openid_association($claimed_id, $idp_endpoint);
+      if (empty($assoc_handle)) {
+        drupal_set_message(t('OpenID Association failed'), 'error');
+        return;
+      }
}
</pre>
<p>Also, I put the patch <a href="http://drupal.org/node/144334">up on Drupal.org</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ianloic.com/2007/05/16/openid_for_the_mathematically_challenged/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
