Logging local & instance variables when exceptions occur in Ruby

With hard-to-reproduce bugs, it can be really handy to log all of the local and instance variables along with the exception. This post shows you how. Along the way we'll introduce Ruby's binding system as well as the binding_of_caller gem - a powerful tool for introspection.

Go write a web app! Five interesting Go web frameworks

Go is such a new language that even more established frameworks can have interesting quirks. One of the key issues learning the Go framework is the availability of useful documentation. Unfortunately, Go framework maintainers don’t always prioritize writing the documentation necessary to get new programmers up to speed on their frameworks. The five frameworks below, however, have usable documentation and are straightforward to use.

Remote Debugging with Byebug, Rails and Pow

Byebug is a simple to use, feature rich debugger for Ruby 2.x. In this post, we'll discuss how to set up remote debugging with byebug so that you can debug code running in Pow, Unicorn or other application servers.

Ruby's case statement - advanced techniques

Nothing could be simpler and more boring than the case statement. It’s a holdover from C. You use it to replace a bunch of ifs. Case closed. Or is it? Actually, case statements in Ruby are a lot richer and more complex than you might imagine. Let’s take a look.

Level-up `rescue` with dynamic exception matchers

When you use a rescue clause in Ruby, you can specify what kinds of exceptions you want to rescue. But what if you want to rescue exceptions by severity? By message? By time of day? In this post we'll discuss how you can create dynamic exception matchers that use your logic to decide if an exception gets rescued.

Nested errors in Ruby with Exception#cause

It's a common pattern in Ruby to rescue and exception and re-raise another kind of exception. But the original exception isn't lost! You can use Exception#cause to grab it. In this post we show you how.

Announcing realtime error monitoring for Go

If you're a Go developer, we have some great news: you can now monitor your Go applications for panics and errors with Honeybadger! We've been working hard to create the same great error monitoring experience that our Ruby customers enjoy for the Go community, and we hope you'll love the results.

How to "try again" when exceptions happen in Ruby

Ruby provides a few interesting mechanisms that make it easy to "try again" - though not all of them are obvious or well-known. In this post we'll take a look at these mechanisms and how they work.

The clever hack that makes `items.map(&:name)` work

The &: trick is a great shortcut when using enumerable methods like map. The way it works may surprise you. In this post we'll look in detail at exactly how code like `users.map(&:name)` functions under the hood.

How to Dump a Rails Model to a YAML File

I've been wanting to do some work for a while on the UI for our performance monitoring system. But the way the performance monitoring system works, it's difficult to create fake data for development.

Let's build an RSS to email digest script with Ruby

I needed a script that will fetch our most recent blog posts and output a "digest" HTML email that I can personalize. In this post we walk through the process of creating it. You'll learn about fetching and parsing RSS as well as templating with ERB. Yes! You can use ERB outside of Rails!

How OpenStruct Can Kill Performance

An OpenStruct is around 10x slower to initialize than a Struct. That was the surprising result of this benchmark where we pitted structs vs classes vs hashes vs OpenStruct. Hashes didn't do much better.

Bitwise hacks in Ruby

If you've ever thought of using Ruby to access libraries in C or Java, or to manipulate the operating system then it's critical that you know the basics of bit manipulation. We start out with the basics of binary in Ruby and finish with John Carmack's legendary inverse square root approximation.

Profile your gem memory usage with Derailed

Is your Rails app is taking up a lot of RAM? Perhaps your application’s memory footprint is being enlarged by one or more bloated gems. The Derailed gem provides some awesome tools for detecting gem bloat.