← Extractions

Introducing Sorbet into your Ruby codebase — Erwin Kroon at wroclove.rb 2024

Erwin Kroon, a GitHub engineer on the Issues platform team, shares his experience adopting Sorbet — Stripe's gradual type checker — in GitHub's 10-year-old Ruby codebase. He walks through syntax, require_ancestor, T.bind, RBI files, Tapioca, and performance trade-offs, concluding Sorbet is useful for large refactorable codebases but awkward for greenfield projects.

Model
claude-opus-4-7
Ingestion
794c43ba
Input tokens
680,893
fresh
509,023
cached
164,501
cache write
7,369
Output tokens
17,365
Duration
294.1s
Roundtrips
15
Tool calls
26
Cost
$0.00
Nodes/edges extracted
23 / 50
Read set (nodes/edges)
130 / 2

Nodes (23)

create John Hawthorne person
kind (empty) person
name (empty) John Hawthorne
slug (empty) john-hawthorne
description (empty) Engineer at GitHub whom Erwin Kroon cites as the expert on Sorbet, runtime type-checking implementation details, and ...
short_description (empty) GitHub engineer deeply involved in Ruby typing and performance work.
update Introducing Sorbet into your Ruby codebase talk
description Talk at wroclove.rb 2024. Erwin Kroon's wroclove.rb 2024 single-speaker talk on introducing Sorbet, Stripe's gradual type checker for Ruby, to ...
short_description Talk at wroclove.rb 2024. Erwin Kroon's wroclove.rb 2024 talk on adopting Sorbet at GitHub.
create GitHub company
kind (empty) company
name (empty) GitHub
slug (empty) github
attrs (empty) {"industry" => "developer tools / SaaS"}
description (empty) Developer-collaboration company behind the github.com platform (source hosting, pull requests, issues, Actions). Runs...
short_description (empty) Developer collaboration platform hosting Git repositories, issues, pull requests and Actions.
update Erwin Kroon person
attrs (empty) {"prior_role" => "Full-stack developer (React)", "current_team" => "GitHub Issues platform"}
description Conference speaker. Dog walker with a 'nice side job writing Ruby at GitHub'. Joined GitHub as a full-stack developer writing React, then...
short_description Conference speaker. GitHub engineer on the Issues platform team; polyglot Ruby/React developer.
update Stripe tool
attrs {"category" => "service"} {"category" => "service", "industry" => "payments / SaaS"}
description Online payments platform. Used in the Prevent Account Sharing talk as the source of truth for revenue — the team watc... Online payments platform. Original author of Sorbet, the gradual static type checker for Ruby. Stripe is distinct fro...
short_description Online payments platform widely used by SaaS applications. Online payments company; original author of the Sorbet Ruby type checker.
update Shopify company
description E-commerce SaaS platform cited as one of the most recognizable multi-tenant Rails architectures, using a row-level pa... E-commerce SaaS platform cited as one of the most recognizable multi-tenant Rails architectures, using a row-level pa...
short_description E-commerce platform; well-known large-scale Rails multi-tenant architecture. E-commerce platform; well-known large-scale Rails multi-tenant architecture and author of Tapioca.
update Sorbet tool
attrs {"origin" => "Stripe", "category" => "tool", "language" => "Ruby"} {"origin" => "Stripe", "category" => "tool", "language" => "Ruby", "implementation_language" => "C++"}
description Gradual static type checker for Ruby, originally created by Stripe. Provides type signatures, runtime checks, and IDE... Gradual static type checker for Ruby, originally created by Stripe. Provides type signatures, runtime checks, and IDE...
create Tapioca tool
kind (empty) tool
name (empty) Tapioca
slug (empty) tapioca
attrs (empty) {"category" => "tool", "language" => "Ruby"}
description (empty) CLI tool by Shopify that replaces Sorbet's old built-in RBI generation/download. Downloads pre-generated RBI stubs fo...
short_description (empty) Shopify CLI for downloading and generating Sorbet RBI type stubs.
create RBI tool
kind (empty) tool
name (empty) RBI
slug (empty) rbi
attrs (empty) {"category" => "tool", "language" => "Ruby"}
description (empty) Sorbet's sidecar type-signature file format. RBI files look like normal Ruby but contain only method/constant declara...
short_description (empty) Ruby interface file format for Sorbet type signatures separate from implementation.
create requires_ancestor concept
kind (empty) concept
name (empty) requires_ancestor
slug (empty) requires_ancestor
attrs (empty) {"category" => "practice"}
description (empty) Experimental Sorbet feature enabled by `T::Helpers` and `requires_ancestor { Klass }`. Lets a module declare that it ...
short_description (empty) Experimental Sorbet feature declaring that a module must be included by a given ancestor class.
create T.bind concept
kind (empty) concept
name (empty) T.bind
slug (empty) t-bind
attrs (empty) {"category" => "practice"}
description (empty) Sorbet helper (`T.bind(self, SomeType)`) used inside included modules to tell Sorbet the runtime type of `self` when ...
short_description (empty) Sorbet runtime helper that rebinds `self` to a given type inside a block/method.
create T.unsafe concept
kind (empty) concept
name (empty) T.unsafe
slug (empty) t-unsafe
attrs (empty) {"category" => "practice"}
description (empty) Sorbet escape hatch that tells both the static checker and the runtime to ignore typing for the wrapped expression. U...
short_description (empty) Sorbet escape hatch disabling type checks for a single expression.
create TracePoint API concept
kind (empty) concept
name (empty) TracePoint API
slug (empty) tracepoint-api
attrs (empty) {"category" => "architecture"}
description (empty) Ruby core API that lets code subscribe to runtime events (method calls, returns, line execution, raises, etc.). Used ...
short_description (empty) Ruby core API for subscribing to runtime execution events.
create YJIT tool
kind (empty) tool
name (empty) YJIT
slug (empty) yjit
attrs (empty) {"category" => "tool", "language" => "Ruby"}
description (empty) Just-in-time compiler for MRI Ruby developed by Shopify. Erwin Kroon notes that Sorbet's runtime type assertions (`T....
short_description (empty) Shopify-developed just-in-time compiler for MRI Ruby.
create Use typed: strict as the lower bound takeaway
kind (empty) takeaway
name (empty) Use typed: strict as the lower bound
slug (empty) use-typed-strict-as-the-lower-bound
attrs (empty) {"type" => "lesson-learned"}
description (empty) Hindsight recommendation from Erwin Kroon's GitHub Sorbet adoption: setting `# typed: true` as the lower bound meant ...
short_description (empty) Prefer strict typing over typed: true to force real signatures instead of runtime assertions.
create Generate RBI files instead of writing inline signatures takeaway
kind (empty) takeaway
name (empty) Generate RBI files instead of writing inline signatures
slug (empty) generate-rbi-files-instead-of-writing-inline-signatures
attrs (empty) {"type" => "recommendation"}
description (empty) Erwin Kroon's recommended end-state for Sorbet adoption: don't pollute Ruby files with `sig` blocks, generics declara...
short_description (empty) Keep Sorbet sigs out of your .rb files by generating them via Tapioca into RBI files.
create Enable requires_ancestor when adopting Sorbet takeaway
kind (empty) takeaway
name (empty) Enable requires_ancestor when adopting Sorbet
slug (empty) enable-requires_ancestor-when-adopting-sorbet
attrs (empty) {"type" => "recommendation"}
description (empty) Despite being experimental, `requires_ancestor` is a must-enable when introducing Sorbet to a Ruby codebase that uses...
short_description (empty) Turn on Sorbet's experimental requires_ancestor feature immediately.
create Sorbet signatures are free; assertions are not takeaway
kind (empty) takeaway
name (empty) Sorbet signatures are free; assertions are not
slug (empty) sorbet-signatures-are-free-assertions-are-not
attrs (empty) {"type" => "insight"}
description (empty) Key performance insight from Erwin Kroon's measurements at GitHub. Depending on Sorbet's startup configuration, metho...
short_description (empty) Sigs erase at startup with zero overhead; T.let/T.cast/T.must/T.unsafe stay in code and slow it down.
create Sorbet fits big refactorable codebases, not greenfield takeaway
kind (empty) takeaway
name (empty) Sorbet fits big refactorable codebases, not greenfield
slug (empty) sorbet-fits-big-refactorable-codebases-not-greenfield
attrs (empty) {"type" => "insight"}
description (empty) Erwin Kroon's verdict: Sorbet is good for big codebases that want to refactor with more confidence, but he can't imag...
short_description (empty) Use Sorbet for confidence while refactoring legacy Ruby; skip it on new projects.
create Dry-types input validation vs full Sorbet typing question
kind (empty) question
name (empty) Dry-types input validation vs full Sorbet typing
slug (empty) dry-types-input-validation-vs-full-sorbet-typing
attrs (empty) {"answer_summary" => "Sorbet validates type usage internally (like a static language) as a complement to — not replac...
description (empty) Audience member at wroclove.rb 2024 explains their team uses dry-types to validate input types only at the boundaries...
short_description (empty) Why add Sorbet on top of dry-types/unit tests if input is already validated at the boundary?
create Are Sorbet runtime checks built on TracePoint? question
kind (empty) question
name (empty) Are Sorbet runtime checks built on TracePoint?
slug (empty) are-sorbet-runtime-checks-built-on-tracepoint
attrs (empty) {"answer_summary" => "Speaker doesn't know; defers to John Hawthorne at GitHub who is deep into Sorbet internals."}
description (empty) Audience member asks whether Sorbet's runtime checks are implemented on top of Ruby's TracePoint API (as RBS is) and ...
short_description (empty) How Sorbet implements runtime type checks and whether TracePoint explains its overhead.
create Would you prefer types beside the code, not in it? question
kind (empty) question
name (empty) Would you prefer types beside the code, not in it?
slug (empty) would-you-prefer-types-beside-the-code-not-in-it
attrs (empty) {"answer_summary" => "Yes — speaker prefers types generated into RBI sidecar files, not inline in implementations."}
description (empty) Audience member does a 'sentiment analysis' on the talk, asking whether Erwin would prefer Sorbet to be more automate...
short_description (empty) Sentiment check that speaker wants more automation and types outside of implementations.
update wroclove.rb 2024 event
description Single-track, non-profit Ruby conference. Single-track, non-profit Ruby conference held in Wrocław, Poland on 2024-03-22.

Edges (50)

update Erwin KroonauthoredIntroducing Sorbet into your Ruby codebase
context (empty) Speaker of the talk at wroclove.rb 2024.
update Introducing Sorbet into your Ruby codebasepresented_atwroclove.rb 2024
context (empty) Single-speaker talk delivered at the conference.
create Erwin Kroonworks_atGitHub
attrs (empty) {"role" => "Issues platform engineer"}
context (empty) Engineer on GitHub's Issues platform team; previously full-stack React developer.
relation (empty) works_at
source_node_id (empty) 3b36ddeb-8fdf-4164-8a2e-3213b13578c8
target_node_id (empty) 7b9aabd6-7e21-48b6-b87d-8c99d99c3b34
create Erwin KroonusesRuby
context (empty) Two years of Ruby at GitHub at time of talk.
relation (empty) uses
source_node_id (empty) 3b36ddeb-8fdf-4164-8a2e-3213b13578c8
target_node_id (empty) c7f25b33-06c9-460e-aca7-fe993123ebee
create Erwin KroonusesSorbet
context (empty) Introducing Sorbet to GitHub's 10-year-old Ruby codebase.
relation (empty) uses
source_node_id (empty) 3b36ddeb-8fdf-4164-8a2e-3213b13578c8
target_node_id (empty) 382ece0b-b485-4d9d-b344-59755e8e0f39
create Erwin Kroonhas_skillPython
context (empty) Listed among prior languages used.
relation (empty) has_skill
source_node_id (empty) 3b36ddeb-8fdf-4164-8a2e-3213b13578c8
target_node_id (empty) 1675ceaa-ee27-43a3-9376-d9d3106c89ab
create Erwin Kroonhas_skillTypeScript
context (empty) Listed among prior languages used.
relation (empty) has_skill
source_node_id (empty) 3b36ddeb-8fdf-4164-8a2e-3213b13578c8
target_node_id (empty) 43a67685-cd1a-4515-82f2-37f8f1670634
create John Hawthorneworks_atGitHub
context (empty) Mentioned as a GitHub colleague deeply involved in Sorbet adoption and performance work.
relation (empty) works_at
source_node_id (empty) a152aac4-6552-4577-94ff-bd4cabed366b
target_node_id (empty) 7b9aabd6-7e21-48b6-b87d-8c99d99c3b34
create John Hawthorneworks_onSorbet
context (empty) Cited as the internal expert on Sorbet runtime and performance at GitHub.
relation (empty) works_on
source_node_id (empty) a152aac4-6552-4577-94ff-bd4cabed366b
target_node_id (empty) 382ece0b-b485-4d9d-b344-59755e8e0f39
create Introducing Sorbet into your Ruby codebaseaboutSorbet
context (empty) Whole talk is about introducing Sorbet into a Ruby codebase.
relation (empty) about
source_node_id (empty) e8deb122-e9f6-4c07-a477-322a132b588c
target_node_id (empty) 382ece0b-b485-4d9d-b344-59755e8e0f39
create Introducing Sorbet into your Ruby codebaseaboutTapioca
context (empty) Talk introduces Tapioca as the recommended RBI generator.
relation (empty) about
source_node_id (empty) e8deb122-e9f6-4c07-a477-322a132b588c
target_node_id (empty) e3bf836d-09c2-4ff7-9e48-9cf0cba7fc01
create Introducing Sorbet into your Ruby codebaseaboutRBI
context (empty) Covers RBI sidecar files as an alternative to inline signatures.
relation (empty) about
source_node_id (empty) e8deb122-e9f6-4c07-a477-322a132b588c
target_node_id (empty) 7544a56e-744b-4ff0-b285-ccfc3e236544
create Introducing Sorbet into your Ruby codebaseaboutrequires_ancestor
context (empty) Explains and recommends enabling Sorbet's experimental requires_ancestor feature.
relation (empty) about
source_node_id (empty) e8deb122-e9f6-4c07-a477-322a132b588c
target_node_id (empty) 57977d2a-597a-4a5b-98c8-e6a8ba28875f
create Introducing Sorbet into your Ruby codebaseaboutT.bind
context (empty) Shows T.bind(self, ...) as a workaround for dependency-style modules.
relation (empty) about
source_node_id (empty) e8deb122-e9f6-4c07-a477-322a132b588c
target_node_id (empty) 64035ee8-22f9-4dd4-8b96-5f07c905d42d
create Introducing Sorbet into your Ruby codebaseaboutT.unsafe
context (empty) Warns that T.unsafe is pure runtime overhead; GitHub has 6,000 uses.
relation (empty) about
source_node_id (empty) e8deb122-e9f6-4c07-a477-322a132b588c
target_node_id (empty) 9f2d5f9e-4881-4bdb-9054-023eb163d474
create Introducing Sorbet into your Ruby codebaseaboutGitHub
context (empty) Case study is GitHub's 10-year-old Ruby codebase.
relation (empty) about
source_node_id (empty) e8deb122-e9f6-4c07-a477-322a132b588c
target_node_id (empty) 7b9aabd6-7e21-48b6-b87d-8c99d99c3b34
create Introducing Sorbet into your Ruby codebaseaboutRBS
context (empty) Briefly contrasted with Sorbet; RBS uses TracePoint for runtime checks.
relation (empty) about
source_node_id (empty) e8deb122-e9f6-4c07-a477-322a132b588c
target_node_id (empty) bbf22e30-34ab-40fd-964c-783bf88a65a4
create Introducing Sorbet into your Ruby codebaseaboutYJIT
context (empty) Notes that Sorbet's type assertions cannot be optimized by YJIT.
relation (empty) about
source_node_id (empty) e8deb122-e9f6-4c07-a477-322a132b588c
target_node_id (empty) e4c4781f-fa87-47b0-b174-3193e35b308d
create Introducing Sorbet into your Ruby codebaseaboutTracePoint API
context (empty) Discussed in Q&A as the suspected basis for Sorbet's runtime overhead.
relation (empty) about
source_node_id (empty) e8deb122-e9f6-4c07-a477-322a132b588c
target_node_id (empty) ccc22fd4-7127-4d63-930c-052e2533d576
create Sorbetrelated_toRuby
context (empty) Sorbet is a type checker for Ruby.
relation (empty) related_to
source_node_id (empty) 382ece0b-b485-4d9d-b344-59755e8e0f39
target_node_id (empty) c7f25b33-06c9-460e-aca7-fe993123ebee
create Tapiocarelated_toSorbet
context (empty) Tapioca generates RBI files consumed by Sorbet.
relation (empty) related_to
source_node_id (empty) e3bf836d-09c2-4ff7-9e48-9cf0cba7fc01
target_node_id (empty) 382ece0b-b485-4d9d-b344-59755e8e0f39
create Tapiocarelated_toRBI
context (empty) Tapioca's primary output format is RBI.
relation (empty) related_to
source_node_id (empty) e3bf836d-09c2-4ff7-9e48-9cf0cba7fc01
target_node_id (empty) 7544a56e-744b-4ff0-b285-ccfc3e236544
create Striperelated_toSorbet
context (empty) Stripe is the original author of Sorbet.
relation (empty) related_to
source_node_id (empty) e3389b72-3041-48ce-95c9-e1d0e2e23c8b
target_node_id (empty) 382ece0b-b485-4d9d-b344-59755e8e0f39
create Shopifyrelated_toTapioca
context (empty) Shopify authored and maintains Tapioca.
relation (empty) related_to
source_node_id (empty) 934a1185-4a30-4c56-b417-b26f0ad00133
target_node_id (empty) e3bf836d-09c2-4ff7-9e48-9cf0cba7fc01
create Shopifyrelated_toYJIT
context (empty) YJIT was developed at Shopify.
relation (empty) related_to
source_node_id (empty) 934a1185-4a30-4c56-b417-b26f0ad00133
target_node_id (empty) e4c4781f-fa87-47b0-b174-3193e35b308d
create requires_ancestorrelated_toSorbet
context (empty) Experimental Sorbet feature.
relation (empty) related_to
source_node_id (empty) 57977d2a-597a-4a5b-98c8-e6a8ba28875f
target_node_id (empty) 382ece0b-b485-4d9d-b344-59755e8e0f39
create T.bindrelated_toSorbet
context (empty) Sorbet runtime helper for rebinding self.
relation (empty) related_to
source_node_id (empty) 64035ee8-22f9-4dd4-8b96-5f07c905d42d
target_node_id (empty) 382ece0b-b485-4d9d-b344-59755e8e0f39
create T.unsaferelated_toSorbet
context (empty) Sorbet escape hatch.
relation (empty) related_to
source_node_id (empty) 9f2d5f9e-4881-4bdb-9054-023eb163d474
target_node_id (empty) 382ece0b-b485-4d9d-b344-59755e8e0f39
create RBIrelated_toSorbet
context (empty) RBI files are Sorbet's sidecar signature format.
relation (empty) related_to
source_node_id (empty) 7544a56e-744b-4ff0-b285-ccfc3e236544
target_node_id (empty) 382ece0b-b485-4d9d-b344-59755e8e0f39
create Use typed: strict as the lower boundfrom_talkIntroducing Sorbet into your Ruby codebase
context (empty) Speaker's hindsight lesson after adopting Sorbet at typed: true level.
relation (empty) from_talk
source_node_id (empty) d53f9dd4-bd75-4a29-8040-0ae761c633f5
target_node_id (empty) e8deb122-e9f6-4c07-a477-322a132b588c
create Generate RBI files instead of writing inline signaturesfrom_talkIntroducing Sorbet into your Ruby codebase
context (empty) Speaker's recommended Sorbet end-state.
relation (empty) from_talk
source_node_id (empty) 461f8591-0c73-43e5-876c-a6baa9869dbd
target_node_id (empty) e8deb122-e9f6-4c07-a477-322a132b588c
create Enable requires_ancestor when adopting Sorbetfrom_talkIntroducing Sorbet into your Ruby codebase
context (empty) Strong recommendation from the speaker.
relation (empty) from_talk
source_node_id (empty) e7ec21fb-4f8a-4e3c-a952-827f5e5ccdbf
target_node_id (empty) e8deb122-e9f6-4c07-a477-322a132b588c
create Sorbet signatures are free; assertions are notfrom_talkIntroducing Sorbet into your Ruby codebase
context (empty) Performance insight from speaker's benchmarks.
relation (empty) from_talk
source_node_id (empty) 804e65ca-0478-4b6b-aedd-3144cbd62dc3
target_node_id (empty) e8deb122-e9f6-4c07-a477-322a132b588c
create Sorbet fits big refactorable codebases, not greenfieldfrom_talkIntroducing Sorbet into your Ruby codebase
context (empty) Speaker's closing verdict.
relation (empty) from_talk
source_node_id (empty) d887af5d-4adc-4d67-904b-37b8b4c6b644
target_node_id (empty) e8deb122-e9f6-4c07-a477-322a132b588c
create Use typed: strict as the lower boundaboutSorbet
context (empty) Recommendation specific to configuring Sorbet.
relation (empty) about
source_node_id (empty) d53f9dd4-bd75-4a29-8040-0ae761c633f5
target_node_id (empty) 382ece0b-b485-4d9d-b344-59755e8e0f39
create Generate RBI files instead of writing inline signaturesaboutTapioca
context (empty) Recommendation to lean on Tapioca for RBI generation.
relation (empty) about
source_node_id (empty) 461f8591-0c73-43e5-876c-a6baa9869dbd
target_node_id (empty) e3bf836d-09c2-4ff7-9e48-9cf0cba7fc01
create Enable requires_ancestor when adopting Sorbetaboutrequires_ancestor
context (empty) Directly about the requires_ancestor feature.
relation (empty) about
source_node_id (empty) e7ec21fb-4f8a-4e3c-a952-827f5e5ccdbf
target_node_id (empty) 57977d2a-597a-4a5b-98c8-e6a8ba28875f
create Sorbet signatures are free; assertions are notaboutSorbet
context (empty) Performance insight about Sorbet runtime behavior.
relation (empty) about
source_node_id (empty) 804e65ca-0478-4b6b-aedd-3144cbd62dc3
target_node_id (empty) 382ece0b-b485-4d9d-b344-59755e8e0f39
create Sorbet fits big refactorable codebases, not greenfieldaboutSorbet
context (empty) Verdict on when Sorbet is worth using.
relation (empty) about
source_node_id (empty) d887af5d-4adc-4d67-904b-37b8b4c6b644
target_node_id (empty) 382ece0b-b485-4d9d-b344-59755e8e0f39
create Dry-types input validation vs full Sorbet typingasked_atIntroducing Sorbet into your Ruby codebase
context (empty) Audience question during Q&A.
relation (empty) asked_at
source_node_id (empty) 02e5780e-84da-4dca-9de5-1eae692d4f0d
target_node_id (empty) e8deb122-e9f6-4c07-a477-322a132b588c
create Are Sorbet runtime checks built on TracePoint?asked_atIntroducing Sorbet into your Ruby codebase
context (empty) Audience question during Q&A.
relation (empty) asked_at
source_node_id (empty) 35a0f1d1-7816-4679-81ef-fde1e2656ad5
target_node_id (empty) e8deb122-e9f6-4c07-a477-322a132b588c
create Would you prefer types beside the code, not in it?asked_atIntroducing Sorbet into your Ruby codebase
context (empty) Audience sentiment-analysis question during Q&A.
relation (empty) asked_at
source_node_id (empty) e42a6b73-a2c6-4ff9-9776-cf8baa43004e
target_node_id (empty) e8deb122-e9f6-4c07-a477-322a132b588c
create Dry-types input validation vs full Sorbet typingaboutdry-types
context (empty) Questioner's team uses dry-types for boundary validation.
relation (empty) about
source_node_id (empty) 02e5780e-84da-4dca-9de5-1eae692d4f0d
target_node_id (empty) 6669b526-7545-407c-993f-4580e69ae743
create Dry-types input validation vs full Sorbet typingaboutSorbet
context (empty) Comparing boundary-only validation with full Sorbet typing.
relation (empty) about
source_node_id (empty) 02e5780e-84da-4dca-9de5-1eae692d4f0d
target_node_id (empty) 382ece0b-b485-4d9d-b344-59755e8e0f39
create Are Sorbet runtime checks built on TracePoint?aboutTracePoint API
context (empty) Question specifically about TracePoint as Sorbet's implementation basis.
relation (empty) about
source_node_id (empty) 35a0f1d1-7816-4679-81ef-fde1e2656ad5
target_node_id (empty) ccc22fd4-7127-4d63-930c-052e2533d576
create Are Sorbet runtime checks built on TracePoint?aboutRBS
context (empty) Questioner notes RBS implements runtime checks on TracePoint.
relation (empty) about
source_node_id (empty) 35a0f1d1-7816-4679-81ef-fde1e2656ad5
target_node_id (empty) bbf22e30-34ab-40fd-964c-783bf88a65a4
create Are Sorbet runtime checks built on TracePoint?aboutJohn Hawthorne
context (empty) Speaker deferred the question to John Hawthorne.
relation (empty) about
source_node_id (empty) 35a0f1d1-7816-4679-81ef-fde1e2656ad5
target_node_id (empty) a152aac4-6552-4577-94ff-bd4cabed366b
create Would you prefer types beside the code, not in it?aboutRBI
context (empty) Implicitly about RBI sidecar files as a cleaner placement for types.
relation (empty) about
source_node_id (empty) e42a6b73-a2c6-4ff9-9776-cf8baa43004e
target_node_id (empty) 7544a56e-744b-4ff0-b285-ccfc3e236544
create Erwin Kroonrecommendsrequires_ancestor
context (empty) Strongly recommends enabling this experimental Sorbet feature.
relation (empty) recommends
source_node_id (empty) 3b36ddeb-8fdf-4164-8a2e-3213b13578c8
target_node_id (empty) 57977d2a-597a-4a5b-98c8-e6a8ba28875f
create Erwin KroonrecommendsTapioca
context (empty) Recommends generating RBIs via Tapioca instead of writing inline signatures.
relation (empty) recommends
source_node_id (empty) 3b36ddeb-8fdf-4164-8a2e-3213b13578c8
target_node_id (empty) e3bf836d-09c2-4ff7-9e48-9cf0cba7fc01

Read set

130 nodes

tool Sorbet search_nodes talk Introducing Sorbet into your Ruby codebase search_nodes+get_node_edges tool dry-types search_nodes tool ruby-contracts search_nodes tool Standard RB search_nodes tool RuboCop search_nodes takeaway Look outside Ruby for better patterns search_nodes tool dry-struct search_nodes tool RBS search_nodes project gemcheck search_nodes company Shopify search_nodes project Nerds and Threads search_nodes tool langchainrb search_nodes concept AI Agent search_nodes project rails_event_store/ecommerce search_nodes takeaway Sign serverlessforruby.org petition search_nodes talk Scaling an Open Source E-Commerce Framework search_nodes concept Retrieval Augmented Generation search_nodes tool GraphQL search_nodes tool Klaviyo search_nodes tool GitHub Actions search_nodes company SpaceX search_nodes resource awesome-ddd search_nodes concept GitHub Self-Hosted Runner search_nodes tool GitHub Releases search_nodes tool reviewdog search_nodes tool Codecov search_nodes tool CircleCI search_nodes takeaway Port Python Libraries With ChatGPT search_nodes tool actions/upload-artifact search_nodes resource Short Ruby Newsletter search_nodes project Ruby Romania search_nodes talk Code Golfing in Ruby Lightning Talk search_nodes tool ruby-openai search_nodes tool ruby/setup-ruby search_nodes project Ruby News search_nodes event wroclove.rb 2024 search_nodes event wroclove.rb 2022 search_nodes event wroclove.rb 2023 search_nodes event wroclove.rb 2019 search_nodes event wroclove.rb 2018 search_nodes event wroclove.rb 2025 search_nodes event wroclove.rb 2026 search_nodes talk Building LLM powered applications in Ruby search_nodes talk How wroclove.rb impacts developers and companies search_nodes talk Towards the post framework future search_nodes tool ChatGPT search_nodes takeaway Name Things To Find Their Properties search_nodes concept xkcd Dependency / Nebraska Problem search_nodes tool macOS say command search_nodes tool left-pad search_nodes talk Events events events search_nodes concept Optional Gradual Typing search_nodes question Would you recommend TypeScript or Flow? search_nodes tool Flow search_nodes tool TypeScript search_nodes takeaway Adopt TypeScript or Flow for maintainability search_nodes tool PureScript search_nodes tool Babel search_nodes tool Elm search_nodes company Salesforce search_nodes tool Release Drafter search_nodes company Red Hat search_nodes takeaway Ruby as a Data Management Language search_nodes concept Reactive Programming search_nodes tool Ruby search_nodes concept Punch Card Programming search_nodes concept Exploratory Programming search_nodes tool IronRuby search_nodes concept Railway Oriented Programming search_nodes tool Wolfram Language search_nodes person Erwin Kroon get_node_edges tool Stripe search_nodes project Trezy search_nodes tool interactor search_nodes question Generate code once vs instruct LLM per request search_nodes concept ObjectSpace heap dumps search_nodes tool heapy search_nodes tool TruffleRuby search_nodes takeaway Trailblazer tracing saves thousands of debugging hours search_nodes concept Monkey Patching search_nodes talk Rubyana Gems and the Ractorous Rubetta Stones! search_nodes concept Refinements search_nodes concept Global Interpreter Lock search_nodes person Akira Matsuda search_nodes tool Distributed Ruby search_nodes concept Ruby undef_method performance search_nodes takeaway Upgrade Ruby version for free speed search_nodes tool find-slow script search_nodes talk Scientific Ruby Lightning Talk search_nodes talk To Refine or Not to Refine search_nodes talk Better WebPerformance with Rails search_nodes talk Toolbelt of a Seasoned Bug Hunter search_nodes tool PR Labeler search_nodes tool actions/checkout search_nodes concept Interface Wrapper for Ruby search_nodes concept Minimal Interface search_nodes tool DBM / SDBM / GDBM search_nodes takeaway Use Ruby Packer for Single-Binary CLIs search_nodes tool Prime (Ruby stdlib) search_nodes tool Rack search_nodes tool Matrix (Ruby stdlib) search_nodes talk Ruby on a $4 Computer search_nodes tool Ruby Packer search_nodes talk JRuby: Professional-Grade Ruby search_nodes tool JRuby search_nodes concept gemspec search_nodes concept Build Gems in Docker Isolation search_nodes tool TTY toolkit search_nodes talk Methods Gem for Ruby Method References search_nodes tool dry-validation search_nodes takeaway Put data-input validations on the command form, not the command search_nodes talk Configuration Again Lightning Talk search_nodes tool Reform search_nodes person Adam Okoń search_nodes person Julik Tarkhanov search_nodes person DHH search_nodes person Nick Schwaderer search_nodes resource My Ruby Story search_nodes tool Python search_nodes tool Perl search_nodes tool SXG Validator search_nodes concept Magic bytes MIME detection search_nodes tool Automatic Signed Exchanges search_nodes takeaway Signed On-the-fly URLs search_nodes tool ESLint search_nodes concept Live Reload search_nodes tool esbuild search_nodes tool fish shell search_nodes tool server-engine search_nodes

2 edges