Better Feedback For Long Running Exports With ActionCable

Since Rails 5 is now in beta and ActionCable has been merged in, I wanted to give it a try. At my current job, we have a few reports that take a while to build and export (usually to PDF). For this we have a background job that will compile the report together and polling from the front end to see whether or not the file is ready for download. I'm not a fan of polling as it creates a lot of wasteful requests. Using WebSockets to get broadcasted messages from the backend seemed like a much more elequent approach. This post will use this simple use case to demonstrate ActionCable

To demonstrate this use case, we will be searching the PubMed database and returning a list of publications based on a search term. When the user enters a search term, a background job is created (I'm using Sidekiq to handle this through ActiveJob) and on the front end a modal is displayed with a spinner (although you could display a progress bar or whatever and update it with information received from the backround job). The background job will query the PubMed database and add each entry to a CSV. For this example I've capped the number of records to 5000 because the search could take an extremely long time depending on how general the search term the user has entered. As the search results are retrieved, the background job broadcasts what offset in the search it is currently working on (as mentioned earlier, this could be used to display and updated). Once the search is complete, a record is created and the file location is attached. A link is generated for the search result record and a success is broadcasted on the socket. The front end then displays the link so the user can download the file. Let's look at the code!

Read more...

Useful Ruby (and Rails) Hash Methods

Been pretty busy this past year (so much for trying to make an effort to post more :-/). Thought I make a quick post about some useful hash methods that I've been using lately.

Read more...

Token Based Authentication with JWT in Rails

This past summer, I worked on a project building out an API for a mobile application. I thought it would be cool to use token based authentication in order to secure the API. To accomplish this authentication scheme I used JSON Web Tokens and Redis.

Read more...

Redesign Launch

Yesterday, I launched a redesigned version of my site! It was long overdue for a fresh coat of paint. It has also been a long time since I last wrote anything. By redesigning the site I hope it re-invigorates me to write more often. Over the past year or so, I've switched between a few jobs where I've learned a lot of new things and have a lot of new ideas from these experiences, all of which I hope to write about here! Some of the topics I plan on discussing include software architecture, agile methodologies, client-side Javascript development, Java, and of course the world of Ruby and Rails. So stay tuned! To start I'm going to talk about my switch from Wordpress to Middleman as the platform for my site.

Read more...

Rails Rumble 2013: A Retrospective

About the Competition

Last weekend I participating in a 48 hour rails development competition called Rails Rumble. The goal of the competition is to develop a rails based application. After the 48 hour period the applications are given feedback by other developers, than by the judges. The judges choose their top 10 favorite applications and the top 10 are declared winners. There’s also a winner for the best public favorite application and one for the best application built by a single person. Judging is base on originality, usefulness, appearance, and completeness.

The Project

The project that my team, which consisted of my brother and I, was to build a platform for collaborative brainstorming. Users create themes around a project, or question to get ideas or more questions on. Members are added to the theme to add their ideas. One goal of this project was to make everything realtime. To accomplish this we used Pusher, which is a publish/subscribe based system. You can check out the application here, feel free to leave comments here or on the rails rumble site, any feedback will be appreciated.

Read more...

Rails Application Configurations

I find myself repeating my configuration all the time when creating a new rails application. I decided to give rails templates a try after watching this railscast on app generators. In it Ryan Bates goes over having a railsrc file, application templates, and application builders. One problem I did run into while trying out the strategies from the railscast was the application builder, I’m using rails 4 and it seems like they have gotten rid of this option, application templates still exist.

Read more...

Arizona Trip!

Read article

Strategy for Merging Branchs Using Git

Here’s a strategy for merging branches:

git checkout <branch_to_merge_into>
git pull --rebase
git checkout <feature_branch>
git rebase <branch_to_merge_into>
Read more...

Testing ActionMailer with RSpec

Here’s my approach to testing ActionMailer email. I want to test for two things: that the email will contain the correct content and that the email will be delivered. I also want to make sure that the email looks properly formatted, and for this I use the gem letter_opener

Read more...

Can I has_scope?!

has_scope is a nice gem for Rails applications created by plataformatec. You can find it on github. The purpose of has_scope is to dynamically retrieve data from a model by applying the model’s scopes.

Read more...

has_many Association Pitfall

Ran into an interesting pitfall at work today with a has_many association. I had was using a condition where it was constraining the returned objects by date.

Read more...

Quick and Dirty Web Apps with Sinatra

Sinatra is a simple DSL for Ruby to write web applications. Sinatra would be good for applications that don’t require a ton of data and don’t want the overhead that would come with Rails. For instance, if I just wanted to have a form and when the data was submitted it just went to a simple database table, I would probably use Sinatra.

Read more...

Why I Hate Coffeescript

I have a problem with coffeescript, it’s not necessary. I see no benefit from having to learn a new syntax that just compiles (really just converted) to another version that I already know. Coffeescript tries to fit into the same paradigm as less, sass or haml. But I actually find these tools to be useful, why? Because they take syntax that can’t be logical and makes it logical like less or sass, or can reduce the amount of text needed (from text heavy markup languages) and simplifies it like haml.

If you’re going to be working with javascript, learn native javascript! Another problem I have with it is if there are any errors with your code it won’t match up to your code (I realize that you can probably figure it out pretty easily, but this just adds another step).

Read more...

Too Many Migrations!

I recently started a new job as a rails developer. It’s my first foray into enterprise rails development in three years. One thing I noticed when looking into the new codebases I would be working with, too many migrations! In my opinion, migration files should be archived once the database schema has stabilized. Now I wouldn’t delete them, just in case something goes horribly wrong (but that would be very unlikely). Migration files should only be used to make deltas to the database, if the database is stable then there’s no reason to hold on to the deltas that built up to that version.

Read more...