Simple Database Export and Import With Character Encoding Conversion

Posted in Code, Ruby on Rails

There is a gem called ydd that offers really simple import and export of smallish databases. It exports to YAML and then imports to whatever database Rails can connect to. After using YDD a few times I’ve found it easier to pinpoint the cause of problems that occur using taps.

It doesn’t handle character encodings though so I went about adding that. With the handy rchardet gem and IConv, detecting the character encoding of the incoming string and converting it to UTF-8 was pretty simple. I’ve created a pull request for the gem that will hopefully be accepted.

The essential code is below, and revolves mainly around the detection and conversion. Using //TRANSLIT causes IConv to try and convert the incoming character code to something that exists in the UTF8 character set, and then //IGNORE will ignore any characters that don’t exist in the UTF8 character set. Chaining //TRANSLIT and then //IGNORE will make IConv try a conversion first and then ignore anything it cannot convert.

I used this gem after the above changes to convert about 400,000 records of text data with ASCII, windows-1252, IBM866 and other character encodings from an old SQLite installation to a new postgres database without any issues.

RSpec 2.6.0 and RCov

Posted in Code, Ruby on Rails, Tips and Tricks

Just upgraded to the newest RSpec (2.6.0) and found that RCov has stopped working completely? That’s what happened to me after running a bundle update. RCov refused to run, no error messages, just blank output.

After looking around for a little while I found this: https://github.com/rspec/rspec-core/issues/370

In short: the new RSpec has been broken up into modules a tad more, the one that we require for rspec to run correctly ‘autorun’ is not included by default, so to solve this simply add require ‘rspec/autorun’ to the top of your spec_helper.

Can’t see this Gist? View it on Github!

Training To Win

Posted in Inside TFG

Every organisation has to continuously solve a set of legal, financial, technical and social problems in order to survive. Small businesses have limited resources and prioritise problem solving in their main fields of endeavour. For example, software development companies like The Frontier Group constantly buy programming books, refine development practices, research new technologies and send their employees to technical training and conferences to expand their skill sets.

However, quite frequently it’s the social problems that businesses face that can make or break them. Many employees lack the skills to communicate, to work effectively in teams and to manage others. Fresh graduates may not know how to work at all. The failure to address and solve these social problems results in reduced operational efficiency, inadequate management and poor employee morale.

The stereotypical programmer is an introvert with plenty of technical skills, but few social skills. How often do you hear about software development companies conducting training in non-technical fields such as leadership, team management, project management, dispute resolution and sales? It’s rare. When it comes to employee skill sets, most companies, especially small ones, focus on improving strengths instead of addressing weaknesses.

The Frontier Group recognises that its employees can’t cut code all the time, no matter how much we love doing it. Our team leaders and project managers require excellent skills to ensure every project hits its targets. We’ve partnered with local company Alive and Kicking for management and sales training for our staff, and look forward to learning from them.

Improvements in management skills are difficult to quantify, and spending cash on training when budgets are tight is difficult to justify. As always, the adage “you have to spend money to make money” applies. Small businesses can only grow as fast as their employees will let them, and The Frontier Group is grooming its employees for success.

Catch mail and serve it through a dream with MailCatcher

Posted in Featured, Ruby on Rails, Websites or Tools

Here at The Frontier Group we were having trouble finding a simple, extensible way to look at email sent out by our web applications during development. After trying quite a few alternatives, one of our developers Sam Cochran sat down in some spare time and forced slender man into skinny jeans strapped to a mailbox to create MailCatcher.

MailCatcher is a ruby mashup to catch mail sent via SMTP to a local port and serve it in your web browser for easy testing. It lets you check out the plain text and HTML versions of the email, as well as inspecting any attachments. Thanks to WebSockets (in Google Chrome, at least) you’ll see new mail instantly as it arrives.

MailCatcher v0.3.0 displaying a message

Installation and usage instructions can be found on the project home page. Over the coming weeks I look forward to sharing some more of our open source contributions from within TFG.

Sending Apple Push notifications in rails with Redis and apn_sender

Posted in Code, Featured, Inside TFG, Ruby on Rails, Tips and Tricks

Sending iOS push notifications from a Rails application is very easy to do these days, thankfully there are many great Ruby gems that can be used to handle most of the magic for you. Recently I ran into the apn_sender gem which handles sending push notifications in a really neat way.

Sending push notifications directly from a Rails application can be slow and we probably don’t want to have the user waiting until the notification is sent, instead apn_sender can be setup to run a worker which is constantly connected to the apple push notification service. When there are new notifications to send, the notifications are queued up and sent through the always open connection that is maintained by the worker.

apn_sender uses redis as a message queue to keep track of the notifications waiting to be sent, you’ll need to install it before using the gem.

To add apn_sender in your Rails 3 application, just add the gem to your Gemfile. We’re going to need the daemons gem too so we’ll include that as well.

Can’t see this Gist? View it on Github!

Now we can create our daemon which we will be using for sending push notifications, this can be placed anywhere, I’ve put mine in script/apn_sender. Make sure to add execute permission to the file after creating so we can run it.

Can’t see this Gist? View it on Github!

Before the daemon can start running we’ll need to put our iOS push certificate into the application. Instructions for generating the certificates are available at the Apple Developer site. The certificates need to be placed inside of /config/certs and should be named apn_development.pem or apn_production.pem for production.

Once the certificates are in their correct locations, we can start up the daemon. The daemon does not know about the Rails environment so we need to specify this when starting it up. The daemon supports start, stop and restart commands. There is a verbose flag available to output more information (which can be helpful when debugging).

Can’t see this Gist? View it on Github!

Our application is now set up to send push notifications, this can now easily be performed by adding a new notification to the queue. The notify method on the APN class will take a push notification token and then our parameters, we can specify the alert message to show the user, whether or not we want sound as well as the number to display on the badge icon. Anything else we pass to notify will be sent as metadata in the push notification. Here’s an example of creating a notification.

Can’t see this Gist? View it on Github!

The worker should pick up the notification within a few seconds and send it off. The apn_sender has many other features that I haven’t covered, you can view the full documentation over at https://github.com/kdonovan/apn_sender.

Twitter

The latest @rubyfive podcast is up, our own @sj26 receiving a mention for Ruby 1.9.3 performance improvements. http://t.co/hfx3EPMz

@frontiergroup about 1 day ago #

Search Posts

Featured Posts

Categories

Archives

View more archives