---
title: "DHH says goodbye to TypeScript"
publication: "Ruby Weekly"
issue: 668
published_at: "2023-09-07"
canonical_url: "https://rubyweekly.com/issues/668"
---

Plus Flipper turns 1.0, 37signals shakes up SaaS, and two new Ruby books are out. |        

#​668 — September 7, 2023 

[Read on the Web](https://rubyweekly.com/issues/668)   

**Normal service has been restored – I'm back from my summer vacation 😅** If you haven't had an issue of _Ruby Weekly_ for a few weeks, it's my fault, not yours, but we're now back all the way through till Christmas.. hopefully. There's a lot to catch up on, so let's go.
__
_Peter Cooper, your editor_ 

Together with [![Fullscript\](https://res.cloudinary.com/cpress/image/upload/c_fill,g_auto,w_272,h_46/e_make_transparent/co_white,e_outline:7/jzojy4uvxxkgs016whkl.png)](https://builders.fullscript.com/upgrading-to-ruby-3-in-small-steps-80c350e5ea03)   

Ruby Weekly 

[![\](https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/rgzwm5lsfvhsw8xgbgvg.jpg)](https://railsatscale.com/2023-08-29-ruby-outperforms-c/)  

[Ruby Outperforms C: Breaking the Catch-22](https://railsatscale.com/2023-08-29-ruby-outperforms-c/) — YJIT’s ability to improve performance by adapting to run-time behavior can increase the speed of our code in a way that dropping down to C can’t, demonstrates Aaron. This should encourage us to write as much pure Ruby as possible without needing to consider dropping down to C. 

Aaron 'tenderlove' Patterson   

Aaron went a step further on the performance train this week by demonstrating [how to speed up `StringScanner` based lexers](https://tenderlovemaking.com/2023/09/02/fast-tokenizers-with-stringscanner.html).  [![\](https://copm.s3.amazonaws.com/8406d662.png)](https://builders.fullscript.com/upgrading-to-ruby-3-in-small-steps-80c350e5ea03) 

[Upgrading to Ruby 3 in Small Steps](https://builders.fullscript.com/upgrading-to-ruby-3-in-small-steps-80c350e5ea03) — Upgrading Ruby versions can be a challenging task for large applications and teams. This is how an engineer at Fullscript broke the problem down into many small deployments to get their application from Ruby 2.7 to 3.1. Explore our [career page](https://fullscript.com/careers) and discover the exciting possibilities that await you. 

Fullscript sponsor   

[DHH: 'Turbo 8 is Dropping TypeScript'](https://world.hey.com/dhh/turbo-8-is-dropping-typescript-70165c01) — As we might say in England, DHH knows how to _“throw the cat among the pigeons”_ ([explanation](https://en.wikipedia.org/wiki/Throw_the_cat_among_the_pigeons)) and get people talking. This time, TypeScript is his target. He’s not a fan and he doesn’t want it in Rails’ _Turbo_. Unsurprisingly, this sent TypeScript-land into a tizzy on Twitter, but bad luck, it’s [already been ripped out](https://github.com/hotwired/turbo/pull/971). 

David Heinemeier Hansson   

🎙️ If you want to hear more from DHH, he went on _The Rails Changelog_ podcast to [discuss Rails 8, Kamal, The Rails Foundation, and more.](https://www.railschangelog.com/12)  

- 🎧 Andrew Atkinson joined Brittany Martin on the _Ruby on Rails Podcast_ to [discuss his new book, _High Performance PostgreSQL for Rails._](https://www.therubyonrailspodcast.com/486)
- 📕 In other book news, The Evil Martians interviewed Vladimir Dementyev [about his new book, _Layered Design for Ruby on Rails Applications._](https://evilmartians.com/chronicles/it-deserved-its-own-tome-layered-design-and-the-extended-rails-way)
- 💼 Olly Headey thinks about [how Rails stands as a career choice in 2023.](https://world.hey.com/olly/ruby-on-rails-as-a-career-choice-in-2023-fe4582f5)
- ⛴ Remember the _MRSK_ container deployment tool DHH [unveiled](https://world.hey.com/dhh/introducing-kamal-9330a267) 6 months ago? It's [now called _Kamal_](https://kamal-deploy.org/) due to a trademark claim.
- 🎭 Rails is gaining support for [using Playwright as a driver for system tests.](https://github.com/rails/rails/pull/48950)
- 1️⃣ 37signals, essentially the birthplace of Rails, thinks the SaaS business model is due a shakeup and presents [Once](https://once.com/), the idea of charging end users for self-hosted apps _once_ and letting them deploy on their own hardware (what's old is new again!) The first product drops later this year and is bound to be a Rails app.
- ❌ Related to the above, DHH has been thinking about a future where [🐦 apps are shipped with _no_ front-end compilation at all,](https://twitter.com/dhh/status/1699493699212960030) thanks to import maps and CSS nesting.
- 📄 A [Rails database migrations cheatsheet.](https://www.akshaykhot.com/rails-database-migrations-cheatsheet/)  

📕 Articles and Tutorials 

[![\](https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/b5wkcmkbcd9weqrdrguh.jpg)](https://www.akshaykhot.com/turbo-internals/)  

[Let's Read the _Turbo_ Source: What Happens When You Click a Link?](https://www.akshaykhot.com/turbo-internals/) — Code reading is one of the best ways to learn, in my experience, but it helps if you have someone guiding the process. This is a good tour. 

Akshay Khot   

[Seven Ruby Techniques to Improve Your Debugging Skills](https://www.fastruby.io/blog/how-to-improve-debugging-skills-in-rails.html) — No universal platitudes here, these are all Ruby specific techniques, including working out where methods are in complex apps, getting backtraces, and ad-hoc monkey patching. 

Ashwini Sukale   

[Free eBook: Advanced Database Programming with Rails and Postgres](https://pganalyze.com/ebooks/advanced-database-programming-rails-postgres?utm_source=RubyWeeklySecondary09072023) — Learn about subqueries, materialized views, and custom data types in Postgres and Rails. Realistic real-life examples, and source code so you can follow along. 

pganalyze sponsor   

[Speed Up Your Rack Application with HTTP](https://thoughtbot.com/blog/ruby-rack-performance-improvements-tutorial) — If you’re using Rails, it does a lot of this HTTP header wrangling for you, but that doesn’t mean you shouldn’t understand how it works. 

Steve Polito (thoughtbot)   

[Let's Implement `map` from First Principles](https://www.akshaykhot.com/map-from-first-principles/) — A little functional programming that uses higher-order functions to recreate a common collection method so you can get func-y. 

Akshay Khot   

[Appropriately Using `Thread.handle_interrupt`](https://island94.org/2023/08/appropriately-using-rubys-thread-handle_interrupt) — If you are writing multi-threaded code, you need to think about how and when interrupts can occur, or you could end up with deadlocks and other problems. 

Ben Sheldon   

[Roda + Turbo Streams = ❤️](https://fpsvogel.com/posts/2023/roda-app-with-hotwire-turbo-streams) — You don’t have to use Rails to get Hotwire and Turbo Streams. 

Felipe Vogel   

[Throttling Rails Logins with Rack::Attack](https://greg.molnar.io/blog/rails-tricks-issue-18/) — Middleware and Rack make some crucial things straightforward, like saving your app from DoS attacks. 

Greg Molnar   

[Collecting Prometheus Metrics from Multi-Process Web Servers, The Ruby Case](https://mkaz.me/blog/2023/collecting-metrics-from-multi-process-web-servers-the-ruby-case/) 
Michal Kazmierczak   

▶[Adding System Tests to a Rails App](https://www.driftingruby.com/episodes/system-tests) 
Dave Kimura     

Jobs  

[TravelJoy | Senior Full Stack Engineer | Remote in USA/Canada | Full-Time](https://join.tjoy.io/fs-eng) — TravelJoy is the market network for leisure travel. Thousands of travel agents love and depend on our product every day. 
TravelJoy - Bring the joy back into travel planning   

[Senior Backend Engineer (Backend)](https://sweatcoin.teamtailor.com/jobs/2274924-senior-backend-developer-ruby-on-rails?promotion=595108-trackable-share-link-rubyweekly) — 12M user devices sent us data daily last week, 6M of them opened the app. Apply your knowledge and help make our users healthier. 
Sweatcoin   

[Find Ruby Jobs with Hired](https://hired.com/join/?utm_source=newsletter&utm_medium=sponsor&utm_campaign=%28b2c%29%28l-all%29%28r-all%29%28cooper-rubyweekly%29&utm_content=easy-job-hunting) — Hired makes job hunting easy-instead of chasing recruiters, companies approach you with salary details up front. Create a free profile now. 
Hired     

🛠 Code & Tools 

[![\](https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/gif7qalcqlsjzxupqrmu.jpg)](https://blog.flippercloud.io/1-0/)  

[Flipper 1.0: A Feature Flag Solution for Rails](https://blog.flippercloud.io/1-0/) — If you want to easily turn features on and off for different users or groups of users in your app, Flipper is for you. It began life while John worked at GitHub (he famously [built an app that was acquired by GitHub](https://www.johnnunemaker.com/speakerdeck/)) and now not only deserves its 1.0 milestone, but it’s now a more serious project _and_ product overall, with Garrett Dimon coming on as a full-time developer on the project, and a new free tier to the [Flipper Cloud](https://www.flippercloud.io/) hosted service. Onwards and upwards! 

John Nunemaker and Garrett Dimon   

[Grape 1.8: Opinionated Framework for Creating REST-like APIs](https://github.com/ruby-grape/grape) — Grape can run on Rack or be easily pulled into existing apps using Rails or Sinatra, say, and provides a neat DSL to build RESTful APIs. 

Michael Bleigh, Intridea Inc. et al.   

[Ready for Rails 7.0.7? Need to Upgrade but Have No Time? We Can Help!](https://www.fastruby.io/monthly-rails-maintenance?utm_source=cooperpress&utm_medium=paidplacement&utm_campaign=rubyonrailsupgrade&utm_term=&utm_content=textonly) — Whether you’re upgrading from one or five versions ago—we ensure a smooth process that doesn’t sacrifice your roadmap. 

Ruby on Rails upgrade services sponsor   

[Dude Policy: Policy Objects from the 'Current User' POV](https://github.com/equivalent/dude_policy) — `current_user.dude.able_to_edit_article?(article)` 

Tomas Valent   

[PyCall: Call Python Functions from Ruby](https://github.com/mrkn/pycall.rb) — A long standing library but that, as of now, supports Ruby 2.4+ and Python 3.7+. 

Kenta Murata   

- [minitest-spec-rails 7.2](https://github.com/metaskills/minitest-spec-rails)
 ↳ Make Rails use `MiniTest::Spec`
- [ValidEmail2 5.0](https://github.com/micke/valid_email2)
 ↳ ActiveModel validation for email addresses.
- [Aruba 2.2](https://github.com/cucumber/aruba)
 ↳ Test CLI apps with Cucumber, RSpec or Minitest.
- [rails-graphql 1.0](https://github.com/virtualshield/rails-graphql)
 ↳ A GraphQL server solution for Rails apps.
- [Business Class 1.1](https://nts.strzibny.name/businessclass-1.1/)
 ↳ Paid Rails SaaS starter kit/template app.
- [Bashly 1.1](https://github.com/DannyBen/bashly)
 ↳ Bash command line framework and CLI generator.
- [counter_culture 3.5](https://github.com/magnusvk/counter_culture)
 ↳ Faster counter caches for Rails apps.
- [Active Delivery 1.0](https://github.com/palkan/active_delivery/releases/tag/v1.0.0)
- [factory_bot 6.3](https://github.com/thoughtbot/factory_bot)
- [ERB Lint 0.5](https://github.com/Shopify/erb-lint)         

Curated by [Peter Cooper](https://twitter.com/cooperx86) and [Glenn Goodrich](https://twitter.com/ruprict).
Published by [Cooperpress](https://cooperpress.com/). 

[Change your email](https://rubyweekly.com/edit_subscription/*|UID|*) or [Stop getting this newsletter.](https://rubyweekly.com/leave/*|UID|*) 

© Cooper Press Ltd · Fairfield Enterprise Centre, Louth, LN11 0LS, United Kingdom [Supporting Ukraine](https://linktr.ee/RazomForUkraine) 

Other weekly newsletters we publish include [Postgres Weekly](https://postgresweekly.com/), [React Status](https://react.statuscode.com/), [Frontend Focus](https://frontendfoc.us/), and [JavaScript Weekly](https://javascriptweekly.com/).
