<?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>Roommate App Development Blog</title>
	<atom:link href="http://development.roommateapp.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://development.roommateapp.com</link>
	<description>Building a bill manager, and some other stuff</description>
	<lastBuildDate>Tue, 16 Jun 2009 05:24:13 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Testing Roommate App</title>
		<link>http://development.roommateapp.com/2009/06/testing-roommate-app/</link>
		<comments>http://development.roommateapp.com/2009/06/testing-roommate-app/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 05:18:21 +0000</pubDate>
		<dc:creator>Heff</dc:creator>
				<category><![CDATA[Goals]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://development.roommateapp.com/?p=53</guid>
		<description><![CDATA[It&#8217;s been over a month now since launching Roommate App, and for not advertising and not having any kind of marketing website, it&#8217;s doing pretty well. I&#8217;ve  been getting a lot of good feedback/requests as well. I kind of burnt myself out a little on the project getting it launched, so I took some [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been over a month now since launching <a href="http://roommateapp.com">Roommate App</a>, and for not advertising and not having any kind of marketing website, it&#8217;s doing pretty well. I&#8217;ve  been getting a lot of good feedback/requests as well. I kind of burnt myself out a little on the project getting it launched, so I took some time off, but I will get to everything eventually. Before I get too deep into new features though, I need to develop the test suite.<br />
<span id="more-53"></span><br />
Coming from a PHP background, testing is new ground for me (not that testing isn&#8217;t done in PHP, but it&#8217;s not nearly as prevalent as in the Rails community). When I say &#8220;test&#8221; in this context, I don&#8217;t mean clicking around through the app in your web browser and making sure all the links work, etc. I mean writing more code that makes sure the code you&#8217;ve written works (sounds like an endless cycle doesn&#8217;t it?). The benefit of doing this is that you can make changes to your application, then run all your tests to make sure what you just changed didn&#8217;t break something somewhere else. I&#8217;m probably not explaining it very well. Judging by the <a href="http://en.wikipedia.org/wiki/Software_testing">Wikipedia article</a>, I guess you would call this &#8220;Regression Testing&#8221;.</p>
<p>Anyway, at this point Roommate App has very low test coverage. The goal would be to reach 100% test coverage, and it&#8217;s probably under 5% right now. So I&#8217;ve got some work to do. The <a href="http://guides.rubyonrails.org/testing.html">testing guide</a> at rubyonrails.org was a good starting place for me. It gave me a good overview of the basics and the reasoning behind it. If anyone knows additional resources feel free to suggest them.</p>
<p>While the guide was a good start, <a href="http://sevenwire.com">Sevenwire</a> (my company) actually uses a lot of modifications to the default Rails app test suite. These include:</p>
<ul>
<li><a href="http://github.com/thoughtbot/factory_girl/tree/master">Factory Girl</a> &mdash; A library for creating test data.</li>
<li><a href="http://www.thoughtbot.com/projects/shoulda">Shoulda</a> &mdash; A library for writing more understandable tests.</li>
<li><a href="http://github.com/sevenwire/forgery/tree/master">Forgery</a> &mdash; A fake/random data generator (and a Sevenwire original).</li>
</ul>
<p>So I have a lot of different elements to learn, but that&#8217;s half the fun of this project.</p>
]]></content:encoded>
			<wfw:commentRss>http://development.roommateapp.com/2009/06/testing-roommate-app/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Roommate App Is Secure!</title>
		<link>http://development.roommateapp.com/2009/05/roommate-app-is-secure/</link>
		<comments>http://development.roommateapp.com/2009/05/roommate-app-is-secure/#comments</comments>
		<pubDate>Tue, 05 May 2009 04:12:01 +0000</pubDate>
		<dc:creator>Heff</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://development.roommateapp.com/?p=50</guid>
		<description><![CDATA[Finally got the SSL certificate from Starfield set up. It was a bit trickier of a process because it&#8217;s a wild card cert, meaning it covers all subdomains of roommateapp.com as well. These are a lot more expensive too, though not too bad through my reseller account at Heffernan.biz. About $250.

If you want a cheap [...]]]></description>
			<content:encoded><![CDATA[<p>Finally got the SSL certificate from Starfield set up. It was a bit trickier of a process because it&#8217;s a wild card cert, meaning it covers all subdomains of roommateapp.com as well. These are a lot more expensive too, though not too bad through my reseller account at <a href="http://heffernan.biz">Heffernan.biz</a>. About $250.<br />
<span id="more-50"></span><br />
If you want a cheap one, sign up for an account there, let me know, and I&#8217;ll set you up for discounted pricing.</p>
]]></content:encoded>
			<wfw:commentRss>http://development.roommateapp.com/2009/05/roommate-app-is-secure/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Shhhhh! It&#8217;s launched.</title>
		<link>http://development.roommateapp.com/2009/04/shhhhh-its-launched/</link>
		<comments>http://development.roommateapp.com/2009/04/shhhhh-its-launched/#comments</comments>
		<pubDate>Wed, 29 Apr 2009 05:15:32 +0000</pubDate>
		<dc:creator>Heff</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://development.roommateapp.com/?p=47</guid>
		<description><![CDATA[Roommate App is live! Shhhhhh. : ) It&#8217;s available for anyone to sign up, but It&#8217;s not 100% tested, so I&#8217;m waiting to tell anybody. For those who find this and try it out, let me know if you find any bugs. Thanks!
Roommate App
]]></description>
			<content:encoded><![CDATA[<p>Roommate App is live! Shhhhhh. : ) It&#8217;s available for anyone to sign up, but It&#8217;s not 100% tested, so I&#8217;m waiting to tell anybody. For those who find this and try it out, let me know if you find any bugs. Thanks!</p>
<p><a href="http://roommateapp.com">Roommate App</a></p>
]]></content:encoded>
			<wfw:commentRss>http://development.roommateapp.com/2009/04/shhhhh-its-launched/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Soooo close!</title>
		<link>http://development.roommateapp.com/2009/04/soooo-close/</link>
		<comments>http://development.roommateapp.com/2009/04/soooo-close/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 05:41:32 +0000</pubDate>
		<dc:creator>Heff</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://development.roommateapp.com/?p=42</guid>
		<description><![CDATA[Very close to launching Roommate App. I&#8217;m at a point where I&#8217;m cutting back on features that don&#8217;t absolutely have to be there for launch, and making sure the ones that are there are solid. I even designed a super simple homepage.

I&#8217;ve been hearing/reading a lot about how if you aren&#8217;t embarrassed by your first [...]]]></description>
			<content:encoded><![CDATA[<p>Very close to launching <a href="http://roommateapp.com">Roommate App</a>. I&#8217;m at a point where I&#8217;m cutting back on features that don&#8217;t absolutely have to be there for launch, and making sure the ones that are there are solid. I even designed a super simple homepage.<br />
<span id="more-42"></span><br />
I&#8217;ve been hearing/reading a lot about how if you aren&#8217;t embarrassed by your first release, you launched too late. I think I&#8217;m cresting that point right now. There&#8217;s a million things I want to add to the app and refine, but I need to just get it up and let my users (if any) decide what my next priorities are. </p>
<p>Also, I&#8217;ve been experiencing a lot of &#8220;unperfect&#8221; apps lately, so while I want the system to be totally solid, I&#8217;m letting go of my need for perfection a little. If that makes sense.</p>
<p>For instance I just wrote about my friend&#8217;s <a href="http://blog.steveheffernan.com/2009/04/tumblon-best-parenting-website/">parenting website</a>. It&#8217;s a great site, and looks totally clean, but there are a lot of kinks in the functionality. I know they&#8217;ll get worked out in time.</p>
<p>Also, we recently launched a <a href="http://flixcloud.com">video encoding app</a>, and we still have a long way to go before I&#8217;d consider it a great user experience from beginning to end. But the point is it&#8217;s up and people are using it.</p>
<p>On the other hand, we just finished <a href="http://kdqol-complete.com">KDQOL-Complete</a>, and while I&#8217;m cautious to say it&#8217;s perfect, I don&#8217;t think we could be happier with it.</p>
<p>Anyway, all that said, Roommate App is coming very very soon. I&#8217;ve told myself if I can&#8217;t get it launched before I leave Wisconsin in 2 weeks, I have to abandon the project entirely. Obviously I don&#8217;t want that to happen, so one way or another it&#8217;s going live. Can&#8217;t wait.</p>
]]></content:encoded>
			<wfw:commentRss>http://development.roommateapp.com/2009/04/soooo-close/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RESTful CSS Update</title>
		<link>http://development.roommateapp.com/2009/04/restful-css-update/</link>
		<comments>http://development.roommateapp.com/2009/04/restful-css-update/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 03:29:11 +0000</pubDate>
		<dc:creator>Heff</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://development.roommateapp.com/?p=36</guid>
		<description><![CDATA[Quick update pertaining to RESTful CSS, a method for organizing CSS I wrote a little while ago.

I created a few extra helpers for the body tag. I&#8217;ve been adding IDs and classes to the body tag in the form of id=&#8221;controller_action&#8221; class=&#8221;controller action&#8221;, so I created these methods to both clean up the html, and [...]]]></description>
			<content:encoded><![CDATA[<p>Quick update pertaining to <a href="http://www.digital-web.com/articles/RESTful_CSS/">RESTful CSS</a>, a method for organizing CSS I wrote a little while ago.<br />
<span id="more-36"></span><br />
I created a few extra helpers for the body tag. I&#8217;ve been adding IDs and classes to the body tag in the form of id=&#8221;controller_action&#8221; class=&#8221;controller action&#8221;, so I created these methods to both clean up the html, and to add the extra functionality of overwriting &#8220;create&#8221; with &#8220;new&#8221;, and &#8220;update&#8221; with &#8220;edit&#8221;. This is needed because of the way Rails handle form errors. Here are the methods.</p>
<p><code>def body_id<br />
  controller.controller_name + "_" + { "create" => "new", "update" => "edit" }[controller.action_name] || controller.action_name<br />
end</p>
<p>def body_class<br />
  controller.controller_name + " " + { "create" => "new", "update" => "edit" }[controller.action_name] || controller.action_name<br />
end</code></p>
<p>The body tag would then look like:</p>
<p><code>&lt;body id="&lt;%= body_id %&gt;" class="&lt;%= body_class %&gt;"&gt;</code></p>
]]></content:encoded>
			<wfw:commentRss>http://development.roommateapp.com/2009/04/restful-css-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>No more dashboard</title>
		<link>http://development.roommateapp.com/2009/04/no-more-dashboard/</link>
		<comments>http://development.roommateapp.com/2009/04/no-more-dashboard/#comments</comments>
		<pubDate>Sun, 05 Apr 2009 05:45:56 +0000</pubDate>
		<dc:creator>Heff</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://development.roommateapp.com/?p=34</guid>
		<description><![CDATA[I&#8217;m out in Wisconsin for the month of April working in the Sevenwire office, and getting a lot done. Including getting very close to launching Roommate App. Just cleaning some things up, and tying up some loose ends, though it feels like I&#8217;ve been doing that forever now.

My latest big change in the app has [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m out in Wisconsin for the month of April working in the <a href="http://sevenwire.com">Sevenwire</a> office, and getting a lot done. Including getting very close to launching <a href="http://roommateapp.com">Roommate App</a>. Just cleaning some things up, and tying up some loose ends, though it feels like I&#8217;ve been doing that forever now.<br />
<span id="more-34"></span><br />
My latest big change in the app has been replacing the &#8220;Dashboard&#8221; tab with a &#8220;Roommates&#8221; tab. After the last major overhaul I did with Nate where we added subdomains, some new concepts were added that I didn&#8217;t have a chance to think about within the scope of the entire app. This included the concept of Roommates playing a much bigger role in the structure of the app itself (who&#8217;da thunk?). In Rails terms, they got their own controller (though it kinda took over the Users controller). Anyway, now that I had chance to step back and look at all the concepts as a whole, I realized the whole dashboard section was just the missing index (listing) and show (details) pages from the roommates controller. So now they&#8217;re combined into one.</p>
<p>Also, I may be dropping the &#8220;Home settings&#8221; tab as well, which brings me down to two tabs, Bills and Roommates. How simple is that? It&#8217;s crazy how much thought has been required to make this app so simple. Hopefully other people think it is too. If not, they should see my first version. <img src='http://development.roommateapp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
]]></content:encoded>
			<wfw:commentRss>http://development.roommateapp.com/2009/04/no-more-dashboard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ActiveForm part 2</title>
		<link>http://development.roommateapp.com/2009/02/activeform-part-2/</link>
		<comments>http://development.roommateapp.com/2009/02/activeform-part-2/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 08:46:58 +0000</pubDate>
		<dc:creator>Heff</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://development.roommateapp.com/?p=32</guid>
		<description><![CDATA[Just following up on my own internal discussion from last night about my ActiveForm javascript library.

I started switching everything to extend the elements themselves instead of building the functionality into separate objects. One thing I found was there was no way extending the form element was going to work. There would be too many name [...]]]></description>
			<content:encoded><![CDATA[<p>Just following up on my own internal discussion from <a href="/2009/02/activeform/">last night</a> about my ActiveForm javascript library.<br />
<span id="more-32"></span><br />
I started switching everything to extend the elements themselves instead of building the functionality into separate objects. One thing I found was there was no way extending the form element was going to work. There would be too many name space conflicts. One of them being &#8220;name&#8221;. The form already has a name, so if you were making a form for a user, it would possibly try to make &#8220;user.name&#8221;. That would be bad. So that was out.</p>
<p>As far as the inputs themselves, that went more smoothly. I&#8217;m not trying to add dynamically generated methods to those objects, so there&#8217;s little problem with name space. In fact, switching allowed me to drastically clean up my ActiveForm class. Before I had to use eval() to embed certain functionality into an input, but once I was extending the input directly this wasn&#8217;t necessary anymore.</p>
<p>I&#8217;m really liking how this is turning out, and I&#8217;m looking forward to using it on future projects.</p>
]]></content:encoded>
			<wfw:commentRss>http://development.roommateapp.com/2009/02/activeform-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ActiveForm</title>
		<link>http://development.roommateapp.com/2009/02/activeform/</link>
		<comments>http://development.roommateapp.com/2009/02/activeform/#comments</comments>
		<pubDate>Wed, 18 Feb 2009 06:03:20 +0000</pubDate>
		<dc:creator>Heff</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://development.roommateapp.com/?p=27</guid>
		<description><![CDATA[I&#8217;m writing this post mainly to think through a javascript library I&#8217;m working on.

The library is called ActiveForm, and the concept is similar to how ActiveRecord objects in Rails interact with the database. ActiveForm, or rather its children ActiveFormField objects get and set values from actual input elements, while utilizing railsish callbacks. Including:
before_validate()
validate()
before_set()
set()
after_set()
before_get()
get()
This allows me [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m writing this post mainly to think through a javascript library I&#8217;m working on.<br />
<span id="more-27"></span><br />
The library is called ActiveForm, and the concept is similar to how ActiveRecord objects in Rails interact with the database. ActiveForm, or rather its children ActiveFormField objects get and set values from actual input elements, while utilizing railsish callbacks. Including:</p>
<p>before_validate()<br />
validate()<br />
before_set()<br />
set()<br />
after_set()</p>
<p>before_get()<br />
get()</p>
<p>This allows me to do something like this, where I format a the value as an amount before setting actual element&#8217;s value:</p>
<p>before_set: function(value) {<br />
  return this.format_as_money(value);<br />
}</p>
<p>Whether or not this is the best way to do things, I couldn&#8217;t tell you. I&#8217;m no javascript genius. But I&#8217;m having fun writing it and I&#8217;m enjoying they syntax it creates.</p>
<p>A question that I&#8217;m asking myself now, that I know will come up again, is why didn&#8217;t I just extend the form elements themselves? This would be similar to how <a href="http://www.prototypejs.org/">Prototype</a> does with &#8220;<a href="http://www.prototypejs.org/api/form/element/getValue">$(input).getValue();</a>&#8220;. So I&#8217;m documenting it here so when I forget why later I can look it up.</p>
<p>For starters, it had to do with how I was thinking of the objects versus the actual elements. In my head, the elements were like the database in Rails and the objets were like ActiveRecord objects. ActiveRecord objects cache and process database values and only call and update the database when necessary. Forgive me if I&#8217;m explaining Rails all wrong, I&#8217;m still a relative newbie.</p>
<p>This metaphor loses a little when you know that the user edits the elements directly, but ignore that part. <img src='http://development.roommateapp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  It doesn&#8217;t actually make that big of a difference since the ActiveFormField immediately grabs the value and processes it.</p>
<p>Another reason would be containment of the ActiveForm methods, so they don&#8217;t conflict with anything else. I don&#8217;t know if this is a huge problem though.</p>
<p>At the moment, I can&#8217;t think of any other reason, so I may have to try switching and see what I run into. I think it&#8217;ll be a lot of work though.</p>
<p>And now somehow hours have gone by in a blink, and I have to go to bed, where I&#8217;ll stare at the ceiling and think about this all night&#8230; </p>
]]></content:encoded>
			<wfw:commentRss>http://development.roommateapp.com/2009/02/activeform/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Progress!</title>
		<link>http://development.roommateapp.com/2009/02/progress/</link>
		<comments>http://development.roommateapp.com/2009/02/progress/#comments</comments>
		<pubDate>Mon, 16 Feb 2009 06:46:25 +0000</pubDate>
		<dc:creator>Heff</dc:creator>
				<category><![CDATA[Bills]]></category>
		<category><![CDATA[Goals]]></category>

		<guid isPermaLink="false">http://development.roommateapp.com/?p=24</guid>
		<description><![CDATA[Got a lot done this evening. Redesigned the dashboard and roommate views and did the html/css for both. Also got bill splitting and payments sending out confirmation emails.

That covered a good chunk of my to-do lists, so moving along steadily towards my new goals and launch date of April 1.
I have way too many ideas [...]]]></description>
			<content:encoded><![CDATA[<p>Got a lot done this evening. Redesigned the dashboard and roommate views and did the html/css for both. Also got bill splitting and payments sending out confirmation emails.<br />
<span id="more-24"></span><br />
That covered a good chunk of my to-do lists, so moving along steadily towards my <a href="/2009/02/new-deadlines/">new goals</a> and launch date of April 1.</p>
<p>I have way too many ideas for this app, and the hardest part is staying focused on just getting the essentials done so I can launch it.</p>
]]></content:encoded>
			<wfw:commentRss>http://development.roommateapp.com/2009/02/progress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Deadlines</title>
		<link>http://development.roommateapp.com/2009/02/new-deadlines/</link>
		<comments>http://development.roommateapp.com/2009/02/new-deadlines/#comments</comments>
		<pubDate>Sat, 07 Feb 2009 07:05:07 +0000</pubDate>
		<dc:creator>Heff</dc:creator>
				<category><![CDATA[Goals]]></category>

		<guid isPermaLink="false">http://development.roommateapp.com/?p=22</guid>
		<description><![CDATA[Yeah, I know this is getting old, but I&#8217;ve got some new goals. I&#8217;ve been side tracked by some other projects, including Bryan Clay&#8217;s website, but I&#8217;m sticking to these this time&#8230;really.
Launch by April 1. Online payments by May 15.
The second could be a lofty goal, but we&#8217;ll see. Brandon set up a Basecamp project [...]]]></description>
			<content:encoded><![CDATA[<p>Yeah, I know this is getting old, but I&#8217;ve got some new goals. I&#8217;ve been side tracked by some other projects, including <a title="World's Greatest Athlete" href="http://www.bryanclay.com" target="_blank">Bryan Clay&#8217;s website</a>, but I&#8217;m sticking to these this time&#8230;really.</p>
<p><span id="more-22"></span>Launch by April 1. Online payments by May 15.</p>
<p>The second could be a lofty goal, but we&#8217;ll see. Brandon set up a Basecamp project on the Sevenwire account for Roommate App, so now I get to go load it up with milestones and to-dos. </p>
<p>My problem so far I think is that I&#8217;ve been letting my self get overwhelmed. I had a list of everything that needed to be done, and some overall deadlines. What I need to do is divide and conquer, setting deadlines for each piece. I think that&#8217;ll help.</p>
]]></content:encoded>
			<wfw:commentRss>http://development.roommateapp.com/2009/02/new-deadlines/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
