<?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>McKinney Station &#187; microapps</title>
	<atom:link href="http://www.mckinneystation.com/categories/microapps/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mckinneystation.com</link>
	<description>Ruby on Rails web application development for Dallas/Fort Worth and all of North Texas.</description>
	<lastBuildDate>Wed, 02 Sep 2009 14:29:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Basejumper &#8211; Yet Another Starter Application</title>
		<link>http://www.mckinneystation.com/2009/02/22/basejumper-yet-another-starter-application/</link>
		<comments>http://www.mckinneystation.com/2009/02/22/basejumper-yet-another-starter-application/#comments</comments>
		<pubDate>Mon, 23 Feb 2009 02:37:06 +0000</pubDate>
		<dc:creator>Geoffrey</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Development Environment]]></category>
		<category><![CDATA[Entrepreneurial]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Web Applications]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[microapps]]></category>

		<guid isPermaLink="false">http://www.mckinneystation.com/?p=102</guid>
		<description><![CDATA[I do not hide the fact that I like to try out new ideas by building lots of little applications.  One thing I find myself doing is recreating many of the same pieces for each application.  So I finally gave in and built a default template for the way I like all of [...]]]></description>
			<content:encoded><![CDATA[<p>I do not hide the fact that I like to try out new ideas by <a href="/2008/06/03/microapps-encourage-hacking/">building lots of little applications</a>.  One thing I find myself doing is recreating many of the same pieces for each application.  So I finally gave in and built a default template for the way I like all of my applications to start.  There are <a href="http://www.railsinside.com/elsewhere/100-7-barebones-rails-apps-to-kick-start-your-development-process.html">other starter apps</a>, but this one is tailored to my idiosyncrasies.</p>
<p>You can find the project, Basejumper, at: <a href="http://github.com/gdagley/basejumper">http://github.com/gdagley/basejumper</a></p>
<h2>What is included?</h2>
<h3>Blueprint <span class="caps">CSS</span> (<a href="http://www.bluprintcss.org">http://www.bluprintcss.org</a>)</h3>
<p>Say what you will about <span class="caps">CSS</span> frameworks, but they make my life a lot easier.  From the website, it &#8220;gives you a solid <span class="caps">CSS</span> foundation to build your project on top of, with an easy-to-use grid, sensible typography, and even a stylesheet for printing.&#8221;  There are official plugins for the framework, like &#8220;buttons&#8221; and &#8220;link-icons&#8221;, and other user created ones, like silksprite (<a href="http://www.ajaxbestiary.com/Labs/SilkSprite">http://www.ajaxbestiary.com/Labs/SilkSprite</a>).</p>
<h3>Authlogic (<a href="http://github.com/binarylogic/authlogic">http://github.com/binarylogic/authlogic</a>)</h3>
<p>The way I think authentication should be done.  Instead of copying a lot of authentication logic (encrypting passwords, remember tokens, etc.) into your user model, it is kept in the gem and is easily updatable.  It has lots of configuration options to fit with your authentication needs and some <a href="http://www.binarylogic.com/2008/11/3/tutorial-authlogic-basic-setup">really</a> <a href="http://www.binarylogic.com/2008/11/16/tutorial-reset-passwords-with-authlogic">good</a> <a href="http://www.binarylogic.com/2008/11/21/tutorial-using-openid-with-authlogic">tutorials</a>.</p>
<p>In app/models/user.rb</p>
<pre><code>class User &lt; ActiveRecord::Base
  acts_as_authentic
end</code></pre>
<h3>Configatron (<a href="http://github.com/markbates/configatron">http://github.com/markbates/configatron</a>)</h3>
<p>This is great way to store application wide configuration and settings.  By adding an initializer to load the config.yml, you can access configuration anywhere in the app.</p>
<p>In config/initializers/load_config.rb:</p>
<pre><code>configatron.configure_from_yaml("config/config.yml", :hash =&gt; Rails.env)</code></pre>
<p>And in config/config.yml</p>
<pre><code>development: &amp;#38;local
    property1: value1
    property2: value2

test:
  &lt;&lt;: *local
  value2: test_value2

production:
  &lt;&lt;: *local
  value2: prod_value2</code></pre>
<h3>Searchlogic (<a href="http://github.com/binarylogic/searchlogic">http://github.com/binarylogic/searchlogic</a>)</h3>
<p>From the same folks who brought you Authlogic, there is Searchlogic.  You will always need pagination.  You may not think so now, but believe me, you will.  So just start out with it enabled.  What I really, really like about Searchlogic, is not just the pagination support, but how easy it makes building advanced search forms (including searching nested objects).  And again, there is a <a href="http://www.binarylogic.com/2008/9/7/tutorial-pagination-ordering-and-searching-with-searchlogic">great tutorial</a></p>
<h3>log-buddy (<a href="http://github.com/relevance/log_buddy">http://github.com/relevance/log_buddy</a>)</h3>
<p>For the lazy debugger in all of us. How many times have you typed:</p>
<pre><code>some_var = 'some_value'
logger.debug "some_var = #{some_var}" </code></pre>
<p>Now try this</p>
<pre><code>some_var = 'some_value'
d { some_var }</code></pre>
<p>which will log</p>
<pre><code>some_var = 'some_value'  </code></pre>
<h3>micronaut and micronaut-rails (<a href="http://github.com/spicycode/micronaut">http://github.com/spicycode/micronaut</a> and <a href="http://github.com/spicycode/micronaut-rails">http://github.com/spicycode/micronaut-rails</a>)</h3>
<p>It just makes more sense to me.  Like <a href="http://rspec.info/">RSpec</a>, only fewer calories.  micronaut is a <a href="http://en.wikipedia.org/wiki/Behavior_Driven_Development"><span class="caps">BDD</span></a> framework similar to RSpec.  In fact it uses all the same RSpec matchers, so there is not a new syntax to learn.  And it adds metadata to the loaded examples that is useful for deciding which tests to run, exclude, document, etc. or building additional tools for your example suite.</p>
<p>The application currently has examples (a.k.a. specs) for most of the existing code.  Adding new examples, should be quick and easy.  To see it all, start with <code>rake examples</code></p>
<h3>beholder treasure map (<a href="http://github.com/spicycode/beholder">http://github.com/spicycode/beholder</a>)</h3>
<p>I like continuous integration.  I <a href="http://www.thinkrelevance.com">work for a company</a> that <a href="http://www.runcoderun.com">likes continuous integration</a>.  Having continuous testing locally let&#8217;s me as soon as I break something.</p>
<p>beholder watches for files to change and then reruns the appropriate tests/specs/examples.  Now I don&#8217;t have an excuse for not running the example suite, because it is always running for me.</p>
<h3>active_form (<a href="http://github.com/nesquena/active_form">http://github.com/nesquena/active_form</a>)</h3>
<p>Easy ActiveRecord validations for non-AR models (for those Contact Us forms).</p>
<h3>comatose (<a href="http://github.com/darthapo/comatose">http://github.com/darthapo/comatose</a>)</h3>
<p>Inevitably, every project wants to be able to manage the &#8220;static&#8221; content on the site.  Comatose is a very simple <span class="caps">CMS</span> plugin.  Nothing fancy, but that is great for these small projects.  You can even style the admin interface to look more like your application (which I did), but the default styles could work just fine.  It is possible to use the content in Comatose as an entire page or a partial across many pages.  The app has a migration that creates some default pages and an example partial.</p>
<h3>active_scaffold (<a href="http://github.com/activescaffold/active_scaffold">http://github.com/activescaffold/active_scaffold</a>)</h3>
<p>Fastest way to build a super simple admin interface.  Or you could use it to build more complex admin.  It is really quite flexible with its search, <span class="caps">CRUD</span>, and the ability to customize.</p>
<h3>display_flash_helper (<a href="http://github.com/gdagley/display_flash_helper">http://github.com/gdagley/display_flash_helper</a>)</h3>
<p>Shameless use of my own plugin to display flash messages.  Nothing too fancy.</p>
<h3>exception_notification (<a href="http://github.com/rails/exception_notification">http://github.com/rails/exception_notification</a>)</h3>
<p>Because they happen and I want to know about them.</p>
<h3>pretty_buttons (<a href="http://github.com/relevance/pretty_buttons">http://github.com/relevance/pretty_buttons</a>)</h3>
<p><span class="caps">HTML</span> buttons shouldn&#8217;t have to look so bad.  This plugin plays nicely with Blueprint <span class="caps">CSS</span> buttons plugin, too</p>
<h3>semantic_form_builder (<a href="http://github.com/nesquena/semantic_form_builder">http://github.com/nesquena/semantic_form_builder</a>)</h3>
<p><span class="caps">HTML</span> forms made easier and semantic.  Also makes the forms easier to style.</p>
<h3>seo_helper (<a href="http://github.com/relevance/seo_helper">http://github.com/relevance/seo_helper</a>)</h3>
<p>A few useful helpers for <span class="caps">SEO</span> purposes.  Create page titles (h1) that match the html title (title), support for meta tags and easily add some breadcrumbs to each page.</p>
<h2>Conclusion</h2>
<p>Like I said before, it is tailored to they way I like things to start out.  You can fork it and change it.  I may not roll you changes back in, but that&#8217;s ok because now you have an starter app just the way you like it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mckinneystation.com/2009/02/22/basejumper-yet-another-starter-application/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Deploying Sinatra Apps on Dreamhost</title>
		<link>http://www.mckinneystation.com/2008/10/09/deploying-sinatra-apps-on-dreamhost/</link>
		<comments>http://www.mckinneystation.com/2008/10/09/deploying-sinatra-apps-on-dreamhost/#comments</comments>
		<pubDate>Fri, 10 Oct 2008 05:22:47 +0000</pubDate>
		<dc:creator>Geoffrey</dc:creator>
				<category><![CDATA[Dallas]]></category>
		<category><![CDATA[Dreamhost]]></category>
		<category><![CDATA[Sinatra]]></category>
		<category><![CDATA[Web Applications]]></category>
		<category><![CDATA[microapps]]></category>

		<guid isPermaLink="false">http://www.mckinneystation.com/?p=86</guid>
		<description><![CDATA[So I LOVE creating small apps as a way of trying out new things.  The problem is that I rarely deploy them anywhere.  Many end up sitting in my /workspace directory until I decide I need to reclaim the space and probably won&#8217;t work on it ever again.
Recently, the Dallas Relevance folks have [...]]]></description>
			<content:encoded><![CDATA[<p>So I LOVE creating <a href="http://www.mckinneystation.com/2008/06/03/microapps-encourage-hacking/">small apps as a way of trying out new things</a>.  The problem is that I rarely deploy them anywhere.  Many end up sitting in my <code>/workspace</code> directory until I decide I need to reclaim the space and probably won&#8217;t work on it ever again.</p>
<p>Recently, the Dallas <a href="http://www.thinkrelevance.com">Relevance</a> folks have been meeting at Panera while we wait for our office space to materialize.  Most of the time everything works out nicely: free wifi, decent coffee, plenty of room to spread out.  But one thing that doesn&#8217;t work correctly while at Panera is <a href="http://tinyurl.com">tinyurl.com</a>.  For some reason, tinyurl is blocked by Panera filters.  This would be fine for most, but since my twitter friends insist on using tinyurl to post links in their tweets, it is annoying not being able to see what is going on.</p>
<h2>Microapp to the Rescue</h2>
<p>So I figured this would be an opportunity for simple little that let me enter the tinyurl, figure out where it was going to redirect to, and go ahead and redirect me there.  This way I am never accessing the evil tinyurl.com directly from the Panera network, but instead letting my little app do that for me.</p>
<p>The app was pretty easy to write.  I used <a href="http://github.com/bmizerany/sinatra">Sinatra</a> and created one &#8220;controller&#8221; and one &#8220;view&#8221;.  Within a few minutes, Sinatra had &#8220;taken the stage on port 4567&#8243; and my app was working.  Locally.</p>
<h2>Give the app a home</h2>
<p>The next challenge came when I tried to deploy it to my trusty <a href="http://www.dreamhost.com">Dreamhost</a> account.  I love Dreamhost for playing around with small apps.  You get <a href="http://dreamhost.com/hosting.html">unlimited domains,</a> they have <a href="http://dreamhost.com/hosting-panel.html">a pretty cool admin control panel</a>, and they support deploying Rails applications with <a href="http://www.modrails.com/">Passenger Phusion</a>.  And since <a href="http://www.modrails.com/documentation/Users%20guide.html#_deploying_a_rack_based_ruby_application">Passenger Phusion 2.0 supports Rack enabled Ruby apps</a>, I knew I should be able to deploy this new app to my Dreamhost account.  A quick search turned up a useful post with <a href="http://www.gittr.com/index.php/archive/deploying-rack-apps-on-dreamhost-via-passenger-including-sinatra/">information on deploying to Sinatra apps on Dreamhost</a>.  Unfortunately, the first attempt didn&#8217;t work.</p>
<h2>Always check the logs</h2>
<p>So I went to the logs to see what went wrong&#8230; wait there weren&#8217;t any logs!  Fortunately I found this post for <a href="http://www.gittr.com/index.php/archive/logging-with-sinatra-and-passenger-another-try/">logging with Sinatra apps</a>.  Unfortunately, the logs didn&#8217;t help.  Apparently, my problem ran deeper.  So like all good debuggers, I started commenting out code and printing out where I was in the app.  The first thing I commented out was the called to render the view using ERB.  Turns out you can configure where the root of the app is located.  Apparently the root path for a Sinatra app running on Dreamhost is not exactly the path where you deployed it.  <code>Sinatra::Application.default_options[:root]</code> looked like this: </p>
<pre><code>/home/.machinename/username/app.domain.com/Rack: /home/.machinename/username</code></pre>
<h2>Additional configuration needed</h2>
<p>Looking through the Sinatra source turned up the needed configuration changes need:</p>
<pre><code>path = "/path/to/app"

Sinatra::Application.default_options.merge!(
  :root =&gt; path,
  :views =&gt; path + '/views',
  :public =&gt; path + '/public',
  :run =&gt; false,
  :env =&gt; :production
)</code></pre>
<p>A quick deploy later and the application was up and running.  Tomorrow we are meeting at Panera and I will get to see what everyone is tweeting about.</p>
<h2>Addendum: Deployment too?</h2>
<p>Since Sinatra apps are so small, you could just copy everything up to the server manually.  But I like have a little Rake task to do that for me.  It just touches the <code>tmp/restart.txt</code> that Passenger uses to know when to restart and then uses rsync to copy the files up to the server.</p>
<pre><code>desc 'Deploy to the server using rsync'
task :restart do
  sh "touch tmp/restart.txt"
end

desc 'Deploy to the server using rsync'
task :deploy =&gt; :restart do
  cmd = "rsync -ruv * #{USERNAME}@#{DOMAIN}:#{DEPLOY_PATH}"
  sh cmd
end</code></pre>
<h2>Take a look at the code</h2>
<p>I have <a href="http://github.com/gdagley/panera">posted the code on Github</a> for everyone to take a look at.  Enjoy.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mckinneystation.com/2008/10/09/deploying-sinatra-apps-on-dreamhost/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Using Google Charts with Rails</title>
		<link>http://www.mckinneystation.com/2008/08/22/using-google-charts-with-rails/</link>
		<comments>http://www.mckinneystation.com/2008/08/22/using-google-charts-with-rails/#comments</comments>
		<pubDate>Fri, 22 Aug 2008 18:10:11 +0000</pubDate>
		<dc:creator>Geoffrey</dc:creator>
				<category><![CDATA[Dreamhost]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Web Applications]]></category>
		<category><![CDATA[googlecharts]]></category>
		<category><![CDATA[microapps]]></category>

		<guid isPermaLink="false">http://www.mckinneystation.com/?p=85</guid>
		<description><![CDATA[With one of my recent microapps, UnscientificPolls.com, I wanted to show the polling data in more interesting ways than just the vote counts.  Charting was the logical conclusion, but how do it was a more difficult decision.
Some of the criteria I had for choosing the charting solution included: ease of use (it is  [...]]]></description>
			<content:encoded><![CDATA[<p>With one of my recent <a href="/2008/06/03/microapps-encourage-hacking/">microapps</a>, <a href="http://www.unscientificpolls.com">UnscientificPolls.com</a>, I wanted to show the polling data in more interesting ways than just the vote counts.  Charting was the logical conclusion, but how do it was a more difficult decision.</p>
<p>Some of the criteria I had for choosing the charting solution included: ease of use (it is  microapp, of course), compatible with shared hosting environment, fast, easy to customize.</p>
<p>Some of the libraries I looked at included: <a href="http://code.google.com/p/flot/">flot with jquery</a>, <a href="http://nubyonrails.com/pages/gruff">gruff</a>, <a href="http://scruffy.rubyforge.org/">scruffy</a>, <a href="http://nubyonrails.com/pages/sparklines">sparklines</a>, and <a href="http://googlecharts.rubyforge.org/">googlecharts</a>.  I settled on the googlecharts library because I didn&#8217;t need the interactive features of <code>flot</code> and I didn&#8217;t want to worry about RMagick needed for <code>gruff</code>, <code>scruffy</code>, or <code>sparklines</code>. </p>
<h2>Google Charts API</h2>
<p>The <a href="http://code.google.com/apis/chart">Google Charts API</a> is an interesting tool that lets you dynamically generate charts using a &#8220;simple&#8221; URL scheme.   The usage policy is very generous too: &#8220;There&#8217;s no limit to the number of calls per day you can make to the Google Chart API.&#8221;</p>
<p>This would allow me to offload the image generation to Google (who supposedly has quite a bit of computing power) and let my application, in a shared hosting environment, focus on collecting votes.</p>
<h2>Enter <em>googlecharts</em></h2>
<p>The challenge with the Google Charts API &#8220;simple&#8221; url scheme is that it would very tedious to have generate it by concatenating the strings together.  Fortunately, Matt Aimonetti built the <code>googlecharts</code> gem for Ruby.  You can get it from <a href="http://www.rubyforge.org">Rubyforge</a> (<code>gem install googlecharts</code>) or <a href="http://www.github.com">Github</a> (<code>gem install mattetti-googlecharts</code>).  </p>
<h2>Installing <em>googlecharts</em> in my Rails App</h2>
<p>With <code>googlecharts</code> installed on my machine I could start using it, by adding it to my <code>config/environment.rb</code> file.</p>
<pre><code>Rails::Initializer.run do |config|
  config.gem "googlecharts", :lib =&gt; "gchart"
end</code></pre>
<p>Since the file we need to include is named &#8220;gchart&#8221;, not &#8220;googlecharts&#8221;, we have to specify the <code>:lib =&gt; "gchart"</code> option.</p>
<p>I also didn&#8217;t want to worry about installing in on the deployment machine, so I unpacked it to the <code>vendor/gems</code> folder using <code>rake gems:unpack</code>.</p>
<h2>Now to the Charts</h2>
<p>Once all that was in place the challenge was getting the data into a format that would be easy to pass to the library.  It turns out, that wasn&#8217;t too challenging either.</p>
<h3>The Helper</h3>
<p>In my view helper module I created a method that would collect the data needed for the chart.</p>
<pre><code>  def pie_chart poll
    @pie_chart ||= {
      :data =&gt; poll.choices.collect(&amp;:votes_count),
      :colors =&gt; poll.choices.collect {|c| c.winner? ? "264409" : "8A1F11" }
    }
  end</code></pre>
<p>This just loops over the choices and collects the needed data and puts it in an easy to use Hash.</p>
<h3>The View</h3>
<pre><code>    &lt;%= Gchart.pie :size =&gt; '240x160',
                   :title =&gt; 'Vote split',
                   :data =&gt; pie_chart(@poll)[:data],
                   :bar_colors =&gt; pie_chart(@poll)[:colors],
                   :format =&gt; 'image_tag' %&gt;</code></pre>
<p>Using googlecharts Gchart made it easy to build the &#8220;simple&#8221; url needed for a pie chart using the Google Charts API (also supports line, scatter, venn, sparklines, and meter charts)  I didn&#8217;t even have to add the <img /> tag because I could pass the <code>:format =&gt; 'image_tag'</code> and one was generated for me.</p>
<h2>Conclusion</h2>
<p>I was extremely happy with how quick and easy it was to get some simple charts into my application (check them out at <a href="http://www.unscientificpolls.com">UnscientificPolls.com</a>).  The response time from Google seems to be as fast as if the images were stored locally. It also saved me the headache of installing with RMagick.  This is definitely a good fit for simple graphs and charts in a Rails application.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mckinneystation.com/2008/08/22/using-google-charts-with-rails/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CSS Mockups for Ads</title>
		<link>http://www.mckinneystation.com/2008/08/15/css-mockups-for-ads/</link>
		<comments>http://www.mckinneystation.com/2008/08/15/css-mockups-for-ads/#comments</comments>
		<pubDate>Fri, 15 Aug 2008 21:43:10 +0000</pubDate>
		<dc:creator>Geoffrey</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Web Applications]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[microapps]]></category>
		<category><![CDATA[wireframing]]></category>

		<guid isPermaLink="false">http://www.mckinneystation.com/?p=84</guid>
		<description><![CDATA[Occasionally I need to mockup where the ads are going to go in an application (it has to pay for itself somehow, right?).  Rather than putting the ads into the application while I am still doing development, I use some simple CSS to put a placeholder where the ads will go.  In Rails, [...]]]></description>
			<content:encoded><![CDATA[<p>Occasionally I need to mockup where the ads are going to go in an application (it has to pay for itself somehow, right?).  Rather than putting the ads into the application while I am still doing development, I use some simple CSS to put a placeholder where the ads will go.  In Rails, it looks like this:</p>
<pre><code>&lt;div class="ads vertical_tower"&gt;
  &lt;% if RAILS_ENV == 'production' -%&gt;
    &lt;script&gt;... Live Ad Code Goes Here &lt;/script&gt;
  &lt;% else -%&gt;
    Ads Go Here
  &lt;% end -%&gt;
&lt;/div&gt;</code></pre>
<p>Then I can use my simple <a href="http://www.mckinneystation.com/ad_templates/index.html">ad template CSS</a> to make it standout.  Check out <a href="http://github.com/gdagley/ad_templates">the css source on Github</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mckinneystation.com/2008/08/15/css-mockups-for-ads/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microapps Encourage Hacking</title>
		<link>http://www.mckinneystation.com/2008/06/03/microapps-encourage-hacking/</link>
		<comments>http://www.mckinneystation.com/2008/06/03/microapps-encourage-hacking/#comments</comments>
		<pubDate>Tue, 03 Jun 2008 14:54:46 +0000</pubDate>
		<dc:creator>Geoffrey</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[RailsConf]]></category>
		<category><![CDATA[SQLite]]></category>
		<category><![CDATA[Sinatra]]></category>
		<category><![CDATA[SliceHost]]></category>
		<category><![CDATA[Web Applications]]></category>
		<category><![CDATA[microapps]]></category>
		<category><![CDATA[mongrel]]></category>
		<category><![CDATA[nginx]]></category>

		<guid isPermaLink="false">http://www.mckinneystation.com/2008/06/03/microapps-encourage-hacking/</guid>
		<description><![CDATA[photo by Jeff Belmonte
I am back from RailsConf 2008 and two of my favorite talks were &#8220;Microapps for Fun and Profit&#8221; by Erik Kastner and &#8220;23 Hacks&#8221; by Nathaniel Talbott.  I have recently been toying around with creating small little apps where I can try out new ideas and sharpen my skills.  
One [...]]]></description>
			<content:encoded><![CDATA[<div class="shadow left"><img src='http://www.mckinneystation.com/wp-content/uploads/2008/06/small_train.jpg' alt='Small Train' /><br/><span class="credit">photo by <a href="http://www.flickr.com/photos/jeffbelmonte/">Jeff Belmonte</a></span></div>
<p>I am back from <a href="http://www.railsconf.com">RailsConf 2008</a> and two of my favorite talks were &#8220;<a href="http://metaatem.net/2008/05/30/my-railsconf-talk">Microapps for Fun and Profit</a>&#8221; by <a href="http://metaatem.net/">Erik Kastner</a> and &#8220;<a href="http://blog.talbott.ws/articles/2008/5/31/23-hacks-railsconf-2008">23 Hacks</a>&#8221; by <a href="http://blog.talbott.ws/">Nathaniel Talbott</a>.  I have recently been toying around with creating small little apps where I can try out new ideas and sharpen my skills.  </p>
<p>One of those apps is the <a href="http://www.templategeneratorpro.com">Template Generator Pro</a>.  It was a really simple little app the generates funny <a href="http://coverletters.templategeneratorpro.com">cover letters</a>, <a href="http://twoweeknotice.templategeneratorpro.com">two week notices</a>, <a href="http://jobs.templategeneratorpro.com">job postings</a>, and more.  Not a lot to it.  What did I learn?  I deployed it to <a href="http://www.slicehost.com">SliceHost</a> (my previous apps have been deployed to <a href="http://dreamhost.com/">DreamHost</a>) and starting learning more about hosting and system administration.  I also had a chance to port the <a href="http://nonsense.sourceforge.net/">Nonsense Perl script</a> to <a href="http://nonsense.rubyforge.org/">a Ruby version</a>.  That was fun!</p>
<h2>Tools of the Trade</h2>
<p>What am I using for my microapps?  The first ones (<a href="http://www.catechizeme.com">CathechizeMe</a> and <a href="http://www.templategeneratorpro.com">TemplateGeneratorPro</a>) were small Rails applications.  But that is alot of overhead and not a lot of &#8220;micro&#8221; in that.  So for new things I am looking at <a href="http://sinatrarb.com/">Sinatra</a> for a framework and <a href="http://stone.rubyforge.org/">Stone</a> or <a href="http://ar.rubyonrails.com/">ActiveRecord</a> with <a href="http://www.sqlite.org/">SQLite</a> for persistance.  I like <a href="http://jquery.com/">JQuery</a> for the Javascript and <a href="http://code.google.com/p/blueprintcss/">BluePrint CSS</a> helps me make it look pretty fairly easily.  <a href="http://www.oswd.org/">Open Source Web Design</a> and <a href="http://www.openwebdesign.org">Open Web Design</a> help to stimulate the creative aspects of the designs.</p>
<h2>Check it Out</h2>
<p>You can see some my little hacks being stored on my GitHub account:  <a href="http://www.github.com/gdagley">http://www.github.com/gdagley</a>. I also have some projects from <a href="http://www.thinkrelevance.com">work</a> at <a href="http://www.github.com/relevance">http://www.github.com/relevance</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mckinneystation.com/2008/06/03/microapps-encourage-hacking/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
