<?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"
	>

<channel>
	<title>Compulsivo</title>
	<atom:link href="http://www.compulsivoco.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.compulsivoco.com</link>
	<description>Ruby on Rails web application design, development and consulting</description>
	<pubDate>Tue, 30 Dec 2008 21:01:14 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.1</generator>
	<language>en</language>
			<item>
		<title>How to Set an Expires Header in Apache</title>
		<link>http://www.compulsivoco.com/2008/12/how-to-set-an-expires-header-in-apache/</link>
		<comments>http://www.compulsivoco.com/2008/12/how-to-set-an-expires-header-in-apache/#comments</comments>
		<pubDate>Tue, 30 Dec 2008 20:40:48 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.compulsivoco.com/?p=197</guid>
		<description><![CDATA[Setting an Expires (or Cache-Control) header in Apache will help speed up your Web site.  We&#8217;re running Apache 2.x, and define an expires header for all of our static assets (images, stylesheets, and scripts).
Just add the following to your &#60;VirtualHost&#62; section of your Apache configuration:
ExpiresActive On
ExpiresByType image/png &#8220;now plus 365 days&#8221;
ExpiresByType image/jpeg &#8220;now plus 365 [...]]]></description>
			<content:encoded><![CDATA[<p>Setting an Expires (or Cache-Control) header in Apache will help speed up your Web site.  We&#8217;re running Apache 2.x, and define an expires header for all of our static assets (images, stylesheets, and scripts).</p>
<p>Just add the following to your &lt;VirtualHost&gt; section of your Apache configuration:</p>
<p style="padding-left: 60px;">ExpiresActive On<br />
ExpiresByType image/png &#8220;now plus 365 days&#8221;<br />
ExpiresByType image/jpeg &#8220;now plus 365 days&#8221;<br />
ExpiresByType image/gif &#8220;now plus 365 days&#8221;<br />
ExpiresByType application/javascript &#8220;now plus 365 days&#8221;<br />
ExpiresByType application/x-javascript &#8220;now plus 365 days&#8221;<br />
ExpiresByType text/javascript &#8220;now plus 365 days&#8221;<br />
ExpiresByType text/css &#8220;now plus 365 days&#8221;</p>
<p>You can read all about expires headers by reading Yahoo!&#8217;s <a href="http://developer.yahoo.com/performance/rules.html#expires" target="_blank">Best Practices for Speeding Up Your Website </a>guide.</p>
<p>Also, be sure to check out our post on how to speed up your Website by <a href="http://www.compulsivoco.com/2008/12/apache-gzip-configuration">Configuring Apache to Gzip Your Components</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.compulsivoco.com/2008/12/how-to-set-an-expires-header-in-apache/feed/</wfw:commentRss>
		</item>
		<item>
		<title>How to Configure Apache to Gzip Your Components</title>
		<link>http://www.compulsivoco.com/2008/12/apache-gzip-configuration/</link>
		<comments>http://www.compulsivoco.com/2008/12/apache-gzip-configuration/#comments</comments>
		<pubDate>Tue, 30 Dec 2008 20:40:42 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.compulsivoco.com/?p=207</guid>
		<description><![CDATA[Compressing your Web components will help speed up your Website.  The majority of your visitors will benefit as most all Web browsers support gzip compression.  You&#8217;ll want to compress all text, which includes html, css, javascript, xml, json, etc.
Apache 2.x uses mod_deflate, and all you need to do is add the following to your &#60;VirtualHost&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>Compressing your Web components will help speed up your Website.  The majority of your visitors will benefit as most all Web browsers support gzip compression.  You&#8217;ll want to compress all text, which includes html, css, javascript, xml, json, etc.</p>
<p>Apache 2.x uses mod_deflate, and all you need to do is add the following to your &lt;VirtualHost&gt; section of your Apache configuration:</p>
<p style="padding-left: 60px;">AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript application/x-javascript<br />
BrowserMatch ^Mozilla/4 gzip-only-text/html<br />
BrowserMatch ^Mozilla/4\.0[678] no-gzip<br />
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html</p>
<p>All you truly need is the first line.  The BrowserMatch lines are there to handle issues with old browsers.</p>
<p>You can read all about gzipping by reading Yahoo!&#8217;s <a href="http://developer.yahoo.com/performance/rules.html#gzip" target="_blank">Best Practices for Speeding Up Your Website</a> guide.</p>
<p>Also, be sure to check out our post on <a href="http://www.compulsivoco.com/2008/12/how-to-set-an-expires-header-in-apache">How to Set an Expires Header in Apache</a>, which will also help speed up your Website.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.compulsivoco.com/2008/12/apache-gzip-configuration/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Announcing Major Enhancements for Prefinery</title>
		<link>http://www.compulsivoco.com/2008/11/major-enhancements-for-prefinery-beta-management-software/</link>
		<comments>http://www.compulsivoco.com/2008/11/major-enhancements-for-prefinery-beta-management-software/#comments</comments>
		<pubDate>Tue, 25 Nov 2008 17:50:43 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
		
		<category><![CDATA[Prefinery]]></category>

		<guid isPermaLink="false">http://www.compulsivoco.com/?p=177</guid>
		<description><![CDATA[Some major enhancements are coming to Prefinery on December 10, 2008.  Here&#8217;s the complete run-down:
Personalized subdomains
Every company account gets a free, personalized subdomain.  In addition to giving you the opportunity to add a bit of branding to the URL, you will now log in to administer your betas using this new subdomain.  For example, if [...]]]></description>
			<content:encoded><![CDATA[<p>Some major enhancements are coming to Prefinery on December 10, 2008.  Here&#8217;s the complete run-down:</p>
<h2 style="padding-left: 30px;">Personalized subdomains</h2>
<p style="padding-left: 30px;">Every company account gets a free, personalized subdomain.  In addition to giving you the opportunity to add a bit of branding to the URL, you will now log in to administer your betas using this new subdomain.  For example, if your subdomain is &#8220;adobe&#8221; you will now log in at http://adobe.prefinery.com/admin</p>
<h2 style="padding-left: 30px;">Separate administrator and tester areas</h2>
<p style="padding-left: 30px;">As an administrator of a beta program, you will log into Prefinery using your personalized subdomain (e.g., http://adobe.prefinery.com/admin) and will interact with a management console.  Testers will access your beta at a separate location and view a unique set of pages that you have customized.</p>
<h2 style="padding-left: 30px;">Complete user interface redesign</h2>
<p style="padding-left: 30px;">The first thing you&#8217;ll notice when you log in is that Prefinery has received a major facelift.  We&#8217;re not talking a nip here and a tuck there.  We mean Prefinery fled to a country without extradition and got a brand new identity.</p>
<h2 style="padding-left: 30px;">Landing / Welcome page</h2>
<p style="padding-left: 30px;">Create a custom landing page for your testers using our easy to use Web page editor.  You don&#8217;t need to know any HTML to create a beautiful welcome page.  We&#8217;ll add generic log in and join links to the page, but the rest of the content is up to you.</p>
<h2 style="padding-left: 30px;">Improved custom branding</h2>
<p style="padding-left: 30px;">When you subscribe to a plan with custom branding, you&#8217;ll be getting a blank slate.  You&#8217;ll have complete control over the content and styling of the page so that you may provide your testers with a familiar experience.  In fact, once you add your logo to the page, testers may not even realize they&#8217;re not on your site.</p>
<h2 style="padding-left: 30px;">Guestbook creation</h2>
<p style="padding-left: 30px;">Specify what contact information is required to be gathered from testers when they join your beta.  Pick from email address, name, address, employer, job title, and telephone.</p>
<h2 style="padding-left: 30px;">Require a survey to join</h2>
<p style="padding-left: 30px;">Require testers to take one of your surveys prior to joining your beta.  Perfect if you want to collect more information than the guestbook supports.  Also a great way to attach a sign up application to your beta.</p>
<h2 style="padding-left: 30px;">Require a survey to download files</h2>
<p style="padding-left: 30px;">Require testers to take one of your surveys prior to downloading a specific file.  Perhaps anyone can download version 1.0, but you want to require the survey &#8220;1.0 Feedback&#8221; prior to downloading version 2.0.</p>
<h2 style="padding-left: 30px;">Sexy survey results</h2>
<p style="padding-left: 30px;">We&#8217;re using a whole new package for our graphs and charts.  They&#8217;re faster, interactive, and look great when sporting your data.</p>
<h2 style="padding-left: 30px;">Bugs, comments consolidated</h2>
<p style="padding-left: 30px;">We&#8217;ve combined bugs and comments.  Prefinery is not competing in the bug tracking and ticket management space.  Plenty of excellent tools already exist.  So, we&#8217;ve merged bugs and comments since both are nothing more than tester feedback.  You&#8217;ll still be able to export the data.</p>
<h2 style="padding-left: 30px;">Plus, dozens of tiny improvements</h2>
<p>We hope you enjoy these additions and enhancements.  We&#8217;d love to hear your feedback!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.compulsivoco.com/2008/11/major-enhancements-for-prefinery-beta-management-software/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Calling Rails Render Partial in a Model or Background Task</title>
		<link>http://www.compulsivoco.com/2008/10/rendering-rails-partials-in-a-model-or-background-task/</link>
		<comments>http://www.compulsivoco.com/2008/10/rendering-rails-partials-in-a-model-or-background-task/#comments</comments>
		<pubDate>Wed, 29 Oct 2008 20:03:39 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.compulsivoco.com/?p=161</guid>
		<description><![CDATA[Why?
You want to store raw HTML in the database for a given model and you want to do this with the ease of partials and not a bunch of nasty string manipulation.
Rails makes this difficult for you by not giving you access to the render method when not called from ActionController.  However, you&#8217;d like to [...]]]></description>
			<content:encoded><![CDATA[<h2>Why?</h2>
<p>You want to store raw HTML in the database for a given model and you want to do this with the ease of partials and not a bunch of nasty string manipulation.</p>
<p>Rails makes this difficult for you by not giving you access to the render method when not called from ActionController.  However, you&#8217;d like to call the partial helper from within a model, or a background task (such as BackgrounDRb or Starling).</p>
<h2>How?</h2>
<p>As an example, let&#8217;s say you have a Page model made up of a <em>title</em> and a <em>body</em>.  You&#8217;d like to cache what a rendered page would look like in the model as the attribute <em>cached_content</em>.</p>
<p><strong>The old way.  This really sucks.</strong></p>
<pre class="syntax-highlight:ruby">
class Page &lt; ActiveRecord::Base

  def write_cache
    the_content = &quot;&lt;div class=&#039;title&#039;&gt;&quot;
    the_content += &quot;&lt;h1&gt;#{self.title}&lt;/h1&gt;&quot;
    the_content += &quot;&lt;/div&gt;&quot;
    the_content += &quot;&lt;div class=&#039;body&#039;&gt;&quot;
    the_content += &quot;#{self.body}&quot;
    the_content += &quot;&lt;/div&gt;&quot;

    self.cached_content = the_content
    self.save
  end

end
</pre>
<p><strong>The new way.  This is so much easier and cleaner.<br />
</strong></p>
<pre class="syntax-highlight:ruby">
class Page &lt; ActiveRecord::Base

  def write_cache
    self.cached_content = ActionView::Base.new(Rails::Configuration.new.view_path).render(:partial =&gt; &quot;pages/show&quot;, :locals =&gt; {:page =&gt; self})
    self.save
  end

end
</pre>
<p><em>app/views/pages/_show.html.erb</em></p>
<pre class="syntax-highlight:html">
&lt;div class=&quot;title&quot;&gt;
  &lt;h1&gt;
    &lt;%= page.title %&gt;
  &lt;/h1&gt;
&lt;/div&gt;

&lt;div class=&quot;body&quot;&gt;
  &lt;%= page.body %&gt;
&lt;/div&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.compulsivoco.com/2008/10/rendering-rails-partials-in-a-model-or-background-task/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Pilot your Project with Cockpit</title>
		<link>http://www.compulsivoco.com/2008/10/pilot-your-project-with-cockpit/</link>
		<comments>http://www.compulsivoco.com/2008/10/pilot-your-project-with-cockpit/#comments</comments>
		<pubDate>Thu, 23 Oct 2008 22:21:35 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.compulsivoco.com/?p=147</guid>
		<description><![CDATA[This past weekend we competed in RailsRumble 2008 - a 48-hour Ruby on Rails programming competition where the goal is to produce a complete application in a weekend.  We partnered with Marcus Mateus of SimpliTex to create Cockpit.
We were tired of constantly logging in to various sites to see key data for the various projects [...]]]></description>
			<content:encoded><![CDATA[<p>This past weekend we competed in <a href="http://railsrumble.com" target="_blank">RailsRumble 2008</a> - a 48-hour Ruby on Rails programming competition where the goal is to produce a complete application in a weekend.  We partnered with Marcus Mateus of <a href="http://www.simplitex.com/" target="_blank">SimpliTex</a> to create <a href="http://www.cockpitapp.com/" target="_blank">Cockpit</a>.</p>
<p>We were tired of constantly logging in to various sites to see key data for the various projects we were working on. While RSS feeds can provide much of the data, digging through RSS feeds doesn’t provide you with a true executive level overview of your project. You really want to see only the most important, relevant, and timely data… and ideally act on it. <a title="Cockpit - Pilot your Project" onclick="javascript:pageTracker._trackPageview ('/outbound/www.cockpitapp.com');" href="http://www.cockpitapp.com/" target="_blank">Cockpit</a> is our answer to this most annoying problem.</p>
<p>In the 48 hours we had for the competition we decided to focus on getting a simple proof of concept view of key data from just four widely used web services. Lots of other sites provide similarly useful data, and full interactivity would be great, but the clock was a tickin’, so we limited our scope to the following:</p>
<ul>
<li><a onclick="javascript:pageTracker._trackPageview ('/outbound/basecamphq.com');" href="http://basecamphq.com/" target="_blank">Basecamp</a> messages, todos and milestones</li>
<li><a onclick="javascript:pageTracker._trackPageview ('/outbound/github.com');" href="http://github.com/" target="_blank">Github</a> source code commits</li>
<li><a onclick="javascript:pageTracker._trackPageview ('/outbound/lighthouseapp.com');" href="http://lighthouseapp.com/" target="_blank">Lighhouse</a> bug tickets</li>
<li><a onclick="javascript:pageTracker._trackPageview ('/outbound/hoptoadapp.com');" href="http://hoptoadapp.com/" target="_blank">Hoptoad</a> exceptions</li>
</ul>
<p>We have high hopes that with the feedback that comes via the competition we will be able to create an application to help rescue all of us from project overload. Over the next 10 days, anyone can <a href="http://railsrumble.com/teams/rubysaurus-rex" target="_blank">vote for Cockpit</a>.  So far we&#8217;re off to a great start.  As of the first day we&#8217;re ranked #10 of 131 in the Usefulness category &#8212; in our opinion the only category that truly matters in the long run.</p>
<p>The competition was a blast, even if tiring. A great big thank you goes out to all the organizers, volunteers, and <a onclick="javascript:pageTracker._trackPageview ('/outbound/railsrumble.com');" href="http://railsrumble.com/sponsors" target="_blank">sponsors</a>.</p>
<p><span style="font-size: 0.9em;"><em>Note: Most of this article was authored by Marcus Mateus and was originally posted to the <a href="http://www.simplitex.com/2008/10/21/cockpit-helps-you-pilot-your-project/" target="_blank">SimpliTex blog</a>.</em></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.compulsivoco.com/2008/10/pilot-your-project-with-cockpit/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Make Your Friends and Family Pay for Your Product</title>
		<link>http://www.compulsivoco.com/2008/09/make-your-friends-and-family-pay-for-your-products/</link>
		<comments>http://www.compulsivoco.com/2008/09/make-your-friends-and-family-pay-for-your-products/#comments</comments>
		<pubDate>Mon, 22 Sep 2008 22:17:06 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
		
		<category><![CDATA[Business]]></category>

		<category><![CDATA[Flashlight]]></category>

		<guid isPermaLink="false">http://compulsivoco.wordpress.com/?p=97</guid>
		<description><![CDATA[&#8220;Sorry, Dad.  No freebies.&#8221;
I created Flashlight for my dad and his fine art photography business, William Britten Photography.  He has been using Flashlight to track his sales and inventory for the past four months.  At first, he was providing valuable feedback.  But, as the site exited the beta stage and became a real product, I [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;<em>Sorry, Dad.  No freebies.</em>&#8221;</p>
<p>I created <a href="http://www.flashlightapp.com" target="_blank">Flashlight</a> for my dad and his fine art photography business, <a href="http://www.williambritten.com/" target="_blank">William Britten Photography</a>.  He has been using Flashlight to track his sales and inventory for the past four months.  At first, he was providing valuable feedback.  But, as the site exited the beta stage and became a real product, I placed an expiration date on his rather lengthy free trial.  The day it ended he emailed me asking for a free account.  I turned him down.</p>
<p>The sales revenue from friends and family is inconsequential.  However, their decision whether to purchase your product, or subscribe to your service, is priceless.</p>
<p>Most feedback is worthless when there&#8217;s no money at stake.  Ask a bunch of people whether they like your product and would pay for it.  Many will say yes.  Now, ask them to pull out their credit card and actually buy it.  Most will change their mind</p>
<p>Your free-loading friends and family are just casual users of your product or service.  They are not invested at all.  However, if you ask them to pay up, and there&#8217;s real money at stake, then they are forced to really evaluate whether your offering is something worth paying for.  If their decision is to not pay, then you must take a step back and analyze why.  You need this validation.</p>
<p>So, tell your friends and family the free trip is over and you want some moolah.  Promise them you won&#8217;t be offended if they are not willing to pay.  Go ahead.  See what they really think.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.compulsivoco.com/2008/09/make-your-friends-and-family-pay-for-your-products/feed/</wfw:commentRss>
		</item>
		<item>
		<title>TableSorter: Filter Results Based on Search Query</title>
		<link>http://www.compulsivoco.com/2008/08/tablesorter-filter-results-based-on-search-string/</link>
		<comments>http://www.compulsivoco.com/2008/08/tablesorter-filter-results-based-on-search-string/#comments</comments>
		<pubDate>Fri, 22 Aug 2008 22:13:44 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<category><![CDATA[javascript]]></category>

		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://compulsivoco.wordpress.com/?p=79</guid>
		<description><![CDATA[So, you want to use the TableSorter jQuery plugin and you want to be able to search the table and filter the results.  Attached is a companion plugin we&#8217;ve written, called tablesorterFilter, which will extend tablesorter to provide real-time filtering of rows which match a search query!
Usage


&#60;script type=&#34;text/javascript&#34;&#62;
jQuery(document).ready(function() {
$(&#34;#myTable&#34;)
.tablesorter({debug: false, widgets: [&#039;zebra&#039;], sortList: [[0,0]]})
.tablesorterFilter({filterContainer: $(&#34;#filter-box&#34;),
filterClearContainer: [...]]]></description>
			<content:encoded><![CDATA[<p>So, you want to use the <a href="http://tablesorter.com/docs/" target="_blank">TableSorter jQuery plugin</a> and you want to be able to search the table and filter the results.  Attached is a companion plugin we&#8217;ve written, called tablesorterFilter, which will extend tablesorter to provide real-time filtering of rows which match a search query!</p>
<h3>Usage</h3>
<pre class="syntax-highlight:jscript">

&lt;script type=&quot;text/javascript&quot;&gt;
jQuery(document).ready(function() {
$(&quot;#myTable&quot;)
.tablesorter({debug: false, widgets: [&#039;zebra&#039;], sortList: [[0,0]]})
.tablesorterFilter({filterContainer: $(&quot;#filter-box&quot;),
filterClearContainer: $(&quot;#filter-clear-button&quot;),
filterColumns: [0],
filterCaseSensitive: false});
});

&lt;/script&gt;
</pre>
<pre class="syntax-highlight:html">
Search: &lt;input name=&quot;filter&quot; id=&quot;filter-box&quot; value=&quot;&quot; maxlength=&quot;30&quot; size=&quot;30&quot; type=&quot;text&quot;&gt;
&lt;input id=&quot;filter-clear-button&quot; type=&quot;submit&quot; value=&quot;Clear&quot;/&gt;

&lt;table id=&quot;myTable&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Last Name&lt;/th&gt;
&lt;th&gt;First Name&lt;/th&gt;
&lt;th&gt;Email&lt;/th&gt;
&lt;th&gt;Web Site&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Smith&lt;/td&gt;
&lt;td&gt;John&lt;/td&gt;
&lt;td&gt;jsmith@gmail.com&lt;/td&gt;
&lt;td&gt;http://www.jsmith.com&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Doe&lt;/td&gt;
&lt;td&gt;Jason&lt;/td&gt;
&lt;td&gt;jdoe@hotmail.com&lt;/td&gt;
&lt;td&gt;http://www.jdoe.com&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</pre>
<h3>Configuration</h3>
<p>tablesorterFilter takes four parameters:</p>
<ul>
<li><strong>filterContainer</strong> - The DOM id of the input box where the user will type the search string.</li>
<li><strong>filterClearContainer</strong> - (optional) The DOM id of the button, image, or whatever which will clear the search string and reset the table to it&#8217;s original, unfiltered state.</li>
<li><strong>filterColumns</strong> - An array of columns, starting at 0, which will be searched.</li>
<li><strong>filterCaseSensitive</strong> - (optional) Boolean stating whether the search string is case sensitive.  The default is false.</li>
</ul>
<h3>Requirements</h3>
<p>jQuery version 1.2.1 or higher and a slightly modified jquery.tablesorter.js version 2.0.3.</p>
<p>The modification to the original tablesorter plugin is the addition of a few lines which will cache all of the rows so they can be searched.  You can download the modified jquery.tablesorter.js code below.</p>
<h3>Download</h3>
<p><a href="http://github.com/jbritten/jquery-tablesorter-filter/tree/master/tablesorter_filter.js" target="_blank">jquery.tablesorter.filter.js</a></p>
<p><a href="http://github.com/jbritten/jquery-tablesorter-filter/tree/master/tablesorter.js" target="_blank">jquery.tablesorter.js 2.0.3</a> (modified for tablesorterFilter)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.compulsivoco.com/2008/08/tablesorter-filter-results-based-on-search-string/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Crowdsourced Design with 99designs and Crowdspring</title>
		<link>http://www.compulsivoco.com/2008/08/crowdsourced-design-with-99designs-and-crowdspring/</link>
		<comments>http://www.compulsivoco.com/2008/08/crowdsourced-design-with-99designs-and-crowdspring/#comments</comments>
		<pubDate>Wed, 20 Aug 2008 20:04:28 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
		
		<category><![CDATA[Design]]></category>

		<guid isPermaLink="false">http://compulsivoco.wordpress.com/?p=68</guid>
		<description><![CDATA[We recently crowdsourced the design of the Flashlight logo, as well as a postcard sized publicity flier. We ran the logo design content on 99designs and the postcard advertisement on Crowdspring, the two leading players in the crowdsourced design space.
For those of you unfamiliar with crowdsourced design, here&#8217;s how it works in a nutshell. Basically, [...]]]></description>
			<content:encoded><![CDATA[<p>We recently <a title="crowdsourced" href="http://en.wikipedia.org/wiki/Crowdsourcing" target="_blank">crowdsourced</a> the design of the <a title="Flashlight" href="http://www.flashlightapp.com" target="_blank">Flashlight</a> logo, as well as a postcard sized publicity flier. We ran the logo design content on <a title="99designs" href="http://www.99designs.com" target="_blank">99designs</a> and the postcard advertisement on <a title="Crowdspring" href="http://www.crowdspring.com" target="_blank">Crowdspring</a>, the two leading players in the crowdsourced design space.</p>
<p>For those of you unfamiliar with crowdsourced design, here&#8217;s how it works in a nutshell. Basically, we used 99designs and Crowdspring to run a design contest where many contributors from around the world submitted entries over a seven day period.  At the end of the contest we picked a winning entry and paid out a bounty.  Throughout the whole process we gave constant feedback to the designers to ensure the designs were moving in the desired direction.  And, it worked!  We ended up with two outstanding designs.</p>
<h4>99designs</h4>
<p>We ran a contest with a $175 bounty for the <a title="Flashlight" href="http://www.flashlightapp.com" target="_blank">Flashlight</a> logo design.  Over a seven day period we got 64 entries from 20 different designers.</p>
<p>99designs charges a flat $39USD to post a contest.  They do not act as a middle-man and handle the transaction between buyer and designer.  At the end of the contest, it&#8217;s up to the parties involved to exchange emails and swap the design for money via PayPal or some other means.</p>
<p>The site is, ironically, bland in design, but its both very usable and fast.  It appears that the site is run by a team of three out of Australia.  At the time of this writing there have been about 17,000 contests run on 99designs, yielding an assumed half-million in revenue for the small company.  Not bad for the short period they&#8217;ve been in business (less than a year we believe).  Plus, from the looks of things, they are bootstrapping their company.  Best of luck and keep up the excellent work!</p>
<h4>Crowdspring</h4>
<p>We posted a $150 bounty for the design of a postcard-sized publicity flier for Flashlight.  Over a week we got 36 entries from 11 different designers.</p>
<p>Crowdspring charges a flat 15% listing fee to run a design contest.  So, we paid them $22.50 to run the contest, and gave $150 to the winning designer.  Unlike 99designs, Crowdspring does act as the middle-man in the transaction and places the bounty in escrow.  This helps the designer feel confident they will get paid, and to ease the minds of contest holders Crowdspring offers a money-back guarantee if you don&#8217;t get at least 25 entries.  We much preferred having this buffer &#8212; it made the entire process of closing the transaction run smoother.</p>
<p>The site is beautifully designed; however, it is very slow.  We&#8217;ll cut them some slack since they&#8217;re new and growing pains are expected.  It appears they&#8217;ve only been around for five months or so, and they definitely don&#8217;t attract the same number of contests or designers &#8230; yet.  The founders handled all of our support tickets.  While they&#8217;re also a small team &#8212; of about six &#8212; they have received a round of funding and it shows.  Everything seems very professional.  Let&#8217;s hope there&#8217;s room for both them and 99designs.</p>
<h4>Closing thoughts</h4>
<p>We got a logo designed for well below what most (decent) design firms would have charged &#8212; and we got to pick from many different creative options.  We got the postcard advertisement for a steal, saving possibly hundreds of dollars.  In both cases we saved money and got better results.  Plus, the money goes directly to the designer, supporting an independent entrepreneur, which makes us feel good.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.compulsivoco.com/2008/08/crowdsourced-design-with-99designs-and-crowdspring/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Introducing Flashlight: Business Intelligence for the Artist, Craftsperson, and Hobbyist</title>
		<link>http://www.compulsivoco.com/2008/07/introducing-flashlight-business-intelligence-for-the-artist-craftsperson-and-hobbyist/</link>
		<comments>http://www.compulsivoco.com/2008/07/introducing-flashlight-business-intelligence-for-the-artist-craftsperson-and-hobbyist/#comments</comments>
		<pubDate>Tue, 29 Jul 2008 17:55:12 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
		
		<category><![CDATA[Flashlight]]></category>

		<category><![CDATA[Announcements]]></category>

		<guid isPermaLink="false">http://compulsivoco.wordpress.com/?p=33</guid>
		<description><![CDATA[Flashlight (www.flashlightapp.com) offers simple and affordable sales trending and inventory management for artists, craftspeople, hobbyists, and other small business owners who need to monitor inventory on hand and track sales trends across product lines.

Quickly input your product lines and corresponding inventory values.  As sales occur, Flashlight maintains inventory amounts and alerts you to inventory shortfalls. [...]]]></description>
			<content:encoded><![CDATA[<h4><a title="Flashlight" href="http://www.flashlightapp.com" target="_blank">Flashlight</a> (<a title="www.flashlightapp.com" href="http://www.flashlightapp.com" target="_blank">www.flashlightapp.com</a>) offers simple and affordable sales trending and inventory management for artists, craftspeople, hobbyists, and other small business owners who need to monitor inventory on hand and track sales trends across product lines.</h4>
<p><a href="http://www.compulsivoco.com/wp-content/uploads/2008/07/montage.png"><img class="aligncenter size-full wp-image-38" src="http://www.compulsivoco.com/wp-content/uploads/2008/07/montage.png" alt="" width="450" height="78" /></a></p>
<p>Quickly input your product lines and corresponding inventory values.  As sales occur, Flashlight maintains inventory amounts and alerts you to inventory shortfalls. Flashlight also tracks sales across product lines and produces a custom set of charts and tables that provide a visual explanation of sales data.  So, whether it&#8217;s clothes, art, jewelry, or something else you&#8217;re creating, Flashlight will show you which products are selling and when. Use this knowledge to make tweaks to your business and become more efficient and profitable!</p>
<p>Spreadsheets are a pain to write and maintain, especially if you&#8217;ve written any formulas, and other inventory management software is expensive and overly complicated.  Flashlight is a perfect replacement for these undesirable solutions.</p>
<p>Flashlight is intuitive and easy to learn.  Flashlight is streamlined and simple, targeted to do a clearly defined task very efficiently.</p>
<p>Flashlight is internet-based and always accessible, online.  You can adjust your inventory or view your sales trends from anywhere: home, retail store, or on the road.</p>
<p>To learn more, visit <a title="www.flashlightapp.com" href="http://www.flashlightapp.com" target="_blank">www.flashlightapp.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.compulsivoco.com/2008/07/introducing-flashlight-business-intelligence-for-the-artist-craftsperson-and-hobbyist/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Inline jQuery datePicker and Rails</title>
		<link>http://www.compulsivoco.com/2008/06/inline-jquery-datepicker-and-rails/</link>
		<comments>http://www.compulsivoco.com/2008/06/inline-jquery-datepicker-and-rails/#comments</comments>
		<pubDate>Thu, 26 Jun 2008 14:52:26 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
		
		<category><![CDATA[Programming]]></category>

		<category><![CDATA[jquery]]></category>

		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://compulsivoco.wordpress.com/?p=16</guid>
		<description><![CDATA[This post describes how to use the jQuery datePicker plugin (found here) to display an inline calendar and post the selected date back to your Rails app.  I&#8217;m simply going to put a hidden text_field on the page and use a bit of javascript to populate the field with the selected date.
Grab the datePicker plugin [...]]]></description>
			<content:encoded><![CDATA[<p>This post describes how to use the jQuery datePicker plugin (found <a href="http://plugins.jquery.com/project/datepicker">here</a>) to display an inline calendar and post the selected date back to your Rails app.  I&#8217;m simply going to put a hidden text_field on the page and use a bit of javascript to populate the field with the selected date.</p>
<p>Grab the datePicker plugin from <a href="http://plugins.jquery.com/project/datepicker">http://plugins.jquery.com/project/datepicker</a>, and include it in your Rails app.</p>
<p>Get an inline datePicker set up by following the author&#8217;s instructions at <a href="http://www.kelvinluck.com/assets/jquery/datePicker/v2/demo/inlineDatePicker.html">http://www.kelvinluck.com/assets/jquery/datePicker/v2/demo/inlineDatePicker.html</a>.  Quite simply, you only need to do two things.</p>
<p>One: Add this to your .html.erb page:</p>
<pre class="syntax-highlight:html">
&lt;div id=&quot;date-picker&quot;&gt;&lt;/div&gt;
</pre>
<p>Two: To the same .html.erb page, add this bit of jQuery to turn the the div into an inline datePicker:</p>
<pre class="syntax-highlight:javascript">
&lt;script type=&quot;text/javascript&quot;&gt;
$(&#039;#date-picker&#039;).datePicker({inline:true});
&lt;/script&gt;
</pre>
<p>At this point you should see the datePicker on your page.  It should look something like:<br />
<a href="http://www.compulsivoco.com/wp-content/uploads/2008/06/datepicker.png"><img class="alignnone size-medium wp-image-19" src="http://www.compulsivoco.com/wp-content/uploads/2008/06/datepicker.png?w=180" alt="Example of datePicker" width="180" height="170" /></a></p>
<p>Now, let&#8217;s put a text_field in your form to keep the date.  Here&#8217;s what I&#8217;ve got:</p>
<pre class="syntax-highlight:ruby">
&lt;% form_for(@event) do |f| %&gt;
&lt;fieldset&gt;
&lt;label for=&quot;occurred_on&quot;&gt;Date event occurred:&lt;/label&gt;
&lt;%= f.text_field &#039;occurred_on&#039; %&gt;

&lt;%= f.submit &quot;Save&quot; %&gt;
&lt;/fieldset&gt;
&lt;% end %&gt;
</pre>
<p>We need to catch the user&#8217;s selected date and populate our text_field.  To do this, we need to modify the bit of jQuery we used to set up the inline datePicker.  We need to bind the action of selecting a date to a javascript function which will populate the text_field.  Return to your .html.erb file and replace the jQuery with:</p>
<pre class="syntax-highlight:javascript">
&lt;script type=&quot;text/javascript&quot;&gt;
$(&#039;#date-picker&#039;).datePicker({inline:true})
.bind(
&#039;dateSelected&#039;,
function(e, selectedDate, $td)
{
$(&#039;#event_occurred_on&#039;).val(selectedDate.asString());
}
);
&lt;/script&gt;
</pre>
<p>Finally, since you probably don&#8217;t want your users to see the text_field, just change it to a hidden_field.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.compulsivoco.com/2008/06/inline-jquery-datepicker-and-rails/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
