Nov 18

Giving everybody their time with the toad

Posted by jferris

Glowing frog

Our little toad has grown up to be quite the bullfrog. Atticus always hops at the opportunity to catch a new error, but from time to time we’ve experienced floods of incoming errors from a single project, often thousands per minute. We’ve occasionally had to disable such projects, but we’ve never had a policy regarding the number of errors each user could submit. However, we’ve now reached a point where we’ve realized that allowing a single project to use up so many resources is unrealistic given our goal of providing reliable service to all of our customers.

Therefore, we’re rolling out rate limits for all Hoptoad projects. Each Hoptoad plan now has a maximum number of errors allowed per minute for each project. After reaching that threshold, incoming errors for that project will be discarded for the rest of that minute. Errors will be accepted again as soon as that minute is over, and the performance of your application should not be affected. If your account is affected by this change, you’ll know - you’ll be notified by e-mail whenever a project goes over the rate limit for your plan (but only once per day for each project).

This means that we no longer plan on totally disabling projects as we have in the past. It also means that a flood of errors from a single project won’t cause problems for anyone else, and most projects are well below the limit, so few users will experience throttling.

These changes will preserve or improve the level of service for all plans, and put a more effective and fair solution in place for projects with large error traffic spikes.

Nov 11

After 35 Robot Years, The New thoughtbot.com Is Here!

Posted by fyates
redesign title image

We’re pleased to announce the brand new thoughtbot.com web site!

A short while ago, Ralph informed us that he wanted his home on the web remodeled and we felt we owed it to him. It’s been about 2.5 human years since the last update, and he was starting to ask about the cobwebs. The previous website has served us well, reflected our brand well, and received almost entirely positive feedback, but it was starting to look a bit dated.

Since the last redesign, thoughtbot has gained two experienced web designers: Kevin Burg and myself. We know thoughtbot has achieved a good deal of success in the Rails world, but we feel it’s the designers turn to shine a little.

The primary goal of this redesign was to give the site a new look — up to par with modern web design standards — while still preserving the core of our brand. During the redesign, we kept the “success in simplicity” that the previous design has achieved in mind. We finished with what we think is a solid visual realignment of the site, a preservation of the brand, and a more effective communication of the company’s core skills and focus.

Early Mockups: early thoughtbot.com mockups

The design process started with some experimentation through graphical mocks. Initially, we tried implementing a theme to the new design. We toyed with a chalkboard motif to play on a “we are the builders” mindset. Along with that, we tried using a map of the Boston T system geared towards our centralized locale and how we are really at a great location to help start ups in Boston with their ideas. Eventually we decided we had been spending too much time just playing with Photoshop and tried to move on to a real design. The day we decided this we both separately produced two really strong concepts. We spent the next couple days merging our work into a sexy unified design. What you see now at thoughtbot.com is the aforementioned sexy design.

Fred and Kevin go on different design paths with the intent to integrate their designs in to one final design:

The structural changes:

  • The site’s main navigation has been reworked.
  • The contact button has been separated from the menu for a more prominent feel.
  • Trimmed the homepage down to just one project spotlight, removing a lot of superfluous text.
  • Multiple projects are featured in a rotating carousel, each with multiple screenshots.
  • Our open source projects are now on a new page called ‘Community’, which more correctly reflects our commitment and involvement with the Ruby world.
  • We consolidated some of the information on the About page.
Evolution of the header — part of the collaboration process thoughtbot website header evolution

Some of the most prominent visual changes:

  • Brown and red color scheme.
  • Ralph’s had a makeover — he’s now shiny and centered!
  • New About page headshots — photography by Jamie Beck.
  • New button styles.
  • Fancy pants form styles. Go ahead submit a message, you’ll get a special thank you… from Ralph himself.
  • Site taken out of 2004 and introduced to 2010.

We hope you enjoy the new site, we are very proud of it. Be sure to let us know if you love the redesign, hate it, or wish it had unicorns and rainbows on it. There may even be an easter egg or two lying around.

Nov 09

New Hoptoad API and development error tracking

Posted by jferris

Development Error tracking

Have you ever wanted Hoptoad to tell you whether or not a development exception has occurred in production? Now it can!

When an exception occurs in the development environment and you have the Hoptoad plug-in installed some JavaScript is quietly inserted into the page. Once the page is fully loaded it will send the details to Hoptoad asking if a similar exception has occurred in the production environment. If it has, you get a message complete with an attention grabbing Atticus. If not, nothing happens.

While this feature is enabled by default, you can easily disable it by setting development_lookup to false in config/initializers/hoptoad.rb.

HoptoadNotifier.configure do |config|
  # ...
  config.development_lookup = false
end

New Notifier API

If you’re an active user of Hoptoad, you’ve probably noticed the notifier upgrade message on the site and in notification e-mails. The new notifier has been greatly refactored and has several improvements, including bug fixes and improvements for notifier plugin authors. You can learn more about the notifier plugin by checking out the documentation. However, possibly the most important change in the new notifier is that it uses Hoptoad’s new notification API. The new API should make it easier for authors to write notification plugins, as well as make it easier for us to support the API at a satisfactory level. There are a few noteworthy improvements there.

The old API was built on top of the Rails params parser, supporting four formats (URL-encoded params, JSON, YAML, and XML). Although this may seem like a good thing, it meant that we needed to deal with the performance details of decoding a wide variety of large data sets from four completely different sources. It also made the API difficult to document and test, because we had to maintain examples for each format. The new API supports one format (XML), with clear documentation and a public schema. Only supporting one format will also make it possible to more efficiently store notice data, which should allow us to provide more information longer. Finally, a well-tested, well-documented, simpler API reduces the likilihood of bugs, which ensures that notices are sent and received as expected.

