<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.andrewloe.com/~d/styles/atom10full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.andrewloe.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en-US">
  <title>W. Andrew Loe III - Journal</title>
  <id>tag:journal.andrewloe.com,2008:mephisto/</id>
  <generator uri="http://mephistoblog.com" version="0.8.0">Mephisto Drax</generator>
  
  <link href="http://journal.andrewloe.com/" rel="alternate" type="text/html" />
  <updated>2008-06-27T17:15:40Z</updated>
  <link rel="self" href="http://feeds.andrewloe.com/WALoeIII-Journal" type="application/atom+xml" /><entry xml:base="http://journal.andrewloe.com/">
    <author>
      <name>Andrew</name>
    </author>
    <id>tag:journal.andrewloe.com,2008-06-27:499</id>
    <published>2008-06-27T17:15:00Z</published>
    <updated>2008-06-27T17:15:40Z</updated>
    <category term="Family &amp; Friends" />
    <category term="Real World" />
    <link href="http://feeds.andrewloe.com/~r/WALoeIII-Journal/~3/321476389/picnic-in-the-park" rel="alternate" type="text/html" />
    <title>Picnic In The Park</title>
<content type="html">
            &lt;p&gt;Summer is here in Seattle. Mallory and I took full advantage of it last week and took our fancy picnic basket (thanks Mom!) and some tasty treats to &lt;a href="http://maps.google.com/maps?f=q&amp;amp;#38;hl=en&amp;amp;#38;geocode=&amp;amp;#38;q=volunteer+park,+seattle,+wa&amp;amp;#38;ie=UTF8&amp;amp;#38;ll=47.631749,-122.313902&amp;amp;#38;spn=0.010874,0.018153&amp;amp;#38;z=16"&gt;Volunteer Park&lt;/a&gt;. We took some pictures of our &lt;a href="http://gallery.andrewloe.com/view/life/picnic-in-volunteer-park/"&gt;Picnic in Volunteer Park&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Mallory was satistfied.&lt;br /&gt;
&lt;a href="http://gallery.andrewloe.com/view/life/picnic-in-volunteer-park/P6200002.JPG.html"&gt;&lt;img src="http://gallery.andrewloe.com/download/16772-2/P6200002.JPG" height="480" alt="Yummy." width="640" /&gt;&lt;/a&gt;&lt;/p&gt;
          </content>  <feedburner:origLink>http://journal.andrewloe.com/2008/6/27/picnic-in-the-park</feedburner:origLink></entry>
  <entry xml:base="http://journal.andrewloe.com/">
    <author>
      <name>Andrew</name>
    </author>
    <id>tag:journal.andrewloe.com,2008-06-21:498</id>
    <published>2008-06-21T01:23:00Z</published>
    <updated>2008-06-21T01:24:56Z</updated>
    <category term="Family &amp; Friends" />
    <category term="Fun" />
    <category term="Real World" />
    <link href="http://feeds.andrewloe.com/~r/WALoeIII-Journal/~3/316602813/sunshine" rel="alternate" type="text/html" />
    <title>Sunshine!</title>
<content type="html">
            &lt;p&gt;Summer has finally hit in Seattle, I think its time for some well deserved Vitamin D. Tonight I will be having a picnic in the park before reading my book in the grass and watching the sunset.&lt;/p&gt;
          </content>  <feedburner:origLink>http://journal.andrewloe.com/2008/6/21/sunshine</feedburner:origLink></entry>
  <entry xml:base="http://journal.andrewloe.com/">
    <author>
      <name>Andrew</name>
    </author>
    <id>tag:journal.andrewloe.com,2008-05-28:497</id>
    <published>2008-05-28T00:50:00Z</published>
    <updated>2008-05-28T01:04:12Z</updated>
    <category term="Computers &amp; Tech" />
    <link href="http://feeds.andrewloe.com/~r/WALoeIII-Journal/~3/299470023/convert-your-rails-application-database-to-utf-8" rel="alternate" type="text/html" />
    <title>Convert your Rails' application database to UTF-8</title>
<content type="html">
            &lt;p&gt;Its unlikely that this will ever matter in local development, but its good practice to have your environment properly setup.&lt;/p&gt;


	&lt;p&gt;Dump your database to a file:&lt;br /&gt;
&lt;code&gt;$ mysqldump -u root --default-character-set=latin1 --skip-set-charset project_development &amp;gt; project_development.sql&lt;/code&gt;&lt;/p&gt;


	&lt;p&gt;Convert the characters in that file from latin1 to &lt;span class="caps"&gt;UTF&lt;/span&gt;-8 using &lt;a href="http://www.gnu.org/software/libiconv/"&gt;iconv&lt;/a&gt;:&lt;br /&gt;
&lt;code&gt;$ iconv -f latin1 -t UTF-8 project_development.sql &amp;gt; project_development_utf8.sql&lt;/code&gt;&lt;/p&gt;


	&lt;p&gt;Drop your existing database and recreate it with the appropriate defaults:&lt;br /&gt;
&lt;code&gt;$ mysql -u root --execute="drop database project_development; create database project_development character set utf8 collate utf8_general_ci;"&lt;/code&gt;&lt;/p&gt;


	&lt;p&gt;Repopulate your database with your converted data:&lt;br /&gt;
&lt;code&gt;$ mysql -u root project_development &amp;lt; project_development_utf8.sql&lt;/code&gt;&lt;/p&gt;


	&lt;p&gt;Don’t forget to add the encoding to your database.yml!&lt;br /&gt;&lt;/p&gt;


	&lt;pre&gt;&lt;code&gt;adapter: mysql
database: project_development
username: root
password: 
host: localhost
encoding: utf8&lt;/code&gt;&lt;/pre&gt;
          </content>  <feedburner:origLink>http://journal.andrewloe.com/2008/5/28/convert-your-rails-application-database-to-utf-8</feedburner:origLink></entry>
  <entry xml:base="http://journal.andrewloe.com/">
    <author>
      <name>Andrew</name>
    </author>
    <id>tag:journal.andrewloe.com,2008-05-13:495</id>
    <published>2008-05-13T05:00:00Z</published>
    <updated>2008-05-13T15:27:53Z</updated>
    <category term="Computers &amp; Tech" />
    <link href="http://feeds.andrewloe.com/~r/WALoeIII-Journal/~3/289187049/site-specific-browsers-ssbs" rel="alternate" type="text/html" />
    <title>Site Specific Browsers (SSBs)</title>
