<?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>saintsjd</title>
	<atom:link href="http://www.saintsjd.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.saintsjd.com</link>
	<description>The blog of Jon Saints</description>
	<lastBuildDate>Tue, 31 Jan 2012 17:20:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>A Better UI (CLI) for git</title>
		<link>http://www.saintsjd.com/2012/01/a-better-ui-for-git/</link>
		<comments>http://www.saintsjd.com/2012/01/a-better-ui-for-git/#comments</comments>
		<pubDate>Mon, 30 Jan 2012 05:20:06 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[ui]]></category>
		<category><![CDATA[ux]]></category>

		<guid isPermaLink="false">http://www.saintsjd.com/?p=159</guid>
		<description><![CDATA[I recently read 3 UI books: Design of Everyday Things, About Face, and Don&#8217;t Make Me Think. The books did make me think. A lot. A lot about a tool I use everyday&#8230; git (http://git-scm.com). Git is sweet tool. But, &#8230; <a href="http://www.saintsjd.com/2012/01/a-better-ui-for-git/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I recently read 3 UI books: Design of Everyday Things, About Face, and Don&#8217;t Make Me Think.</p>
<p>The books did make me think. A lot. A lot about a tool I use everyday&#8230;<br />
git (<a href="http://git-scm.com" target="_blank">http://git-scm.com</a>).</p>
<p>Git is sweet tool. But, the UI could use some love.</p>
<p>The UI can be confusing and inconsistent for newbies. In fact, even after three years of using git, there are commands I still find confusing (do I want git revert or git reset&#8230; and does it need &#8211;hard, HARD, &#8211;cached, HEAD, &#8211;, or  something else?).</p>
<p>An interface should never be a by-product of the implementation of the system. This is where the Git UI goes wrong.</p>
<p>The command <strong>git reset</strong> is a good example. I use <strong>git reset</strong> to undo things. But, its called &#8220;reset&#8221; and has a bunch of strange parameters which have to do with making writes to the git index. In order to undo changes properly, the reset command requires the user to have a clear understanding of the guts of the git index. This should not be the case for a common command, like undo.</p>
<pre># Why not replace things like: git reset HEAD -- file with:
&gt; git unstage</pre>
<p>If we make all the &#8220;resetting&#8221; and funny &#8220;HARD &#8212; HEAD&#8221; parameters happen behind the scenes, then we make the user happier. A lot happier.</p>
<p>Here are a few other small irks I have with the git UI:</p>
<ul>
<li>I have some files I want to stage. Do I want <strong>git add .</strong>, <strong>git add -u</strong>, or <strong>git add -A</strong>? Which does what again? Confused.</li>
<li>Oh geez. I just staged something by accident. How do I unstage it? Its <strong>git reset</strong>? Or is it <strong>git revert</strong>? Do I do a HARD, &#8211;, HEAD, FILE, or something else? Brain damage.</li>
<li>I want to see my changes. <strong>git diff</strong>? <strong>git diff HEAD</strong>? or <strong>git diff &#8211;cached</strong>? why not <strong>git diff CACHED</strong>? Grrrr&#8230;.</li>
<li><strong>git status</strong> is cluttered with commands telling me how to undo things &#8220;use git reset HEAD &lt;file&gt; to unstage&#8221;. If the commands were easy enough to remember in the first place, we would not need to clutter the status output with reminders. And, what does &#8220;changed but not updated mean&#8221;? I did update my file! Do you mean &#8220;changed but not staged&#8221;? Lastly, I would like to humbly request a few fewer &#8220;#&#8221; characters. Just a few. Please.</li>
</ul>
<p>Here is my shot at re-creating a few parts of the Git UI. My hope is that all of these commands become part of git one day and that git becomes easier for new users and forgetful intermediates like me.</p>
<h2>Staging files</h2>
<pre># Stage all changes, and file deletions. Leave unknown files alone.
# Instead of git add -u, just type:
&gt; git stage

# Stage just one file change or deletion.
# Instead of git add FILE and git rm FILE, just type:
&gt; git stage FILE</pre>
<h2>Unstaging Files</h2>
<p>Ooops. I staged a changed that I do not want to commit.</p>
<pre># Remove one file from the stage.
# Instead of git reset HEAD -- file, just type:
&gt; git unstage FILE

# unstage all the files you have in the stage right now.
# Instead of git reset HEAD, just type:
&gt; git unstage</pre>
<h2>Undoing changes I have made:</h2>
<p>Ok. I tried something. It does not work. Just get me back to the last commit.</p>
<pre># Undo all the changes I made to working directory.
# Automatically save the user's work in a stash, then
# Instead of git stash; git reset --hard HEAD, just type:
&gt; git retreat
All files changed back to their state at the last commit.
Your work has been saved in stash@{1}. 

# Just undo the changes I made to one file.
# Automatically save a stash of the user's work first
# Rather than git checkout FILE (side note: why is it not git reset FILE? or is it?)
# Instead, just type:
&gt; git retreat FILE
The file was changed back to the it's state at last commit.
Your work has been saved in stash@{1}.</pre>
<h2>Deleting Files</h2>
<p>Let&#8217;s get rid of git rm. Lets not even tell newbies about it. Just delete files you want from your project, then:</p>
<pre># smart enough to stage files you have removed as well!!!!
&gt; git stage
&gt; git stage FILE</pre>
<h2>Status</h2>
<p>More readable. Less # signs. Less instructions.</p>
<pre>&gt; git status

Staged for commit:
    M daemon.c
    N test.txt

Unstaged Changes (will NOT be committed):
    M hello.c
    ? new.c</pre>
<p>Nice and clean. No reminders about how to undo things&#8230; you already know that: <strong>git undo</strong>. And, no # signs!!</p>
<h2>Automatic Setup</h2>
<p>The first time I run git from a new computer I am most often greeted with an error. Not a very friendly way to great new users. The message says that I have not set my email and user name.</p>
<p>If this error occurs, shouldn&#8217;t git just ask me for this information and proceed with the command I typed? Yep, it should.</p>
<pre># my first ever commit with GIT! Don't greet me with an error.
&gt; git commit -m "yippeee git!"

Howdy! So that git can give you credit for changes you make
    Please enter your name? Jon Saints
    Please enter your email? email@gmail.com
Thank you! Committing...</pre>
<p>This replaces the more confusing error message that git shows users now:</p>
<pre>Error 123: Look! Another stupid user is _trying_ to learn git. 

You should have known to type this first:
&gt; git config --global user.name "Jon Saints"
&gt; git config --global user.email "gmail@gmail.com"

DUFUS!! Just give up now. Seriously.</pre>
<h2>Switching branches</h2>
<pre># I switch branches with the checkout command. Its ok, but what if we had:
&gt; git switch BRANCH</pre>
<h2>Showing things I have changed</h2>
<p>This is one of the most important parts of git. And, it is confusing.</p>
<pre># What is the output? Can you remember which is which?
# git diff
# git diff HEAD
# git diff --cached or git diff CACHED?

# Instead we can... 

# Show all changes from the last commit
&gt; git diff
# or
&gt; git diff HEAD

# Show difference between the stage and my code
&gt; git diff STAGE

# Difference between my stage and last commit
&gt; git diff STAGE HEAD

# Difference between two branches or revisions
&gt; git diff branch1 branch2
&gt; git diff AD34E BCDE543</pre>
<h2>Deleting a branch</h2>
<pre># Let's be consistent with git remote command. Instead of git branch -d
&gt; git branch rm BRANCH</pre>
<h2>Where to from here?</h2>
<p>I am going to make a small python wrapper to try out these commands. It will be called gum. And, it will just write git commands for you.</p>
<p><strong>gum</strong> = <strong>G</strong>it <strong>U</strong>ser (interface) <strong>M</strong>akeover.</p>
<p>&#8220;gum unstage&#8221; here we come! The code is on github: <a href="https://github.com/saintsjd/gum" target="_blank">https://github.com/saintsjd/gum</a></p>
<p>Comments welcome.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saintsjd.com/2012/01/a-better-ui-for-git/feed/</wfw:commentRss>
		<slash:comments>67</slash:comments>
		</item>
		<item>
		<title>A La Carte Education</title>
		<link>http://www.saintsjd.com/2011/08/ala-carte-education/</link>
		<comments>http://www.saintsjd.com/2011/08/ala-carte-education/#comments</comments>
		<pubDate>Thu, 04 Aug 2011 04:09:45 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[book reviews]]></category>
		<category><![CDATA[edu]]></category>
		<category><![CDATA[entrepreneurship]]></category>
		<category><![CDATA[op-ed]]></category>
		<category><![CDATA[reform]]></category>

		<guid isPermaLink="false">http://www.saintsjd.com/?p=152</guid>
		<description><![CDATA[Let me first say this: College was one of the best things that has ever happened to me. I firmly believe that the 4 year journey we take through undergraduate colleges in America is one of the greatest rite of &#8230; <a href="http://www.saintsjd.com/2011/08/ala-carte-education/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div>Let me first say this: College was one of the best things that has ever happened to me. I firmly believe that the 4 year journey we take through undergraduate colleges in America is one of the greatest rite of passage journeys that the world has ever known.&nbsp;</p>
<p>Now, let me say this: There have been many times, since I left college, where I wanted to gain a new skill to start a business or to expand my realm of possibility. Times where I wanted something a little cheaper than a graduate degree, a little more structured than teaching my self, and a lot more flexible than a semester. There are certainly times where going back to college for a another full blown rite of passage just is not a fit.</p>
<p>So what is? Is there a more a-la-carte journey out there? A way to get bursts of learning without a full degree?</p>
<p>A couple sources have inspired my thinking on the topic recently:<br />
1) <a href="http://khanacademy.org">Khan Academy</a>: Revolutionary. Access to high quality lectures on wide range of topics for anyone with an internet connection. Khan believes in flipping classroom. This means lectures by video at home and homework collaboratively in the classroom. <a href="http://www.youtube.com/watch?v=HkMS6Glswig">http://www.youtube.com/watch?v=HkMS6Glswig</a></p>
<p>2) Book: Reality is Broken by Jane Mcgonigal (http://www.amazon.com/Reality-Broken-Games-Better-Change/dp/1594202850). McGonigal Explains the idea of Leveling Up in education. Rather than semesters and grades subjects are given Levels and open time frames.</p>
<p>With Grades. Anything but an “A” means you fell short. A letter grade of “C” means the student only got about half as far as the teacher thought they should in a time frame (semester) that was set by the school.</p>
<p>Leveling up is different. Students progress at their own pace choosing their levels of expertise they want to obtain. Level 1 in chemistry might be “How not to blow yourself up in the kitchen”. Level 3 might be “Ace the AP Chem test”. Level 5 might be “wowzers&#8230; you just invented a new kind of compostable plastic”. You wear levels like you wear karate belts. There is no shame in any level. Some students have just journied farther than others.</p>
<p>My answer: A-la-Carte Education. Lab course series taught outside of colleges. Students pay per level and can come and go as they wish and continue from where they left off. Classes are all flipped: reading and lectures at home. Collaboartive problem solving (homework) in a weekly meeting with the teacher and other students.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.saintsjd.com/2011/08/ala-carte-education/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Choosing a Health Savings Deductible for a Family</title>
		<link>http://www.saintsjd.com/2011/03/choosing-a-health-savings-deductible-for-a-family/</link>
		<comments>http://www.saintsjd.com/2011/03/choosing-a-health-savings-deductible-for-a-family/#comments</comments>
		<pubDate>Wed, 30 Mar 2011 02:25:43 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[getting it right]]></category>
		<category><![CDATA[healthcare]]></category>
		<category><![CDATA[HSA]]></category>
		<category><![CDATA[reform]]></category>

		<guid isPermaLink="false">http://www.saintsjd.com/?p=148</guid>
		<description><![CDATA[Once you have decided to go with a high deductible health savings account health insurance plan, the next step is to choose the size of that high deductible. The higher you choose the lower your monthly payment will be. HSA &#8230; <a href="http://www.saintsjd.com/2011/03/choosing-a-health-savings-deductible-for-a-family/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Once you have decided to go with a high deductible health savings account health insurance plan, the next step is to choose the size of that high deductible. The higher you choose the lower your monthly payment will be.</p>
<p>HSA health plans allow you to open a Health Savings account and save $ tax free to use for medical expenses. So, the less you pay in premiums, the more you will have to save.</p>
<p>So, how high of a deductible should you choose? What is the best balance between coverage and savings?</p>
<p>The answer depends mostly on how much you have budgeted to spend on health insurance each month.</p>
<p>Start with the amount you have to spend on health related expenses each month. For my wife and I its $700.</p>
<p>Next, look at some Health Plans. You will want to look at two things:</p>
<ol>
<li>How much you can save each month and use toward medical expenses before your deductible kicks in</li>
<li>What happens in a worst case scenario. How much monthly will you have to pay if you are seriously injured and need to pay both your monthly premium, plus the full deductible amount.</li>
</ol>
<p>&nbsp;</p>
<p>The spread sheet I used to determine these amounts is here:</p>
<p><a href="https://spreadsheets.google.com/pub?hl=en&amp;hl=en&amp;key=0AipucNLg02ekdGlLOE01Vld6bG5MVFVYNF9HNmlVbGc&amp;output=html">https://spreadsheets.google.com/pub?hl=en&amp;hl=en&amp;key=0AipucNLg02ekdGlLOE01Vld6bG5MVFVYNF9HNmlVbGc&amp;output=html</a></p>
<p>Please copy this spreadsheet and fill in your own numbers</p>
<p>Here are my conclusions&#8230; keep in mind I these are for coverage for myself and my wife in Colorado. Numbers for bigger families in other states will vary greatly. But, the process for choosing the right plan will be the same.</p>
<ul>
<li>if my monthly health budget were &lt; $250: There is no health plan that I could afford. I should seek gov&#8217;t help</li>
<li>$300 monthly health budget: Go with the $10,000 deductible plan. Its all that can be afforded. Some coverage is better than none.</li>
<li>$400 monthly health budget: Choice to make here. I can save 18% of my deductible each year on the $10,000 plan. But my worst case monthly cost is $1083. Safer bet is $7000 plan. There I save 4% less towards my deductible each year, but in the worst cast only need to pay $899 per month.</li>
<li>$500 monthly health budget: Clear choice here is the $7000 deductible plan. Save the highest percent each year towards deductible 32% and have a lower worst case payment of $899 per month.</li>
<li>$600 monthly health budget: Choose the $5000 deductible plan. Over the course of the year you will save the same percent 49% towards your deductible as the $7000 plan, but you will have lower worst case monthly costs of $811</li>
<li>$700 monthly health budget: Choose the $5000 deductible plan. Over the course of the year you save the most 73% towards your deductible and have lower worst case monthly costs of $811</li>
<li>$800 monthly health budget: Still choose the $5000 plan. Will save 97% towards deductible and have $811 worst case. Savings of going to more expensive $2500 plan is only $9 in worst case $802.</li>
<li>$900 and above budget: Still choose the $5000 plan. Will save more towards deductible and have $811 worst case. Savings of going to more expensive $2500 plan is only $9 in worst case $802.</li>
</ul>
<p>Summary: There are no cases were the lowest deductible plan makes sense. There is also only one case where the highest deductible plan make sense; (when its your only option for health insurance). All other cases its best to choose between the two middle plans. The best choice there depends on how much risk you want to take on.</p>
<p>Curious to see if you all find the same conclusions.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saintsjd.com/2011/03/choosing-a-health-savings-deductible-for-a-family/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Automated Deployment of PHP Applications using git</title>
		<link>http://www.saintsjd.com/2011/03/automated-deployment-of-wordpress-using-git/</link>
		<comments>http://www.saintsjd.com/2011/03/automated-deployment-of-wordpress-using-git/#comments</comments>
		<pubDate>Sun, 06 Mar 2011 02:57:09 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[deploy]]></category>
		<category><![CDATA[deployment]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.saintsjd.com/?p=136</guid>
		<description><![CDATA[Heroku is sweet hosting platform which offers a pure git deployment workflow. I love using it to deploy my Rails projects. I miss using when I deploy a PHP application. Lets fix that&#8230;. Here is a quick heroku-ish git deployment &#8230; <a href="http://www.saintsjd.com/2011/03/automated-deployment-of-wordpress-using-git/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.heroku.com">Heroku</a> is sweet hosting platform which offers a pure git deployment workflow. I love using it to deploy my Rails projects. I miss using when I deploy a PHP application.</p>
<p>Lets fix that&#8230;. Here is a quick heroku-ish git deployment workflow for your PHP applications. We will be using WordPress for this example. The same steps can be adapted for Drupal or any other PHP application.</p>
<p>Our goal is to development and test new features, themes, and plugins for WordPress locally on our development machine. When changes are working properly, we want to deploy them to our live site with one command:</p>
<pre>git push origin master</pre>
<h2>#1: Set up password-less login to your webserver with SSH keys</h2>
<p>To run deployments we will need to access our live webserver without a password. Follow the steps  in <a href="http://www.saintsjd.com/2011/01/setting-up-ssh-public-keys/" target="_blank">Setting up ssh public keys</a> to login to webserver without a password.</p>
<p>For each user or machine from which you want to allow deploys you will need to install its SSH key using the steps above.</p>
<h2>#2: Setup Code Repository on the Webserver</h2>
<p>I connect to the webserver via SSH. My home directory is /home/saintsjd.</p>
<p>I have a /home/saintsjd/www folder for my website and PHP files. I also have a /home/saintsjd/code folder for my git repositories.</p>
<p>cd into /home/saintsjd/code and create a folder called blog.git</p>
<pre>cd /home/saintsjd/code
mkdir blog.git</pre>
<p>Next, initialize a bare git repository</p>
<pre>cd blog.git
git init --bare blog.git</pre>
<p>This gives me a git repository to store my code at /home/saintsjd/code/blog.git. I then disconnect from the SSH connection to the webserver.</p>
<h2>#3: Setup Development Box</h2>
<p>I have php, mysql, and apache running locally on my laptop. I create my WordPress themes, plugins, and updates on my laptop. After I test them, I deploy them to the live webserver for the world to see.</p>
<p>My local website folder is /home/jon/Website. To get started I clone my git repo locally:</p>
<pre>git clone ssh://saintsjd@saintsjd.com/home/saintsjd/code/blog.git ./blogdev</pre>
<p>This give me:</p>
<pre>/home/jon/Website/blogdev</pre>
<p>Now i can start filling in code!</p>
<p>Into the /home/jon/Website/blogdev/ folder I copy in all the files for WordPress and run the installer.</p>
<p>Next, I need to add a gitignore file to the project. I use the one here. <a href="https://github.com/github/gitignore/blob/master/Wordpress.gitignore" target="_blank">https://github.com/github/gitignore/blob/master/Wordpress.gitignore</a>. I copy the contents of that file into a .gitignore file in /home/jon/Website/blogdev/.gitignore. I then:</p>
<pre>git add .
git commit -m "inital commit"</pre>
<p>To send my changes to the server I type:</p>
<pre>git push origin master</pre>
<h2>#4: Setup Live Webserver</h2>
<p>Now I install WordPress on my server. I SSH to my server. There my website directory is /home/saintsjd/www. I need to remove this folder so I backup everything in this directory.  Then I remove it and recreate it using git clone. I type:</p>
<pre>rm -rf /home/saintsjd/www
git clone /home/saintsjd/code/blog.git /home/saintsjd/www</pre>
<p>I then browse to my website http://www.saintsjd.com and run the wordpress installer so the database gets installed on the server.</p>
<h3>IMPORTANT: Protect your .git repository from prying eyes</h3>
<p>I don&#8217;t really want others reading my source code from the git repository via <a href="http://www.saintsjd.com/.git/">http://www.saintsjd.com/.git/</a></p>
<p>I prevent this by running:</p>
<pre>chmod -R og-rx /home/saintsjd/www/.git</pre>
<p>I also add a .htaccess file to the .git folder containing:</p>
<pre>Deny from all</pre>
<h2>#5: Automated Deployment Script</h2>
<p>Now that wordpress is installed on both my local machine and my live webserver, I want to be able to deploy any changes I make on my local copy with one git push command. I can do this using a Git hook.</p>
<p>I SSH to my webserver and create a file /home/saintsjd/code/blog.git/hooks/post-receive</p>
<pre>touch /home/saintsjd/code/blog.git/hooks/post-receive</pre>
<p>I make the file executable</p>
<pre>chmod u+x /home/saintsjd/code/blog.git/hooks/post-receive</pre>
<p>Then I edit the file</p>
<pre>nano -w /home/saintsjd/code/blog.git/hooks/post-receive</pre>
<p>and place this code in it (adjusting the config variables to match your server settings)</p>
<pre>#!/bin/bash
#CONFIG
LIVE="/home/saintsjd/www"

read oldrev newrev refname
if [ $refname = "refs/heads/master" ]; then  
  echo "===== DEPLOYING TO LIVE SITE ====="  
  unset GIT_DIR  
  cd $LIVE  
  git pull origin master  
  echo "===== DONE ====="
fi</pre>
<h2>#6 Let the (heroku-like) Fun Begin: Automated Deployment for WordPress</h2>
<p>Now that everything is setup. I am free to develop new themes, install new plugins and update on my local development box. Once everything is working properly locally commit and push. The post-receive hook automatically deploys the code changes to my live webserver for me.</p>
<p>Here are my steps:</p>
<ol>
<li>Make changes to my local site&#8217;s code: new theme, new plug-in, etc</li>
<li>test, test and test so more!</li>
<li>When I am happy I commit to the local git repository:
<pre>git add .
git commit -m "new theme css for header"</pre>
</li>
<li>I push and deploy to the server using one command:
<pre>git push origin master</pre>
</li>
<li>After the post-receive hook moves the new code to the live website. I open http://www.saintsjd.com/wp-admin on the live server to trigger and database updates that need to run</li>
</ol>
<p>That&#8217;s it&#8230; heroku-ish git deployment for WordPress websites.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saintsjd.com/2011/03/automated-deployment-of-wordpress-using-git/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>The Bookmarks of a News Junkie</title>
		<link>http://www.saintsjd.com/2011/02/the-bookmarks-of-a-news-junkie/</link>
		<comments>http://www.saintsjd.com/2011/02/the-bookmarks-of-a-news-junkie/#comments</comments>
		<pubDate>Wed, 23 Feb 2011 15:56:14 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[news]]></category>

		<guid isPermaLink="false">http://www.saintsjd.com/?p=129</guid>
		<description><![CDATA[I read quite a bit of news. I am often asked by others to share a list of the sites I visit most frequently. Here is that list. I subscribe to the Economist print edition usually for about 6 months &#8230; <a href="http://www.saintsjd.com/2011/02/the-bookmarks-of-a-news-junkie/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I read quite a bit of news. I am often asked by others to share a list of the sites I visit most frequently. Here is that list.</p>
<p>I subscribe to the Economist print edition usually for about 6 months out of the year.</p>
<p>Websites:</p>
<ul>
<li><a href="http://www.nytimes.com" target="_blank">New York Times</a></li>
<li><a href="http://www.lifehacker.com" target="_blank">Lifehacker</a></li>
<li><a href="http://www.clarin.com">Clarin</a></li>
<li><a href="http://www.wsj.com" target="_blank">Wall Street Journal</a></li>
<li><a href="http://www.espn.com" target="_blank">ESPN</a></li>
<li><a href="http://www.economist.com" target="_blank">The Economist Online</a></li>
<li><a href="http://www.marketplace.org" target="_blank">Marketplace</a></li>
<li><a href="http://www.npr.org/rss/podcast.php?id=500005" target="_blank">NPR Hourly News Summary</a></li>
<li><a href="http://www.hbr.org" target="_blank">Harvard Business Review</a></li>
<li><a href="http://www.bbcnews.com" target="_blank">BBC News</a></li>
<li><a href="http://english.aljazeera.net/" target="_blank">Al Jazeera</a></li>
<li><a href="http://www.bbc.co.uk/podcasts/series/mh" target="_blank">BBC Mundo Podcasts</a></li>
<li><a href="http://www.ted.com" target="_blank">TED</a></li>
<li><a href="http://www.foxnews.com" target="_blank">Fox News</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.saintsjd.com/2011/02/the-bookmarks-of-a-news-junkie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Continuous deployment for WordPress using git and fabric</title>
		<link>http://www.saintsjd.com/2011/01/continuous-deployment-for-wordpress-using-git-and-fabric/</link>
		<comments>http://www.saintsjd.com/2011/01/continuous-deployment-for-wordpress-using-git-and-fabric/#comments</comments>
		<pubDate>Mon, 31 Jan 2011 04:18:26 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[deploy]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.saintsjd.com/?p=118</guid>
		<description><![CDATA[&#8212;&#8212; UPDATE: This post is out of date. Please see the new and improved version of this page Automated Deployment of WordPress using git &#8212;&#8212;- Continuous Deployment is a strategy you&#8217;ll want to implement for any successful web project. According to &#8230; <a href="http://www.saintsjd.com/2011/01/continuous-deployment-for-wordpress-using-git-and-fabric/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h3>&#8212;&#8212;</h3>
<h3>UPDATE: This post is out of date. Please see the new and improved version of this page <a title="Automated Deployment of WordPress using git" href="http://www.saintsjd.com/2011/03/automated-deployment-of-wordpress-using-git/">Automated Deployment of WordPress using git</a></h3>
<h3>&#8212;&#8212;-</h3>
<p><a href="http://radar.oreilly.com/2009/03/continuous-deployment-5-eas.html" target="_blank">Continuous Deployment</a> is a strategy you&#8217;ll want to implement for any successful web project. According to Eric Reis, &#8220;It’s a process whereby all code that is written for an application is immediately deployed into production. The result is a dramatic lowering of cycle time and freeing up of individual initiative. It has enabled companies I’ve worked with to deploy new code to production as often as fifty times every day.&#8221;</p>
<p>This article describes one method for configuring a continuous deployment infrastructure using git, fabric, and SSH. Its fairly lightweight and should work with basic hosting systems.</p>
<p>Our goal here is to create new features locally on a development machine, commit happy changes to a code repository, and finally deploy the changes to a live web server with ease using server side scripts. It makes deploying new changes to a live wordpress website so easy you&#8217;ll want to do it 50 times a day!</p>
<h2>Install Deployment Tools on your Dev Machine:</h2>
<p>I use fabric for all of my non-rails applications (PHP, Python, etc). Fabric allows you to execute command on remote servers by running a local script on your machine.</p>
<p>Its available at http://docs.fabfile.org/</p>
<p>To install on my local Ubuntu Linux development machine I just:</p>
<pre>sudo apt-get install fabric</pre>
<h2>Set up SSH keys</h2>
<p>To run deployments we will need to access our remote SSH server without a password. Follow the steps  in <a href="http://www.saintsjd.com/2011/01/setting-up-ssh-public-keys/" target="_blank">Setting up ssh public keys</a> to login to SSH servers without a password.</p>
<p>For each user or machine from which you want to allow deploys you will need to install its SSH key using the steps above.</p>
<h2>Use git to Setup Code Repositories</h2>
<p>I use two separate git repositories: one for my wordpress website and another to track changes to my fabric deployment scripts. I store my repositories on my web server in the folder</p>
<pre>/home/jon/code/saintsjd.com
/home/jon/code/saintsjd.com/www.git (is my wordpress website git repo)
/home/jon/code/saintsjd.com/deploy.git (is my repo for deployment scripts)</pre>
<p>So I cd into /home/jon/code/saintsjd then:</p>
<pre>git init --bare www.git
git init --bare deploy.git</pre>
<h2>Setup a Local Development Space</h2>
<p>I have php, mysql, and apache running locally on my development machine. My local website folder is /home/jon/Website. There I create a folder /home/jon/Website/saintsjd.com. I then clone my git repos locally:</p>
<pre>git clone ssh://jon@saintsjd.com/home/jon/code/saintsjd.com/deploy.git ./deploy
git clone ssh://jon@saintsjd.com/home/jon/code/saintsjd.com/www.git ./www</pre>
<p>This give me:</p>
<pre>/home/jon/Website/saintsjd.com/www
/home/jon/Website/saintsjd.com/deploy</pre>
<p>Now i can start filling in code!</p>
<h2>Install WordPress in Dev Space</h2>
<p>Into the /home/jon/Website/saintsjd.com/www/ folder I copy in all the files for wordpress and run the wordpress installer. After WP is installed properly on my local machine I initialize a git repository to start tracking my code.</p>
<p>First, I need to add a gitignore file to the project. I use the one here. <a href="https://github.com/github/gitignore/blob/master/Wordpress.gitignore" target="_blank">https://github.com/github/gitignore/blob/master/Wordpress.gitignore</a>. I copy the contents of that file into a .gitignore file in /home/jon/Website/saintsjd.com/www/.gitignore. I then:</p>
<pre>git add .
git commit -m "inital commit"</pre>
<p>To send my changes to the server I type:</p>
<pre>git push origin master</pre>
<h2>Install WordPress on the server</h2>
<p>Now I install wordpress on my server. I ssh to my server. There my website directory is /home/jon/public_html. I backup everything in this directory then I remove this directory and recreate it using git clone. I type:</p>
<pre>rm -rf public_html
git clone /home/jon/code/saintsjd.com/www.git public_html</pre>
<p>I then run the wordpress installer.</p>
<h2>Writing the deploy scripts</h2>
<p>With wordpress installed locally and on my server. I am ready to write a fabric deploy script to easily synchronize changes I make locally to my live version of wordpress on the web server.</p>
<p>On my development machine I:</p>
<pre>cd /home/jon/Website/saintsjd.com/deploy</pre>
<p>There I create fabfile.py and fill the file with the code below:</p>
<pre>from fabric.api import *
env.hosts = ['jon@saintsjd.com']
WEBSITE_PATH = "/home/jon/public_html"

def deploy():
    with cd(WEBSITE_PATH):
        run('git pull')</pre>
<p>You will need to change the env.hosts value to use your ssh login for your server. You will also need to change WEBSITE_PATH to reflect the path to your website on the server.</p>
<p>Now when ever we want to deploy changes to the live website we can just</p>
<ol>
<li>commit our changes with git and 	push</li>
<li>go to the command line and
<pre>fab deploy</pre>
</li>
</ol>
<p>If you want to (I do), you can get fancy and make a backup before each deployment. This is great in case something goes wrong. My fabfile.py with backups looks like:</p>
<pre>from fabric.api import *

env.hosts = ['jon@saintsjd.com']
LIVE = "/home/jon/www/saintsjd.com"
BACKUPS = "/home/jon/backups/saintsjd.com"
MYSQL_USER = ""
MYSQL_PASSWORD = ""
MYSQL_DATABASE = ""

def deploy():
    backup()
    with cd(LIVE):
        run('git pull origin master')

def backup():
    run('mysqldump -u %s -p %s --add-drop-table --password=%s  &gt; %s/saintsjd.com-database-current.mysql' % (MYSQL_USER, MYSQL_DATABASE, MYSQL_PASSWORD, BACKUPS) )
    run('/usr/bin/nice tar -czf %s/saintsjd-`date +%%Y%%m%%d%%H%%M%%S`.tar.gz %s/saintsjd.com-database-current.mysql %s' % (BACKUPS,BACKUPS,LIVE) )</pre>
<p>With fabfile.py written and working I add it to my git repo and push to the server for safe keeping:</p>
<pre>git commit -am “initial commit”
git push origin master</pre>
<h2>Protect your .git folder on the live website using .htaccess</h2>
<p>I don&#8217;t really want others reading my git repository via <a href="http://www.saintsjd.com/.git/">http://www.saintsjd.com/.git/</a> I prevent this by  running:</p>
<pre>chmod -R og-rx /home/public_html/.git</pre>
<p>I also add a .htaccess file to the .git folder containing:</p>
<pre>Deny from all</pre>
<h2>Continuous deployment of WordPress using git and fabric</h2>
<p>My continuous deployment for the website is all set. Now I</p>
<ol>
<li>make changes to my local site&#8217;s 	code: new theme, new plug-in, etc</li>
<li>test, test test</li>
<li>when I am happy I commit to the 	local git repository</li>
<li>I push to the server</li>
<li>I then change directory into my 	../deploy folder and run
<pre>fab deploy</pre>
<p>on the command line to send the change to the live 	website</li>
<li>finally I open wp-admin on the 	live server to trigger and database updates that need to run</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.saintsjd.com/2011/01/continuous-deployment-for-wordpress-using-git-and-fabric/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Offline website browsing</title>
		<link>http://www.saintsjd.com/2011/01/offline-website-browsing/</link>
		<comments>http://www.saintsjd.com/2011/01/offline-website-browsing/#comments</comments>
		<pubDate>Sun, 30 Jan 2011 04:49:49 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[off the grid]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[travel]]></category>

		<guid isPermaLink="false">http://www.saintsjd.com/?p=98</guid>
		<description><![CDATA[I often need to read websites offline when I am in the developing world or on an airplane. I wrote an offline browsing solution a while back that worked, but now I found something much better. When you need to &#8230; <a href="http://www.saintsjd.com/2011/01/offline-website-browsing/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I often need to read websites offline when I am in the developing world or on an airplane. I <a href="http://www.saintsjd.com/malawi/blog/jon/offline_web_browsing.html">wrote an offline browsing solution a while back</a> that worked, but now I found something much better.</p>
<p>When you need to download copies of websites to browser at a later time offline use <a href="http://www.httrack.com/" target="_blank">httrack</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saintsjd.com/2011/01/offline-website-browsing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What is a bare git repository?</title>
		<link>http://www.saintsjd.com/2011/01/what-is-a-bare-git-repository/</link>
		<comments>http://www.saintsjd.com/2011/01/what-is-a-bare-git-repository/#comments</comments>
		<pubDate>Thu, 27 Jan 2011 06:51:35 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://www.saintsjd.com/?p=95</guid>
		<description><![CDATA[What is the difference between a repository created using the &#8220;git init&#8221; command and the &#8220;git init &#8211;bare&#8221; command? Repositories created with &#8220;git init&#8221; command contain 2 things: the .git folder repository (or code history) and also real life working &#8230; <a href="http://www.saintsjd.com/2011/01/what-is-a-bare-git-repository/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>What is the difference between a repository created using the &#8220;git init&#8221; command and the &#8220;git init &#8211;bare&#8221; command?</p>
<p>Repositories created with &#8220;git init&#8221; command contain 2 things: the .git folder repository (or code history) and also real life working copies of your source code files. You can think of this type of repository as a working directory. Its a folder with code history stored in .git folder and all the source files as well. You can work in this directory changing source files and save your changes using the &#8220;git add&#8221; and &#8220;git commit&#8221; commands.</p>
<p>Bare repositories contain only the .git folder and <strong>no working copies of your source files</strong>. If you &#8220;cd&#8221; into a bare repository you find only the .git folder and nothing else. A bare repository strictly contains the version history of your code.</p>
<p>Why use one or the other?</p>
<p>Well, a working repository is for just that&#8230; <strong>working</strong>. Its where you will actually edit files, add files, delete files to create your project saving your changes to the local .git repo along the way. If you are starting a project in a folder which will contain your code as well as a git repo for tracking changes use &#8220;git init&#8221;. Also if you &#8220;git clone&#8221; a repository from some one else you will be given a working repository with the .git folder and copies of the working files.</p>
<p>A bare repository is for&#8230; <strong>sharing</strong>. Bare repositories are shared repos where developers can send their local changes from their working copies of projects to the world or to the rest of their team. By using the &#8220;git push&#8221; command, you are able to send changes in your local working copies of a project to a centralized shared bare repository. Other developers can then &#8220;git pull&#8221; to receive the changes that you made. If you are collaborating with a team of developers or you need to work on a project from multiple computers , then a bare git repository is what you need in between to coordinate the distributed development.</p>
<p>To summarize: the working directory created with &#8220;git init&#8221; or &#8220;git clone&#8221; is my local copy of a project. Its where I add my changes to a project&#8217;s code files and test. After I am happy I &#8220;git add&#8221; and &#8220;git commit&#8221;. Then I &#8220;git push&#8221; to a bare repository, usually on another server, so that other developers can access my changes. When I want to update my local working copy I &#8220;git pull&#8221; to receive the changes that other developers have made.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saintsjd.com/2011/01/what-is-a-bare-git-repository/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Setting up ssh public keys to login to SSH servers without a password</title>
		<link>http://www.saintsjd.com/2011/01/setting-up-ssh-public-keys/</link>
		<comments>http://www.saintsjd.com/2011/01/setting-up-ssh-public-keys/#comments</comments>
		<pubDate>Thu, 27 Jan 2011 06:18:41 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://www.saintsjd.com/?p=90</guid>
		<description><![CDATA[SSH public keys allow you to securely login to a remote SSH server with having to enter your password each time you want to log in. Once configured SSH keys can save you time and enable easier use of applications like &#8230; <a href="http://www.saintsjd.com/2011/01/setting-up-ssh-public-keys/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>SSH public keys allow you to securely login to a remote SSH server with having to enter your password each time you want to log in.</p>
<p>Once configured SSH keys can save you time and enable easier use of applications like Git. Below are steps for Mac and Linux users to create SSH keys and install them on remote servers for passwordless logins.</p>
<h2><strong>Create an SSH key on your local machine</strong></h2>
<p>From the command line type:</p>
<p>ls .ssh</p>
<p>If you see a file called id_rsa.pub listed, then you already have created a key. Skip to the next section called &#8220;Copying the key to the server&#8221;.</p>
<p>If you do not see id_rsa.pub listed. Lets create one. Type:</p>
<p>ssh-keygen -t rsa</p>
<p>Setting a password for your key is recommended, but it optional. Once the process completes, run:</p>
<p>ls .ssh</p>
<p>And verify that you have a id_rsa.pub file.</p>
<h2>Copying the key to the server</h2>
<p>There are two methods for copying the keyfile to the server. Ubuntu Linux has the easiest method. A special command ssh-copy-id. Go to the command line and try (change the username and server name):</p>
<p>ssh-copy-id username@servername.com</p>
<p>You&#8217;ll be prompted to accept the identity of the server. Say &#8220;yes&#8221;. Then enter your password. Once the file is copied, you are ready to login without passwords.</p>
<p>If your computer does not have the ssh-copy-id command you need to manually open the id_rsa.pub file in a text editor and copy its contents (this is your public key). Carefully paste the public key at the end of a file in your home directory on the server located at .ssh/authorized_keys2. If the .ssh directory and the authorized_keys2 files do not exist you can create them, but make sure permissions are set so others users cannot view the folder or files.</p>
<p>With your key installed you are ready to login without a password!</p>
<h2>Login via SSH without a password</h2>
<p>Go to the command line and type:</p>
<p>ssh username@servername.com</p>
<p>Your first time you may be asked to accept the identity of the server. Say &#8220;yes&#8221;. If your public key is installed correctly you will be able to login to the server without a password.</p>
<p>Any other SSH server you want to log into with a password&#8230; just install your public key id_rsa.pub on the server using the steps above.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saintsjd.com/2011/01/setting-up-ssh-public-keys/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Deploying a Drupal 7 Website Using git</title>
		<link>http://www.saintsjd.com/2011/01/deploying-a-drupal-7-website-using-git/</link>
		<comments>http://www.saintsjd.com/2011/01/deploying-a-drupal-7-website-using-git/#comments</comments>
		<pubDate>Wed, 26 Jan 2011 04:45:46 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[deployment]]></category>
		<category><![CDATA[Drupal]]></category>
		<category><![CDATA[git]]></category>

		<guid isPermaLink="false">http://www.saintsjd.com/?p=84</guid>
		<description><![CDATA[&#8212;&#8212; UPDATE: This post is out of date. Please see the new and improved version of this page Automated Deployment of WordPress using git &#8212;&#8212;- Distributed revision control systems are an excellent way to manage the source code of web applications. &#8230; <a href="http://www.saintsjd.com/2011/01/deploying-a-drupal-7-website-using-git/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h3>&#8212;&#8212;</h3>
<h3>UPDATE: This post is out of date. Please see the new and improved version of this page <a title="Automated Deployment of WordPress using git" href="http://www.saintsjd.com/2011/03/automated-deployment-of-wordpress-using-git/">Automated Deployment of WordPress using git</a></h3>
<h3>&#8212;&#8212;-</h3>
<p>Distributed revision control systems are an excellent way to manage the source code of web applications.  Currently I use git. In the past, I have used bzr and hg. All three great tools.</p>
<p>Git is now my favorite for a number of reasons.</p>
<p>While the tools are great at managing code and facilitating distributed development, it did take a while for me to find an efficient way to deploy my version controlled code to a live web server. The following is an outline of a simple workflow for developing and deploying web applications using distributed revision control systems. You could apply these methods to either bzr, hg, or git.</p>
<p>I keep development copies of the websites I manage for clients on my local machine. I develop and create new features locally on branched copies of the source code. When I complete and test a feature I commit the changes to the central code repository and deploy it to the live server using a few different methods.</p>
<h2>Creating your code repository</h2>
<p>A code repository is a place to save your code. Its important to not that the repository itself is not a functioning website. It is a file often on a completely different server than the live website and the development boxes. There are two options for creating a code repository. On is github.com. I use GitHub to store my open source projects. For projects with closed source code I store my repositories on server which allows ssh connections in a folder that is not accessible via the web. You can pay for a github account which allows you to create private repositories.</p>
<p><strong>Creating an repository on Github.com</strong><br />
Follow the step here: <a href="http://help.github.com/" target="_blank">http://help.github.com/</a></p>
<p><strong>Creating a repository on your own SSH server</strong><br />
I will create my repository in a non-webaccessible directory on my live server. so&#8230; on my live server I will have:</p>
<pre>/home/jon/public_html (my live website folder)
/home/jon/code (a private folder not accessible from the web to store my source code)</pre>
<ol>
<li>Log into the server via SSH</li>
<li>my home directory is /home/jon</li>
<li>I create a directory /home/jon/code for all my repositories /home/jon/code</li>
<li>cd into the code directory and type:</li>
</ol>
<pre>git init --bare drupaltest.git</pre>
<p><strong>Setting Up Local Development Website</strong><br />
Change directories on your local development computer into a web accessible directory. On my machine the local folder /home/jon/Website is accessible at http://localhost/jon/. So I open the terminal and run:</p>
<pre>cd /home/jon/Website</pre>
<p>Then:</p>
<pre>git clone jon@saintsjd.com:code/drupaltest.git drupaltest</pre>
<p>This command clones the repository to my local machine and creates a localfolder called drupaltest. I can now start adding files to it. Lets unzip a fresh copy of Drupal 7 and copy all the files into the drupaltest folder. I then browse to http://localhost/jon/drupaltest/ and I run the Drupal installer.</p>
<p>With drupal installed we are ready to start committing our code to our git repo.</p>
<p>We first need to create a .gitignore file in the root of our web application /home/jon/Website/drupaltest/.gitignore. This file tells git to ignore certain files. We want to keep our settings.php file out of the repository and our sites/default/files folder out of the repository because the settings and files on our development computer will be different from the settings.php and files on the live server. My .gitignore contains:</p>
<pre>sites/default/files
sites/default/private
sites/default/settings.php</pre>
<p>With /home/jon/Website/drupaltest/.gitignore created, I run:</p>
<pre>git add .
git commit -m "initial commit"</pre>
<p>I then send my code up to the repository on my server. Remember the repository is just a place to keep my code. It is not a live functioning website. We will create that live site later. To push the code to my respository I run</p>
<pre>git push origin master</pre>
<p>And I know the command was successful when I see something like:</p>
<pre>Counting objects: 1099, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (1087/1087), done.
Writing objects: 100% (1099/1099), 2.81 MiB | 324 KiB/s, done.
Total 1099 (delta 119), reused 0 (delta 0)
To jon@saintsjd.com:code/drupaltest.git
* [new branch]      master -&gt; master</pre>
<h2>Creating a Live Website from our Repository</h2>
<p>The command in this section only need to be run once when you first setup your website. Like the install we ran locally we now need to run an Drupal install on our server to setup a separate database for live data. I ssh to my server and change directories into my public_html folder.</p>
<p>My code repo is stored on the same server as my live website but is in a folder that is not accessible from the web. Remember that i have:</p>
<pre>/home/jon/public_html (my live website folder)
/home/jon/code (a private folder not accessible from the web to store my source code)</pre>
<p>I SSH to the server and run:</p>
<pre>cd public_html
git clone /home/jon/code/drupaltest.git drupaltest</pre>
<p>If your repository is on github or on another server you will need to adjust the “/home/jon/code/drupaltest.git” path in the command above.</p>
<p>Then I:</p>
<pre>cd drupaltest
ls</pre>
<p>I see all my files listed. Now I browse to my website http://www.saintsjd.com/drupaltest/ and run the drupal installer.</p>
<p>With a working site at http://www.saintsjd.com/drupaltest/ we are ready to begin making our changes to the website and deploying the changes to the live site using git. The steps that follow are the steps you will repeat for each new feature that you want to add to your website.</p>
<h2>Deploying using git</h2>
<p>There are many automated ways of deploying code using git. I recommend <a href="http://docs.fabfile.org/0.9.3/" target="_blank">Fabric</a> and <a href="http://www.heroku.com" target="_blank">Heroku</a> for Rails apps. I will show only one basic manual deployment method here.</p>
<p>Our workflow will be:</p>
<ol>
<li>Develop and test a new features for our website on our local development box</li>
<li>Commit and push the new code to the repository</li>
<li>Pull the tested code from the repository to the live website</li>
</ol>
<p>We repeat this workflow each time we add a new feature to our website.</p>
<p>Lets say I want to add the pathauto module to my drupaltest website. I download the module from http://drupal.org/project/pathauto and the token module http://drupal.org/project/token, unzip, and copy the modules to my sites/all/modules folder on my local development machine.</p>
<p>I browse to http://localhost/jon/drupaltest/#overlay=%3Fq%3Dadmin%252Fmodules and enable the module. I configure it and test that it actually works.</p>
<p>Once I am happy that the module works well. I use git to commit the new code to my repository.</p>
<pre>git add . (stages our new code)
git commit -m “adding pathauto module” (commit our new code to the local repo)
git push origin master (send the code to our origin repo on the server via ssh)</pre>
<p>I can then SSH to my live server and cd into the public_html/drupaltest/ folder. Synchronizing my new code changes is as easy as:</p>
<pre>git pull</pre>
<p>After I pull in the new code I need to enable and configure the module on the live site going to:</p>
<p>http://www.saintsjd.com/drupaltest/#overlay=admin/modules</p>
<p>Repeat the steps in the “Deploying with git” section each time you want to add a new feature to your website.</p>
<h2>Important! Protect your .git folder on the live website using .htaccess</h2>
<p>I don&#8217;t really want others reading my git repository on my live site by browsing to http://saintsjd.com/drupaltest/.git. I prevent this by running:</p>
<pre>chmod -R og-rx /home/public_html/drupaltest/.git</pre>
<p>I also add a .htaccess file to the .git folder containing:</p>
<pre>Deny from all</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.saintsjd.com/2011/01/deploying-a-drupal-7-website-using-git/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to Watch the Movie Food Inc. (and not loose your appetite)</title>
		<link>http://www.saintsjd.com/2010/09/howto-watch-the-movie-food-inc-and-not-loose-your-appetite/</link>
		<comments>http://www.saintsjd.com/2010/09/howto-watch-the-movie-food-inc-and-not-loose-your-appetite/#comments</comments>
		<pubDate>Fri, 24 Sep 2010 04:31:33 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[food]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[movies]]></category>

		<guid isPermaLink="false">http://www.saintsjd.com/?p=76</guid>
		<description><![CDATA[The movie Food Inc. is a startling look into food production and consumption in America. It exposes the harm in our factory farming, mass production, and blind consumption. I appreciate the movie for being much more than a big corporation conspiracy &#8230; <a href="http://www.saintsjd.com/2010/09/howto-watch-the-movie-food-inc-and-not-loose-your-appetite/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The movie <a href="http://www.foodincmovie.com/" target="_self">Food Inc.</a> is a startling look into food production and consumption in America. It exposes the harm in our factory farming, mass production, and blind consumption. I appreciate the movie for being much more than a big corporation conspiracy theory. It criticizes consumers just as much for our ignorance an apathy towards how our food is produced.</p>
<p>I enjoyed the movie and I highly recommend you watch it. The only challenge in watching is wondering what you can possibly eat afterwards. And so, I present to you a solution&#8230; how to watch Food Inc. without loosing your appetite:</p>
<ol>
<li>Appetizer: start with a taste of <a href="http://www.amazon.com/Food-Rules-Eaters-Michael-Pollan/dp/014311638X/ref=sr_1_1?s=gateway&amp;ie=UTF8&amp;qid=1285333579&amp;sr=8-1" target="_blank">Food Rules: an Eater&#8217;s Manual</a> by Michael Pollan</li>
<li> Main Course: watch a healthy portion of <a href="http://www.foodincmovie.com/" target="_blank">Food Inc.</a></li>
<li>Dessert: finish everything off with videos from <a href="http://www.ted.com" target="_blank">www.ted.com</a>: &#8220;<a href="http://www.ted.com/talks/dan_barber_how_i_fell_in_love_with_a_fish.html" target="_blank">How I Fell in Love with a Fish</a>&#8221; and &#8221;<a href="http://www.ted.com/talks/graham_hill_weekday_vegetarian.html" target="_blank">Why I am a Weekday Vegetarian</a>&#8220;</li>
</ol>
<p>Food Inc. offers a great website with positive steps you can take. The two Ted videos above will leave you inspired and hungry.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saintsjd.com/2010/09/howto-watch-the-movie-food-inc-and-not-loose-your-appetite/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ituprising.com is now saintsjd.com</title>
		<link>http://www.saintsjd.com/2010/09/ituprising-com-is-now-saintsjd-com/</link>
		<comments>http://www.saintsjd.com/2010/09/ituprising-com-is-now-saintsjd-com/#comments</comments>
		<pubDate>Sun, 12 Sep 2010 04:50:50 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.saintsjd.com/?p=70</guid>
		<description><![CDATA[These days I spend more time talking to people than I do computers. I am enjoying it greatly. To reflect these changes I have moved my blog from ituprising.com to saintsjd.com. To accomplish this and keep all of my URLs &#8230; <a href="http://www.saintsjd.com/2010/09/ituprising-com-is-now-saintsjd-com/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>These days I spend more time talking to people than I do computers. I am enjoying it greatly. To reflect these changes I have moved my blog from ituprising.com to saintsjd.com.</p>
<p>To accomplish this and keep all of my URLs working properly I used Apache mod_rewrite</p>
<pre>
<div id="_mcePaste">Options +FollowSymLinks</div>
<div id="_mcePaste">RewriteEngine on</div>
<div id="_mcePaste">RewriteCond %{HTTP_HOST} ^([^.:]+\.)*ituprising\.com\.?(:[0-9]*)?$ [NC]</div>
<div id="_mcePaste">RewriteRule ^(.*)$ http://www.saintsjd.com/$1 [R=301,L]</div>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.saintsjd.com/2010/09/ituprising-com-is-now-saintsjd-com/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Natural Food Community of Boulder and the Ugly Truck</title>
		<link>http://www.saintsjd.com/2010/05/natural-food-community-of-boulder-and-the-ugly-truck/</link>
		<comments>http://www.saintsjd.com/2010/05/natural-food-community-of-boulder-and-the-ugly-truck/#comments</comments>
		<pubDate>Thu, 13 May 2010 04:36:43 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[entrepreneurship]]></category>
		<category><![CDATA[food]]></category>
		<category><![CDATA[mix]]></category>
		<category><![CDATA[natural]]></category>
		<category><![CDATA[organic]]></category>
		<category><![CDATA[startups]]></category>

		<guid isPermaLink="false">http://www.ituprising.com/?p=64</guid>
		<description><![CDATA[As some of you might know, I am starting a trail mix company. Yes, a trail mix company. There is a need for great tasting, healthy snacks without all the salt and oil. So, yes&#8230; a trail mix company. In &#8230; <a href="http://www.saintsjd.com/2010/05/natural-food-community-of-boulder-and-the-ugly-truck/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>As some of you might know, I am starting a trail mix company. Yes, a trail mix company. There is a need for great tasting, healthy snacks without all the salt and oil. So, yes&#8230; a trail mix company.</p>
<p>In an effort to get over my food industry learning curve, I went <a href="http://www.naturallyboulderproducts.com/news/naturally-boulder/spring-fling-2010-may-12th-530-930">Naturally Boulder Spring Fling</a>. Well worth it.</p>
<p>Some of the titans of the organic food industry were there: Rudy&#8217;s Organic Bakery, White Wave foods, and Micheal Funk of UNFI. All where very willing to chat. I just mentioned that I have this trail mix thing going in my kitchen and that I was looking to get advice on where to take it next. Everyone seemed to have advice and everyone offered to put me in touch with a friend who could help me get started.</p>
<p>Sweet. Boulder is the best place to start a business. This community loves entrepreneurs.</p>
<p>The take aways:</p>
<ol>
<li>Next buzz word is GMO. Most companies are asking their suppliers to avoid using them. Consumers are starting to become aware of GMO and look for products without it.</li>
<li>BPA. BPA leaches into food from plastic containers and is closely linked to high rates of cancer. We need to look for BPA-free packaging</li>
<li>Its best to price organic suppliers into your business model from the beginning.</li>
<li>Ship by train or rail for lowest carbon emissions. Truck is 12 times more emissions. Air is 85 times more emissions.</li>
<li><strong><span style="text-decoration: underline;">Drive an ugly truck</span></strong>. Advice: as a boss, always drive the ugliest car in the parking lot so employees do not ask for raises <img src='http://www.saintsjd.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  hilarious. I got this one covered. Marissa often refers to my truck as the &#8220;eyesore&#8221;.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.saintsjd.com/2010/05/natural-food-community-of-boulder-and-the-ugly-truck/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>David Brooks: Relax, We Will Be Fine</title>
		<link>http://www.saintsjd.com/2010/04/david-brooks-relax-we-will-be-fine/</link>
		<comments>http://www.saintsjd.com/2010/04/david-brooks-relax-we-will-be-fine/#comments</comments>
		<pubDate>Wed, 07 Apr 2010 22:47:41 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[op-ed]]></category>
		<category><![CDATA[politics]]></category>
		<category><![CDATA[poverty]]></category>

		<guid isPermaLink="false">http://www.ituprising.com/?p=62</guid>
		<description><![CDATA[Another great, positive column from David Brooks: http://www.nytimes.com/2010/04/06/opinion/06brooks.html]]></description>
			<content:encoded><![CDATA[<p>Another great, positive column from David Brooks: <a href="http://www.nytimes.com/2010/04/06/opinion/06brooks.html">http://www.nytimes.com/2010/04/06/opinion/06brooks.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.saintsjd.com/2010/04/david-brooks-relax-we-will-be-fine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>David Brooks: The Broken Society</title>
		<link>http://www.saintsjd.com/2010/03/david-brooks-the-broken-society/</link>
		<comments>http://www.saintsjd.com/2010/03/david-brooks-the-broken-society/#comments</comments>
		<pubDate>Sat, 20 Mar 2010 20:45:16 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[economy]]></category>
		<category><![CDATA[insights]]></category>
		<category><![CDATA[op-ed]]></category>
		<category><![CDATA[politics]]></category>
		<category><![CDATA[subsidarity]]></category>

		<guid isPermaLink="false">http://www.ituprising.com/?p=55</guid>
		<description><![CDATA[Before you join the anger of the Tea Party, check out this thoughtful piece from David Brooks. He continues to inspire with his pragmatic and insightful column. His latest is worth a read: The Broken Society by David Brooks.]]></description>
			<content:encoded><![CDATA[<p>Before you join the anger of the Tea Party, check out this thoughtful piece from David Brooks. He continues to inspire with his pragmatic and insightful column. His latest is worth a read: <a href="http://www.nytimes.com/2010/03/19/opinion/19brooks.html?src=me&amp;ref=general" target="_blank">The Broken Society</a> by David Brooks.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saintsjd.com/2010/03/david-brooks-the-broken-society/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2010 Reading Off to a Great Start</title>
		<link>http://www.saintsjd.com/2010/03/2010-reading-off-to-a-great-start/</link>
		<comments>http://www.saintsjd.com/2010/03/2010-reading-off-to-a-great-start/#comments</comments>
		<pubDate>Sat, 20 Mar 2010 20:24:25 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[book reviews]]></category>
		<category><![CDATA[life]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://www.ituprising.com/?p=46</guid>
		<description><![CDATA[I have greatly enjoyed each of the books I have read so far in 2010. Here is the list so far, and my few sentence take-away from each. Siddhartha by Herman Hess Every time I read this book I feel &#8230; <a href="http://www.saintsjd.com/2010/03/2010-reading-off-to-a-great-start/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I have greatly enjoyed each of the books I have read so far in 2010. Here is the list so far, and my few sentence take-away from each.</p>
<p><strong>Siddhartha by Herman Hess</strong><br />
Every time I read this book I feel inspired and love it.  &#8221;What other path was there?&#8221;</p>
<p><strong>Thousand Splendid Suns by Khaled Hosseini<br />
</strong> Wonderfully written characters immerse you in the recent history of Afghanistan.</p>
<p><strong>The 4 Hour Work Week by Timothy Ferris<br />
</strong> As an entrepreneur, make it your goal to decrease the amount of time you need to run your business. If you start working 12 hour days make it the point of your business to find efficiencies and ways to do the same in 4 hours. Its a great mentality that can lead to profitability, new ideas, and a healthy life style.</p>
<p><strong>Born to Run by Christopher McDougall<br />
</strong> The more I think about this book, the more I see running as a metaphor for life. We are endurance animals meant to persistently peruse solutions to our problems wearing them down not with bursts of sped or luck but with persistence and presence over time.</p>
<p>I love when the book talks about building endurance&#8230; getting to know the Beast (fatigue). Fatigue is not something you can beat in one training run or out sprint or out luck. As you train for endurance races, each time, its  a chance to get to know the Beast to spend a little bit long time in its presence to wear it down just a little bit and build up your tolerance/comfort to it. So many things in life are endurance races.</p>
<p>The final thought from the book: &#8220;We do not get old because we run. We get old because we stop running&#8221; Find ways&#8230; any way&#8230; to stay patiently and persistently active.</p>
<p><strong>Rework by Jason Fried<br />
</strong> The best summary of this wonderful take on business is a review in the introduction: &#8220;This book&#8217;s assumption is that an organization is like a piece of software. Editable. Malleable. Sharable. Fault-tolerant.&#8221; Businesses, the smart ones, stay nimble and simple. Organizations have versions and features and milestones. When I stumbled into business, the only proven way I knew to build things was following the software development model. I have said, though not as clearly as this book, that the principles of <a href="http://gettingreal.37signals.com/" target="_blank">good software development</a> often apply to good business development. Release early and often. Create and Celebrate bite-sized milestones. Under do the competition. Planning is Guessing. <a href="http://gettingreal.37signals.com/ch05_Half_Not_Half_Assed.php">Half but not Half Assed</a>. This book presents an eloquent philosophy for business.</p>
<p>Next on the reading list is <strong>Food Rules: An Eater&#8217;s Manual by Michael Pollan</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saintsjd.com/2010/03/2010-reading-off-to-a-great-start/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>At What Point Does it Pay to Move your Online Store from Etsy to Shopify?</title>
		<link>http://www.saintsjd.com/2010/03/at-what-point-does-it-pay-to-move-your-online-store-from-etsy-to-shopify/</link>
		<comments>http://www.saintsjd.com/2010/03/at-what-point-does-it-pay-to-move-your-online-store-from-etsy-to-shopify/#comments</comments>
		<pubDate>Sun, 14 Mar 2010 07:05:12 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ecommerce]]></category>
		<category><![CDATA[Etsy]]></category>
		<category><![CDATA[Shopify]]></category>
		<category><![CDATA[startups]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://www.ituprising.com/?p=42</guid>
		<description><![CDATA[My wife runs an online store on Etsy http://dsenyo.etsy.com. Her sales are growing, and we wondered, in purely $ terms, at what point does it pay to leave Etsy and switch to the online store to Shopify? The answer: Sooner &#8230; <a href="http://www.saintsjd.com/2010/03/at-what-point-does-it-pay-to-move-your-online-store-from-etsy-to-shopify/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>My wife runs an online store on Etsy <a href="http://dsenyo.etsy.com" target="_blank">http://dsenyo.etsy.com</a>. Her sales are growing, and we wondered, in purely $ terms, at what point does it pay to leave Etsy and switch to the online store to Shopify?</p>
<p>The answer: Sooner than you might think.</p>
<p>Both sites make it really easy and fun to sell online.</p>
<p><a href="http://www.etsy.com" target="_blank">Etsy</a> is the way to start off if you are selling hand made goods for sure.  On Etsy its easy for buyers to wander from seller to seller looking for products.  They can easily leave your store for another vendor, but as we have found, this community of wandering buyers have also provided us with many sales. Etsy also promotes your products to their homepage, providing valuable exposure for your products.</p>
<p><a href="http://www.shopify.com" target="_blank">Shopify</a> offers more customization and personalization of your store. Stores are not connected so buyers cannot directly wander to other stores. Shopify does not provide any built in promotion of your products either. They provide a simple, beautiful store front for your products that you must promote yourself.</p>
<p>Because Etsy provides such good exposure for our products we will never fully abandon Etsy. But now that we are growing and able to do more of the promotion ourselves, Shopify becomes a sensible option for our small business ecommerce needs. Only consider Shopify over Etsy if you fell your business has the momentum to promote its online store on its own. Once you do find that momentum, at what point will switching actually start saving you $?</p>
<p>Well, Etsy charges $0.20 to list a products and takes 3.5% of each transaction. Shopify charges $24 per month for their basic plan and takes 2.0% of each sale. Using this data, <strong>at $1600 is sales per month, Shopify becomes the cheaper option</strong>.</p>
<p>As sales continue to grow, you&#8217;ll want to upgrade to Shopify&#8217;s $59/month plan when you reach $3500 in monthly sales.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saintsjd.com/2010/03/at-what-point-does-it-pay-to-move-your-online-store-from-etsy-to-shopify/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Magento (rocky road) Upgrade to 1.4</title>
		<link>http://www.saintsjd.com/2010/03/the-magento-rocky-road-upgrade-to-1-4/</link>
		<comments>http://www.saintsjd.com/2010/03/the-magento-rocky-road-upgrade-to-1-4/#comments</comments>
		<pubDate>Sun, 14 Mar 2010 05:42:39 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ecommerce]]></category>
		<category><![CDATA[Magento]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Shopify]]></category>

		<guid isPermaLink="false">http://www.ituprising.com/?p=33</guid>
		<description><![CDATA[Magento released version 1.4 sometime ago. Before upgrading I watched the forums&#8230; sure enough, I saw upgrades failing and sites crashing left and right. Almost one month later, today I tried the upgrade from 1.3 to 1.4 using magento connect &#8230; <a href="http://www.saintsjd.com/2010/03/the-magento-rocky-road-upgrade-to-1-4/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Magento released version 1.4 sometime ago. Before upgrading I watched the forums&#8230; sure enough, I saw upgrades failing and sites crashing left and right. Almost one month later, today I tried the upgrade from 1.3 to 1.4 using magento connect <strong><em>on a development installation of our shop</em></strong>.</p>
<p>The first upgrade failed. With errors in the Connect console. I found that I needed to disable the Blank theme. I switched to the default theme and removed the Blank theme using Magento Connect. After that upgrade proceeded without error&#8230; almost.</p>
<p>When I logged back into admin after the upgrade I experienced a common problem many other users have had. I saw only the Dashboard and the System menus in the admin section. Fortunately, <a href="http://www.magentocommerce.com/boards/viewreply/216653/" target="_blank">http://www.magentocommerce.com/boards/viewreply/216653/</a> helped me solve the problem. After that, I could see all the links in Admin.</p>
<p>Next, an error appeared, saying that indexes where out of date. Clicking the link, I was able to update indexes without trouble.</p>
<p>Next I tried to enable my old custom theme for magento 1.3. The file structure of the new themes were just too different. And I notice that Magento Connect had not copied in all the new theme files compared to a fresh install of 1.4. So, back to square one I went:</p>
<ol>
<li>Switched to the Default Default theme</li>
<li>Disable cache</li>
<li>Backed up everything!</li>
<li><a href="http://www.magentocommerce.com/boards/viewthread/79499/">http://www.magentocommerce.com/boards/viewthread/79499/</a></li>
<li>Update product indexes System -&gt; Index management</li>
</ol>
<p>At this point all the store data seemed to be working properly. From what I read in the forum, its best to re-create your old custom theme from scratch. So I did:</p>
<ol>
<li>Create folder /skin/frontend/myPackage/default</li>
<li>Create folder /app/design/frontend/myPackage/default</li>
<li>Copy /app/design/frontend/default/blank/etc and /app/design/frontend/default/blank/locale to /app/design/frontend/myPackage/default</li>
<li>Copy /skin/frontend/default/blank/css and /skin/frontend/default/blank/images and skin/frontend/default/blank/favicon.ico to /skin/frontend/myPackage/default</li>
<li>Enable my theme and test /admin/system_config/edit/section/design/</li>
<li>From there I slowly copied in the CSS and images from the theme I had designed from magento 1.3</li>
</ol>
<p>Upgrading Magento to 1.4 was painful and time consuming even with all the help of the poor souls who had crashed their sites before me. That said, using magento still seems to be faster and less time consuming that building my own ecommerce solution from scratch. Given the time it takes to make Magento  <a href="http://www.ituprising.com/2009/09/magento-ecommerce-please-wait-and-wait-and-wait/">perform well</a> and maintain its updates,<a href="https://app.shopify.com/services/signup"> Shopify&#8217;s pricing</a> does look more attractive and reasonable.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saintsjd.com/2010/03/the-magento-rocky-road-upgrade-to-1-4/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Are We Born to Run?</title>
		<link>http://www.saintsjd.com/2010/03/are-we-born-to-run/</link>
		<comments>http://www.saintsjd.com/2010/03/are-we-born-to-run/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 21:34:13 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[book reviews]]></category>
		<category><![CDATA[joy]]></category>
		<category><![CDATA[running]]></category>

		<guid isPermaLink="false">http://www.ituprising.com/?p=31</guid>
		<description><![CDATA[After a year and a half of fairly serious training, I finally became the dreaded statistic. Something like 8 out of 10 runners experience an injury every year. I am now one of those runners. One month on, a nagging &#8230; <a href="http://www.saintsjd.com/2010/03/are-we-born-to-run/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>After a year and a half of fairly serious training, I finally became the dreaded statistic. Something like 8 out of 10 runners experience an injury every year.  I am now one of those runners.  One month on, a nagging IT Band pull that I thought would heal in one weekend, is still an issue. I am resting, slowly jogging and walking to build strength back up.</p>
<p>The widely held view is that running, over-time, is damaging to your body. It is simply too much impact. In my injury free years I never believed this&#8230; I never wanted to. But, this injury had me down and thinking like everyone else. I love how running makes me feel&#8230; the reflective clarity of long runs&#8230; the invigorating endurance that builds and runs through your body the next day. But every where I turn, those that love running as much as I do are finding it harder and harder because of the constant string injuries they have to battle.</p>
<p>A friend of mine had recently experienced the same melancholy of injury. He gave me the book Born to Run by Christopher McDougall and told me it would change my running life.  The author starts by asking the question of why running is “bad for us”. Through the story of the Tarahumara (a tribe known for its incredible distance runners), sports page commentary of elite ultra marathon racers, and interesting overview of cutting edge evolutionary biology on running, McDougall finds compelling evidence that its not running that is bad for us&#8230; its how we run that is.</p>
<p>In fact, we as a species evolved and were born to run long distances more than any other. This news was inspiring to me.  We have neck muscles that only running species have, we can breath out of stride unlike any other mammal, and our feet (according to Da Vinci) are master pieces of engineering and efficiency.</p>
<p>How do we go about running incorrectly as cause injury?  First, and most importantly somewhere along the way we stopped running for the joy of running.  When we run for other reasons: $, or to loose weight, we increase in the number of injuries we expirence. There is compelling anecdotal evidence of this, but its hard to prove scientifically.</p>
<p>In my case this is exactly what happened. About one year into my return to running, it was not longer about peaceful reflection and just the joy of feeling healthy. I was gunning for time. I do believe this gunning type of training was not as effective. My times were not improving as fast as when I was running for joy.  It took more work&#8230; more pain to get where I wanted to be. I also started to find more strange and nagging injuries popping up.  This latest IT Band injury being the worst.</p>
<p>A second way we injury ourselves running is by using fancy equipment that weakens the natural ability of our foot to adsorb shock. About six months ago I went on a run with a group of friends who were wearing Vibram FiveFinger barefoot running shoes. I remember being amazed at the time by the way running barefoot immediately improved the form of my friends who were not regular runners. Without trying, they where running with backs straight, upright, with quick strides. They looked like elegant pros. They looked like I have been trying to teach my self to run for well over a year. By not being able to slam their  heals into the ground, even the causal runners who never have been taught what good form is, naturally and instinctively fell into the efficient running form.</p>
<p>Seems like we are Born to Run. I thank my friend for passing along the book. McDougall tone and style is not one that I enjoy, but he has written a valuable and inspiring book.  When I do return to the trails it will be for one purpose&#8230; the joy of running and none other. I also plan on slowing building up to barefoot runs. I can&#8217;t wait to see just how far my perfectly evolved feet can go pain free.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saintsjd.com/2010/03/are-we-born-to-run/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Running Aptana 2.0 on Ubuntu 9.10 Karmic Koala</title>
		<link>http://www.saintsjd.com/2009/11/running-aptana-20-on-ubuntu-910-karmic-koala/</link>
		<comments>http://www.saintsjd.com/2009/11/running-aptana-20-on-ubuntu-910-karmic-koala/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 02:45:38 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[aptana]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://www.ituprising.com/?p=27</guid>
		<description><![CDATA[After upgrading my laptop to Ubuntu 9.10 Karmic Koala, I found that it did not work properly with the new version of Gnome 2.8 running by default in Karmic.  There were buttons that would not click, etc. This blog provided &#8230; <a href="http://www.saintsjd.com/2009/11/running-aptana-20-on-ubuntu-910-karmic-koala/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>After upgrading my laptop to Ubuntu 9.10 Karmic Koala, I found that it did not work properly with the new version of Gnome 2.8 running by default in Karmic.  There were buttons that would not click, etc.</p>
<p>This blog provided an excellent solution to the problem:</p>
<p><a title="http://www.economyofeffort.com/2009/10/upgrade-to-karmic-eclipseaptana-ui-woes/" href="http://www.economyofeffort.com/2009/10/upgrade-to-karmic-eclipseaptana-ui-woes/">http://www.economyofeffort.com/2009/10/upgrade-to-karmic-eclipseaptana-u&#8230;</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.saintsjd.com/2009/11/running-aptana-20-on-ubuntu-910-karmic-koala/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- This Quick Cache file was built for (  www.saintsjd.com/feed/ ) in 0.34351 seconds, on Feb 23rd, 2012 at 6:20 am UTC. -->
<!-- This Quick Cache file will automatically expire ( and be re-built automatically ) on Feb 23rd, 2012 at 7:20 am UTC -->
