<?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>Room 118 Solutions</title>
	<atom:link href="http://room118solutions.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://room118solutions.com</link>
	<description>Web Application Development &#38; Programming</description>
	<lastBuildDate>Tue, 13 Dec 2011 17:22:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>SD Times &#8211; Software engineering: Art or science?</title>
		<link>http://room118solutions.com/2011/11/08/sd-times-software-engineering-art-or-science/</link>
		<comments>http://room118solutions.com/2011/11/08/sd-times-software-engineering-art-or-science/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 22:30:43 +0000</pubDate>
		<dc:creator>Chris Gunther</dc:creator>
				<category><![CDATA[Mentions]]></category>

		<guid isPermaLink="false">http://room118solutions.com/?p=319</guid>
		<description><![CDATA[I was recently interviewed for an SD Times article about the role of art and science in software development. Chris Gunther, cofounder and developer at Room 118 Solutions, agreed with Jacobson. “I believe software development is not an art, but &#8230; <a href="http://room118solutions.com/2011/11/08/sd-times-software-engineering-art-or-science/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I was recently interviewed for an SD Times article about the role of art and science in software development.</p>
<blockquote><p>Chris Gunther, cofounder and developer at Room 118 Solutions, agreed with Jacobson.</p>
<p>“I believe software development is not an art, but rather a craft as it is ultimately defined by its ability to solve a need for an end user,&#8221; he said. &#8220;Beautifully written code doesn&#8217;t count for much when it fails to solve the needs of the end user, and vice versa; poorly written code will have little negative effect on the end user when it successfully solves their needs.</p>
<p>&#8220;I think the craft side of software development becomes more of a necessity when working alongside other developers. Code that clearly reflects the domain model and is well organized becomes self-documenting and allows fellow developers to collaborate and understand the domain much easier.&#8221;</p>
<p>Gunther believed that science plays a role in development, but mainly due to the experiments used to find the perfect combination of code and the fact that developers are always building on top of older theories and ideas.</p></blockquote>
<p><a title="Software engineering: Art or science?" href="http://sdt.bz/content/article.aspx?ArticleID=36088">Read the full article</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://room118solutions.com/2011/11/08/sd-times-software-engineering-art-or-science/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RVM/Capistrano: rvm-shell not found</title>
		<link>http://room118solutions.com/2011/08/04/rvmcapistrano-rvm-shell-not-found/</link>
		<comments>http://room118solutions.com/2011/08/04/rvmcapistrano-rvm-shell-not-found/#comments</comments>
		<pubDate>Thu, 04 Aug 2011 22:15:12 +0000</pubDate>
		<dc:creator>Jim Ryan</dc:creator>
				<category><![CDATA[Deployment]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Rails]]></category>

		<guid isPermaLink="false">http://room118solutions.com/?p=286</guid>
		<description><![CDATA[If you&#8217;re trying to deploy with Capistrano to a server you just set up, and it fails with an error like this: rvm-shell: No such file or directory Then you probably have a newer version of RVM on your new &#8230; <a href="http://room118solutions.com/2011/08/04/rvmcapistrano-rvm-shell-not-found/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re trying to deploy with Capistrano to a server you just set up, and it fails with an error like this:</p>
<p><code>rvm-shell: No such file or directory</code></p>
<p>Then you probably have a newer version of RVM on your new server than on your development machine.  <a href="https://rvm.beginrescueend.com/rvm/upgrading/">Update RVM</a> and go on your way.  Hope this saves someone some frustration!</p>
<p>Jim</p>
]]></content:encoded>
			<wfw:commentRss>http://room118solutions.com/2011/08/04/rvmcapistrano-rvm-shell-not-found/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Stubbing Paperclip During Testing</title>
		<link>http://room118solutions.com/2011/05/25/stubbing-paperclip-during-testing/</link>
		<comments>http://room118solutions.com/2011/05/25/stubbing-paperclip-during-testing/#comments</comments>
		<pubDate>Wed, 25 May 2011 21:46:23 +0000</pubDate>
		<dc:creator>Jim Ryan</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Rails]]></category>

		<guid isPermaLink="false">http://room118solutions.com/?p=270</guid>
		<description><![CDATA[For those of you working with the wonderful paperclip gem, you probably know how slow it can make your test suite. Hitting the FS in every test that creates an object that requires an attachment is slow and unnecessary. Here&#8217;s &#8230; <a href="http://room118solutions.com/2011/05/25/stubbing-paperclip-during-testing/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img alt="" src="http://mthruf.files.wordpress.com/2011/04/job-fails-no-thanks-clippy-ive-got-this-one-covered.jpg" title="Clippy Says You&#039;re Wasting Company Time" class="alignnone" width="500" height="375" /><br />
For those of you working with the wonderful <a href="https://github.com/thoughtbot/paperclip">paperclip</a> gem, you probably know how slow it can make your test suite.  Hitting the FS in every test that creates an object that requires an attachment is slow and unnecessary.  Here&#8217;s what we&#8217;re doing to keep Paperclip from actually saving any files we pass to it:<br />
<span id="more-270"></span></p>
<pre class="brush: ruby; title: spec/support/stub_paperclip_attachments.rb; notranslate">
module Paperclip
  class Attachment
    def save
      @queued_for_delete = []
      @queued_for_write = {}
      true
    end

  private
    def post_process_styles
      true
    end
  end
end

class File
  def to_tempfile
    Class.new do
      def size
        # We're using this because it's the size of our sample Rails image, although it doesn't matter for us.
        # If you're not validating the attachment size, any integer should work for you.
        6646
      end
      def read
        &quot;&quot;
      end
    end.new
  end
end
</pre>
<p>Just make sure that&#8217;s loaded somewhere before your tests run, we&#8217;re using RSpec, so we stuck it in spec/support.  Our test suite went from taking a painful 90 seconds to run, down to a blazingly fast 10! </p>
<p>Happy (fast) testing!</p>
<p>Jim</p>
]]></content:encoded>
			<wfw:commentRss>http://room118solutions.com/2011/05/25/stubbing-paperclip-during-testing/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Styling Print Headers and Footers With CSS</title>
		<link>http://room118solutions.com/2011/03/31/styling-print-headers-and-footers-with-css/</link>
		<comments>http://room118solutions.com/2011/03/31/styling-print-headers-and-footers-with-css/#comments</comments>
		<pubDate>Fri, 01 Apr 2011 00:22:38 +0000</pubDate>
		<dc:creator>Chris Gunther</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[printing]]></category>

		<guid isPermaLink="false">http://room118solutions.com/?p=237</guid>
		<description><![CDATA[Last week I was tasked with porting a couple of reports for a client from Crystal Reports to HTML/CSS, so I thought I&#8217;d document my trials here. Luckily because this was running on a server and the printing was initiated &#8230; <a href="http://room118solutions.com/2011/03/31/styling-print-headers-and-footers-with-css/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://room118solutions.com/wp-content/uploads/2011/03/invoice.jpg"><img class="alignleft size-full wp-image-263" title="invoice" src="http://room118solutions.com/wp-content/uploads/2011/03/invoice.jpg" alt="" width="180" height="240" /></a>Last week I was tasked with porting a couple of reports for a client from Crystal Reports to HTML/CSS, so I thought I&#8217;d document my trials here. Luckily because this was running on a server and the printing was initiated on the server side, I was able to focus just on one browser (Internet Explorer 8) rather than ensuring wide cross-browser compatibility.<span id="more-237"></span></p>
<h1>The Goal</h1>
<p>Generate an invoice with a header repeated at the top of every page and with a footer fixed to the bottom of only the last page. Here&#8217;s a quick round up of the approaches I tried.</p>
<h2>Position: Fixed</h2>
<p>According to the <a href="http://www.w3.org/TR/2010/WD-CSS2-20101207/visuren.html#positioning-scheme">CSS 2.1 specification</a>, &#8220;In the case of the print media type, the box is rendered on every page, and is fixed with respect to the page box&#8230;&#8221;. This would work for the header, but since the box is taken out of the normal flow, so you&#8217;ll need to account for that so it doesn&#8217;t overlay your content. If your header/footer is a variable height, this is less than ideal.</p>
<h2>Table Based Layout</h2>
<p>According to the <a href="http://www.w3.org/TR/html4/struct/tables.html#edef-THEAD">HTML4 specification</a>, &#8220;the table head and foot information may be repeated on each page that contains table data.&#8221; This works great for the header, but in my case, didn&#8217;t fit the bill as the footer needed to display on the last page only. Internet Explorer 8 supports this splendidly, unfortunately the same can&#8217;t be said for some other browsers we typically consider to be superior (see below).</p>
<h2>Position: Absolute</h2>
<p>The CSS 2.1 specification makes no mention of how absolutely positioned boxes should be handled in the case of the print media type. In the case of Internet Explorer 8, it seems that the box will be absolutely positioned with respect to the page upon which it would render based on it&#8217;s location in the HTML. For example, making the footer one of the last elements in the HTML document allowed the footer to be absolutely positioned to the bottom of the last page, which for my case was perfect.</p>
<p>One caveat to watch for is that because absolute positioning removes the box from the flow of the document, if your content takes 90% of the page and the footer takes 20% of the page, you will have 10% where the footer overlays the content. Since my footer was a variable height, I solved this by duplicating the footer element, keeping the second occurrence as absolutely positioned, however changing the first occurrence to static positioning (to stay in the flow of the document) but setting <code>visibility: hidden;</code> so that it will maintain it&#8217;s dimensions yet not be visible. Given the same 90%/20% example from above, this solution causes the document to break to two pages, having all the content on one page and the footer fixed to the bottom of the second page.</p>
<h1>Browser Support</h1>
<p>Running the same report through the array of browsers I have installed locally, here&#8217;s a quick summary of my results.</p>
<p><span style="text-decoration: underline;">Chrome 12</span> - Webkit doesn&#8217;t seem to support repeating <code>thead</code>/<code>tfoot</code> elements on each page (<a href="https://bugs.webkit.org/show_bug.cgi?id=17205">Bug 17205</a> and <a href="https://bugs.webkit.org/show_bug.cgi?id=34218">Bug 34218</a>). Also treats absolutely positioned elements as if they were statically positioned, so the footer just follows directly after the content.</p>
<p><span style="text-decoration: underline;">Safari 5</span> &#8211; Since it&#8217;s WebKit based, like Chrome, suffers same problems above.</p>
<p><span style="text-decoration: underline;">Firefox 4</span> - Firefox gets the repeating <code>thead</code> right, however the footer is placed at the bottom of the first page even thought it is one of the last elements in the source order.</p>
<p><span style="text-decoration: underline;">Opera 11</span> - Opera doesn&#8217;t support repeating the <code>thead</code> element on each page, and like Firefox, renders the absolutely positioned footer at the bottom of the first page as opposed to the last.</p>
<p><span style="text-decoration: underline;">Internet Explorer 9</span> &#8211; IE9 properly repeats the <code>thead</code> element on each page, however unlike IE8, it puts the footer at the bottom of the first page as opposed to the last.</p>
<h1>Summary</h1>
<p>Using a combination of table based layout and absolute positioning I was able to achieve exactly the result that was required in Internet Explorer 8. CSS3 looks like it will be giving some attention to the print media type, so it will be interesting to watch that develop. Given the wide range of how the same report renders with the print media type in different browsers, creating a very precise report that renders identically is more of a dream at this point. Focusing on one browser if you can, or possibly using a server side component to generate a PDF would be a much better approach to achieve cross-browser consistency.</p>
<p><em>Photo by <a href="http://www.flickr.com/photos/bjmccray/3737123591/">bjmccray</a></em></p>
]]></content:encoded>
			<wfw:commentRss>http://room118solutions.com/2011/03/31/styling-print-headers-and-footers-with-css/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Our Small-Business-In-The-Cloud Boilerplate &#8211; Part II: Internal</title>
		<link>http://room118solutions.com/2011/02/14/our-small-business-boilerplate-ii/</link>
		<comments>http://room118solutions.com/2011/02/14/our-small-business-boilerplate-ii/#comments</comments>
		<pubDate>Mon, 14 Feb 2011 14:00:18 +0000</pubDate>
		<dc:creator>Jim Ryan</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[dropbox]]></category>
		<category><![CDATA[intuit]]></category>
		<category><![CDATA[lastpass]]></category>
		<category><![CDATA[passwords]]></category>
		<category><![CDATA[payroll]]></category>
		<category><![CDATA[slicehost]]></category>
		<category><![CDATA[VPS]]></category>

		<guid isPermaLink="false">http://room118solutions.com/?p=84</guid>
		<description><![CDATA[This is the second half of my series on the services we use here at Room 118 to operate efficiently and entirely in the cloud.  If you missed Part I, check it out for a list of services we use to interact &#8230; <a href="http://room118solutions.com/2011/02/14/our-small-business-boilerplate-ii/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-140" title="Cloud Streets" src="http://room118solutions.com/wp-content/uploads/2011/02/cloud_streets-300x210.jpg" alt="" width="300" height="210" />This is the second half of my series on the services we use here at Room 118 to operate efficiently and entirely in the cloud.  If you missed <a href="http://room118solutions.com/2011/02/04/our-small-business-boilerplate/" target="_self">Part I</a>, check it out for a list of services we use to interact with our customers.  Now, on to Part II, the services we use internally to manage our business.</p>
<p><em><span id="more-84"></span>Most of the services listed below are free, offer free trials, or offer a free &#8220;basic&#8221; package &#8211; so if you&#8217;re a small startup with little cash, this will get you up and running with a solid cloud-based infrastructure with very little upfront cost.</em></p>
<p><em><strong>Note</strong>: Links marked with <img title="Affiliate link icon" src="http://room118solutions.com/wp-content/uploads/2011/02/affiliate-icon.png" alt="" width="16" height="15" /> are affiliate links.  Depending on the program, this means we either receive a discount in services or a commission if you register.  Your rates will remain the same whether or not you use our affiliate link.  Thanks for supporting us!</em></p>
<hr />
<p style="text-align: center;"><a href="http://www.Dropbox.com" target="_blank"></a><a href="http://www.Dropbox.com" target="_blank"><img class="size-medium wp-image-144  aligncenter" title="Dropbox Logo" src="http://room118solutions.com/wp-content/uploads/2011/02/dropbox-logo-300x101.png" alt="" width="300" height="101" /></a></p>
<p><strong>Service</strong>: <a href="http://www.Dropbox.com" target="_blank">Dropbox</a><br />
<strong>What we use it for</strong>: Keeping business documents and customer data in sync<br />
<strong>Cost</strong>: Free for 2GB; pay plans starting at 50GB for 9.99/month<br />
<strong>Why we love it</strong>: We receive the latest designs for a project, Chris drops them somewhere in our shared Dropbox folder, I have virtually instant access to them on my Linux desktop, Android phone, and iPad.  Enough said.  It stays out of our way, does its job well, securely (all files are encrypted), and supports just about every operating system and mobile device under the sun.<br />
<strong>Caveat</strong>: Shared folders use space in everyone&#8217;s Dropbox account, so two 2GB accounts doesn&#8217;t equal 4GB of shared space.  If you need a lot of data storage, it could be pricey for a team, because 50GB would cost (number of team members) x $9.99/month.  If you require a lot of space and need to share it with a team, check out <a href="https://www.jungledisk.com/business/" target="_blank">JungleDisk</a>.  We&#8217;ve never used them, but have them bookmarked for when we inevitably run out of room in our Dropbox accounts.</p>
<hr />
<p style="text-align: center;"><a href="https://manage.slicehost.com/customers/new?referrer=7a9932a50b21858efa68036d1177b32b" target="_blank"><img class="size-full wp-image-132  aligncenter" title="Slicehost Logo" src="http://room118solutions.com/wp-content/uploads/2011/02/slicehost-logo-300x156.jpg" alt="" width="300" height="156" /></a></p>
<p><strong>Service</strong>: <a href="https://manage.slicehost.com/customers/new?referrer=7a9932a50b21858efa68036d1177b32b" target="_blank">Slicehost</a> <em><img title="Affiliate link icon" src="http://room118solutions.com/wp-content/uploads/2011/02/affiliate-icon.png" alt="" width="16" height="15" /></em><br />
<strong>What we use it for</strong>:  Hosting our website, our git repos, and our customers&#8217; development sites<br />
<strong>Cost</strong>:  Plans start at $20/month<br />
<strong>Why we love it</strong>: They&#8217;re a dependable and flexible VPS provider.   Their management interface is slick, and their uptime is superb.  This recommendation obviously only applies to other development teams, or the very technically inclined, but I had to mention them nonetheless.  If you&#8217;re just looking for a basic shared web host, check out <a href="http://www.a2hosting.com/2905.html" target="_blank">A2 Hosting</a> <img title="Affiliate link icon" src="http://room118solutions.com/wp-content/uploads/2011/02/affiliate-icon.png" alt="" width="16" height="15" />, we have a lot of love for them, too.<br />
<strong>Caveat</strong>:  The storage included with each plan is small compared to their competitors.  If you expect to need a lot of storage, and don&#8217;t want to hand it off to another service, like <a href="http://aws.amazon.com/s3/" target="_blank">Amazon S3</a>, then Slicehost could become a pretty expensive solution, pretty quick.</p>
<hr />
<p style="text-align: center;"><a href="http://payroll.intuit.com/payroll_services/online_payroll.jsp?priorityCode=3969702399&amp;kbid=16760&amp;img=quickbooks/QB_IOP_T_Buttons_V2_125x125.gif&amp;sub=" target="_blank"><img class="size-medium wp-image-133  aligncenter" title="Intuit Logo" src="http://room118solutions.com/wp-content/uploads/2011/02/intuit-inc-300x131.jpg" alt="" width="300" height="131" /></a></p>
<p><strong>Service</strong>: <a href="http://payroll.intuit.com/payroll_services/online_payroll.jsp?priorityCode=3969702399&amp;kbid=16760&amp;img=quickbooks/QB_IOP_T_Buttons_V2_125x125.gif&amp;sub=" target="_blank">PayCycle</a> (now Intuit Online Payroll) <img title="Affiliate link icon" src="http://room118solutions.com/wp-content/uploads/2011/02/affiliate-icon.png" alt="" width="16" height="15" /><br />
<strong>What we use it for</strong>: Payroll<br />
<strong>Cost</strong>:  Free for 30 days, then $39/month for state and federal filings and $1.50/employee (the first one is included)<br />
<strong>Why we love it</strong>:  They&#8217;re reasonably priced and once you have your account set up, running payroll is easy.  They electronically file the necessary forms to the IRS and your state government, EFT your taxes to them, and direct deposit your employees.  Most payroll companies provide the same basic services, so it comes down to cost and the quality of their web app.  PayCycle&#8217;s is nice, and they e-mail us when we have to do something, sort of like an annoying accountant, without the expense.  If your bank offers payroll services, you might as well go with them, especially of it&#8217;s Bank of America, their payroll app is slick.<br />
<strong>Caveat</strong>:  Your payroll service will only do what you tell it to, meaning you have to have some sense of what your responsibilities are, which vary depending on your type of business entity and where you&#8217;re located.  PayCycle has some very friendly support, which can point you in the right direction, and they also have some well written articles to get you started.  Google, the IRS, and your state government&#8217;s website are your friends.</p>
<hr />
<p style="text-align: center;"><a href="http://lastpass.com/" target="_blank"><img class="size-medium wp-image-134  aligncenter" title="LastPass Logo" src="http://room118solutions.com/wp-content/uploads/2011/02/LastPassLogo822x100-300x36.gif" alt="" width="300" height="36" /></a></p>
<p><strong>Service</strong>: <a href="http://lastpass.com/" target="_blank">LastPass</a><br />
<strong>What we use it for</strong>: Keeping our many credentials in sync and secure<br />
<strong>Cost</strong>:  Free; $1/month for premium<br />
<strong>Why we love it</strong>: Shortly after you start running your business in the cloud, you&#8217;re going to realize you have more passwords than you can handle.  Where do you store them?  You don&#8217;t want to use the same password for every service.  How do you securely share them with your partner(s)?  In addition to the credentials for every service pertaining to the company, if you&#8217;re in our line of work, you&#8217;ve also got a whole slew of credentials for your customers.  LastPass will manage all of these and sync them everywhere you have LastPass installed.  It&#8217;ll automatically fill out login forms for you, let you store &#8220;secure notes&#8221; (i.e. access information for services other than websites, or the answers to your security questions), and it has plugins for every popular browser and platform.<br />
<strong>Caveat</strong>:  The only thing standing in between that Nigerian hacker and every single password related to your business is your LastPass master password, so try to come up with something better than &#8220;password&#8221;.  No, not &#8220;password123&#8243; either.</p>
<hr />That concludes this mini-series, you should now be well on your way to setting up a solid infrastructure for running your business.  Using these services, you&#8217;ll be spending less time managing your business, and more time doing what you love &#8212; which is why you started your business in the first place!  The view is nice from the cloud, isn&#8217;t it?</p>
]]></content:encoded>
			<wfw:commentRss>http://room118solutions.com/2011/02/14/our-small-business-boilerplate-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu 10.10 Server + GRUB + GPT Partitions</title>
		<link>http://room118solutions.com/2011/02/08/ubuntu-10-10-server-grub-gpt-partitions/</link>
		<comments>http://room118solutions.com/2011/02/08/ubuntu-10-10-server-grub-gpt-partitions/#comments</comments>
		<pubDate>Tue, 08 Feb 2011 21:13:51 +0000</pubDate>
		<dc:creator>Jim Ryan</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[gpt]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://room118solutions.com/?p=162</guid>
		<description><![CDATA[So, I ran into a peculiar problem while trying to get my homebuilt 4TB NAS up and running last night.  I bought two 2TB SATA drives, and sourced everything else from my old computer boneyard (i.e. my closet).  The issue &#8230; <a href="http://room118solutions.com/2011/02/08/ubuntu-10-10-server-grub-gpt-partitions/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="size-medium wp-image-202      alignleft" title="Ubuntu Logo" src="http://room118solutions.com/wp-content/uploads/2011/02/UbuntuLogo-300x78.png" alt="" width="300" height="78" />So, I ran into a peculiar problem while trying to get my homebuilt 4TB NAS up and running last night.  I bought two 2TB SATA drives, and sourced everything else from my old computer boneyard (i.e. my closet).  The issue I was having was the Ubuntu 10.10 Server installer kept failing when trying to install GRUB.  I eventually tracked this down to an issue installing GRUB to GPT partitions (GRUB <a href="http://grub.enbug.org/BIOS_Boot_Partition" target="_blank">requires a BIOS boot partition</a>).  Since I&#8217;m running a small 5GB partition in RAID1 for Ubuntu, and the rest of the disks (~4TB) in RAID0, I&#8217;m exceeding the partition size limitations of MBR, and thus need to use GPT.  Fine.  The issue is that the Ubuntu installer seems to be unaware of how to handle this situation.  Long story short, here&#8217;s what you need to do when yours fails:</p>
<p style="text-align: left;"><span id="more-162"></span></p>
<ol>
<li>Switch to a virtual console (ctrl + alt + F2)</li>
<li>Chroot into your new Ubuntu environment (the GRUB install happens towards the very end, so Ubuntu is more or less set up at this point).  For this example, let&#8217;s assume your root is /dev/md0, and it&#8217;s a RAID1 array consisting of partitions on /dev/sda and /dev/sdb.  Adjust accordingly.<br />
<code># mkdir /mnt/ubuntu</code><br />
<em>Update: A few people have mentioned that their fs is not mounted at this point, and it appears that I did miss that step (*smacks head*), sorry about that!  I&#8217;m writing this next line from memory, I need to run through this again to test, but your RAID array should be up and running at this stage, so simply mounting it to your new /mnt/ubuntu directory will work.  Replace the &#8216;x&#8217; in mdX with the number of the array / resides on (0 in my case).</em><br />
# mount /dev/mdX /mnt/ubuntu<br />
# mount -o bind /dev /mnt/ubuntu/dev<br />
# chroot /mnt/ubuntu /bin/bash</code></li>
<li>Now you'll be at a BASH prompt, chroot'd into your fresh Ubuntu install.  Let's fire up GNU parted and get the first disk going.<br />
<code>root@host:/# parted /dev/sda</code></li>
<li>Hopefully, Ubuntu started the first partition of each drive at least 32kiB in, giving us enough room to stick a BIOS boot partition on each drive.  If not, you'll need to use parted to recreate your entire partition table, then restart the installation, and let the Ubuntu install work with <em>your </em>partition structure (i.e. don't let it make its own).<br />
<code>(parted) mkpart grub 0 1MB</code><br />
Ignore whatever warning it gives you, and/or accept whatever rounded partition boundaries it gives you.</li>
<li>Now we need to set the grub_boot flag on that partition.  Let's find out what partition number it is<br />
<code>(parted) print</code><br />
Replace &lt;part number&gt; with the partition number for the topmost partition.<br />
<code>(parted) set &lt;part number&gt; bios_grub on</code></li>
<li>That's it.  Quit parted.<br />
<code>(parted) quit</code></li>
<li>Repeat from step 3 for your other drive(s)</li>
<li>Now that you've created a BIOS boot partition on each drive in the array, we can clean up and continue with the install.<br />
<code>root@host:/# exit<br />
# umount /mnt/ubuntu/dev<br />
# umount /mnt/ubuntu<br />
# exit</code></li>
<li>Switch back to the first console, where the installer is running (ctrl + alt + F1) and try to re-run the grub install.  If it fails again, you can mount the new system again, chroot back into it (step 2), and run grub-install on both drives (i.e. 'grub-install /dev/sda' and 'grub-install /dev/sdb').  This should get you back on track.  Worst case scenario, you may need to restart the Ubuntu install, just have it leave your partition table alone, and the GRUB install will go smoothly.</li>
</ol>
<p><code><br />
</code><br />
Hopefully this saves you several late-night hours.</p>
]]></content:encoded>
			<wfw:commentRss>http://room118solutions.com/2011/02/08/ubuntu-10-10-server-grub-gpt-partitions/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Our Small-Business-In-The-Cloud Boilerplate &#8211; Part I: External</title>
		<link>http://room118solutions.com/2011/02/07/our-small-business-boilerplate/</link>
		<comments>http://room118solutions.com/2011/02/07/our-small-business-boilerplate/#comments</comments>
		<pubDate>Mon, 07 Feb 2011 19:04:03 +0000</pubDate>
		<dc:creator>Jim Ryan</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[37signals]]></category>
		<category><![CDATA[basecamp]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[freshbooks]]></category>
		<category><![CDATA[google apps]]></category>

		<guid isPermaLink="false">http://room118solutions.com/?p=69</guid>
		<description><![CDATA[When Chris and I formed Room 118 Solutions one year ago, we didn&#8217;t really know how we were going to run a business from our home offices.  We didn&#8217;t even know what was involved in running a corporation (an S-corp, &#8230; <a href="http://room118solutions.com/2011/02/07/our-small-business-boilerplate/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="size-medium wp-image-75 alignleft" title="Cloud" src="http://room118solutions.com/wp-content/uploads/2011/02/small-business-server-cloud-300x225.jpg" alt="" width="300" height="225" />When Chris and I formed Room 118 Solutions one year ago, we didn&#8217;t really know how we were going to run a business from our home offices.  We didn&#8217;t even know what was involved in running a corporation (an S-corp, to be exact), from a business perspective.  Over this past year, we&#8217;ve fallen into a nice groove using a combination of web applications that has made everything from collaboration to running payroll a breeze.  We&#8217;d like to share them with you, as they mostly apply to all small business teams.  In Part I, I&#8217;ll cover services we use to work with customers; in Part II, I&#8217;ll cover services we use internally.<span id="more-69"></span></p>
<p><em>Most of the services listed below are free, offer free trials, or offer a free &#8220;basic&#8221; package &#8211; so if you&#8217;re a small startup with little cash, this will get you up and running with a solid cloud-based infrastructure with very little upfront cost.</em></p>
<p><em><strong>Note</strong>: Links marked with <img class="size-full wp-image-119 alignnone" title="Affiliate link icon" src="http://room118solutions.com/wp-content/uploads/2011/02/affiliate-icon.png" alt="" width="20" height="19" /> are affiliate links.  Depending on the program, this means we either receive a discount in services or a commission if you register.  Your rates will remain the same whether or not you use our affiliate link.  Thanks for supporting us!</em></p>
<hr />
<p style="text-align: center;"><strong><a href="http://www.google.com/apps/intl/en/business/index.html" target="_blank"></a><a href="http://www.google.com/apps/intl/en/business/index.html" target="_blank"><img class="aligncenter size-medium wp-image-126" title="Google Apps logo" src="http://room118solutions.com/wp-content/uploads/2011/02/googleapps-300x290.jpg" alt="" width="300" height="290" /></a></strong></p>
<p><strong>Service</strong>: <a href="http://www.google.com/apps/intl/en/business/index.html" target="_blank">Google Apps</a><br />
<strong>What we use it for: </strong> E-Mail, document storage, collaborative document editing<br />
<strong>Cost</strong>: Free for up to 50 users; $50/user/year for unlimited users, additional services, an uptime SLA, and support<br />
<strong>Why we love it:</strong> We get the power of a Google account, except @room118solutions.com.  This one is a no-brainer, if you have a domain and need e-mail, Google Apps is the way to go.  The Google Docs suite is, well, sweet!   It gives us basic document, spreadsheet, and drawing creation/editing abilities, in the cloud.  But where it really shines is in real-time collaborative editing.  When drafting a proposal, or a contract, for example, Chris and I can work on the same document, together, in real-time.  We can even see where each other&#8217;s cursors are, annotate specific lines, chat, and see a revision history &#8211; way cool!  As if that wasn&#8217;t enough, mail, contacts, and calendar can all be tightly integrated into every mobile OS (especially Android, of course).  That gives you enterprise level mobile integration for free! You can even collaboratively edit documents from a mobile browser.  Google Apps rocks, go get it now.  Wait, no, finish reading this post first.<br />
<strong>Caveat</strong>:  The free account offers no support, and trying to contact Google without a support contract is impossible; luckily you&#8217;ll probably never need support.  If you do, the pay account includes 24 x 7 support.</p>
<hr />
<p style="text-align: center;"><strong><a href="https://room118solutions.freshbooks.com/refer/www" target="_blank"><img class="size-full wp-image-90  aligncenter" title="FreshBooks logo" src="http://room118solutions.com/wp-content/uploads/2011/02/freshbooks-logo.gif" alt="Freshbooks" width="230" height="114" /></a></strong></p>
<p><strong>Service</strong>: <a href="https://room118solutions.freshbooks.com/refer/www" target="_blank">Freshbooks</a> <em> </em><em><img title="Affiliate link icon" src="http://room118solutions.com/wp-content/uploads/2011/02/affiliate-icon.png" alt="" width="20" height="19" /></em><br />
<strong>What we use it for:</strong> Invoicing, expenses, and time tracking.<br />
<strong>Cost:</strong> Free to manage three clients; pay packages start at $20/month<br />
<strong>Why we love it: </strong>It&#8217;s a simple, no-frills web app that does what it&#8217;s supposed to do and does it well.  Our clients love being able to view their invoices and account history online.  They&#8217;ll even snail mail your invoices for your non-technical clients, for between $1 &#8211; $1.79 per invoice.  <em>(For desktop time tracking, we use </em><a style="font-style: italic;" href="http://www.efactory.com/cms/index.php?option=com_content&amp;view=article&amp;id=16:fresh-timer&amp;catid=9:fresh-books&amp;Itemid=16" target="_blank">Timer Pro</a><em>, it&#8217;s $25/license, works well, and runs on Windows, Mac OS X, and Linux thanks to Adobe AIR)</em><br />
<strong>Caveat: </strong><em> </em>Freshbooks recently changed their pricing structure, and now only allows staff accounts to be added to their most expensive package.  Very small teams could probably share an account, and still benefit from most of Freshbook&#8217;s features.  We&#8217;re lucky enough to have a grandfathered account.</p>
<hr />
<p style="text-align: center;"><strong><a href="http://www.basecamphq.com" target="_blank"><img class="size-full wp-image-92      aligncenter" title="Basecamp Logo" src="http://room118solutions.com/wp-content/uploads/2011/02/basecamp-logo.png" alt="Basecamp" width="250" height="147" /></a></strong></p>
<p style="text-align: left;"><strong>Service: </strong><a href="http://www.basecamphq.com" target="_blank">Basecamp</a><br />
<strong>What we use it for</strong>: Collaborating on larger projects<br />
<strong>Cost</strong>: Free for 1 project and no file sharing; pay plans start at $24/month<br />
<strong>Why we love it</strong>:  It&#8217;s project management from <a href="http://37signals.com/" target="_blank">37signals</a>, you know, the guys who are rewriting the book on how business is done in the information age.  It&#8217;s the best no-frills project management app out there.  Collaboration tools are always important, and even more so if you&#8217;re running your business in the cloud, and not in a brick and mortar office. Basecamp lets you easily start message-board like threads to discuss your project; create, manage, and assign to-dos; schedule milestones; share files; and track time.  It&#8217;s easy to use, and shelters your inbox from the barrage of massive e-mail threads that inevitably occur if you&#8217;re working on a large project.<br />
<strong>Caveat</strong>:  If you decide to use Basecamp on your project to collaborate with your customer, be sure they&#8217;re savvy enough to use it.  Otherwise you&#8217;ll end up with messages being posted on Basecamp, and responded to via e-mail, or worse yet, a phone call.  *shudders*</p>
<hr />This should get you well on your way to efficiently working with your customers from the fluffy comfort of the cloud.  Stay tuned for Part II, when I talk about the services we use internally to manage our business.</p>
]]></content:encoded>
			<wfw:commentRss>http://room118solutions.com/2011/02/07/our-small-business-boilerplate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Happy 1st Birthday!</title>
		<link>http://room118solutions.com/2011/02/04/happy-1st-birthday/</link>
		<comments>http://room118solutions.com/2011/02/04/happy-1st-birthday/#comments</comments>
		<pubDate>Fri, 04 Feb 2011 05:00:08 +0000</pubDate>
		<dc:creator>Chris Gunther</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>

		<guid isPermaLink="false">http://room118solutions.com/?p=63</guid>
		<description><![CDATA[Today marks one full year of business as Room 118 Solutions and it&#8217;s been an awesome ride. We&#8217;ve made some great friends, worked on awesome projects and expanded our skill sets. Here&#8217;s to another amazing year. In celebration of one &#8230; <a href="http://room118solutions.com/2011/02/04/happy-1st-birthday/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Today marks one full year of business as Room 118 Solutions and it&#8217;s been an awesome ride. We&#8217;ve made some great friends, worked on awesome projects and expanded our skill sets. Here&#8217;s to another amazing year.</p>
<p>In celebration of one year in business, we thought its about time we started blogging, so welcome to the inaugural post and keep an eye out for more to come in the future.</p>
<p>Chris &amp; Jim</p>
]]></content:encoded>
			<wfw:commentRss>http://room118solutions.com/2011/02/04/happy-1st-birthday/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