<content type="html">
            &lt;p&gt;I just spent a few minute setting up Site Specific Browsers for my &lt;a href="http://www.google.com/a/"&gt;Google Apps&lt;/a&gt;. Using &lt;a href="http://fluidapp.com/"&gt;Fluid&lt;/a&gt;, which was inspired by &lt;a href="http://mozilla.org/"&gt;Mozilla&lt;/a&gt;’s &lt;a href="http://labs.mozilla.com/2007/10/prism/"&gt;Prism&lt;/a&gt;, and some nice icons left me with a pretty cool setup – little red badges even show up on my icons if I have unread mail or feed items.&lt;/p&gt;


	&lt;p&gt;&lt;img src="/assets/2008/5/13/fancy_dock.png" height="74" alt="Dock" width="738" /&gt;&lt;/p&gt;
          </content>  <feedburner:origLink>http://journal.andrewloe.com/2008/5/13/site-specific-browsers-ssbs</feedburner:origLink></entry>
  <entry xml:base="http://journal.andrewloe.com/">
    <author>
      <name>Andrew</name>
    </author>
    <id>tag:journal.andrewloe.com,2008-05-13:494</id>
    <published>2008-05-13T03:36:00Z</published>
    <updated>2008-05-13T03:46:15Z</updated>
    <category term="Computers &amp; Tech" />
    <category term="Music" />
    <category term="Real World" />
    <link href="http://feeds.andrewloe.com/~r/WALoeIII-Journal/~3/289169964/the-power-of-social-networking-last-fm-gets-it-right" rel="alternate" type="text/html" />
    <title>The Power Of Social Networking: Last.fm Gets It Right</title>
<content type="html">
            &lt;p&gt;While tinkering away with &lt;a href="http://blog.evanweaver.com/"&gt;Evan Weaver&lt;/a&gt;’s &lt;a href="http://blog.evanweaver.com/files/doc/fauna/sweeper"&gt;sweeper&lt;/a&gt; (a ruby gem for updating id3 tags of mp3s based off &lt;a href="http://last.fm/"&gt;last.fm&lt;/a&gt;’s fingerprint database) I started clicking around &lt;a href="http://www.last.fm/user/WALoeIII/"&gt;my last.fm profile&lt;/a&gt;. I’ve been a religious &lt;a href="http://www.last.fm/help/faq/?category=The+Service#321"&gt;scrobbler&lt;/a&gt; for a few years now (nearly 20,000 songs since May 4th, 2004), but I had never stopped to think about how powerful all of this data could be. I mostly used last.fm for its music recommendations; &lt;a href="http://www.last.fm/user/WALoeIII/"&gt;my profile&lt;/a&gt; page will suggest artists for me to explore based off what I have listened to in the past.&lt;/p&gt;


	&lt;p&gt;Today, I discovered an even cooler feature: &lt;a href="http://www.last.fm/events"&gt;events&lt;/a&gt;. Last.fm knows what I like, and it knows about lots of events (concerts, shows, festivals). By combining this data, the service can build me a &lt;a href="http://30boxes.com/external/widget?refer=ff&amp;amp;#38;url=webcal%3A%2F%2Fws.audioscrobbler.com%2F1.0%2Fuser%2FWALoeIII%2Feventsysrecs.ics"&gt;custom calendar of upcoming acts that I may be interested in&lt;/a&gt;! I’ve created a quick mash-up using &lt;a href="http://30boxes.com/"&gt;30 boxes&lt;/a&gt; iCal support to display the information on the web, but I have already added this calendar to my personal google calendar. Now, even as my music tastes change, and I move around, I will always have calendar of upcoming events in my area that I will likely be interested in attending. It makes even more sense that &lt;a href="http://blog.last.fm/2007/05/30/lastfm-acquired-by-cbs"&gt;&lt;span class="caps"&gt;CBS&lt;/span&gt; spent big money to acquire&lt;/a&gt; these guys.&lt;/p&gt;
          </content>  <feedburner:origLink>http://journal.andrewloe.com/2008/5/13/the-power-of-social-networking-last-fm-gets-it-right</feedburner:origLink></entry>
  <entry xml:base="http://journal.andrewloe.com/">
    <author>
      <name>Andrew</name>
    </author>
    <id>tag:journal.andrewloe.com,2008-05-12:493</id>
    <published>2008-05-12T20:19:00Z</published>
    <updated>2008-05-12T20:21:09Z</updated>
    <category term="Family &amp; Friends" />
    <link href="http://feeds.andrewloe.com/~r/WALoeIII-Journal/~3/288930130/graduations" rel="alternate" type="text/html" />
    <title>Graduations</title>
<content type="html">
            &lt;p&gt;Its that time of year again—Graduation. I just want to congratulate everyone on their successes.&lt;/p&gt;
          </content>  <feedburner:origLink>http://journal.andrewloe.com/2008/5/12/graduations</feedburner:origLink></entry>
  <entry xml:base="http://journal.andrewloe.com/">
    <author>
      <name>Andrew</name>
    </author>
    <id>tag:journal.andrewloe.com,2008-04-24:492</id>
    <published>2008-04-24T16:53:00Z</published>
    <updated>2008-04-24T16:57:48Z</updated>
    <category term="Computers &amp; Tech" />
    <link href="http://feeds.andrewloe.com/~r/WALoeIII-Journal/~3/277044922/lighthouse-bugzilla-importer" rel="alternate" type="text/html" />
    <title>Lighthouse Bugzilla Importer</title>
