Skip to main content
thoughtbot thoughtbot
  • Live on Twitch!

    thoughtbot is livestreaming

    Work alongside the thoughtbot team as we collaborate with each other and our clients, live. Ask us anything, we're live right now!

  • Case Studies
  • Blog
  • Let’s Talk
Live on Twitch!

thoughtbot is livestreaming

Work alongside the thoughtbot team as we collaborate with each other and our clients, live. Ask us anything, we're live right now!

Let’s get started!
View all Services
Development
  • Ruby on Rails
  • Hotwire
  • AI and Machine Learning
  • Maintenance
  • Mobile
Design
  • Discovery Sprints
  • UX, UI, and Product Design
  • Design Systems
Product
  • MVP
  • Product Management
  • Accessibility
Team and Processes
  • Team Augmentation
  • Fractional Leadership
View all Services
View all Resources
Development
  • Tech Leadership Resources
  • Open Source
  • Books
  • The Bike Shed Podcast
  • Live Streaming on YouTube
  • Conference Talks
The business of great software
  • Playbook
  • Purpose Built
  • Giant Robots Smashing Into Other Giant Robots Podcast
  • Design Sprint Guide
  • Live Streaming on LinkedIn
View all Resources

Articles by Sage Griffin

View other authors

  1. An Introduction to WebGL

    WebGL is a thin wrapper around OpenGL that is exposed through a JavaScript API.

    Sage Griffin
    September 5, 2014
    • Web
    • JavaScript
    • WebGL
  2. Buttons with Hold Events in Angular.js

    A nicely decoupled Angular UI component that can easily be reused across applications.

    Sage Griffin
    August 12, 2014
    • Web
    • JavaScript
    • AngularJS
  3. How Rails' Type Casting Works

    Why is it that when you assign a property to an Active Record model and read it back, the value isn’t always the same?

    Sage Griffin
    June 16, 2014
    • Web
    • Ruby
    • Rails
  4. Using Arel to Compose SQL Queries

    Use composition to build more complex SQL queries in Ruby using ActiveRelation’s API.

    Sage Griffin
    February 17, 2014
    • Web
    • Rails
  5. Function Currying in CoffeeScript

    Convert a CoffeeScript function that takes multiple arguments into a chain of functions that take one argument each. This is called function currying, and it can make your easier to understand!

    Sage Griffin
    February 12, 2014
    • Web
    • JavaScript
  6. Handling Associations on Null Objects

    How to use ActiveRecord’s NullRelation.

    Sage Griffin
    January 10, 2014
    • Web
    • Rails
  7. Animating Modals in Angular.js

    The end result is a beautiful transition and zero conditionals.

    Sage Griffin
    December 17, 2013
    • Design
    • Web
    • JavaScript
  8. Using JavaScript Promises to Reason About User Interaction

    Asynchronicity isn’t just for concurrency, and promises aren’t just for XHR.

    Sage Griffin
    December 11, 2013
    • Web
    • JavaScript
  9. Two gotchas every CoffeeScript and Backbone.js developer should know

    How mutation can lead you down the wrong path.

    Sage Griffin
    May 21, 2013
    • Web
    • JavaScript

Footer

thoughtbot
  • Services
  • Case Studies
  • Resources
  • Let's Talk
  • Our Company
  • Careers
  • Purpose
  • Blog
  • Sponsor
  • Mastodon
  • Bluesky
  • GitHub
  • YouTube
  • Twitch
  • Feeds
© 2025 thoughtbot, inc.

The design of a robot and thoughtbot are registered trademarks of thoughtbot, inc.

  • US: +1 (877) 9-ROBOTS
  • UK: +44 (0)20 3807 0560
  • Beware of fraudulent thoughtbot job listings Learn more
  • Code of Conduct
  • Accessibility Statement
  • Privacy Policy