HNHacker News
TopNewBestAskShowJobs

mattyb

7,040 karma · joined January 31, 2009

Hi, I'm Matt!

I'm an avid home cook and father of two.

I work on infrastructure, security, and developer experience at Descript. Before that, I led a team of SREs running security infrastructure at Google. Before that, I was an early engineer at Figma, working on infrastructure and security. Prior to Figma, I ran infrastructure at Flipboard. You might say I like working on...infrastructure.

https://twitter.com/mattyblair

personal email: me@matthewblair.net

[ my public key: https://keybase.io/mattyb; my proof: https://keybase.io/mattyb/sigs/ZMi38yH51aOj7KC4sQHOh4Y4yX7T-PvayVgqbjvg3x0 ]

submissionscomments
mattyb··on Touched (2015)
You're probably thinking of The Boy Whose Skin Fell Off: http://www.channel4.com/programmes/the-boy-whose-skin-fell-o...
mattyb··on Rust's language ergonomics initiative
Russ Cox did this when figuring out how to seamlessly add monotonic elapsed time measurements to Go:

https://github.com/golang/proposal/blob/master/design/12914-...

mattyb··on How to Onboard Software Engineers
Here are video and slide links for the aforementioned PyCon 2015 talk:

https://www.youtube.com/watch?v=kNke_4WOWAU

https://speakerdeck.com/pycon2015/kate-heddleston-how-our-en...

mattyb··on [dead]
These submissions are automatically made by a bot:

https://news.ycombinator.com/submitted?id=whoishiring

mattyb··on A Go Dependency Manager, Johnny Deps
First off: cool!

A few thoughts:

* This only works with Git. It doesn't look it'd be much work to make it work for all 4.

* This only pins deps you've declared; that set may or may not contain transitive deps. If it's not complete, the transitive deps will be frozen, forever, until you blow them out of your GOPATH.

* Issue #3 looks fun.

mattyb··on Developing a Backbone.js Edge
Any reason why it's ePub-only? I'd love a PDF too...
mattyb··on Packaging built software
Don't use `checkinstall`, use FPM:

https://github.com/jordansissel/fpm

mattyb··on WebSocket proxy support added to nginx trunk
HAProxy can, reportedly, load balance WebSocket connections:

http://blog.exceliance.fr/2012/11/07/websockets-load-balanci...

dotCloud's Hipache also looks like it was basically written to solve this problem:

https://github.com/dotcloud/hipache

mattyb··on Kindle Paperwhite
I should have mentioned that I also have an iPad. I basically use the Kindle as a small paperback replacement, and use the iPad for everything else.

I whip out the Kindle when I want to blow a Saturday breezing through the latest John Sandford cotton candy or awesome-seeming fan fiction, and I read most technical books and my Instapaper backlog on my iPad. So maybe my desired set of Kindle features is smaller than the average Kindle user, or maybe this discussion is proof that I have no idea what the average Kindle user wants.

- I've owned my (4th-gen, non-touch) Kindle for ~9 months, and it has held up just fine. Maybe if/when I break it, I'll wish for more robustness.

- I've never lent books; maybe I should!

- I haven't been without power for long enough to substantially discharge my Kindle's battery yet. I went to Belize for 9 days with it and had power the whole time, although I did more diving than reading ;-)

- Nope, I've never longed for random access. I've flipped through paperbacks before, but that's a feature I can easily live without.

- Nope, I definitely don't miss color. When I want to lay back and feel like I'm reading a little paperback from my neighborhood bookstore, I reach for the Kindle. When I read a textbook and inspect diagrams or want to look at pretty pictures in Flipboard, I grab the iPad.

I'm just weird with tablets though, so this data point may be worthless. I've considered buying a Nexus 7 (or its rumored successor) just to lay in bed and read code, and the official GitHub app for Android is the best tablet code-reading experience I've found.

mattyb··on ASK PG: If we cant get the "expired link" thing fixed, countdown instead?
No: http://news.ycombinator.com/item?id=3098756
mattyb··on Kindle Paperwhite
One data point: I'm also a very avid Kindle user, and I want exactly none of these.
mattyb··on Understanding Postgres Performance
The recently released 'PostgreSQL: Up and Running' may be right up your alley, at only 168 pages:

http://shop.oreilly.com/product/0636920025061.do

mattyb··on How we handle deploys and failover without disrupting user experience
We've seen the same behavior, so we do the draining via HAProxy, which does the right thing.
mattyb··on How we handle deploys and failover without disrupting user experience
I mentioned this in a thread the other day; I've yet to see a good use case for hot code reloading. Can you really not drain requests to that host via HAProxy (or similar), and then actually restart the service? The nice thing about that approach is that your choice of service runtime doesn't matter.
mattyb··on Quantcast File System
Any idea if HBase can work with this? Looks like there are patches for hadoop-core, a quick skim didn't reveal if HBase changes are needed.
mattyb··on Naught.js: zero downtime deployment for node.js
By 'taking the resource out of the pool', I had HAProxy in mind, not the service itself.