<content type="html">
            &lt;p&gt;I have looking at some alternatives to &lt;a href="http://www.bugzilla.org/"&gt;Bugzilla&lt;/a&gt; for managing my projects. &lt;a href="http://www.basecamphq.com/"&gt;Basecamp&lt;/a&gt; was too simple, &lt;a href="http://www.redmine.org/"&gt;Redmine&lt;/a&gt; tries to do too much, but I think &lt;a href="http://lighthouseapp.com/"&gt;Lighthouse&lt;/a&gt; gets it juuuuuust right. In order to migrate my tickets I wrote a &lt;a href="http://github.com/WALoeIII/lighthouse-bugzilla-importer/tree/master"&gt;little script to parse Bugzilla &lt;span class="caps"&gt;XML&lt;/span&gt; and create and post Lighthouse tickets&lt;/a&gt;. The code is up on &lt;a href="http://github.com/WALoeIII/lighthouse-bugzilla-importer/tree/master"&gt;github&lt;/a&gt;.&lt;/p&gt;
          </content>  <feedburner:origLink>http://journal.andrewloe.com/2008/4/24/lighthouse-bugzilla-importer</feedburner:origLink></entry>
  <entry xml:base="http://journal.andrewloe.com/">
    <author>
      <name>Andrew</name>
    </author>
    <id>tag:journal.andrewloe.com,2008-04-23:491</id>
    <published>2008-04-23T05:48:00Z</published>
    <updated>2008-04-23T05:56:42Z</updated>
    <category term="Family &amp; Friends" />
    <category term="Snowboarding" />
    <link href="http://feeds.andrewloe.com/~r/WALoeIII-Journal/~3/275938923/march-shred" rel="alternate" type="text/html" />
    <title>March Shred</title>
<content type="html">
            &lt;p&gt;March was good for my snowboarding fu.&lt;/p&gt;


&lt;p&gt;&lt;a href="http://mtbaker.us/"&gt;Mt. Baker&lt;/a&gt; is crazy.&lt;br /&gt;
&lt;a href="http://gallery.andrewloe.com/view/snowboarding/2008-03-29/P3290032.JPG.html"&gt;&lt;img src="http://gallery.andrewloe.com/download/16749-2/P3290032.JPG" height="480" alt="Baker hotness" width="640" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mallory has some good moves.&lt;br /&gt;
&lt;a href="http://gallery.andrewloe.com/view/snowboarding/2008-03-08/P3080009.JPG.html"&gt;&lt;img src="http://gallery.andrewloe.com/download/16677-2/P3080009.JPG" height="480" alt="Rocking out" width="640" /&gt;&lt;/a&gt;&lt;/p&gt;
          </content>  <feedburner:origLink>http://journal.andrewloe.com/2008/4/23/march-shred</feedburner:origLink></entry>
  <entry xml:base="http://journal.andrewloe.com/">
    <author>
      <name>Andrew</name>
    </author>
    <id>tag:journal.andrewloe.com,2008-04-10:488</id>
    <published>2008-04-10T01:21:00Z</published>
    <updated>2008-04-10T01:27:54Z</updated>
    <category term="Asides" />
    <category term="College Life" />
    <category term="Fun" />
    <category term="Real World" />
    <link href="http://feeds.andrewloe.com/~r/WALoeIII-Journal/~3/267378768/someecards" rel="alternate" type="text/html" />
    <title>someecards</title>
<content type="html">
            &lt;p&gt;&lt;a href="http://www.someecards.com/"&gt;someecards&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Epic.&lt;/p&gt;
          </content>  <feedburner:origLink>http://journal.andrewloe.com/2008/4/10/someecards</feedburner:origLink></entry>
  <entry xml:base="http://journal.andrewloe.com/">
    <author>
      <name>Andrew</name>
    </author>
    <id>tag:journal.andrewloe.com,2008-04-03:485</id>
    <published>2008-04-03T05:32:00Z</published>
    <updated>2008-04-07T15:00:20Z</updated>
    <category term="Computers &amp; Tech" />
    <link href="http://feeds.andrewloe.com/~r/WALoeIII-Journal/~3/263121538/rails-is-on-git" rel="alternate" type="text/html" />
    <title>Rails is on Git!</title>
<content type="html">
            &lt;p&gt;&lt;a href="http://weblog.rubyonrails.com/2008/4/2/rails-is-moving-from-svn-to-git"&gt;Rails is moving from &lt;span class="caps"&gt;SVN&lt;/span&gt; to Git&lt;/a&gt;!&lt;/p&gt;


	&lt;p&gt;I have not yet patched &lt;a href="http://www.rubyonrails.com/"&gt;Ruby on Rails&lt;/a&gt;, but I am still very excited about the move to &lt;a href="http://git.or.cz/"&gt;Git&lt;/a&gt;. Why? I think it will spawn some cool forks that solve special cases. These branches (especially with the social nature of &lt;a href="http://github.com/"&gt;GitHub&lt;/a&gt;) will be much easier to find and develop. Its a good day in the rails community.&lt;/p&gt;
          </content>  <feedburner:origLink>http://journal.andrewloe.com/2008/4/3/rails-is-on-git</feedburner:origLink></entry>
  <entry xml:base="http://journal.andrewloe.com/">
    <author>
      <name>Andrew</name>
    </author>
    <id>tag:journal.andrewloe.com,2008-03-27:482</id>
    <published>2008-03-27T21:00:00Z</published>
    <updated>2008-04-04T06:28:40Z</updated>
    <category term="Computers &amp; Tech" />
    <link href="http://feeds.andrewloe.com/~r/WALoeIII-Journal/~3/263133100/rails-stack" rel="alternate" type="text/html" />
    <title>Rails Stack</title>
<summary type="html">&lt;h2&gt;Linux, &lt;a href="http://mysql.com/"&gt;MySQL&lt;/a&gt;, &lt;a href="http://nginx.net/"&gt;nginx&lt;/a&gt;, &lt;a href="http://mongrel.rubyforge.com/"&gt;Mongrel&lt;/a&gt; , &lt;a href="http://rubyonrails.org/"&gt;Rails&lt;/a&gt;, and friends.&lt;/h2&gt;


	&lt;h2&gt;Big Picture:&lt;/h2&gt;


	&lt;p&gt;An ideal setup uses two different servers or virtual machines to split up the load and facilitate scaling. The first machine runs nginx serving static content and acting as a reverse proxy passing dynamic requests to a pool of mongrels running the rails application. The second machine is a dedicated MySQL database server. Even if you only have one physical box, two virtual machines (Xen based) is preferred, it is easier to scale and doesn’t require as much memory context switching. Our host, Engine Yard, uses a similar setup based on Gentoo and Xen.&lt;/p&gt;</summary><content type="html">
            &lt;h2&gt;Linux, &lt;a href="http://mysql.com/"&gt;MySQL&lt;/a&gt;, &lt;a href="http://nginx.net/"&gt;nginx&lt;/a&gt;, &lt;a href="http://mongrel.rubyforge.com/"&gt;Mongrel&lt;/a&gt; , &lt;a href="http://rubyonrails.org/"&gt;Rails&lt;/a&gt;, and friends.&lt;/h2&gt;


	&lt;h2&gt;Big Picture:&lt;/h2&gt;


	&lt;p&gt;An ideal setup uses two different servers or virtual machines to split up the load and facilitate scaling. The first machine runs nginx serving static content and acting as a reverse proxy passing dynamic requests to a pool of mongrels running the rails application. The second machine is a dedicated MySQL database server. Even if you only have one physical box, two virtual machines (Xen based) is preferred, it is easier to scale and doesn’t require as much memory context switching. Our host, Engine Yard, uses a similar setup based on Gentoo and Xen.&lt;/p&gt;
