Vim Function for GitHub Links Update (1/31/2018): I extracted this code to a vim plugin and made a few improvements to it: https://github.com/pgr0ss/vim-github-url I write a lot of code in Vim, and
Dropwizard Can Be Simple We had a conversation at work the other day about Dropwizard vs Spark for Java services. One of my coworkers liked the simplicity of Spark, especially when building example applications. I pointed out
Bazel and .env Files Many of our new apps at Braintree use environment variables for configuration. This is in line with Twelve-Factor principles and makes it easier to run the same artifact in multiple environments. In our
Exporting YNAB to Ledger My wife and I have been using You Need a Budget (YNAB) for a few months now. Overall, we like it, but the lack of reporting is a big missing feature. It's hard
Migrating from WordPress to Ghost I just finished migrating this blog from WordPress to Ghost. Why WordPress served me well for a long time, but it led to a setup that was hard to maintain. In order to
Goodbye WordPress This is my last post in WordPress. I’m migrating this blog to Ghost. All of the existing posts (with their current URLs) should keep working, and hopefully the RSS feed migrates as
Java REPL with JShell and Bazel One great new feature of the upcoming Java 9 release is JShell, a Java REPL. Java is long overdue for an official REPL, so I was eager to try it out. I found
Migrating from Gradle to Bazel We recently switched a collection of Java applications and libraries (in a monorepo) from Gradle to Bazel at Braintree. Overall, the transition went well and we are much happier with Bazel than Gradle.
Partial Function Application in Java 8 I’ve been doing some Java lately, and the new functional additions in Java 8 are interesting. Java still has a long way to go, but they made functional programming in Java easier.
Testing Isn't Enough: Fighting Bugs with Hacks I recently gave a presentation at Rubyconf 2014 titled: Testing Isn’t Enough: Fighting Bugs with Hacks. The video and slides are now online.
Safe Operations For High Volume PostgreSQL This post is cross-posted at Safe Operations For High Volume PostgreSQL. We use PostgreSQL extensively at Braintree, and it backs many of our highly available services (including our main payments API). We are
High Availability at Braintree Roundup I had the opportunity this year to present my talk on “High Availability at Braintree” at four conferences. Here is the roundup: RubyConf Australia (February): Slides and Video Surge (September): Slides and Video
Mingle Card Wall Greasemonkey Script We primarily use Mingle for project management at Braintree. Personally, I find that the Mingle card wall wastes too much space. Each card is the same size, so short cards are filled with
Development Hacks to Prevent Mistakes This post is cross-posted at Development Hacks to Prevent Mistakes. Bugs are an inevitable part of software development. We do our best to write higher quality software, but we never fully escape releasing
High Availability at Braintree Update (3/31/13): The video of the talk is online: High Availability at Braintree The slides from my RubyConf Australia talk are now online: High Availability at Braintree. The slides were generated
Scaling PostgreSQL at Braintree: Four Years of Evolution This post is cross-posted at Scaling PostgreSQL at Braintree: Four Years of Evolution. We love PostgreSQL at Braintree. Although we use many different data stores (such as Riak, MongoDB, Redis, and Memcached), most
Testing Interactions with a State Based Approach There are two main types of unit tests: state based and interaction based. State based tests rely on the verification of state. These tests typically perform some operation and then check the state
Automate statement downloading with statement_hoarder If you’re like me, you’ve switched all of your websites to paperless statements. No more bank, credit card, or utility statements arrive in the mail. But you would still like to
How Braintree Builds a Platform for Developers The slides from my Intuit CTOF (“Create The Offering Forum”) talk are now online: How Braintree Builds a Platform for Developers. The slides were generated using showoff.
Data Migrations for NoSQL with Curator This post is cross-posted at Data Migrations for NoSQL with Curator. The NoSQL movement has brought us a wave of new data stores beyond the traditional relational databases. These data stores come with
Untangle Domain and Persistence Logic with Curator This post is cross-posted at http://www.braintreepayments.com/devblog/untangle-domain-and-persistence-logic-with-curator. The problem Ruby on Rails is a great web framework, and we use it extensively at Braintree to build web apps. One
Setting up a Zotac ZBOX with XBMC as a home theater PC I have wanted a Home theater PC for awhile to play movies, music, Hulu, and more through my TV. I thought briefly about buying a prebuilt device (like a Roku), but I decided
Running multiple ruby projects with foreman and subcontractor We have a suite of ruby applications at Braintree. There are many times when we need to run more than one of these apps at the same time. For example, we might need
speclj-growl 1.0 released I just released version 1.0 of speclj-growl. This is a plugin for the speclj test framework for clojure which adds Growl popups for each spec run. For those unfamiliar with Growl, it
Using local jars with leiningen Leiningen uses Maven to make dependency management of clojure projects much simpler. However, if you need to depend on jars that are not in a Maven repository, things get a little more complicated.