<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:posterous="http://posterous.com/help/rss/1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Appogee</title>
    <link>http://appogee.posterous.com</link>
    <description>Agile, open source, web application design and development</description>
    <generator>posterous.com</generator>
    <link xmlns="http://www.w3.org/2005/Atom" href="http://posterous.com/api/sup_update#8c7fea18e" type="application/json" rel="http://api.friendfeed.com/2008/03#sup" />
    
    
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/appogee" /><feedburner:info uri="appogee" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://posterous.superfeedr.com/" /><feedburner:browserFriendly></feedburner:browserFriendly><item>
      <pubDate>Sun, 03 Apr 2011 21:36:00 -0700</pubDate>
      <title>Decent Authentication</title>
      <link>http://appogee.posterous.com/decent-authentication</link>
      <guid>http://appogee.posterous.com/decent-authentication</guid>
      <description>
        <![CDATA[<p>
	<p><a href="https://github.com/leesmith/decent_authentication" title="Decent Authentication" target="_blank">Decent Authentication</a> is a small Rails app illustrating authentication from scratch, without using authentication gems or plugins.&nbsp; This is basically a reproduction of Ryan Bates' screencast <a href="http://railscasts.com/episodes/250-authentication-from-scratch" title="Authentication from Scratch" target="_blank">Authentication from Scratch</a> with the addition of my capybara and RSpec tests.</p>
	
</p>

<p><a href="http://appogee.posterous.com/decent-authentication">Permalink</a> 

	| <a href="http://appogee.posterous.com/decent-authentication#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/596719/68e069be759d4e29e7c9d03492aaf857.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/5Aqfju6m7w9b</posterous:profileUrl>
        <posterous:firstName>Lee</posterous:firstName>
        <posterous:lastName>Smith</posterous:lastName>
        <posterous:nickName>appogee</posterous:nickName>
        <posterous:displayName>Lee Smith</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Sun, 24 Oct 2010 20:17:00 -0700</pubDate>
      <title>Ruby on Rails Development on Ubuntu 10.10 with Git, Vim, and RVM</title>
      <link>http://appogee.posterous.com/ubuntu-1010-ruby-on-rails-setup</link>
      <guid>http://appogee.posterous.com/ubuntu-1010-ruby-on-rails-setup</guid>
      <description>
        <![CDATA[<p>
	<p>So I&rsquo;m just off a fresh install of Ubuntu 10.10 and I thought I might as well document the process of how I setup my Rails development environment.  I&rsquo;m still learning RVM best practices so constructive criticism is welcome.  So here goes&hellip;</p>

<h3>Ruby</h3>

<div class="CodeRay">
  <div class="code"><pre><span class="c"># Install ruby, etc.</span>
sudo apt<span class="argument">-get</span> install irb libopenssl<span class="argument">-ruby</span> libreadline<span class="argument">-ruby</span> rdoc ri ruby ruby<span class="argument">-dev</span> build<span class="argument">-essential</span> bison openssl libreadline5 libreadline<span class="argument">-dev</span> curl zlib1g zlib1g<span class="argument">-dev</span> libssl<span class="argument">-dev</span> libxml2<span class="argument">-dev</span></pre></div>
</div>


<h3>Vim &amp; GVim</h3>

<div class="CodeRay">
  <div class="code"><pre><span class="c"># Install vim and gvim</span>
sudo apt<span class="argument">-get</span> install vim vim<span class="argument">-gnome</span></pre></div>
</div>


<h3>GIT</h3>

<div class="CodeRay">
  <div class="code"><pre><span class="c"># Install git and gitg repo viewer</span>
sudo apt<span class="argument">-get</span> install git git<span class="argument">-doc</span> gitg

<span class="c"># Set name and email in gitconfig</span>
git config <span class="other">-</span><span class="argument">-global</span> user<span class="other">.</span>name <span class="s"><span class="dl">&quot;</span><span class="k">John Doe</span><span class="dl">&quot;</span></span>
git config <span class="other">-</span><span class="argument">-global</span> user<span class="other">.</span>email johndoe<span class="other">@</span>example<span class="other">.</span>com

<span class="c"># Configure default git text editor</span>
git config <span class="other">-</span><span class="argument">-global</span> core<span class="other">.</span>editor <span class="s"><span class="dl">&quot;</span><span class="k">gvim --nofork</span><span class="dl">&quot;</span></span>

<span class="c"># Configure status colors</span>
git config <span class="other">-</span><span class="argument">-global</span> color<span class="other">.</span>diff auto
git config <span class="other">-</span><span class="argument">-global</span> color<span class="other">.</span>status auto
git config <span class="other">-</span><span class="argument">-global</span> color<span class="other">.</span>branch auto
git config <span class="other">-</span><span class="argument">-global</span> color<span class="other">.</span>status<span class="other">.</span>changed yellow
git config <span class="other">-</span><span class="argument">-global</span> color<span class="other">.</span>status<span class="other">.</span>added green
git config <span class="other">-</span><span class="argument">-global</span> color<span class="other">.</span>status<span class="other">.</span>untracked red

<span class="c"># Verify git settings</span>
git config <span class="other">-</span><span class="argument">-list</span>

<span class="c"># Generate SSH keys (provide a good passphrase when asked)</span>
ssh<span class="argument">-keygen</span> <span class="argument">-t</span> rsa <span class="argument">-C</span> <span class="s"><span class="dl">&quot;</span><span class="k">johndoe@example.com</span><span class="dl">&quot;</span></span>

<span class="c"># Add git aliases</span>
<span class="fu">echo</span> <span class="s"><span class="dl">&quot;</span><span class="k">alias gb='git branch'</span><span class="dl">&quot;</span></span> &gt;&gt; ~<span class="other">/</span><span class="other">.</span>bashrc
<span class="fu">echo</span> <span class="s"><span class="dl">&quot;</span><span class="k">alias gc='git commit -v'</span><span class="dl">&quot;</span></span> &gt;&gt; ~<span class="other">/</span><span class="other">.</span>bashrc
<span class="fu">echo</span> <span class="s"><span class="dl">&quot;</span><span class="k">alias gca='git commit -a -v'</span><span class="dl">&quot;</span></span> &gt;&gt; ~<span class="other">/</span><span class="other">.</span>bashrc
<span class="fu">echo</span> <span class="s"><span class="dl">&quot;</span><span class="k">alias gco='git checkout'</span><span class="dl">&quot;</span></span> &gt;&gt; ~<span class="other">/</span><span class="other">.</span>bashrc
<span class="fu">echo</span> <span class="s"><span class="dl">&quot;</span><span class="k">alias gd='git diff'</span><span class="dl">&quot;</span></span> &gt;&gt; ~<span class="other">/</span><span class="other">.</span>bashrc
<span class="fu">echo</span> <span class="s"><span class="dl">&quot;</span><span class="k">alias gdc='git diff --cached'</span><span class="dl">&quot;</span></span> &gt;&gt; ~<span class="other">/</span><span class="other">.</span>bashrc
<span class="fu">echo</span> <span class="s"><span class="dl">&quot;</span><span class="k">alias gdh='git diff HEAD'</span><span class="dl">&quot;</span></span> &gt;&gt; ~<span class="other">/</span><span class="other">.</span>bashrc
<span class="fu">echo</span> <span class="s"><span class="dl">&quot;</span><span class="k">alias gp='git push'</span><span class="dl">&quot;</span></span> &gt;&gt; ~<span class="other">/</span><span class="other">.</span>bashrc
<span class="fu">echo</span> <span class="s"><span class="dl">&quot;</span><span class="k">alias gl='git pull'</span><span class="dl">&quot;</span></span> &gt;&gt; ~<span class="other">/</span><span class="other">.</span>bashrc
<span class="fu">echo</span> <span class="s"><span class="dl">&quot;</span><span class="k">alias gpr='git pull --rebase'</span><span class="dl">&quot;</span></span> &gt;&gt; ~<span class="other">/</span><span class="other">.</span>bashrc
<span class="fu">echo</span> <span class="s"><span class="dl">&quot;</span><span class="k">alias gst='git status'</span><span class="dl">&quot;</span></span> &gt;&gt; ~<span class="other">/</span><span class="other">.</span>bashrc
<span class="fu">echo</span> <span class="s"><span class="dl">&quot;</span><span class="k">alias gap='git add -p'</span><span class="dl">&quot;</span></span> &gt;&gt; ~<span class="other">/</span><span class="other">.</span>bashrc
<span class="fu">echo</span> <span class="s"><span class="dl">&quot;</span><span class="k">alias glg='git log --pretty=oneline --abbrev-commit'</span><span class="dl">&quot;</span></span> &gt;&gt; ~<span class="other">/</span><span class="other">.</span>bashrc

<span class="c"># Setup git bash completion</span>
<span class="fu">cd</span> ~<span class="other">/</span>
git clone git<span class="other">:</span><span class="other">/</span><span class="other">/</span>git<span class="other">.</span>kernel<span class="other">.</span>org<span class="other">/</span>pub<span class="other">/</span>scm<span class="other">/</span>git<span class="other">/</span>git<span class="other">.</span>git
mv git<span class="other">/</span>contrib<span class="other">/</span>completion<span class="other">/</span>git<span class="argument">-completion</span><span class="other">.</span>bash ~<span class="other">/</span><span class="other">.</span>git<span class="argument">-completion</span><span class="other">.</span>sh
rm <span class="argument">-rf</span> ~<span class="other">/</span>git
<span class="fu">echo</span> <span class="s"><span class="dl">&quot;</span><span class="k">export GIT_PS1_SHOWDIRTYSTATE=1</span><span class="dl">&quot;</span></span> &gt;&gt; ~<span class="other">/</span><span class="other">.</span>bashrc
<span class="fu">echo</span> <span class="s"><span class="dl">&quot;</span><span class="k">export GIT_PS1_SHOWSTASHSTATE=1</span><span class="dl">&quot;</span></span> &gt;&gt; ~<span class="other">/</span><span class="other">.</span>bashrc
<span class="fu">echo</span> <span class="s"><span class="dl">&quot;</span><span class="k">source ~/.git-completion.sh</span><span class="dl">&quot;</span></span> &gt;&gt; ~<span class="other">/</span><span class="other">.</span>bashrc

<span class="c"># Add git info to PS1 (append this to your ~/.bashrc file, not commented)</span>
<span class="c"># PS1='[\[\033[1;34m\]\u\[\033[0m\]@\h \W$(__git_ps1 &quot;(%s)&quot;)]\$ '</span></pre></div>
</div>


<h3>RubyGems</h3>

<div class="CodeRay">
  <div class="code"><pre><span class="c"># Download and install RubyGems</span>
<span class="fu">cd</span> ~<span class="other">/</span>
wget http<span class="other">:</span><span class="other">/</span><span class="other">/</span>production<span class="other">.</span>cf<span class="other">.</span>rubygems<span class="other">.</span>org<span class="other">/</span>rubygems<span class="other">/</span>rubygems<span class="other">-</span><span class="number">1</span><span class="other">.</span><span class="number">5</span><span class="other">.</span><span class="number">2</span><span class="other">.</span>tgz
tar xzf rubygems<span class="other">-</span><span class="number">1</span><span class="other">.</span><span class="number">5</span><span class="other">.</span><span class="number">2</span><span class="other">.</span>tgz
<span class="fu">cd</span> rubygems<span class="other">-</span><span class="number">1</span><span class="other">.</span><span class="number">5</span><span class="other">.</span><span class="number">2</span>
sudo ruby setup<span class="other">.</span>rb

<span class="c"># Link gem command to 1.8 version</span>
sudo update<span class="argument">-alternatives</span> <span class="other">-</span><span class="argument">-install</span> <span class="other">/</span>usr<span class="other">/</span>bin<span class="other">/</span>gem gem <span class="other">/</span>usr<span class="other">/</span>bin<span class="other">/</span>gem1<span class="other">.</span><span class="number">8</span> <span class="number">1</span>

<span class="c"># Turn off rdoc generation when installing/updating gems</span>
<span class="fu">echo</span> <span class="s"><span class="dl">&quot;</span><span class="k">install: --no-ri --no-rdoc</span><span class="dl">&quot;</span></span> &gt;&gt; ~<span class="other">/</span><span class="other">.</span>gemrc
<span class="fu">echo</span> <span class="s"><span class="dl">&quot;</span><span class="k">update: --no-ri --no-rdoc</span><span class="dl">&quot;</span></span> &gt;&gt; ~<span class="other">/</span><span class="other">.</span>gemrc</pre></div>
</div>


<h3>RVM</h3>

<div class="CodeRay">
  <div class="code"><pre><span class="c"># RVM install</span>
bash &lt; &lt;<span class="other">(</span> curl http<span class="other">:</span><span class="other">/</span><span class="other">/</span>rvm<span class="other">.</span>beginrescueend<span class="other">.</span>com<span class="other">/</span>releases<span class="other">/</span>rvm<span class="argument">-install</span><span class="argument">-head</span> <span class="other">)</span>

<span class="c"># Load RVM into shell</span>
<span class="fu">echo</span> <span class="s"><span class="dl">'</span><span class="k">[[ -s &quot;</span><span class="il"><span class="iv">$HOME</span></span><span class="k">/.rvm/scripts/rvm&quot; ]] &amp;&amp; source &quot;</span><span class="il"><span class="iv">$HOME</span></span><span class="k">/.rvm/scripts/rvm&quot;</span><span class="dl">'</span></span> &gt;&gt; ~<span class="other">/</span><span class="other">.</span>bashrc

<span class="c"># RVM bash completion complete</span>
<span class="fu">echo</span> <span class="s"><span class="dl">'</span><span class="k">[[ -r </span><span class="il"><span class="iv">$rvm_path</span></span><span class="k">/scripts/completion ]] &amp;&amp; . </span><span class="il"><span class="iv">$rvm_path</span></span><span class="k">/scripts/completion</span><span class="dl">'</span></span> &gt;&gt; ~<span class="other">/</span><span class="other">.</span>bashrc

<span class="c"># One-time source of RVM</span>
<span class="fu">source</span> ~<span class="other">/</span><span class="other">.</span>rvm<span class="other">/</span>scripts<span class="other">/</span>rvm

<span class="c"># Verify RVM installation</span>
rvm <span class="argument">-v</span>

<span class="c"># Install latest stable 1.8.7 release</span>
rvm install <span class="number">1</span><span class="other">.</span><span class="number">8</span><span class="other">.</span><span class="number">7</span>

<span class="c"># Set default ruby</span>
rvm <span class="other">-</span><span class="argument">-default</span> <span class="number">1</span><span class="other">.</span><span class="number">8</span><span class="other">.</span><span class="number">7</span>

<span class="c"># Install more rubies</span>
rvm install ree
rvm install <span class="number">1</span><span class="other">.</span><span class="number">9</span><span class="other">.</span><span class="number">2</span></pre></div>
</div>


<p>At this point, you should have everything &ldquo;installed&rdquo;.  From here, it&rsquo;s more of a preference on how you want to use rvm.  Since I work with both Rails2.3 and Rails3, I like to create a rails2 gemset and a rails3 gemset from which I can create new projects from.  After new projects are created, I create the project rvmrc file to then build from.</p>

<h3>RVM Gemsets</h3>

<div class="CodeRay">
  <div class="code"><pre><span class="c"># Create some rails specific gemsets</span>
rvm gemset create rails2
rvm gemset create rails3

<span class="c"># Switch to ruby 1.8.7-p334 with gemset rails2</span>
rvm <span class="number">1</span><span class="other">.</span><span class="number">8</span><span class="other">.</span><span class="number">7</span><span class="argument">-p334</span><span class="other">@</span>rails2

<span class="c"># Install rails 2.3.11</span>
gem install rails <span class="argument">-v=2</span><span class="other">.</span><span class="number">3</span><span class="other">.</span><span class="number">11</span>; gem install ruby<span class="argument">-debug</span>

<span class="c"># Switch to ruby 1.8.7-p334 with gemset rails3</span>
rvm <span class="number">1</span><span class="other">.</span><span class="number">8</span><span class="other">.</span><span class="number">7</span><span class="argument">-p334</span><span class="other">@</span>rails3

<span class="c"># Install rails 3</span>
gem install rails ruby<span class="argument">-debug</span>

<span class="c"># Create project specific .rvmrc</span>
<span class="fu">cd</span> ~<span class="other">/</span>projects
<span class="fu">echo</span> <span class="s"><span class="dl">&quot;</span><span class="k">rvm --create use 'ruby-1.8.7-p334@example_app'</span><span class="dl">&quot;</span></span> &gt; ~<span class="other">/</span>projects<span class="other">/</span>example_app<span class="other">/</span><span class="other">.</span>rvmrc</pre></div>
</div>


<h3>Databases</h3>

<div class="CodeRay">
  <div class="code"><pre><span class="c"># Install sqlite and deps</span>
sudo apt<span class="argument">-get</span> install libsqlite3<span class="other">-</span><span class="other">0</span> libsqlite3<span class="argument">-dev</span> sqlite3
gem install sqlite3<span class="argument">-ruby</span>

<span class="c"># Install mysql and deps</span>
sudo apt<span class="argument">-get</span> install mysql<span class="argument">-client</span> mysql<span class="argument">-server</span> libmysqlclient<span class="argument">-dev</span>
gem install mysql

<span class="c"># Install postgresql and deps</span>
sudo apt<span class="argument">-get</span> install postgresql libpq<span class="argument">-dev</span>
gem install pg</pre></div>
</div>


<h3>RDoc</h3>

<p>Build a custom rdoc package and download it for use locally</p>

<div class="CodeRay">
  <div class="code"><pre><span class="c"># Download rdoc's to use locally</span>
http<span class="other">:</span><span class="other">/</span><span class="other">/</span>railsapi<span class="other">.</span>com</pre></div>
</div>
	
</p>

<p><a href="http://appogee.posterous.com/ubuntu-1010-ruby-on-rails-setup">Permalink</a> 

	| <a href="http://appogee.posterous.com/ubuntu-1010-ruby-on-rails-setup#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/596719/68e069be759d4e29e7c9d03492aaf857.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/5Aqfju6m7w9b</posterous:profileUrl>
        <posterous:firstName>Lee</posterous:firstName>
        <posterous:lastName>Smith</posterous:lastName>
        <posterous:nickName>appogee</posterous:nickName>
        <posterous:displayName>Lee Smith</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Mon, 05 Apr 2010 16:01:57 -0700</pubDate>
      <title>Lean Software Development</title>
      <link>http://appogee.posterous.com/lean-software-development</link>
      <guid>http://appogee.posterous.com/lean-software-development</guid>
      <description>
        <![CDATA[<p>
	Nice article on implementing a <a href="http://refcardz.dzone.com/refcardz/getting-started-lean-software">Lean Software Development</a> process.

Of the seven principles outlined, I like these three the best:
<ul>
	<li>Eliminate Waste - get rid of anything that does not add value to the final product</li>
	<li>Build Quality In - automate testing so that you have a strong base for preventing defects</li>
	<li>Defer Commitment - "positive procrastination"; wait until you absolutely cannot wait any longer to make irreversible decisions, in which you've given yourself the most time for gathering facts, resulting in better decisions</li>
</ul>
The other four principles include:
<ul>
	<li>Create Knowledge - the fact that complete requirements are seldom known in the beginning means that you accumulate and record knowledge as the project ages so that you ensure the final product is in line with customer expectations</li>
	<li>Deliver Fast - fast delivery in short iterations for effective custom feedback</li>
	<li>Respect People - let people do their job the best way they know how and don't micro-manage</li>
	<li>Optimize the Whole - don't cherry pick processes to optimize</li>
</ul>
	
</p>

<p><a href="http://appogee.posterous.com/lean-software-development">Permalink</a> 

	| <a href="http://appogee.posterous.com/lean-software-development#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/596719/68e069be759d4e29e7c9d03492aaf857.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/5Aqfju6m7w9b</posterous:profileUrl>
        <posterous:firstName>Lee</posterous:firstName>
        <posterous:lastName>Smith</posterous:lastName>
        <posterous:nickName>appogee</posterous:nickName>
        <posterous:displayName>Lee Smith</posterous:displayName>
      </posterous:author>
    </item>
    <item>
      <pubDate>Tue, 19 Jan 2010 04:41:00 -0800</pubDate>
      <title>TicketMule</title>
      <link>http://appogee.posterous.com/ticketmule</link>
      <guid>http://appogee.posterous.com/ticketmule</guid>
      <description>
        <![CDATA[<p>
	<p>In my first serious attempt at scratching the surface of Ruby on Rails, I've uploaded the source to my first app called TicketMule.  It's more or less a help desk/support ticket application geared toward intranet use.&nbsp; I modeled the concept after another application one of my former employers used to track support calls.&nbsp; The idea is that support requests come in from an external source (email, phone, etc.) and somebody enters that information into the application in the form of a ticket and the team of support staff handles the rest.&nbsp; Definitely not a novel concept but it makes for a web app that has many possibilities.  In developing the app, I tried to keep up with current best practices and principles of the "Rails way".&nbsp; I definitely tried to think in terms of DRY and convention over configuration.&nbsp; I also reviewed my dev log to make sure db activity was as streamlined as possible.  TicketMule is definitely not a finished product (as test code is a glaring hole I've got to cover) but at the very least, you can peruse the source for examples of how I used some of the popular gems included in TicketMule.</p>
<p><a href="http://www.opensourcerails.com/projects/339403-TicketMule" title="OpenSourceRails" target="_self">Screenshots at OpenSourceRails</a></p>
<p><a href="http://www.opensourcerails.com/projects/339403-TicketMule" title="OpenSourceRails" target="_self"></a><a href="http://github.com/leesmith/ticket_mule" title="GitHub" target="_self">Source at GitHub</a></p>
	
</p>

<p><a href="http://appogee.posterous.com/ticketmule">Permalink</a> 

	| <a href="http://appogee.posterous.com/ticketmule#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>

</p>]]>
      </description>
      <posterous:author>
        <posterous:userImage>http://files.posterous.com/user_profile_pics/596719/68e069be759d4e29e7c9d03492aaf857.png</posterous:userImage>
        <posterous:profileUrl>http://posterous.com/users/5Aqfju6m7w9b</posterous:profileUrl>
        <posterous:firstName>Lee</posterous:firstName>
        <posterous:lastName>Smith</posterous:lastName>
        <posterous:nickName>appogee</posterous:nickName>
        <posterous:displayName>Lee Smith</posterous:displayName>
      </posterous:author>
    </item>
  </channel>
</rss>

