Chris Bloom
I've been developing web applications since earning certificates in client/server technologies and Unix administration from WPI in 1998/1999. I began my career using classic ASP, but now focus on PHP while experimenting with Ruby and Ruby on Rails. I specialize in creating scalable, data-driven web applications. I have worked with a variety of servers and development environments. I am analytical, thorough and user-conscious. I enjoy working directly with users and clients. I am a proponent of designing and testing for usability, unobtrusive scripting, accessibility, semantic markup, white-space, in-line comments, table-reduced designs and content reduction.
Posts by Chris Bloom
Happy 21st Birthday, Ruby!
0Ruby wasn’t the first development language I fell in love with, and it probably won’t be the last, but it’s beautiful and fun and it’s my favorite tool in my toolbox at the moment. It turns 21 today. If you haven’t already, give it a try!
Some useful Bash shortcuts for Ruby on Rails commands
0Read an updated article on my Rails shortcuts: Bash shortcuts to run Rails commands through Spring, Bundler, or ye olde scripts
Like any developer, I spend a lot of time in the terminal typing out commands. Anything I can do to cut down on keystrokes is a daily win, which is why I’ve got over 50 bash alias
entries.
I frequently have to work on a several different Rails projects at a time, ranging in versions from 2.3 – 4.0. Hammering out commands for console
, server
or generate
can get pretty tedious by the end of the day, so I came up with a couple shortcuts that I’m particularly fond of:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | # RUBY / RUBY ON RAILS COMMANDS alias rails_mv="rails -v | sed 's/Rails \([0-9]\).*/\1/g'" alias bexec='bundle exec' alias brake='bundle exec rake' function cons () { if [ `rails_mv` -lt 3 ]; then ./script/console "$@" else bexec rails c "$@" fi } function gen () { if [ `rails_mv` -lt 3 ]; then ./script/generate "$@" else bexec rails g "$@" fi } function srv () { if [ `rails_mv` -lt 3 ]; then ./script/server "$@" else bexec rails s "$@" fi } alias sandbox='cons --sandbox' |
What I like most about the cons
, srv
and gen
commands is that they eliminate the mental overhead of context switching when going from the old 1.x and 2.x projects where each command is a separate bin file versus the newer 3.x+ project where they are just arguments to the rails
command – It’s the same alias for every project.
Using dig to view, backup and verify DNS zone records on OS X
0I was recently asked by a client to consolidate all of their DNS zone records and domain name registrations from 2 separate services to a single provider. The FAQ page of the current DNS service recommended using the named-xfer
shell command, but that utility isn’t available on OS X. I googled around and learned that dig
is a suitable alternative.
Finding the nameservers
Dig can be used to find nameserver information for a given domain:
1 2 3 4 | $ dig yourdomain.com NS +short ns1.nameserver.com. ns2.nameserver.com. ns3.nameserver.com. |
Viewing and Backing up DNS Records
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | $ dig @ns1.nameserver.com yourdomain.com IN ANY ;; Truncated, retrying in TCP mode. ; < <>> DiG 9.8.3-P1 < <>> @ns1.nameserver.com yourdomain.com IN ANY ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER< <- opcode: QUERY, status: NOERROR, id: 12683 ;; flags: qr aa rd; QUERY: 1, ANSWER: 7, AUTHORITY: 0, ADDITIONAL: 5 ;; QUESTION SECTION: ;yourdomain.com. IN ANY ;; ANSWER SECTION: yourdomain.com. 14400 IN NS ns1.nameserver.com. yourdomain.com. 14400 IN NS ns2.nameserver.com. yourdomain.com. 14400 IN NS ns3.nameserver.com. yourdomain.com. 14400 IN MX 0 mx1.balanced.homie.mail.nameserver.com. yourdomain.com. 14400 IN MX 0 mx2.balanced.homie.mail.nameserver.com. yourdomain.com. 14400 IN A 69.163.240.35 yourdomain.com. 14400 IN SOA ns1.nameserver.com. hostmaster.nameserver.com. 2013122000 16668 1800 1814400 14400 ;; ADDITIONAL SECTION: ns1.nameserver.com. 14400 IN A 66.33.206.206 ns2.nameserver.com. 14400 IN A 208.96.10.221 ns3.nameserver.com. 14400 IN A 66.33.216.216 mx1.balanced.homie.mail.nameserver.com. 14400 IN A 208.97.132.209 mx2.balanced.homie.mail.nameserver.com. 14400 IN A 208.97.132.210 ;; Query time: 150 msec ;; SERVER: 66.33.206.206#53(66.33.206.206) ;; WHEN: Tue Feb 4 16:17:59 2014 ;; MSG SIZE rcvd: 305</code> |
Backing these up just requires you to send that output to a file: dig @ns1.nameserver.com yourdomain.com IN ANY >> dns-backup-yourdomain.com-ns1.nameserver.com
Once you’ve updated the nameservers for a domain you can verify if they’ve changed using the dig yourdomain.com NS +short
command.
Other useful dig
commands
1 2 | $ dig yourdomain.com A +short 69.163.240.35 |
Integration Tests for a Custom PayPal Express Checkout Integration
0Paypal Express Checkout is a great way to add or extend the checkout capabilities of an e-commerce store. Most e-commerce software bundles have support for this baked in, but when you’re working with a custom-built shopping cart and have to roll your own Express Checkout integration it can be a real bear. The PayPal developer documentation is fragmented and often contradictory, and it’s never entirely clear about what steps are required to setup a developer account. They also often refer to their services using different names. And their support system is slow and cumbersome.
Because of this, when I recently worked on an Express Checkout integration for a Panoptic Development client, it took us a lot longer than we expected. A lot of that additional time came from trying to workout a proper integration test suite that would exercise our custom integration points without actually needing to hit the PayPal servers with valid requests every time. It took a lot of trial and error, but in the end I was able to get these tests working by mocking some service calls and stubbing out methods from the PayPal SDK libraries we were using.
For anyone stuck in the same spot, I documented my efforts at StackOverflow: “How to configure integration test for PayPal Express Checkout using TestUnit in a Rails 2.3 app“. My current set of tests differ slightly from what is show there and I ended up refactoring quite a bit as I added new tests, but that question and answer should be a good starting point.
UPDATE
I’ve posted a gist of all of the moving parts of my current implementation of this:
Integration tests for PayPal Express Checkout using TestUnit in Rails 2.3