And naught is the equivalent of a process supervisor.

No, it's not. Can Naught do this?

http://mmonit.com/monit/documentation/monit.html#service_tes...

That's legit process supervision. Your process may still be running, but be wedged somehow. Monit can perform remediation based on signals other than process status. Naught can't (and shouldn't) do this.

The server that you describe requires 4 moving parts:

True, but our servers are running all of this anyway; you should use the best tool for the job. Instead of rewriting a fraction of logrotate, you should read `man 8 logrotate` and move on to writing code that will help your business. When you deploy an app written using another runtime, are you going to rewrite 10% of logrotate in that language too?

mattyb··on Naught.js: zero downtime deployment for node.js
I've never been interested in hot code-swapping; I find it's sufficient to just take that resource out of the pool, give it the new goodies and then boot it up again. I know the Erlang runtime can do this, but I've yet to find a good use case.

As far as std{err,out} redirection, does Node.js have no Unicorn equivalent?

Daemonization (and respawning) should be handled by a process supervisor, like supervisord/Upstart/Monit or whatever. They can do more than just 'this process died, restart it.'

Also, most of this logging code didn't need to be written:

https://github.com/indabamusic/naught/blob/master/src/log.co

Just use logrotate.

mattyb··on Amazon S3 - Cross Origin Resource Sharing Support
+1!
mattyb··on Rare Are GC Talks
That is a good paper. Thanks for the pointer!
mattyb··on Batsd: 37 Signals' Ruby Statsd implementation persisting to Redis
You don't use this over collectd; you can use BatsD with it. These tools are complementary.

collectd is very good at collecting system-level metrics and sending them somewhere. Batsd is a system for receiving those metrics and storing them.

(Note that collectd has a graphite plugin, but not one for (B|St)atsD. You'd need to write a proxy.)

mattyb··on Batsd: 37 Signals' Ruby Statsd implementation persisting to Redis
While graphite at least tried to mimic the RRDTool file-format 37signals just skips over that whole "complicated binary-stuff" and writes the data as newline-delimited ascii-text...

What benefit lies in trying to mimic RRDTool's file format?

mattyb··on Batsd: 37 Signals' Ruby Statsd implementation persisting to Redis
The Etsy blog post that introduced StatsD is helpful:

http://codeascraft.etsy.com/2011/02/15/measure-anything-meas...

mattyb··on Your first Node.js module
According to the documentation, they are the same:

http://nodejs.org/docs/v0.6.18/api/modules.html#modules_the_...

mattyb··on Python Application Deployment with Native Packages
How are FPM-generated debs any less integrated than native packages? You have the same control over the package metadata using its flags as you do with a Debian control file, and using `-s dir`, you have complete control over the package contents. You can ship rc/Upstart scripts, use pre/post-inst/rm scripts to add users and backup data, etc. These are all the same tasks that lots of Debian-maintained packages perform.

Please look at the FPM wiki, you'll see that it offers many more options for integration than checkinstall (which I used to use, and hated):

https://github.com/jordansissel/fpm/wiki

And why would you want to create source packages? One of the benefits to generating binary packages is that you compile once and roll it out to hundreds of servers. I'd rather not have to compile, say, Erlang on every target server.

mattyb··on Graphene
Homebrew makes installing Cairo very pleasant.
mattyb··on Flask is awesome
as opposed to a self-running Sinatra handler which has to be quite significantly modified to be Rack-compatible

Huh? Here's the `config.ru` that you need:

  $: << File.dirname(__FILE__)

  require 'app' #assuming app.rb
  run Sinatra::Application
Note that I have no stake in the verbosity claims, as it's not something I particularly care about. But I wouldn't consider this a significant modification.
mattyb··on Graphene: A D3.js, Backbone.js based Graphite Dashboard Toolkit
Graphite is not a monitoring tool. It stores time series data and graphs it.

You can write a monitoring system that queries Graphite, and send notifications from there. Graphite can give you the raw data that backs the graphs:

http://graphite.readthedocs.org/en/latest/url-api.html#rawda...

mattyb··on Graphene: A D3.js, Backbone.js based Graphite Dashboard Toolkit
Graphite is not abandonware:

http://bazaar.launchpad.net/~graphite-dev/graphite/main/chan...

The documentation could use a lot of work, but do note that it now lives here:

http://graphite.readthedocs.org/en/latest/index.html

mattyb··on Vitess: Scaling MySQL databases for the web
Is there a compelling reason to not use google's own LevelDB?

LevelDB is a key-value storage library. MySQL is a relational database server. They are about as different as data stores can get.

mattyb··on Managing Node.js dependencies with npm shrinkwrap
Cool! This will help make our Node.js packaging pipeline much more predictable :-)
Page 1 of 13Next →