&lt;h2&gt;Linux, &lt;a href="http://mysql.com/"&gt;MySQL&lt;/a&gt;, &lt;a href="http://nginx.net/"&gt;nginx&lt;/a&gt;, &lt;a href="http://mongrel.rubyforge.com/"&gt;Mongrel&lt;/a&gt; , &lt;a href="http://rubyonrails.org/"&gt;Rails&lt;/a&gt;, and friends.&lt;/h2&gt;


	&lt;h2&gt;Big Picture:&lt;/h2&gt;


	&lt;p&gt;An ideal setup uses two different servers or virtual machines to split up the load and facilitate scaling. The first machine runs nginx serving static content and acting as a reverse proxy passing dynamic requests to a pool of mongrels running the rails application. The second machine is a dedicated MySQL database server. Even if you only have one physical box, two virtual machines (Xen based) is preferred, it is easier to scale and doesn’t require as much memory context switching. Our host, Engine Yard, uses a similar setup based on Gentoo and Xen.&lt;/p&gt;


	&lt;h2&gt;Linux Setup:&lt;/h2&gt;


	&lt;p&gt;All of the tools and applications used in this stack are actively developed and available in most package management systems. This document will assume you use Debian/GNU Linux, but will work equally well on Ubuntu. If choose to use Fedora, Gentoo or another distribution, you will need substitute commands for your package-management tool.&lt;/p&gt;


	&lt;p&gt;Installing and configuring Linux is outside the scope of this document, but you should strive for a minimalist system based on a recent release of the 2.6 kernel. Debian and Ubuntu both offer a number of “pre-made” configurations in their installers, just avoid installing anything more than the base system as it will just add more software that you will have to disable or remove later.&lt;/p&gt;


	&lt;h2&gt;Conventions:&lt;/h2&gt;


	&lt;p&gt;&lt;code&gt;$&lt;/code&gt; indicates a standard shell prompt.&lt;/p&gt;


	&lt;p&gt;&lt;code&gt;#&lt;/code&gt; indicates the command needs to be run as the root user, either by switching to the root user account or assuming root privileges with a tool like &lt;code&gt;sudo&lt;/code&gt;.&lt;/p&gt;


	&lt;h2&gt;Tools:&lt;/h2&gt;


	&lt;p&gt;While installing and managing a Linux server, you will often need the power of the root account. However, because the root user is so powerful, it dangerous to use all the time. A better solution is to use a standard user account and only assume the privileges of the root user when necessary. Sudo was designed to do exactly this.&lt;/p&gt;


	&lt;p&gt;&lt;code&gt;# apt-get install sudo&lt;/code&gt;&lt;/p&gt;


	&lt;p&gt;Once the package is installed, the list of users able to assume root powers is controlled by &lt;code&gt;/etc/sudoers&lt;/code&gt;. This file must be edited with the &lt;code&gt;visudo&lt;/code&gt; command, which will open your default editor (or vi if your shell does not have an editor set).&lt;/p&gt;


	&lt;p&gt;&lt;code&gt;# visudo&lt;/code&gt;&lt;/p&gt;


	&lt;p&gt;If you are unfamiliar with vi, press ‘i’ to put it in insert mode, then add a line to enable your user.&lt;/p&gt;


	&lt;p&gt;&lt;code&gt;username    ALL=(ALL) ALL&lt;/code&gt;&lt;/p&gt;


	&lt;p&gt;You can read more on the sudo package to better understand this configuration file. Once you have completed your edit, press escape (ESC) to exit editor mode. To save the file type ’:’ to enter command mode and then type ‘w’ and ‘q’ (meaning write and quit). The file should be properly saved and your user will now be able to assume root privileges.&lt;/p&gt;


	&lt;h2&gt;Database Server:&lt;/h2&gt;


	&lt;p&gt;MySQL is our database of choice, it is popular in the Rails community, proven to scale, and fast (especially in a read heavy environment).&lt;/p&gt;


	&lt;p&gt;To install, use the mysql-server package.&lt;/p&gt;


	&lt;p&gt;&lt;code&gt;# apt-get install mysql-server&lt;/code&gt;&lt;/p&gt;


	&lt;p&gt;Your package manager should handle all the dependencies, including the mysql-client package, which we will use to improve our Ruby to MySQL performance. The installer may prompt you for a few questions, aim to accept the defaults and enter in information specific to your server.&lt;/p&gt;


	&lt;h3&gt;Database Configuration:&lt;/h3&gt;


	&lt;p&gt;The configuration file for MySQL is usually located in &lt;code&gt;/etc/mysql as my.cnf&lt;/code&gt;. Most MySQL packages also include a number of other simple configurations to help MySQL perform better. Take a look at &lt;code&gt;my-large.cnf&lt;/code&gt; and &lt;code&gt;my-small.cnf&lt;/code&gt; in &lt;code&gt;/usr/share/mysql&lt;/code&gt; and update your &lt;code&gt;/etc/mysql/my.cnf&lt;/code&gt; to reflect your hardware or virtual machine’s configuration. MySQL tuning is a complex subject, but some basic configuration can go a long way to helping the application to perform well.&lt;/p&gt;


	&lt;p&gt;Before adding any databases, it is also important to instruct MySQL to use more international character encodings and collations. Storing the data in this way will make internationalization a simpler task in the future.&lt;/p&gt;


	&lt;p&gt;In &lt;code&gt;/etc/mysql/my.cnf&lt;/code&gt;:&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;[client]
default-character-set = utf8

