<?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>VersaPay &#187; Developer Blog</title>
	<atom:link href="http://www.versapay.com/category/developer-blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.versapay.com</link>
	<description>Simplify Payment Processing</description>
	<lastBuildDate>Wed, 15 May 2013 19:10:21 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>VersaPay Development Flow</title>
		<link>http://www.versapay.com/developer-blog/versapay-development-flow/</link>
		<comments>http://www.versapay.com/developer-blog/versapay-development-flow/#comments</comments>
		<pubDate>Wed, 07 Sep 2011 20:30:38 +0000</pubDate>
		<dc:creator>Andrea</dc:creator>
				<category><![CDATA[Developer Blog]]></category>

		<guid isPermaLink="false">http://www.versapay.com/?p=8890</guid>
		<description><![CDATA[<p><a title="Thoughtbot Flow" href="http://robots.thoughtbot.com/post/2831837714/feature-branch-code-reviews">Thoughtbot</a>, <a title="Github Flow" href="http://scottchacon.com/2011/08/31/github-flow.html">Github</a> and <a title="PlataformaTech Flow" href="http://blog.plataformatec.com.br/2011/04/a-successful-git-branching-model/">PlataformaTech</a> shared their development flow over the past few months. Our development flow differs quite a bit as well as our Product Management process so we believe that they are worth sharing!</p>
<h3>Flow</h3>
<p>VersaPay development flow features:</p>
<ul>
<li>2 week iterations</li>
<li><a title="Planning Poker definition on Wikipedia" href="http://en.wikipedia.org/wiki/Planning_poker">planning poker</a></li>
<li>feature branches</li>
<li>CI against all branches</li>
<li>code &#38; UX review</li>
<li>QA</li>
<li>deploy at the end of each iteration</li>
</ul>
<h3>Tools</h3>
<p>To support our workflow, we use a couple of well known open source tools, and a few we&#8217;ve built ourselves and released on Github.  We use the following well known tools:</p>
<ul>
<li><a href="http://www.redmine.org/">redmine</a> &#8211; A ticket management system.</li>
<li><a href="http://www.redminebacklogs.net/">redmine backlogs plugin</a> &#8211; UI to sort and group features per iteration.</li>
<li><a href="http://jenkins-ci.org/">jenkins-ci</a> &#8211; Continuous Integration server.</li>
<li><a href="http://gitorious.org/">gitorious</a> &#8211; Open source Github like.</li>
</ul>
<p>We developed the following tools to support our work flow:</p>
<ul>
<li><a href="https://github.com/pcreux/gitmine">gitmine</a> &#8211; A command line tool for Git and Redmine!</li>
<li>Alfred &#8211; A dashboard linking Git branches, Redmine and Jenkins.</li>
<li><a href="https://github.com/versapay/viewcumber">viewcumber</a> &#8211; Cucumber formatter to browse your application by clicking through your cucumber scenarios.</li>
<li><a href="https://github.com/versapay/mothership">mothership</a> &#8211; Anyone can deploy in one click!</li>
<li><a href="https://github.com/versapay/hudson-github-autobranch">jenkins-github-autobranch</a> &#8211; Create, Run or Delete Jenkins jobs whenever a new branch is Created, Updated or Deleted on Github or Gitorious.</li>
</ul>
<p>Each feature is described in a Redmine ticket and will live in a feature branch starting with its ticket number followed by an explicit name. We use gitmine to automate creating, checking-out, reviewing and deleting branches.</p>
<h3>Product Management</h3>
<p>We used <a href="http://basecamphq.com/">Basecamp</a> for a while. It is a great tool for small projects but the todo &#8230; <a href="http://www.versapay.com/developer-blog/versapay-development-flow/" class="read_more">Read more</a></p>]]></description>
		<wfw:commentRss>http://www.versapay.com/developer-blog/versapay-development-flow/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simple Tips for your Online Security</title>
		<link>http://www.versapay.com/developer-blog/simple-tips-for-your-online-security/</link>
		<comments>http://www.versapay.com/developer-blog/simple-tips-for-your-online-security/#comments</comments>
		<pubDate>Wed, 11 May 2011 20:37:36 +0000</pubDate>
		<dc:creator>Kevin</dc:creator>
				<category><![CDATA[Developer Blog]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.versapay.com/?p=8429</guid>
		<description><![CDATA[<h3>Website security</h3>
<p>When entering private information, be sure to check that the site uses encryption to keep any data you enter on the website safe.</p>
<p>To tell if a website uses encryption, look for a web address with https (&#8220;s&#8221; for secure) with a lock icon beside it (as pictured below). It may look different depending on what web browser you use.</p>
<p><a href="http://www.versapay.com/developer-blog/simple-tips-for-your-online-security/attachment/secure-url-bar/" rel="attachment wp-att-8431"><img src="http://www.versapay.com/wp-content/uploads/2011/05/Secure-URL-bar.png" alt="Secure URL bar" title="Secure URL bar" width="614" height="32" class="alignleft size-full wp-image-8431" /></a></p>
<h3>How do I choose a secure password?</h3>
<p>Length and complexity is pivotal to create the strongest possible password. Make it as long as possible, at least 14 characters is recommended. Remember to use uncommon letters, punctuation, symbols, and number combinations. Use capitalization to add complexity.</p>
<p><a href="http://www.microsoft.com/security/online-privacy/passwords-create.aspx">Microsoft suggests some smart guidelines</a> to follow when creating passwords:<br />
<a href="http://www.versapay.com/developer-blog/simple-tips-for-your-online-security/attachment/password-example-table/" rel="attachment wp-att-8430"><img src="http://www.versapay.com/wp-content/uploads/2011/05/Password-Example-Table.png" alt="Password Example Table" title="Password Example Table" width="623" height="365" class="alignleft size-full wp-image-8430" /></a><br />
Microsoft provides a <a href="https://www.microsoft.com/security/pc-security/password-checker.aspx">password checker</a> so you can test the strength of new passwords before putting them to use.</p>
<p>Some common mistakes made when creating passwords that you should avoid:</p>
<ol>
1. Words found in a Dictionary (in any language).</ol>
<ol>
2. Words spelled backwards, common misspellings, and abbreviations.</ol>
<ol>
3. Sequences or repeated characters. Ex: 12345678, 222222, abcdefg, or adjacent letters on your keyboard (qwerty).</ol>
<ol>
4. Using your name, birthday, driver&#8217;s license, passport number, or any other personal information someone could connect to you.</ol>
<h3>How do I remember all these passwords?</h3>
<p>Using the <a href="http://en.wikipedia.org/wiki/Keychain_Access">Mac OS X Keychain Access</a> application or an online storage solution such as <a href="http://www.acrylicapps.com/wallet/">Wallet</a>, or <a href="http://lastpass.com/">LastPass</a> these are all ways to keep your passwords secure. All you need to remember is your master password &#8212; these applications remember the rest.</p>
<li>
<ol>
Eliminate </ol>&#8230; <a href="http://www.versapay.com/developer-blog/simple-tips-for-your-online-security/" class="read_more">Read more</a></li>]]></description>
		<wfw:commentRss>http://www.versapay.com/developer-blog/simple-tips-for-your-online-security/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>active_sanity: Spot invalid records in your database</title>
		<link>http://www.versapay.com/developer-blog/active_sanity-spot-invalid-records-in-your-database/</link>
		<comments>http://www.versapay.com/developer-blog/active_sanity-spot-invalid-records-in-your-database/#comments</comments>
		<pubDate>Thu, 31 Mar 2011 22:08:09 +0000</pubDate>
		<dc:creator>Andrea</dc:creator>
				<category><![CDATA[Developer Blog]]></category>
		<category><![CDATA[gem]]></category>

		<guid isPermaLink="false">http://www.versapay.com/?p=7490</guid>
		<description><![CDATA[<p><a href="http://api.rubyonrails.org/classes/ActiveRecord/Base.html">ActiveRecord</a> is great way to ensure your models are valid before saving them to the database. But as you add new validations or update existing ones, some of the existing records could become invalid. Do you have any invalid records in your production database?</p>
<p><strong>It&#8217;s too late when you discover there are invalid records in your production environment.</strong></p>
<ul>
<li>Maybe a migration failed half way through when you deploy to production <em>&#8220;It was working just fine on staging?!&#8221;</em></li>
<li>You get notified about a weird bug <em>(and you can&#8217;t reproduce it on your dev machine)</em></li>
<li>Someone sends you an email saying that he can&#8217;t buy the <a href="http://www.zazzle.com/dancing_banana_t_shirt-235875587706113353">dancing banana t-shirt</a> on your webstore <em>(and you&#8217;re lucky someone contacted you. How many people went to a concurrent webstore?)</em></li>
</ul>
<p><strong>Setup <a href="https://github.com/versapay/active_sanity">active_sanity</a>, run it and fix your records.</strong></p>
<ol>
<li>
Add the following line to your Gemfile:
<pre>
  gem "active_sanity"
</pre>
</li>
<li>
Run <code>rake db:check_sanity</code> on your production database. You should see something like:
<pre>
model       &#124; id  &#124; errors
User        &#124;   1 &#124; { "email" =["is invalid"] }
Flight      &#124; 123 &#124; { "arrival_time" =["can't be nil"], "departure_time" =["is invalid"] }
Flight      &#124; 323 &#124; { "arrival_time" =["can't be nil"]
</pre>
</li>
<li>Want to store those &#8220;invalid records&#8221; in the database to check them in your admin interface? Just run <code>rails generate active_sanity</code> to generate a migration and access the data through a model called <a href="https://github.com/versapay/active_sanity/blob/master/lib/active_sanity/invalid_record.rb">InvalidRecord</a>.</li>
</ol>
<p>Run active_sanity against your production environment, say &#8220;OMG!&#8221; and go fix your records. Deployments will be less stressful and you&#8217;re gonna &#8230; <a href="http://www.versapay.com/developer-blog/active_sanity-spot-invalid-records-in-your-database/" class="read_more">Read more</a></p>]]></description>
		<wfw:commentRss>http://www.versapay.com/developer-blog/active_sanity-spot-invalid-records-in-your-database/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>The art and science of email rendering across email clients</title>
		<link>http://www.versapay.com/developer-blog/the-art-and-science-of-email-rendering-across-email-clients/</link>
		<comments>http://www.versapay.com/developer-blog/the-art-and-science-of-email-rendering-across-email-clients/#comments</comments>
		<pubDate>Wed, 30 Mar 2011 18:50:37 +0000</pubDate>
		<dc:creator>Andrea</dc:creator>
				<category><![CDATA[Developer Blog]]></category>
		<category><![CDATA[CSS]]></category>

		<guid isPermaLink="false">http://www.versapay.com/?p=7246</guid>
		<description><![CDATA[<p>When someone receives an email from VersaPay saying that they&#8217;ve been sent money, they need to be able to claim their payment no matter what email client they&#8217;re using, and whether or not images are enabled.</p>
<p>We&#8217;ve come up with some best practices to balance great looks with a high level of usability in our emails and we&#8217;d like to share them with you.</p>
<p>First off, here is what one of our emails looks like with and without images enabled:</p>
<p><img class="alignnone size-large wp-image-7438" style="border: 0px initial initial;" title="matt_tut_2_email_compare" src="http://www.versapay.com/wp-content/uploads/2011/03/matt_tut_2_email_compare3-660x235.png" alt="" width="660" height="235" /></p>
<p>You&#8217;ll notice in both emails (with or without images) the messaging is clear:</p>
<ol>
<li>Someone has sent you money</li>
<li>The reason they sent you money</li>
<li>Here&#8217;s how you get your money</li>
</ol>
<h2>Tip 1: Don&#8217;t rely on images, always have a backup plan</h2>
<p>Since many (most?) email clients remove images by default, it&#8217;s smart to never rely exclusively on images for anything mission-critical (call to action buttons, headings, backgrounds, etc).</p>
<p>You&#8217;ll notice that in our emails, the yellow call-to-action button and its text are visible and totally obvious whether or not images are enabled. In the worst case scenario, the user won&#8217;t see the nice gradient background but still knows exactly where to click to claim their payment.</p>
<p>This works because we use an image only for the background of the button, but not the button text itself. We also apply the image background with a BACKGROUND attribute and fall back on a plain yellow background color with the BGCOLOR attribute that the user will see if images aren&#8217;t enabled.</p>
<p>Example:</p>
<pre>&#60;td &#8230; <a href="http://www.versapay.com/developer-blog/the-art-and-science-of-email-rendering-across-email-clients/" class="read_more">Read more</a></pre>]]></description>
		<wfw:commentRss>http://www.versapay.com/developer-blog/the-art-and-science-of-email-rendering-across-email-clients/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cucumber Tips</title>
		<link>http://www.versapay.com/developer-blog/cucumber-tips/</link>
		<comments>http://www.versapay.com/developer-blog/cucumber-tips/#comments</comments>
		<pubDate>Thu, 17 Mar 2011 17:24:34 +0000</pubDate>
		<dc:creator>Andrea</dc:creator>
				<category><![CDATA[Developer Blog]]></category>

		<guid isPermaLink="false">http://www.versapay.com/?p=5721</guid>
		<description><![CDATA[<p>VersaPay&#8217;s development team have built the <a href="/?page_id=4780">VersaPay app</a> using Ruby on Rails. Our team often uses cucumbers to test our app and Philippe Creux has shared some of their best practices below. We hope you find this post useful!</p>
<p>After <a title="http://eggsonbread.com/2010/03/28/my-rspec-best-practices-and-tips/" rel="nofollow" href="http://eggsonbread.com/2010/03/28/my-rspec-best-practices-and-tips/" target="_blank">(My) RSpec best practices and tips</a>, I’m happy to share my Cucumber best practices and tips!  This article will help you organize, clarify and reduce the size of your cucumber scenarios.</p>
<h2>1. Organize your garden</h2>
<p>Keep your feature files organized by grouping them by business object, then action and context if any. I put all the feature files in the same directory. For instance:</p>
<pre>bank_account_add.feature
bank_account_delete.feature
user_signup.feature
user_signup_when_invited.feature
user_login.feature</pre>
<p>The steps specific to the application should be organized by business object as well (<code>bank_account_steps.rb</code>, <code>user_steps.rb</code>…). Keep the file organized grouping the steps by <code>Given</code> / <code>When</code> / <code>Then</code>.  Do not overload the files generated by Cucumber like<code>step_definitions/web_steps.rb</code> and <code>support/env.rb</code> with your own steps, helpers or setup code. These files are likely to get overwritten when you update Cucumber so store your stuff in your own files.</p>
<h2>2. Custom steps make your scenario DRY and accessible</h2>
<p>Scenarios should have the same lifecyle as your code: go Red, go Green, <strong>Refactor</strong> to make them DRY (don&#8217;t repeat yourself) and easy to read.  Group multiple steps in one. For instance:</p>
<pre>  Given I follow "Send money"
  When I fill in "Email" with "MailGuard('mukmuk','example.com')"
  And I fill in "Amount" with "10"
  And I select "Bank account" from "Source"
  And &#8230; <a href="http://www.versapay.com/developer-blog/cucumber-tips/" class="read_more">Read more</a></pre>]]></description>
		<wfw:commentRss>http://www.versapay.com/developer-blog/cucumber-tips/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Git Tips from git ready</title>
		<link>http://www.versapay.com/developer-blog/git-tips-from-git-ready/</link>
		<comments>http://www.versapay.com/developer-blog/git-tips-from-git-ready/#comments</comments>
		<pubDate>Thu, 17 Mar 2011 17:08:37 +0000</pubDate>
		<dc:creator>Andrea</dc:creator>
				<category><![CDATA[Developer Blog]]></category>

		<guid isPermaLink="false">http://www.versapay.com/?p=5608</guid>
		<description><![CDATA[<p>Looking to enhance your git proficiency? After browsing around the web I found a great site with short git tutorials and tips: <a href="http://gitready.com">gitready.com</a>. Unlike most reference material each command is explained through simple examples making the site great for learning. Tutorials are also conveniently categorized into difficulty levels: beginner, intermediate and advanced.</p>
<p>My favorite tip so far is <a href="http://gitready.com/advanced/2009/02/05/bash-auto-completion.html">Bash Auto Completion</a>, a short article on installing an auto completion script for git use on bash. This script auto-completes branch names (among other operations) so I don&#8217;t need to type the entire command when checking out a branch out.</p>
<p>- Sam R. Developer.&#8230; <a href="http://www.versapay.com/developer-blog/git-tips-from-git-ready/" class="read_more">Read more</a></p>]]></description>
		<wfw:commentRss>http://www.versapay.com/developer-blog/git-tips-from-git-ready/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
