HN user

michaelfairley

5,605 karma

michaelfairley@gmail.com

[ my public key: https://keybase.io/michaelfairley; my proof: https://keybase.io/michaelfairley/sigs/x20u7wynQvXsQ1nPkc0bf816WB13Uz5r0KbiIfOCCOc ]

Posts162
Comments257
View on HN
www.braintreepayments.com 11y ago

Launching Instant Payments for Our European Merchants

michaelfairley
12pts0
jtdowney.com 12y ago

Introducing Trustworthy: The "Two-man rule" for your data

michaelfairley
1pts0
www.robinsloan.com 13y ago

Dance the flip-flop

michaelfairley
1pts0
www.braintreepayments.com 13y ago

Introducing Braintree.js: The easiest way to accept credit cards online

michaelfairley
4pts0
groups.google.com 13y ago

Multiple vulnerabilities found in Rack

michaelfairley
21pts7
touch.venmo.com 13y ago

Venmo Touch: In-app payments with one tap

michaelfairley
2pts0
status.simple.com 13y ago

Simple NYE Postmortem

michaelfairley
2pts0
aphyr.github.com 13y ago

A guide to working with Riemann

michaelfairley
4pts3
www.antirez.com 13y ago

On Twitter, at Twitter

michaelfairley
1pts0
danteslab-eng.blogspot.com 13y ago

MIG-in-the-middle

michaelfairley
3pts1
www.codinghorror.com 13y ago

The One Thing Every Software Engineer Should Know

michaelfairley
2pts0
www.braintreepayments.com 13y ago

Braintree Launches in Australia

michaelfairley
33pts15
al3x.net 13y ago

Alone Together, Again

michaelfairley
433pts126
www.michaelboeke.com 13y ago

The Quantum Nature of Deals: Sales Timelines Explained for Geeks

michaelfairley
1pts0
www.braintreepayments.com 13y ago

How I Learned to Stop Worrying and Love Automated Database Failover

michaelfairley
81pts5
www.paperplanes.de 13y ago

A Story About Queues in Four Acts

michaelfairley
4pts0
app.fastly.com 13y ago

Amazon S3 latency increasing due to Sandy

michaelfairley
1pts0
gigaom.com 13y ago

Why Amazon customers might think twice about going east

michaelfairley
1pts0
about.travis-ci.org 13y ago

Finding Your Soul Metric

michaelfairley
1pts0
projectlombok.org 13y ago

Project Lombok

michaelfairley
2pts0
blog.izs.me 13y ago

On Sexism in Tech

michaelfairley
10pts0
dickhardt.org 13y ago

OAuth 2.0 finalized

michaelfairley
55pts16
www.industriallogic.com 13y ago

Stop Using Story Points

michaelfairley
2pts0
capotej.com 13y ago

An embedded key / value store for shell scripts

michaelfairley
1pts0
blog.1000memories.com 13y ago

Ancestry.com Acquires 1000memories (YC S10)

michaelfairley
64pts21
www.daniellesucher.com 13y ago

Jailbreak the Patriarchy

michaelfairley
2pts0
till.klampaeckel.de 13y ago

Shopping for a CDN

michaelfairley
3pts0
www.cutimes.com 13y ago

Internet Pioneer, Former Banker Behind Newest Credit Union

michaelfairley
2pts0
www.mikeperham.com 13y ago

The Sidekiq Experiment, Part I

michaelfairley
1pts0
blog.agiledeveloper.com 13y ago

Scala for the Intrigued

michaelfairley
3pts0

Braintree.js cuts down PCI scope as much as tokenization. We've worked with banks and auditors to make sure that this doesn't add any headaches for our merchants.

We recommend that you don't store or log credit card data encrypted with Braintree.js.

As far as PCI compliance, Braintree.js minimizes your PCI scope as much as tokenization. As long as you serve your site over SSL and maintain adequate security around access to servers, administrative passwords, etc., when using Braintree.js, you'll fall under SAQ A (the lowest possible PCI scope for online merchants).

I've run Go in production for a web application, and I'll say that Go is not a great choice for this task. The built in HTTP server doesn't have a way to shut down gracefully, there's not a good zero-downtime restart story, and the standard library SQL package (and abstractions on top of it) has some nasty warts that only show up under concurrent load.

If you build a webapp in Go, be prepared to spend a lot of time monkeying around with problems that are solved issues on most other platforms.

There's another large issue with queueing requests on the dyno: when the app restarts, all the requests currently queued up on that dyno get dropped and the client receives a 503.

At Braintree, most new merchants are automatically approved to start processing without any human review. In some cases, an application will need an underwriter to take a look at it before it's fully approved. The advantage of this approach is that we won't tell you that you're good to go, but then shut you down a few weeks or months down the road after you've already started processing.

Dragonfly is quite nice, but we opted not to use it for a handful of reasons: ImageMagick itself is a actually a good bit slower for basic resizing/cropping/rotating than the library we're using in Photon; Photon is ~100 SLOC, Dragonfly is ~3500; Photos are the core of our business, so a generic solution is not likely to work 100% how we need it to (we have various legacy concerns that probably would've require more code to monkey patch Dragonfly than to just write it into Photon); Java is much better than Ruby for CPU and RAM bound tasks that need to execute in parallel.

All that said, Dragonfly is a great choice for most people.

Our webapp doesn't directly communicate with photon at all. The webapp sticks the photo in a certain bucket on S3 with, and then includes the path to that photo in the photon url that gets passed to the client.

On the read path, HTTP is really nice because browsers, caches, and CDNs all speak HTTP.

We do two layers of caching (CDN in front of Varnish in front of photon). The latency is annoying, but it's no worse than serving the files directly off of S3 (as we were doing previously).

In an ideal world, Photon would be running on boxes that store the files themselves, and some sort of intelligent load balancer would make sure that the requests get directed to the correct box.