← Extractions

SUPER AIN'T SUPER: Nick Sutterer's Journey from OOP to FP and Trailblazer 2.1

Nick Sutterer's wroclove.rb 2018 talk traces his programming journey from an 8-year-old learning C++ and Perl on a Mac, through early Rails frustrations that led him to write Cells and Reform, to Trailblazer's evolution across versions 1.1, 2.0 and 2.1. Along the way he explains how Ruby's module/super/inheritance mechanics pushed him toward a functional, BPMN-based workflow DSL modeled on Scott Wlaschin's Railway Oriented Programming, now used in production at the German police.

Model
claude-opus-4-7
Ingestion
f691ad9a
Input tokens
259,929
fresh
145,290
cached
98,262
cache write
16,377
Output tokens
12,038
Duration
202.0s
Roundtrips
7
Tool calls
21
Cost
$0.00
Nodes/edges extracted
23 / 44
Read set (nodes/edges)
105 / 7

Nodes (23)

update Nick Sutterer person
attrs (empty) → {"employer" => "German Police", "nationality" => "German"}
description Conference speaker. → German Ruby framework author and conference speaker. Started programming around age 8 on a Mac, learning C++ from 'Tr...
short_description Conference speaker. → Creator of Trailblazer, Cells and Reform; Ruby framework author.
update SUPER AIN'T SUPER From OOP To FP and Beyond! talk
description Talk at wroclove.rb 2018. → Nick Sutterer's wroclove.rb 2018 talk walking through his programming life: learning functions in C++ as a child, mov...
short_description Talk at wroclove.rb 2018. → Nick Sutterer's wroclove.rb 2018 talk on his journey from OOP to FP via Trailblazer.
create Cells tool
kind (empty) → tool
name (empty) → Cells
slug (empty) → cells
attrs (empty) → {"year" => "2008", "category" => "library"}
description (empty) → Ruby gem (Nick Sutterer's first) introduced around 2008 to encapsulate view fragments like sidebars into isolated cla...
short_description (empty) → Ruby gem encapsulating view fragments as testable component objects.
create Reform tool
kind (empty) → tool
name (empty) → Reform
slug (empty) → reform
attrs (empty) → {"category" => "library"}
description (empty) → Ruby gem by Nick Sutterer introducing a dedicated form object mapping to a web UI form: declares properties, collecti...
short_description (empty) → Ruby gem modeling HTML forms as their own validation-aware objects.
update Trailblazer tool
description Ruby framework authored by Nick Sutterer that provides higher-level architectural building blocks on top of (or along... → Ruby framework authored by Nick Sutterer that provides higher-level architectural building blocks on top of (or along...
create Railway Oriented Programming concept
kind (empty) → concept
name (empty) → Railway Oriented Programming
slug (empty) → railway-oriented-programming
attrs (empty) → {"category" => "pattern"}
description (empty) → Pattern from Scott Wlaschin (F#/.NET community) in which business logic is modeled as two parallel tracks: a successf...
short_description (empty) → Two-track workflow pattern where failures jump to an error track.
create Scott Wlaschin person
kind (empty) → person
name (empty) → Scott Wlaschin
slug (empty) → scott-wlaschin
description (empty) → F#/.NET community author who formalized Railway Oriented Programming, cited by Nick Sutterer as the inspiration for T...
short_description (empty) → F# author behind Railway Oriented Programming.
create Tyrant tool
kind (empty) → tool
name (empty) → Tyrant
slug (empty) → tyrant
attrs (empty) → {"category" => "library"}
description (empty) → Authentication gem by Nick Sutterer positioned as a replacement for Devise. Ships reusable Trailblazer workflow fragm...
short_description (empty) → Trailblazer-based replacement for Devise shipping predefined auth workflows.
create Perl tool
kind (empty) → tool
name (empty) → Perl
slug (empty) → perl
attrs (empty) → {"category" => "language"}
description (empty) → Programming language Nick Sutterer used after early C++ experiments; he considers his Perl book his actual first prog...
short_description (empty) → Dynamic scripting language popular in the late 1990s and 2000s.
create C++ tool
kind (empty) → tool
name (empty) → C++
slug (empty) → c
attrs (empty) → {"category" => "language"}
description (empty) → Nick Sutterer's earliest programming language, learned as a child from a separate book while following 'Tricks of the...
short_description (empty) → Statically-typed systems programming language.
create Tricks of the Mac Game Programming Gurus resource
kind (empty) → resource
name (empty) → Tricks of the Mac Game Programming Gurus
slug (empty) → tricks-of-the-mac-game-programming-gurus
attrs (empty) → {"type" => "book"}
description (empty) → Game programming book that Nick Sutterer used as his first programming reference, teaching programming on Mac around ...
short_description (empty) → Mac game programming book Nick Sutterer read as a child.
create Ruby Module Customization Mechanics concept
kind (empty) → concept
name (empty) → Ruby Module Customization Mechanics
slug (empty) → ruby-module-customization-mechanics
attrs (empty) → {"category" => "pattern"}
description (empty) → Ruby's out-of-the-box toolkit for customizing objects — inheritance, mix-ins via include/extend, super, and prepend —...
short_description (empty) → Using include, extend, prepend and super to customize Ruby objects.
update BPMN concept
description Business Process Model and Notation. Trailblazer 2.1 adopts BPMN conventions to model processes; its 'events' are the... → Business Process Model and Notation, originating in the Java/enterprise world. A diagram language of boxes (activitie...
create Trailblazer Operation concept
kind (empty) → concept
name (empty) → Trailblazer Operation
slug (empty) → trailblazer-operation
attrs (empty) → {"category" => "pattern"}
description (empty) → Trailblazer concept: a callable object (invoked like a function) that delegates to stakeholder objects to perform bus...
short_description (empty) → Callable orchestrator object delegating to scoped steps with a result.
create Trailblazer Activity concept
kind (empty) → concept
name (empty) → Trailblazer Activity
slug (empty) → trailblazer-activity
attrs (empty) → {"category" => "pattern"}
description (empty) → Introduced in Trailblazer 2.1 alongside the existing operation concept. Activities are defined with the same step DSL...
short_description (empty) → Trailblazer 2.1 BPMN-style process with multiple end events and nesting.
create Trailblazer Workflow concept
kind (empty) → concept
name (empty) → Trailblazer Workflow
slug (empty) → trailblazer-workflow
attrs (empty) → {"category" => "architecture"}
description (empty) → Trailblazer 2.1 concept of composing activities into application-wide workflows defined visually. Triggered from e.g....
short_description (empty) → Application-wide Trailblazer process modeled visually with suspend/resume events.
create German Police company
kind (empty) → company
name (empty) → German Police
slug (empty) → german-police
attrs (empty) → {"industry" => "government"}
description (empty) → Nick Sutterer's employer at the time of the talk. Their applications model complex administrative and investigative w...
short_description (empty) → German police force running Trailblazer-based workflow applications.
create José Valim person
kind (empty) → person
name (empty) → José Valim
slug (empty) → jose-valim
description (empty) → Creator of Elixir. Nick Sutterer mentions discussing workflow abstractions with him; even with Elixir's pipe operator...
short_description (empty) → Creator of the Elixir programming language.
create Piotr Solnica person
kind (empty) → person
name (empty) → Piotr Solnica
slug (empty) → piotr-solnica
description (empty) → Ruby developer cited by Nick Sutterer as a major inspiration who nudged him toward functional programming.
short_description (empty) → Ruby developer known for the dry-rb ecosystem.
update Refinements concept
description Ruby language feature (authored by Shugo Maeda) that allows monkey patches to be activated only in a specific lexical... → Ruby language feature (authored by Shugo Maeda) that allows monkey patches to be activated only in a specific lexical...
create Break Code Into Small Units Orchestrated By A Process Engine takeaway
kind (empty) → takeaway
name (empty) → Break Code Into Small Units Orchestrated By A Process Engine
slug (empty) → break-code-into-small-units-orchestrated-by-a-process-engine
attrs (empty) → {"type" => "insight"}
description (empty) → Nick Sutterer's extracted lesson from 30 years of programming: structure software as small working units of code that...
short_description (empty) → Model software as small callable units with inputs/outputs; let a workflow engine compose them.
create Encapsulation Via Function-Style Objects takeaway
kind (empty) → takeaway
name (empty) → Encapsulation Via Function-Style Objects
slug (empty) → encapsulation-via-function-style-objects
attrs (empty) → {"type" => "lesson-learned"}
description (empty) → Recurring lesson across Cells, Reform and Trailblazer operations: wrap behavior in an object invoked like a function ...
short_description (empty) → Hide implementation behind objects called like functions for isolated testing.
create Should the tooling or language change to support these workflows? question
kind (empty) → question
name (empty) → Should the tooling or language change to support these workflows?
slug (empty) → should-the-tooling-or-language-change-to-support-these-workflows
attrs (empty) → {"answer_summary" => "Ruby's community makes it worth staying; no other mainstream language has this activity/multi-o...
description (empty) → Audience member suggests that since Ruby's inheritance/module/super mechanics didn't help and Nick moved to a functio...
short_description (empty) → Audience question on whether a functional language would fit Trailblazer's style better.

Edges (44)

update Nick Sutterer → authored → SUPER AIN'T SUPER From OOP To FP and Beyond!
context (empty) → Sutterer delivered this autobiographical talk at wroclove.rb 2018.
update SUPER AIN'T SUPER From OOP To FP and Beyond! → presented_at → wroclove.rb 2018
context (empty) → Talk given on 2018-03-16 at wroclove.rb.
create Nick Sutterer → attended → wroclove.rb 2018
context (empty) → Present as a speaker at the 2018 edition.
relation (empty) → attended
source_node_id (empty) → ce8dc98c-7309-4a19-af98-99a6ad6cea69
target_node_id (empty) → 9243ef2c-21bb-4f23-b450-9ecd87882dfe
create Nick Sutterer → works_on → Cells
attrs (empty) → {"role" => "author"}
context (empty) → Author of the Cells gem, his first Ruby gem, around 2008.
relation (empty) → works_on
source_node_id (empty) → ce8dc98c-7309-4a19-af98-99a6ad6cea69
target_node_id (empty) → b7a5495c-a699-4085-b621-229cf71852c8
create Nick Sutterer → works_on → Reform
attrs (empty) → {"role" => "author"}
context (empty) → Author of the Reform form-object gem.
relation (empty) → works_on
source_node_id (empty) → ce8dc98c-7309-4a19-af98-99a6ad6cea69
target_node_id (empty) → cf107a9f-3e8f-4728-b232-8fc100a667f5
update Nick Sutterer → works_on → Trailblazer
context Author of Trailblazer; discusses 2.1 with BPMN-style process modeling and upcoming paid gems. → Author of Trailblazer; talk narrates the framework's evolution through 1.1, 2.0 and 2.1.
create Nick Sutterer → works_on → Tyrant
attrs (empty) → {"role" => "author"}
context (empty) → Author of Tyrant, a Trailblazer-based Devise replacement.
relation (empty) → works_on
source_node_id (empty) → ce8dc98c-7309-4a19-af98-99a6ad6cea69
target_node_id (empty) → 7c4b671b-e55e-45b7-9217-2fd36a32d511
create Nick Sutterer → works_at → German Police
context (empty) → Employed at the German police, where Trailblazer 2.1 workflows are used.
relation (empty) → works_at
source_node_id (empty) → ce8dc98c-7309-4a19-af98-99a6ad6cea69
target_node_id (empty) → 885b5468-e61e-4b0a-ba1e-7252e46fa2cc
create Nick Sutterer → has_skill → C++
attrs (empty) → {"level" => "beginner"}
context (empty) → Learned C++ as a child from a separate book alongside Mac game programming materials.
relation (empty) → has_skill
source_node_id (empty) → ce8dc98c-7309-4a19-af98-99a6ad6cea69
target_node_id (empty) → a4ae6f60-52e5-4262-a674-c64c17968d28
create Nick Sutterer → has_skill → Perl
context (empty) → Credits Perl as the language where he actually learned to program.
relation (empty) → has_skill
source_node_id (empty) → ce8dc98c-7309-4a19-af98-99a6ad6cea69
target_node_id (empty) → 24830e15-8592-4aa3-bd13-4877721c3a50
create Nick Sutterer → has_skill → Ruby
attrs (empty) → {"level" => "expert"}
context (empty) → Long-time Ruby developer, though critical of its object customization mechanics.
relation (empty) → has_skill
source_node_id (empty) → ce8dc98c-7309-4a19-af98-99a6ad6cea69
target_node_id (empty) → c7f25b33-06c9-460e-aca7-fe993123ebee
create Nick Sutterer → recommends → Tricks of the Mac Game Programming Gurus
context (empty) → Cites it as his first programming book.
relation (empty) → recommends
source_node_id (empty) → ce8dc98c-7309-4a19-af98-99a6ad6cea69
target_node_id (empty) → b2c637f4-ac88-46c6-a0e3-66a94c5cd178
create Nick Sutterer → related_to → Piotr Solnica
context (empty) → Names Piotr Solnica as an inspiration who nudged him toward functional programming.
relation (empty) → related_to
source_node_id (empty) → ce8dc98c-7309-4a19-af98-99a6ad6cea69
target_node_id (empty) → f3428d0c-aaba-45ad-aa88-414d295a3000
create Nick Sutterer → related_to → José Valim
context (empty) → Discussed workflow abstractions with Elixir's creator, concluding Elixir would still need a step-DSL-like construct.
relation (empty) → related_to
source_node_id (empty) → ce8dc98c-7309-4a19-af98-99a6ad6cea69
target_node_id (empty) → 52d96a4b-fcf2-4fd7-a048-ab5d7306e086
create Nick Sutterer → related_to → DHH
context (empty) → DHH emailed Sutterer praising Cells and Reform at the time of their release.
relation (empty) → related_to
source_node_id (empty) → ce8dc98c-7309-4a19-af98-99a6ad6cea69
target_node_id (empty) → 51ed6191-ce15-4ca5-9eed-d55908e5ab88
create SUPER AIN'T SUPER From OOP To FP and Beyond! → about → Trailblazer
context (empty) → Core narrative of the talk is Trailblazer's evolution across 1.1, 2.0 and 2.1.
relation (empty) → about
source_node_id (empty) → 4038b1a2-c85e-49d8-ab6b-4ee5b3e86dec
target_node_id (empty) → c25b5eef-3c08-4d09-9fc6-407f04f949a0
create SUPER AIN'T SUPER From OOP To FP and Beyond! → about → Cells
context (empty) → Discussed as Sutterer's first gem that proved the value of encapsulated view components.
relation (empty) → about
source_node_id (empty) → 4038b1a2-c85e-49d8-ab6b-4ee5b3e86dec
target_node_id (empty) → b7a5495c-a699-4085-b621-229cf71852c8
create SUPER AIN'T SUPER From OOP To FP and Beyond! → about → Reform
context (empty) → Discussed as the second gem encapsulating forms as objects with contextual validations.
relation (empty) → about
source_node_id (empty) → 4038b1a2-c85e-49d8-ab6b-4ee5b3e86dec
target_node_id (empty) → cf107a9f-3e8f-4728-b232-8fc100a667f5
create SUPER AIN'T SUPER From OOP To FP and Beyond! → about → Railway Oriented Programming
context (empty) → Cited as the inspiration for Trailblazer 2.0's two-track step DSL.
relation (empty) → about
source_node_id (empty) → 4038b1a2-c85e-49d8-ab6b-4ee5b3e86dec
target_node_id (empty) → 693c5091-066f-4602-a1ce-ff9067e469bd
create SUPER AIN'T SUPER From OOP To FP and Beyond! → about → BPMN
context (empty) → Trailblazer 2.1's workflow modeling adopts BPMN conventions, activities and events.
relation (empty) → about
source_node_id (empty) → 4038b1a2-c85e-49d8-ab6b-4ee5b3e86dec
target_node_id (empty) → 6ec93836-4c13-4f91-a34e-c532055a0454
create SUPER AIN'T SUPER From OOP To FP and Beyond! → about → Ruby Module Customization Mechanics
context (empty) → Talk critiques Ruby's include/extend/super/prepend/refinements as insufficient for workflow customization.
relation (empty) → about
source_node_id (empty) → 4038b1a2-c85e-49d8-ab6b-4ee5b3e86dec
target_node_id (empty) → 1a968896-f6eb-40bc-ab5c-7de248469340
create SUPER AIN'T SUPER From OOP To FP and Beyond! → about → Refinements
context (empty) → Refinements singled out as a feature almost no one uses.
relation (empty) → about
source_node_id (empty) → 4038b1a2-c85e-49d8-ab6b-4ee5b3e86dec
target_node_id (empty) → 989bdde8-0413-45db-96f3-32dd0e4a3c11
create SUPER AIN'T SUPER From OOP To FP and Beyond! → about → Trailblazer Operation
context (empty) → Explains operations as callable orchestrators delegating to scoped steps.
relation (empty) → about
source_node_id (empty) → 4038b1a2-c85e-49d8-ab6b-4ee5b3e86dec
target_node_id (empty) → 41fe8d0a-bf5c-4a53-9a3d-2ae1c9c63549
create SUPER AIN'T SUPER From OOP To FP and Beyond! → about → Trailblazer Activity
context (empty) → Introduces activities as the 2.1 BPMN-style extension of operations.
relation (empty) → about
source_node_id (empty) → 4038b1a2-c85e-49d8-ab6b-4ee5b3e86dec
target_node_id (empty) → 820efe90-cabd-4501-a9ba-dbf2269ec94f
create SUPER AIN'T SUPER From OOP To FP and Beyond! → about → Trailblazer Workflow
context (empty) → Describes application-wide workflows with suspend/resume events at the German police.
relation (empty) → about
source_node_id (empty) → 4038b1a2-c85e-49d8-ab6b-4ee5b3e86dec
target_node_id (empty) → 34f10170-f4d9-415f-b81d-92357c9a99fa
create SUPER AIN'T SUPER From OOP To FP and Beyond! → about → Tyrant
context (empty) → Mentioned as a Devise replacement shipping predefined one-time-password signup workflows.
relation (empty) → about
source_node_id (empty) → 4038b1a2-c85e-49d8-ab6b-4ee5b3e86dec
target_node_id (empty) → 7c4b671b-e55e-45b7-9217-2fd36a32d511
create SUPER AIN'T SUPER From OOP To FP and Beyond! → about → Scott Wlaschin
context (empty) → Credits Scott Wlaschin for the railway metaphor borrowed from the .NET community.
relation (empty) → about
source_node_id (empty) → 4038b1a2-c85e-49d8-ab6b-4ee5b3e86dec
target_node_id (empty) → cbce6ed4-4983-46d5-8eb2-3a96e422cd59
update Trailblazer → uses → BPMN
context Trailblazer 2.1 adopts BPMN conventions for process modeling. → Trailblazer 2.1 adopts BPMN conventions and notation for workflows.
create Trailblazer → uses → Railway Oriented Programming
context (empty) → Trailblazer 2.0 step DSL is directly modeled on Scott Wlaschin's Railway Oriented Programming.
relation (empty) → uses
source_node_id (empty) → c25b5eef-3c08-4d09-9fc6-407f04f949a0
target_node_id (empty) → 693c5091-066f-4602-a1ce-ff9067e469bd
create Trailblazer Operation → related_to → Trailblazer
context (empty) → Operations are a core Trailblazer concept.
relation (empty) → related_to
source_node_id (empty) → 41fe8d0a-bf5c-4a53-9a3d-2ae1c9c63549
target_node_id (empty) → c25b5eef-3c08-4d09-9fc6-407f04f949a0
create Trailblazer Activity → related_to → Trailblazer
context (empty) → Activities were introduced in Trailblazer 2.1 alongside operations.
relation (empty) → related_to
source_node_id (empty) → 820efe90-cabd-4501-a9ba-dbf2269ec94f
target_node_id (empty) → c25b5eef-3c08-4d09-9fc6-407f04f949a0
create Trailblazer Workflow → related_to → Trailblazer
context (empty) → Workflows are Trailblazer 2.1's application-wide composition mechanism.
relation (empty) → related_to
source_node_id (empty) → 34f10170-f4d9-415f-b81d-92357c9a99fa
target_node_id (empty) → c25b5eef-3c08-4d09-9fc6-407f04f949a0
create Trailblazer Activity → related_to → BPMN
context (empty) → Activities map directly to BPMN boxes, circles and events.
relation (empty) → related_to
source_node_id (empty) → 820efe90-cabd-4501-a9ba-dbf2269ec94f
target_node_id (empty) → 6ec93836-4c13-4f91-a34e-c532055a0454
create Railway Oriented Programming → related_to → Scott Wlaschin
context (empty) → Pattern popularized by Scott Wlaschin in the F#/.NET community.
relation (empty) → related_to
source_node_id (empty) → 693c5091-066f-4602-a1ce-ff9067e469bd
target_node_id (empty) → cbce6ed4-4983-46d5-8eb2-3a96e422cd59
create Tyrant → uses → Trailblazer
context (empty) → Built on Trailblazer activities/workflows.
relation (empty) → uses
source_node_id (empty) → 7c4b671b-e55e-45b7-9217-2fd36a32d511
target_node_id (empty) → c25b5eef-3c08-4d09-9fc6-407f04f949a0
create German Police → uses → Trailblazer
context (empty) → German police applications model workflows using Trailblazer 2.1.
relation (empty) → uses
source_node_id (empty) → 885b5468-e61e-4b0a-ba1e-7252e46fa2cc
target_node_id (empty) → c25b5eef-3c08-4d09-9fc6-407f04f949a0
create Break Code Into Small Units Orchestrated By A Process Engine → from_talk → SUPER AIN'T SUPER From OOP To FP and Beyond!
context (empty) → Concluding lesson of the talk.
relation (empty) → from_talk
source_node_id (empty) → 53dbd4aa-b08e-4f01-842b-dde085b788a2
target_node_id (empty) → 4038b1a2-c85e-49d8-ab6b-4ee5b3e86dec
create Encapsulation Via Function-Style Objects → from_talk → SUPER AIN'T SUPER From OOP To FP and Beyond!
context (empty) → Repeated lesson across Cells, Reform and Trailblazer sections.
relation (empty) → from_talk
source_node_id (empty) → 86d193f9-cb04-483a-a42c-f82c30311c5b
target_node_id (empty) → 4038b1a2-c85e-49d8-ab6b-4ee5b3e86dec
create Break Code Into Small Units Orchestrated By A Process Engine → about → Trailblazer
context (empty) → Framed as the principle embodied by Trailblazer 2.1.
relation (empty) → about
source_node_id (empty) → 53dbd4aa-b08e-4f01-842b-dde085b788a2
target_node_id (empty) → c25b5eef-3c08-4d09-9fc6-407f04f949a0
create Encapsulation Via Function-Style Objects → about → Cells
context (empty) → Cells was the first concrete instance of this principle.
relation (empty) → about
source_node_id (empty) → 86d193f9-cb04-483a-a42c-f82c30311c5b
target_node_id (empty) → b7a5495c-a699-4085-b621-229cf71852c8
create Encapsulation Via Function-Style Objects → about → Reform
context (empty) → Reform applied the same encapsulation idea to forms.
relation (empty) → about
source_node_id (empty) → 86d193f9-cb04-483a-a42c-f82c30311c5b
target_node_id (empty) → cf107a9f-3e8f-4728-b232-8fc100a667f5
create Should the tooling or language change to support these workflows? → asked_at → SUPER AIN'T SUPER From OOP To FP and Beyond!
context (empty) → Asked during the Q&A after the talk.
relation (empty) → asked_at
source_node_id (empty) → bf554296-a71b-4fee-a5af-b0d518c0adc1
target_node_id (empty) → 4038b1a2-c85e-49d8-ab6b-4ee5b3e86dec
create Should the tooling or language change to support these workflows? → about → Elixir
context (empty) → Question raises Elixir as a possible alternative; Nick answers via Elixir's pipe operator limits.
relation (empty) → about
source_node_id (empty) → bf554296-a71b-4fee-a5af-b0d518c0adc1
target_node_id (empty) → ea3e988a-8cb9-4418-a809-6f894b77c081
create Should the tooling or language change to support these workflows? → about → Ruby
context (empty) → Asks whether Ruby is the right language for this style of programming.
relation (empty) → about
source_node_id (empty) → bf554296-a71b-4fee-a5af-b0d518c0adc1
target_node_id (empty) → c7f25b33-06c9-460e-aca7-fe993123ebee

Read set

105 nodes

person Nick Sutterer search_nodes+get_node_edges tool GraphQL search_nodes tool Trailblazer search_nodes tool RealtimeBoard search_nodes person Adam Okoń search_nodes takeaway Time Travel Superpower search_nodes resource Rocket Real-Time Benchmark search_nodes tool Faker search_nodes question Can Trailblazer be combined with event sourcing and CQRS? search_nodes talk Forms Are Dead: Building Agentic Workflows in Ruby search_nodes tool Ruby on Rails search_nodes talk Towards the post framework future search_nodes tool Ruby search_nodes tool Plezi search_nodes talk Building Rails SPAs in Frontend Ruby with Glimmer DSL for Web search_nodes talk When REST is Not Enough: Implementing Alternative Protocols in Ruby on Rails search_nodes tool Ember.js search_nodes talk Orchestrating video transcoding in ruby search_nodes tool Heroku search_nodes event wroclove.rb 2018 search_nodes event wroclove.rb 2019 search_nodes event wroclove.rb 2024 search_nodes event wroclove.rb 2022 search_nodes event wroclove.rb 2023 search_nodes event wroclove.rb 2026 search_nodes event wroclove.rb 2025 search_nodes talk Building LLM powered applications in Ruby search_nodes talk Counterintuitive Rails pt. 2 search_nodes talk Counterintuitive Rails pt. 1 search_nodes talk Component Driven UI with ViewComponent search_nodes talk 18 months of using hotwire and viewcomponent in production search_nodes talk Extracting logic from templates with Hanami Views search_nodes tool JSON API Resources search_nodes talk Methods Gem for Ruby Method References search_nodes talk Business logic in Ruby search_nodes talk Rubyana Gems and the Ractorous Rubetta Stones! search_nodes tool Rails 5.2 search_nodes concept Command Form search_nodes tool dry-validation search_nodes concept Refinements search_nodes tool Active Storage search_nodes takeaway Use Refinements for Coordinated Modernization search_nodes concept Active Record search_nodes talk Event Sourcing and Actor model in Ruby search_nodes concept CQRS search_nodes talk How wroclove.rb impacts developers and companies search_nodes talk The pillars of Domain Driven Design search_nodes talk SUPER AIN'T SUPER From OOP To FP and Beyond! search_nodes+get_node_edges concept Idempotent Projectors and Reactors search_nodes concept Saga Pattern search_nodes takeaway Event Sourcing Mind Shift Trade-off search_nodes talk To Refine or Not to Refine search_nodes resource Object-Oriented Software Construction search_nodes concept BPMN search_nodes concept EventStorming search_nodes concept Process Manager search_nodes talk The good, the bad and the remote — collaborative domain modeling with EventStorming search_nodes concept Breadth-First Search for Code Removal search_nodes concept Waterfall Analysis search_nodes concept Event Sourcing search_nodes takeaway Event Sourcing Enables Distribution search_nodes takeaway Hiring For Event Sourcing Trade-off search_nodes talk Event Sourcing Anti Patterns and Failures search_nodes concept Event Store search_nodes takeaway Use CQRS And Event Sourcing Independently search_nodes concept Snapshotting search_nodes question How to persist commands in an event-sourced system? search_nodes person DHH search_nodes concept Majestic Monolith search_nodes person Julik Tarkhanov search_nodes person Emiliano Della Casa search_nodes question Have you heard of Stimulus? search_nodes concept Reactive Programming search_nodes tool PureScript search_nodes tool Rust search_nodes tool Elixir search_nodes tool Erlang search_nodes tool Go search_nodes tool Phoenix search_nodes tool Elm search_nodes concept Elixir Pipe Operator search_nodes takeaway Sign serverlessforruby.org petition search_nodes talk FaaS for Ruby Lightning Talk search_nodes tool Clojure search_nodes talk Events events events search_nodes talk One machine please, make it Turing search_nodes talk Fix Production Bugs 20x Faster search_nodes talk Building uls for microservices search_nodes talk Devise pitfalls and way to tighten security search_nodes talk Multi-region data governance in Rails application search_nodes talk Securing Rails applications search_nodes tool Action Cable search_nodes talk Building a Production-Ready AI App: MCP & OAuth on Rails search_nodes tool TypeScript search_nodes tool .NET search_nodes concept Pipeline Operator search_nodes concept Function as a Service search_nodes concept Serverless search_nodes question Can parts of Eventide, Rails Event Store and Trailblazer be combined in one project? search_nodes talk The Curse of Service Object search_nodes tool ruby-contracts search_nodes talk Doctrine of Useful Objects Separate Fact from Fiction in OOD search_nodes takeaway Adopt CSS-in-JS for modern component-based frontends search_nodes concept CSS-in-JS search_nodes talk No-build Utopia: Modern User Experiences with Rails & Web Standards search_nodes

7 edges