[server]
default-character-set = utf8
default-collation = utf8_general_ci&lt;/code&gt;&lt;/pre&gt;

	&lt;p&gt;These directives instruct MySQL to use &lt;span class="caps"&gt;UTF&lt;/span&gt;-8 for everything. If you have not already, restart your database server.&lt;/p&gt;


	&lt;p&gt;&lt;code&gt;# /etc/init.d/mysql restart&lt;/code&gt;&lt;/p&gt;


	&lt;p&gt;You can now add the database to the server.&lt;/p&gt;


	&lt;p&gt;&lt;code&gt;$ mysqladmin -u root create database_name&lt;/code&gt;&lt;/p&gt;


	&lt;p&gt;Consult the MySQL documentation to change the root user’s password and to add a user with privileges on the specific database. It may be simpler to use a MySQL administration &lt;span class="caps"&gt;GUI&lt;/span&gt; to achieve these tasks.&lt;/p&gt;


	&lt;h2&gt;Application Server&lt;/h2&gt;


	&lt;p&gt;The application server requires the most complex setup.&lt;/p&gt;


	&lt;h3&gt;Ruby &amp; Ruby Gems&lt;/h3&gt;


	&lt;p&gt;To start, you will need &lt;a href="http://www.ruby-lang.org/"&gt;Ruby&lt;/a&gt; and &lt;a href="http://www.ruby-lang.org/"&gt;Ruby Gems&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;&lt;code&gt;# apt-get install ruby rubygems&lt;/code&gt;&lt;/p&gt;


	&lt;p&gt;&lt;code&gt;ruby&lt;/code&gt; is a transitional package, currently it will install Ruby 1.8.6 (as of March 20, 2008), unless you know of a specific feature or bug to avoid, it is simplest to let the the package-management system handle which version you get. &lt;a href="http://rubyforge.org/projects/rubygems/"&gt;Ruby Gems&lt;/a&gt; is a package management system for system for third party ruby libraries, it functions much like &lt;a href="http://www.cpan.org/"&gt;&lt;span class="caps"&gt;CPAN&lt;/span&gt;&lt;/a&gt; for &lt;a href="http://www.perl.com/"&gt;Perl&lt;/a&gt; or &lt;a href="http://www.perl.com/"&gt;&lt;span class="caps"&gt;PEAR&lt;/span&gt;&lt;/a&gt; for &lt;a href="http://php.net/"&gt;&lt;span class="caps"&gt;PHP&lt;/span&gt;&lt;/a&gt;. We’re going to want a number of gems, but first lets update gems itself, from within itself—how meta.&lt;/p&gt;


	&lt;p&gt;&lt;code&gt;# gem update --system&lt;/code&gt;&lt;/p&gt;


	&lt;p&gt;Ruby gems should now download and recompile itself. Once that has completed, you can install the gems we’ll need. The first one is a bit trickier than the others.&lt;/p&gt;


	&lt;p&gt;&lt;code&gt;# gem install mysql&lt;/code&gt;&lt;/p&gt;


	&lt;p&gt;The &lt;code&gt;mysql&lt;/code&gt; gem provides fast C bindings between Ruby and MySQL, if you aren’t already using these on your local machine you should give them a spin, the performance increase is well worth the minimal amount of effort required to install them. If you have your MySQL installed in a non-standard location, you may have to pass in &lt;code&gt;mysql_config&lt;/code&gt;.&lt;/p&gt;


	&lt;p&gt;&lt;code&gt;# gem install mysql -- --with-mysql-config=/your/path/to/mysql_config&lt;/code&gt;&lt;/p&gt;


	&lt;p&gt;With &lt;code&gt;mysql&lt;/code&gt; all setup and out of the way, its easy to install everything else you need.&lt;/p&gt;


	&lt;p&gt;&lt;code&gt;# gem install rails mongrel mongrel_cluster&lt;/code&gt;&lt;/p&gt;


	&lt;p&gt;&lt;code&gt;rails&lt;/code&gt; is optional, you may choose to freeze rails inside your application, which would override this gem. &lt;code&gt;mongrel&lt;/code&gt; and &lt;code&gt;mongrel_cluster&lt;/code&gt; are the gems that provide us with our application server. Before diving into mongrel, there are a few more gems you may want that are entirely optional.&lt;/p&gt;


	&lt;p&gt;&lt;code&gt;# gem install tmail swiftiply&lt;/code&gt;&lt;/p&gt;


	&lt;p&gt;&lt;code&gt;tmail&lt;/code&gt; is an e-mail library, and is the same library that the &lt;code&gt;ActiveMailer&lt;/code&gt; component of Rails uses. Rails 2.0 now looks for this gem before loading its own bundled copy; by installing the gem you can get extra features and bug fixes that may have been released.&lt;/p&gt;


	&lt;p&gt;&lt;code&gt;swiftiply&lt;/code&gt; is a gem that patches mongrel to use the event based network programming model, commonly called “evented mongrels”. You can find more on &lt;a href="http://brainspl.at/articles/2007/05/12/event-driven-mongrel-and-swiftiply-proxy"&gt;Ezra Zygmuntowicz’s Brainspl.at&lt;/a&gt; and &lt;a href="http://journal.andrewloe.com/computers-and-technology"&gt;my journal&lt;/a&gt; where I did some &lt;a href="http://journal.andrewloe.com/2007/5/22/mongrel-vs-evented-mongrel"&gt;elementary benchmarking&lt;/a&gt;.&lt;/p&gt;


	&lt;h3&gt;Mongrel&lt;/h3&gt;


	&lt;p&gt;&lt;a href="http://mongrel.rubyforge.org/"&gt;Mongrel&lt;/a&gt; will serve as our application server, containing an instance of the Ruby interpreter and our Rails application.&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt;Mongrel is a fast &lt;span class="caps"&gt;HTTP&lt;/span&gt; library and server for Ruby that is intended for hosting Ruby web applications of any kind using plain &lt;span class="caps"&gt;HTTP&lt;/span&gt; rather than FastCGI or &lt;span class="caps"&gt;SCGI&lt;/span&gt;.&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;From inside your rails application you can start a mongrel server and interact with your application. By default, rails will start in development mode.&lt;/p&gt;


	&lt;p&gt;&lt;code&gt;$ mongrel_rails start&lt;/code&gt;&lt;/p&gt;


	&lt;p&gt;A daemon with the application should now be running on port 3000. &lt;code&gt;ctrl+c&lt;/code&gt; to stop the server, lets move on to &lt;a href="http://mongrel.rubyforge.org/wiki/MongrelCluster"&gt;mongrel_cluster&lt;/a&gt;&lt;/p&gt;


	&lt;h3&gt;Mongrel Cluster&lt;/h3&gt;


	&lt;p&gt;&lt;a href="http://mongrel.rubyforge.org/wiki/MongrelCluster"&gt;Mongrel Cluster&lt;/a&gt; will manage a pool of mongrels that nginx will reverse proxy requests to.&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt;Mongrel_cluster is a GemPlugin that wrappers the mongrel &lt;span class="caps"&gt;HTTP&lt;/span&gt; server and simplifies the deployment of webapps using a cluster of mongrel servers. Mongrel_cluster will conveniently configure and control several mongrel servers, or groups of mongrel servers, which are then load balanced using a reverse proxy solution.&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;The &lt;a href="http://mongrel.rubyforge.org/wiki/MongrelCluster"&gt;wiki&lt;/a&gt; has more extensive documentation, right now we will only look at the basics.&lt;/p&gt;


	&lt;p&gt;&lt;code&gt;# mongrel_rails cluster::configure -e production -p 8000 -N 3 -c /path/to/your/application -a 127.0.0.1 --user mongrel --group mongrel&lt;/code&gt;&lt;/p&gt;


	&lt;p&gt;This line creates the file &lt;code&gt;application/path/config/mongrel_cluster.yml&lt;/code&gt;. Most of the switches are self explanatory, &lt;code&gt;-a 127.0.0.1&lt;/code&gt; configures the IP that the server binds to, by making it local you make it impossible to hit a mongrel directly without passing through the proxy. &lt;code&gt;-p&lt;/code&gt; and &lt;code&gt;-N&lt;/code&gt; configure the start port and the number of mongrels to start, so 8000, 8001, and 8002 in this case. &lt;code&gt;--user&lt;/code&gt; and &lt;code&gt;--group&lt;/code&gt; are the system user and group the servers will run under; because the mongrels run on an unprivileged port, they may run as an unprivileged user to improve security. &lt;code&gt;-e&lt;/code&gt; is the environment our rails application will run in and &lt;code&gt;-c&lt;/code&gt; is the path to our application (mongrel cluster will look for its configuration file at this path + &lt;code&gt;config/mongrel_cluster.yml&lt;/code&gt;, you may use &lt;code&gt;-C&lt;/code&gt; if you want to directly specify a &lt;span class="caps"&gt;YAML&lt;/span&gt; config file).&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;--- 