If you’re a user of Hoptoad this means that you’ll need to upgrade your notifier plugin, as the old API will eventually be going away. Using the new API, we’ll be able to provide a faster, more stable way for your application to send us your errors.

If you’re a notifier author, this means you’ll be able to write your notifier using fewer lines and less confusion. If you’re interested in the Hoptoad notifier API for any reason, please drop us a line on the Hoptoad Notifier Development mailing list.

Oct 30

2 years of hackfests

Posted by dancroak

On Tuesday, we’ll be hosting the November Boston.rb hackfest at the thoughtbot Boston office. This marks two years and about 30 total hackfests we’ve held here.

If you’ve never attended, please join us the first Tuesday night of every month. All skill levels and backgrounds are welcome.

attendance award

Josh Nichols deserves special recognition for attendance. He has attended more hackfests than anyone else and had about a year streak of perfect attendance once.

Thanks, Josh, for keeping the group active and vibrant.

celebrating the output

While the majority of the fun of the hackfests is meeting other locals interested in similar technologies, there has been an impressive number of open source projects big and small to which Boston Rubyists have contributed patches big and small during these hackfests.

We’d like to highlight those now and thank all those for contributing.

Hackers

Note that many of the following were not written at the hackfests, although some were. All of the large projects simply had patches written at the hackfests by Boston Rubyists.

web application frameworks

Ruby on Rails is a full stack, Web application framework optimized for sustainable programming productivity, allows writing sound code by favoring convention over configuration.

gem management

Gemcutter is an open source Sinatra-and-Rails app for hosting Rubygems… awesomely.

Jeweler is a simple and opinionated helper for creating and managing Rubygem projects.

testing

RSpec is a Behaviour Driven Development framework for Ruby.

Cucumber is a BDD framework that talks to domain experts first and code second.

rspec-rails is an RSpec extension that allows you to drive the development of Ruby on Rails applications with RSpec.

Shoulda is a context test framework built on Test::Unit and a set of Rails testing “macros” that can be used in any Ruby testing framework (RSpec, test/spec, etc.).

Quiet Backtrace suppresses the noise in your Test::Unit backtraces.

jferris/mocha is a fork of Mocha that adds test spies.

RR (Double Ruby) is a test double framework that features a rich selection of double techniques and a terse syntax.

greengreen is a tool for assuring quality metrics of 100% quality.

Factory Girl is a fixtures replacement with a straightforward definition syntax, support for multiple build strategies (saved instances, unsaved instances, attribute hashes, and stubbed objects), and support for multiple factories for the same class (user, admin_user, and so on), including factory inheritance.

templating things

Effigy is Ruby views without a templating language. (alternative to Mustache, ERb)

Slidedown lets you generate slides with Markdown, for display in web browsers.

Jekyll is a simple, blog aware, static site generator that takes a template directory (representing the raw form of a website), runs it through Textile or Markdown and Liquid converters, and spits out a complete, static website suitable for serving with Apache or your favorite web server.

Rails apps

Boston.rb is the source code for http://bostonrb.org, a community site for local Rubyists.

Peas is the source code for http://peas.heroku.com, a URL shortener.

Echowaves is the source code for http://echowaves.com, social group chat aimed as an open source alternative to Campfire.

Clean Together is the source code for http://cleantogether.com, which lets people post their environmental cleanup experiences.

generators

Blitz is a Rails plugin for feature, view, controller, model, & helper generators meant to be used as part of an “Outside-In” Test-Driven Development cycle.

Webster generates random short words good for human-readable confirmation codes.

configuration

jferris/config_files is dotfiles for git, vim, zsh, & irb.

process management

Under Construction is JQuery Utility for hiding or overlaying elements that haven’t been built yet, inspired by Mile Marker.

search

Ambitious Sphinx is an Ambition adapter for Sphinx.

SearchModel is a Rails plug-in for building search forms.

authentication

Clearance is a Rails engine for authentication with email & password.

computer science

CS is is a gem containing some algorithms useful for computer science and math.

command-line interfaces

Beardo is a CLI for Co-op.

Hello is a Ruby interface to a collection of the word “hello” in many languages and dialects; written for Flickr-style messages after users sign in to a web application.

web service API wrappers

Le-Git is a Ruby wrapper for the Github API.

Daywalker is a Ruby wrapper around the Sunlight Labs API.

Twitter Search is a Ruby wrapper around the Twitter API.

countless failed and semi-failed experiments, incomplete hacks, forks, & bad ideas

Daddy Warbucks was a library idea to find orphaned Ruby code not
being sent messages from anywhere in your program. We learned a little bit about Kernel#set_trace_func and called it a night.

Recommendable was a Rails plugin concept for simple item-to-item collaborative filtering.

Nurse cares for invalid ActiveRecord objects.

dancroak/rails-templates contains Rails templates for Suspenders, Heroku, & MongoDB.

MySpace API Ruby wrapper.

Wikipedia API Ruby wrapper.

ActiveObject was an ActiveRecord-like library for persisted serialized Ruby objects.

Altering Shoulda to use context as its context/should framework.

Benchmarking an add-on to Thin.

An early, failed attempt at what Joe Ferris would later accomplish in Factory Girl.

Porting apps to Rails 2.1. Porting plugins to gems.

Videoconferencing in Eloy Duran at 1am his time in Amsterdam to talk about RubyCocoa.

Creating the first version of bostonrb.org in Merb, Haml, & DataMapper when none of us had ever used any of those tools.

Boston skyline

and a lot of pizza & beer…

I’m sure I missed a lot. Feel free to add anything to the comments.

See you Tuesday night!