Each week our hosts will discuss their development experiences. We'll talk about Ruby, Rust, Go, and anything else that has drawn our interest this week. Subscribe below to be notified when new episodes are published!
A background job should be a function. So, putting more things in it is always a good idea! Sean announced that he shipped background jobs for crates.io. It's been in production for more than two weeks, and no issues have been reported. It's made life much easier because he no longer needs to spend time manually cleaning or cloning the index before changing a config bar. Now, he's working on librafying "Swirl." Also, Sam expressed frustration with his decision to use heredocs and block local variables in his Ruby autoformatter (Rubyfmt) - big mistake that caused big problems. Crates.io Swirl Rubyfmt Mike Perham Sidekiq Ruby Programming Language Ruby on Rails Diesel Redis Postgres Rust Heroku DigitalOcean The Yak Shave on Twitter Sam Phippen on Twitter Sean Griffin on Twitter
Do you use Git practically every day, but have no idea how to implement it? Need a more accessible and easier way than reading original source code to understand how it works? Want to know how to rebuild Git in a high-level language to learn the concepts involved? Sam talks to James Coglan, who wrote the book, Building Git. It teaches readers how to rebuild Git in Ruby and helps them develop debugging skills. Also, James shares his thoughts on Sam's Ruby autoformatter (Rubyfmt), which takes a radically different approach to RuboCop. Rubyfmt won't offer any configuration options that allow users to effect its style opinions. James Coglan Building Git by James Colgan James Colgan on GitHub Git How to debug anything Strace Types and Programming Languages Book Git Commits Rubyfmt Crates.io The Yak Shave on Twitter Sam Phippen on Twitter Sean Griffin on Twitter
Sean and Sam talk about debugging a memory leak with Crates.io when upgrading to Rust 1.32 that could only be reproduced in production. The problem was related to the jemalloc memory allocator being used in the newer version of Rust. Such an issue causes an impact, regardless of the language being used. Many memory allocators exist, but you're usually not forced to utilize a specific one or library. Sean was able to find allocations from three places: Libgit 2, OpenSSL, and MIME-types. Is there a single culprit? Or, just a ton of tiny paper cuts? The last resort would be to run Valgrind in production. In addition, Sam expresses his frustration when giving an update on progress with fixtures and script repositories for Ruby autoformatter (Rubyfmt). Merb Jemalloc Sidekiq Heroku ephemeral file system Cargo release build Libgit2 Rust mime types library Generational garbage collection Rubyfmt Swift formatter proposal The Yak Shave on twitter Sam on twitter Sean on twitter
Derek Prior, engineering manager at GitHub, joins Sam to talk about what they've been working on these days. Derek's doing GitHub projects that can't talk about. But, he did mention that GitHub recently shipped small-scope changes to its issue templates. Sam dives deep into details about building a Ruby auto formatter and not wanting to be the sole dictator of style for the rest of Ruby for all time. Feedback from others through a request for comments (RFC) process is valuable for adoption and implementation. For the goodness of the community, get them to tell you all their style opinions! Then, everyone can look forward to using Sam's auto formatter. Derek Prior on GitHub Derek Prior on Twitter GitHub Issue Templates GitHub Actions Rust Justin Searls Hash Rockets are good actually Thoughtbot Eric Hodel Noel Rappin's Podcast The Yak Shave on Twitter Sam Phippen on Twitter Sean Griffin on Twitter
Ruby's language development is off the charts. Also: we talk about programming. Sam and Sean discuss Ruby, auto-formatting, and whether Hash Rockets are good. They bring other languages, such as Go, Rust, and Elixir, into their formatting discussion. Also, Sam shares some work-related news. He's leaving his job at DigitalOcean. Before he goes, he wants to get as much done as possible to give his team the best opportunity to succeed. That's the mark of a truly great manager. But, at the same time, he's looking forward to his next gig! Sam Phippen on Twitter Sean Griffin on Twitter RubyConf Hash Rockets are good actually Justin Searls Ryan Davis
We're still time travelling, Sam has since left DigitalOcean, but in this episode, he talks about his experiences there. Sean talks about his experiences managing the crates.io team, and incidents on an open source project with volunteer time. Sam talks about his experiences scaling go programs, and processes vs threads, as well as why kubernetes makes the trade offs between goroutines and processes pretty unimportant. Crates.io team on GitHub Rust Discord - where crates.io team meetings happen Goroutines Go channels Go rate limiter Plushie ferris Nginx forwarded for proxying Sean on twitter Sam on twitter
Yak Shave - Episode 8 This episode was recorded on October 21st 2018. We thought it best to get this to you, even though it's a little stale :) Remember that dark, scary time in October 2018 when GitHub went down? Sean is joined by Derek once again to discuss what they've been up to. Sean not only experienced frustration with GitHub's downtime, but Crates.io's dependency on it. There's been a lot of heated discussions in the community about Crates.io's policies, or lack thereof. Specifically, focus has been put on crate name squatting - the practice of uploading an empty crate to reserve the name. Sean wants to prevent or eliminate such disruptive and malicious behaviors and actions that force action to be taken and policies to be revised or created. Do not disrupt service to make a point. It wastes everybody's time! Sean had a stressful week and knows he will not always agree with users. But, in the future, he promises to remain engaged and responsive. Fortunately, Derek had a good week - thanks to the Suggested Changes feature he released for GitHub. Derek Prior on GitHub Derek Prior on Twitter GitHub Universe GitHub's Suggested Changes Feature Crates.io Rust Belt Rust GitHub Actions Sam Phippen on Twitter Sean Griffin on Twitter The Yak Shave on Twitter
Sean and Sam talk all about testing. Sam created an ideal testing pyramid based on personal experience and from talking with test thought leaders, such as Justin Searls. The testing pyramid has “integrated” at the top, and “isolated/unit” at the bottom, along with a wide base and X axis for the number of tests you should be writing. Write as few integration tests as possible, although you may write some that you don't keep. Isolated tests refer to where the only thing you are executing is one file or function's worth of code. Then, there's some tests to never write. You should be able to look at a test and know instantly if it's correct or not. Whether using a pyramid or bowtie scheme, teams should embrace testing, rather than hate it.
This week Sean is joined by former cohost Derek Prior. After a brief reflection on the end of The Bike Shed, we discuss WebAssembly and what it means for the future of the web as well as native sandboxing. Finally, we catch up on what Derek has been doing since leaving The Bike Shed. Corrections from this episode: Emscripten and the LLVM backend were mixed up. Emscripten is not part of LLVM, and Rust moved from Emscripten to the LLVM backend. Virtually every time Sean said "unprivileged" he meant to say "privileged" Show notes: WebAssembly Asm.js Parcel Meltdown and Spectre Lua Rust Elm Exploring how Elm can target WebAssembly Shopify Careers
In this episode, Sean and Sam discuss the challenges of feedback cycles in organizations, how we could benefit from more feedback in open source, and some idiosyncrasies regarding libcurl and the HTTP/1.1 specification. crates.io's (WIP) background processing Specification of the Accept-Encoding header (you SHOULD NOT send gzip if it's not included) Replacing libcurl with reqwest in crates.io Sam properly sets the Host header in http.rb Specification of the Date header
In this episode of The Yak Shave, Sean gets Sam's opinion on dealing with documentation. They share tips, tricks, and workarounds regarding queryable structures, databases, APIs, languages, documentation, and more to address these users. Then, Sean offers Sam advice on how to debug a Ruby issue surrounding database CPU usage. Shopify Careers Diesel Diesel's Discourse Diesel: Where to find things/Constructing a query Adding diesel_manage_updated_at to SQLite
In this episode of The Yak Shave, Sean shares the most nightmarish debugging experience he has had in a long time. rails_fast_attributes was down to one failure, which manifested itself as a test where a query was expected to run 269 times, but only ran 265 times. After testing, troubleshooting, and finding the root cause, he determined that it was actually behaving completely fine. Shopify Careers In the Testing Weeds with Sam Phippen and Justin Searls
In this episode of The Yak Shave, Sean and Sam discuss their experiences with incident management, the difficulties of getting an on-call rotation right. DigitalOcean's status page DigitalOcean product documentation on Droplets Google Site Reliability Engineering book DigitalOcean's rebuild vs. restore On-the-fly composition of dashboards using Grafana DigitalOcean dropped primary production database Runway Overrun DigitalOcean's blog How DigitalOcean supports remote employees
The despacito music video. A video of Sean trying to get Ruby saying despacito The bikeshed: Sean's previous podcast. Crates.io: the package registry for Rust and Cargo the rust package manager Carol and Ashley on twitter. AWS S3 and "Read Your Writes" consistency A good primer on Eventual Consistency, and separately, a good primer on "read your writes" Sidekiq: Mike Perham's Ruby job processing library Advice on long running jobs RabbitMQ and the jepsen analysis of it's failure modes. At least once semantics Idempotency keys by stripe. GitHub's GraphQL API Two phase commit Postgres skip locked Diesel's transaction function