user: mongrel
group: mongrel
cwd: /path/to/my/application
address: 127.0.0.1
port: "8000" 
servers: 3
environment: production
pid_file: log/mongrel.pid
&lt;/code&gt;&lt;/pre&gt;

	&lt;h3&gt;Evented Mongrel&lt;/h3&gt;


	&lt;p&gt;To use evented mongrels, you just need to pass an environmental variable &lt;code&gt;EVENT=1&lt;/code&gt; while starting your server. With &lt;code&gt;mongrel_cluster&lt;/code&gt; that will look like this:&lt;/p&gt;


	&lt;p&gt;&lt;code&gt;# EVENT=1 mongrel_rails cluster::start&lt;/code&gt;&lt;/p&gt;


	&lt;p&gt;Don’t forget to pass it even if you are just restarting the servers! At the top of the mongrel.log you should see it notify you that it is using events.&lt;/p&gt;


	&lt;h2&gt;Web Server&lt;/h2&gt;


	&lt;p&gt;Currently our application server and web server are on the same virtual machine. In the future, we may choose to scale by moving the web server and static content to another virtual machine (or perhaps a &lt;span class="caps"&gt;CDN&lt;/span&gt; like Akamai) and have pure application servers. For now, we will keep things simple.&lt;/p&gt;


	&lt;h3&gt;nginx&lt;/h3&gt;


	&lt;p&gt;&lt;a href="http://nginx.net/"&gt;nginx&lt;/a&gt; is a very fast proxy that we will also use to serve our static content.&lt;/p&gt;


	&lt;p&gt;&lt;code&gt;# apt-get install nginx&lt;/code&gt;&lt;/p&gt;


	&lt;p&gt;Configuration is very straight forward, everything is done in &lt;code&gt;/etc/nginx/nginx.conf&lt;/code&gt;. The following configuration is based on “Ezra Zygmuntowicz’s Brainspl.at” &lt;a href="http://brainspl.at/nginx.conf.txt"&gt;nginx.conf&lt;/a&gt;.&lt;/p&gt;


&lt;pre&gt;&lt;code&gt;# user and group to run as
user  www-data www-data;

# number of nginx workers
worker_processes  3;

# pid of nginx master process
pid /var/run/nginx.pid;

# Number of worker connections. 1024 is a good default
events {
  worker_connections 1024;
}

# start the http module where we config http access.
http {
  # pull in mime-types. You can break out your config 
  # into as many include's as you want to make it cleaner
  include /etc/nginx/mime.types;

  # set a default type for the rare situation that
  # nothing matches from the mimie-type include
  default_type  application/octet-stream;

  # configure log format
  log_format main '$remote_addr - $remote_user [$time_local] '
                  '"$request" $status  $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

  # main access log
  access_log  /var/log/nginx_access.log  main;

  # main error log
  error_log  /var/log/nginx_error.log debug;

  # no sendfile on OSX
  sendfile on;

  # These are good default values.
  tcp_nopush        on;
  tcp_nodelay       off;
  # output compression saves bandwidth 
  gzip            on;
  gzip_http_version 1.0;
  gzip_comp_level 2;
  gzip_proxied any;
  gzip_types      text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;

  # this is where you define your mongrel clusters. 
  # you need one of these blocks for each cluster
  # and each one needs its own name to refer to it later.
  upstream mongrel {
        fair; # This changes from round-robin based to load based.
    server 127.0.0.1:8000;
    server 127.0.0.1:8001;
    server 127.0.0.1:8002;
  }

  # the server directive is nginx's virtual host directive.
  server {
    # port to listen on. Can also be set to an IP:PORT
    listen 80;

    # Set the max size for file uploads to 50Mb
    client_max_body_size 50M;

    # sets the domain[s] that this vhost server requests for
    # server_name www.[yourdomain].com [yourdomain].com;

    # doc root
    root /path/to/your/application/public;

    # vhost specific access log
    access_log  /var/log/nginx.vhost.access.log  main;

    # this rewrites all the requests to the maintenance.html
    # page if it exists in the doc root. This is for capistrano's
    # disable web task
    if (-f $document_root/system/maintenance.html) {
      rewrite  ^(.*)$  /system/maintenance.html last;
      break;
    }

    location / {
      # needed to forward user's IP address to rails
      proxy_set_header  X-Real-IP  $remote_addr;

      # needed for HTTPS
      proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_redirect false;
      proxy_max_temp_file_size 0;

      # If the file exists as a static file serve it directly without
      # running all the other rewite tests on it
      if (-f $request_filename) { 
        break; 
      }

      # check for index.html for directory index
      # if its there on the filesystem then rewite 
      # the url to add /index.html to the end of it
      # and then break to send it to the next config rules.
      if (-f $request_filename/index.html) {
        rewrite (.*) $1/index.html break;
      }

      # this is the meat of the rails page caching config
      # it adds .html to the end of the url and then checks
      # the filesystem for that file. If it exists, then we
      # rewite the url to have explicit .html on the end 
      # and then send it on its way to the next config rule.
      # if there is no file on the fs then it sets all the 
      # necessary headers and proxies to our upstream mongrels
      if (-f $request_filename.html) {
        rewrite (.*) $1.html break;
      }

      if (!-f $request_filename) {
        proxy_pass http://mongrel;
        break;
      }
    }

    error_page   500 502 503 504  /500.html;
    location = /500.html {
      root   /path/to/your/application/public;
    }
  }
}&lt;/pre&gt;&lt;/code&gt;

	&lt;p&gt;Now that you have nginx configured, start it and you should have a solid rails stack up and running.&lt;/p&gt;


	&lt;p&gt;&lt;code&gt;# /etc/init.d/nginx start&lt;/code&gt;&lt;/p&gt;


	&lt;h2&gt;Request Cycle&lt;/h2&gt;


	&lt;p&gt;Unlike more traditional setups, each individual request does not necessarily take the same path. Nginx monitors port 80 and accepts all incoming requests. Using the rewrite rules it looks for a file in the &lt;code&gt;public&lt;/code&gt; directory with &lt;code&gt;/url/path + .html&lt;/code&gt;. If it finds this static &lt;span class="caps"&gt;HTML&lt;/span&gt; page, it replies. It also searches for &lt;code&gt;index.html&lt;/code&gt; to retrieve folder indexes. These static &lt;span class="caps"&gt;HTML&lt;/span&gt; files are generated by rails’ page caching mechanism, and provide enormous performance gains at a cost of flexibility. If nginx is unable to find an &lt;span class="caps"&gt;HTML&lt;/span&gt; page, it forwards the request to the cluster of mongrels. The mongrel that gets the request depends on which proxy algorithm you choose; the fair option spread the requests based on availability. Once received, the mongrel then runs the request through the rails application: the database is hit, ruby does some magic, and a page is completed and passed back to the mongrel which logs the request as complete and passes it back to nginx. If page caching is enabled, rails writes the page that was just generated to the &lt;code&gt;public&lt;/code&gt; directory (lazy caching) before handing it off to the mongrel. Nginx takes this page and forwards it to the browser, acting as a proxy (gateway). The general process is repeated on each request, but the mongrel that is given the dynamic request will be different, and a cached page may be found, avoiding the need to engage the mongrels all together.&lt;/p&gt;
          </content>  <feedburner:origLink>http://journal.andrewloe.com/2008/3/27/rails-stack</feedburner:origLink></entry>
  <entry xml:base="http://journal.andrewloe.com/">
    <author>
      <name>Andrew</name>
    </author>
    <id>tag:journal.andrewloe.com,2008-03-15:463</id>
    <published>2008-03-15T06:37:00Z</published>
    <updated>2008-03-18T09:41:19Z</updated>
    <category term="Computers &amp; Tech" />
    <link href="http://feeds.andrewloe.com/~r/WALoeIII-Journal/~3/251841669/git" rel="alternate" type="text/html" />
    <title>Git</title>
<content type="html">
            &lt;p&gt;I’ve been experimenting with &lt;a href="http://git.or.cz/"&gt;Git&lt;/a&gt; for source control management (SCM), I’m really starting to appreciate the benefits of the distributed features it provides. The &lt;a href="http://www.kernel.org/pub/software/scm/git/docs/user-manual.html"&gt;User’s Manual&lt;/a&gt; is very comprehensive, and the &lt;a href="http://git.or.cz/course/svn.html"&gt;&lt;span class="caps"&gt;SVN&lt;/span&gt; -&amp;gt; Git crash course&lt;/a&gt; was excellent in getting me up to speed. &lt;a href="http://www.simplisticcomplexity.com/"&gt;Simplistic Complexity&lt;/a&gt; provides an awesome &lt;a href="http://www.simplisticcomplexity.com/2008/03/05/cleanly-migrate-your-subversion-repository-to-a-git-repository/"&gt;&lt;span class="caps"&gt;SVN&lt;/span&gt; to Git Migration Guide&lt;/a&gt; that helped me split my monolithic subversion repository into a series of lean git trees. Although git is relatively new, there is some pretty good support for hooking it into existing tools like &lt;a href="http://www.redmine.org/"&gt;Redmine&lt;/a&gt;, which has support for git in its latest trunk. Hopefully I will be able to convert some of my co-workers soon, but until then I’m going to be using a &lt;a href="http://andy.delcambre.com/2008/3/4/git-svn-workflow"&gt;hybrid workflow of git and subversion&lt;/a&gt;, mostly facilitated by git-svn.&lt;/p&gt;


	&lt;p&gt;Update:
I’ve been playing with &lt;a href="http://eagain.net/gitweb/?p=gitosis.git;a=summary"&gt;gitosis&lt;/a&gt; for managing “push” repositories that I can share with others or use to deploy with &lt;a href="http://www.capify.org/"&gt;capistrano&lt;/a&gt;. The program requires you have &lt;a href="http://kimmo.suominen.com/docs/ssh/"&gt;&lt;span class="caps"&gt;SSH&lt;/span&gt; setup&lt;/a&gt; perfectly, and there are a few caveats (read: must use ssh on port 22 to deploy with capistrano), but its very simple once you &lt;a href="http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way"&gt;get it working&lt;/a&gt;. I really like how access to your repositories is done with public &lt;span class="caps"&gt;SSH&lt;/span&gt; keys. &lt;a href="http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way"&gt;Scie.nti.st&lt;/a&gt; has more.&lt;/p&gt;


	&lt;p&gt;Another Update:
I secured a &lt;a href="http://github.com/"&gt;GitHub&lt;/a&gt; beta invite and was able to successfully push all of my repositories there. &lt;a href="http://github.com/"&gt;GitHub&lt;/a&gt; also has some great documentation on &lt;a href="http://github.com/guides/deploying-with-capistrano"&gt;deploying with capistrano and github&lt;/a&gt; which enabled me to re-deploy all of my applications to my server using git. As a side-benefit I now also have all my &lt;a href="http://mongrel.rubyforge.org/"&gt;mongrels&lt;/a&gt; running as an unprivileged user.&lt;/p&gt;
          </content>  <feedburner:origLink>http://journal.andrewloe.com/2008/3/15/git</feedburner:origLink></entry>
  <entry xml:base="http://journal.andrewloe.com/">
    <author>
      <name>Andrew</name>
    </author>
    <id>tag:journal.andrewloe.com,2008-03-08:402</id>
    <published>2008-03-08T04:00:00Z</published>
    <updated>2008-03-08T04:39:27Z</updated>
    <category term="Family &amp; Friends" />
    <category term="Real World" />
    <link href="http://feeds.andrewloe.com/~r/WALoeIII-Journal/~3/247766460/718-10th-ave-east-2" rel="alternate" type="text/html" />
    <title>718 10th Ave East #2</title>
<content type="html">
            &lt;p&gt;After a tough search, I finally found &lt;a href="http://gallery.andrewloe.com/view/life/718-10th-ave-east/"&gt;an apartment&lt;/a&gt; I really like. The rent is reasonable, and the place is &lt;span class="caps"&gt;HUGE&lt;/span&gt;! I have covered parking out back, with a back door entrance that is only a few feet from my parking space. Inside are beautiful hardwood floors, cool and funky details, and great lighting. The front window faces the west, so the whole apartment, especially the main room, are full of afternoon and evening light.&lt;/p&gt;


&lt;p&gt;718 10th Ave East, Seattle, WA (My unit is the middle floor on the left.)&lt;br /&gt;
&lt;a href="http://gallery.andrewloe.com/view/life/718-10th-ave-east/DSC01559.JPG.html"&gt;&lt;img src="http://gallery.andrewloe.com/download/16538-2/DSC01559.JPG" height="480" alt="718 10th Ave East" width="640" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Big front window.&lt;br /&gt;
&lt;a href="http://gallery.andrewloe.com/view/life/718-10th-ave-east/DSC01594.JPG.html"&gt;&lt;img src="http://gallery.andrewloe.com/download/16640-2/DSC01594.JPG" height="480" alt="Big front window" width="640" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From the kitchen looking forward.&lt;br /&gt;
&lt;a href="http://gallery.andrewloe.com/view/life/718-10th-ave-east/DSC01579.JPG.html"&gt;&lt;img src="http://gallery.andrewloe.com/download/16598-2/DSC01579.JPG" height="480" alt="Kitchen Looking Forward" width="640" /&gt;&lt;/a&gt;

&lt;p&gt;Wood floors.&lt;br /&gt;
&lt;a href="http://gallery.andrewloe.com/view/life/718-10th-ave-east/DSC01589.JPG.html"&gt;&lt;img src="http://gallery.andrewloe.com/download/16625-2/DSC01589.JPG" height="480" alt="Wood floors" width="640" /&gt;&lt;/a&gt;&lt;/p&gt;
          </content>  <feedburner:origLink>http://journal.andrewloe.com/2008/3/8/718-10th-ave-east-2</feedburner:origLink></entry>
  <entry xml:base="http://journal.andrewloe.com/">
    <author>
      <name>Andrew</name>
    </author>
    <id>tag:journal.andrewloe.com,2008-02-25:389</id>
    <published>2008-02-25T04:25:00Z</published>
    <updated>2008-02-25T04:38:45Z</updated>
    <category term="Snowboarding" />
    <link href="http://feeds.andrewloe.com/~r/WALoeIII-Journal/~3/240682086/day-11-summit-at-snoqualmie" rel="alternate" type="text/html" />
    <title>Day 11: Summit at Snoqualmie</title>
<content type="html">
            &lt;p&gt;My first day riding in the Northwest! It was pretty warm and slushy, but I had a good time getting warmed back up and exploring my new backyard!&lt;/p&gt;


&lt;p&gt;I actually saw sunshine, apparently its rare in these parts.&lt;br /&gt;
&lt;a href="http://gallery.andrewloe.com/view/snowboarding/2008-02-24/P2240006.JPG.html"&gt;&lt;img src="http://gallery.andrewloe.com/download/16512-2/P2240006.JPG" height="480" alt="Sunshine!" width="640" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lots of snow.&lt;br /&gt;
&lt;a href="http://gallery.andrewloe.com/view/snowboarding/2008-02-24/P2240007.JPG.html"&gt;&lt;img src="http://gallery.andrewloe.com/download/16515-2/P2240007.JPG" height="640" alt="Fire Hydrant" width="480" /&gt;&lt;/a&gt;&lt;/p&gt;
          </content>  <feedburner:origLink>http://journal.andrewloe.com/2008/2/25/day-11-summit-at-snoqualmie</feedburner:origLink></entry>
  <entry xml:base="http://journal.andrewloe.com/">
    <author>
      <name>Andrew</name>
    </author>
    <id>tag:journal.andrewloe.com,2008-02-19:375</id>
    <published>2008-02-19T22:31:00Z</published>
    <updated>2008-03-18T07:40:38Z</updated>
    <category term="Computers &amp; Tech" />
    <category term="Real World" />
    <link href="http://feeds.andrewloe.com/~r/WALoeIII-Journal/~3/237832404/new-office" rel="alternate" type="text/html" />
    <title>New Office</title>
<content type="html">
            &lt;p&gt;A few quick photos of my new workspace.&lt;/p&gt;


&lt;p&gt;&lt;a href="http://gallery.andrewloe.com/view/life/new-office/"&gt;&lt;img src="http://gallery.andrewloe.com/download/16486-2/P2190001.JPG" height="480" alt="My desk" width="640" /&gt;&lt;/a&gt;&lt;/p&gt;
          </content>  <feedburner:origLink>http://journal.andrewloe.com/2008/2/19/new-office</feedburner:origLink></entry>
</feed>
