← Extractions

Grokking FP For The Practicing Rubyist — Norbert Wójtowicz at wroclove.rb 2022

Norbert Wójtowicz's main-stage wroclove.rb 2022 talk reframing functional programming as the discipline of identifying three things in your own code — data, calculations, and actions — and then visualizing them with call graphs and timeline diagrams to drive better architecture. Walks through Rails' historical layering mistakes (views-touching-models, decorators, concerns, fat models, service objects) and introduces stratified design, abstraction barriers, minimal interfaces, and comfort-with-layers as practical tools. Recommends Eric Normand's Grokking Simplicity as the book-length version of the argument.

Model
claude-opus-4-7
Ingestion
65e8e34d
Input tokens
725,607
fresh
505,335
cached
207,417
cache write
12,855
Output tokens
18,394
Duration
315.4s
Roundtrips
13
Tool calls
31
Cost
$0.00
Nodes/edges extracted
23 / 42
Read set (nodes/edges)
157 / 2

Nodes (23)

update Grokking FP For The Practicing Rubyist talk
attrs {"type" => "talk"} {"date" => "2022-03-11", "type" => "talk", "based_on_book" => "Grokking Simplicity by Eric Normand"}
description Talk at wroclove.rb 2022. Norbert Wójtowicz's main-stage wroclove.rb 2022 talk, based on Eric Normand's book 'Grokking Simplicity'. Argues that...
short_description Talk at wroclove.rb 2022. Norbert Wójtowicz's wroclove.rb 2022 talk reframing FP as identifying data, calculations and actions.
update Norbert Wójtowicz person
description Polish Clojure advocate and conference speaker, recurring at wroclove.rb every two years. Originally a Ruby back-end ... Polish Clojure advocate and conference speaker, recurring at wroclove.rb every two years. Originally a Ruby back-end ...
create Grokking Simplicity resource
kind (empty) resource
name (empty) Grokking Simplicity
slug (empty) grokking-simplicity
attrs (empty) {"type" => "book", "author" => "Eric Normand"}
description (empty) Book by Eric Normand (a Clojure developer) written with JavaScript examples, teaching functional programming through ...
short_description (empty) Eric Normand's book on functional thinking through data, calculations and actions.
create Eric Normand person
kind (empty) person
name (empty) Eric Normand
slug (empty) eric-normand
description (empty) Clojure developer, educator, and author of Grokking Simplicity, a book teaching functional programming as identifying...
short_description (empty) Clojure developer and author of Grokking Simplicity.
create Data concept
kind (empty) concept
name (empty) Data
slug (empty) data
attrs (empty) {"category" => "concept"}
description (empty) In Wójtowicz/Normand's framing, data is information at rest: it carries meaning without needing a computer to interpr...
short_description (empty) Information at rest — meaningful without a computer, with multiple future interpretations.
create Calculation concept
kind (empty) concept
name (empty) Calculation
slug (empty) calculation
attrs (empty) {"category" => "concept"}
description (empty) Wójtowicz/Normand's second FP category: a function whose output depends only on its input and nothing else. You can r...
short_description (empty) Function whose output depends only on its inputs, regardless of when or how many times it runs.
create Action concept
kind (empty) concept
name (empty) Action
slug (empty) action
attrs (empty) {"category" => "concept"}
description (empty) Wójtowicz/Normand's third FP category: any computation that is dependent on when it runs or how many times it runs. E...
short_description (empty) Computation whose result depends on when or how many times it runs.
create Stratified Design concept
kind (empty) concept
name (empty) Stratified Design
slug (empty) stratified-design
attrs (empty) {"category" => "methodology"}
description (empty) Design approach Wójtowicz/Normand promote as the umbrella idea behind the talk: organize systems into layers, make su...
short_description (empty) Design practice of building systems as layers with strictly downward dependencies.
create Call Graph Visualization concept
kind (empty) concept
name (empty) Call Graph Visualization
slug (empty) call-graph-visualization
attrs (empty) {"category" => "practice"}
description (empty) Visualization technique where each horizontal row is an architectural layer (routes, controllers, models, views; or d...
short_description (empty) Dependency-arrow diagram of layers used to diagnose architectural smells.
create Timeline Visualization concept
kind (empty) concept
name (empty) Timeline Visualization
slug (empty) timeline-visualization
attrs (empty) {"category" => "practice"}
description (empty) Second visualization from Wójtowicz's talk. Models each concurrent worker/stream as a vertical timeline and draws the...
short_description (empty) Diagram of parallel actions across workers used to spot possible race conditions.
create Abstraction Barrier concept
kind (empty) concept
name (empty) Abstraction Barrier
slug (empty) abstraction-barrier
attrs (empty) {"category" => "pattern"}
description (empty) Stratified-design tool: create a layer whose interface is so clean and cohesive that consumers never need to know abo...
short_description (empty) Fat line between layers such that consumers never need to look underneath.
create Minimal Interface concept
kind (empty) concept
name (empty) Minimal Interface
slug (empty) minimal-interface
attrs (empty) {"category" => "pattern"}
description (empty) Stratified-design tool: after identifying layers, reduce each layer's API surface area to only what the abstraction a...
short_description (empty) Keep each layer's API surface as small as the abstraction allows.
create Comfort With Layers concept
kind (empty) concept
name (empty) Comfort With Layers
slug (empty) comfort-with-layers
attrs (empty) {"category" => "practice"}
description (empty) Fourth stratified-design tool from Wójtowicz's talk: the artsy-fartsy skill of choosing the right number of layers fo...
short_description (empty) Intuitive judgement for how many layers a team actually needs.
create HotBits resource
kind (empty) resource
name (empty) HotBits
slug (empty) hotbits
attrs (empty) {"type" => "service"}
description (empty) Web service (based at Fermilab) that exposes a geiger-Muller tube hooked up to a computer. Callers request random bit...
short_description (empty) Fermilab web service providing true random numbers from radioactive decay.
update Ruby on Rails tool
description Web application framework discussed throughout the panel. Ships MVC out of the box, which panelists agree is not enou... Web application framework discussed throughout wroclove.rb. Ships MVC out of the box. In Wójtowicz's call-graph analy...
create Onion Architecture concept
kind (empty) concept
name (empty) Onion Architecture
slug (empty) onion-architecture
attrs (empty) {"category" => "architecture"}
description (empty) Architectural style with concentric layers: a pure domain core surrounded by outer rings of application services, ada...
short_description (empty) Architectural style placing the pure domain at the center and infrastructure on outer rings.
create Identify Data Calculations Actions In Your System takeaway
kind (empty) takeaway
name (empty) Identify Data Calculations Actions In Your System
slug (empty) identify-data-calculations-actions-in-your-system
attrs (empty) {"type" => "recommendation"}
description (empty) Wójtowicz's central takeaway: the only thing functional programmers actually do is identify three things in their own...
short_description (empty) The core FP practice: classify each part of your code as data, calculation, or action.
create Draw Call Graphs To Expose Wrong-Way Dependencies takeaway
kind (empty) takeaway
name (empty) Draw Call Graphs To Expose Wrong-Way Dependencies
slug (empty) draw-call-graphs-to-expose-wrong-way-dependencies
attrs (empty) {"type" => "recommendation"}
description (empty) Practical takeaway: take any piece of your system and draw a call graph with each layer on its own horizontal line. A...
short_description (empty) Upward arrows in a layered call graph mean something has gone wrong.
create Timeline Diagrams Reveal Possible Race Conditions takeaway
kind (empty) takeaway
name (empty) Timeline Diagrams Reveal Possible Race Conditions
slug (empty) timeline-diagrams-reveal-possible-race-conditions
attrs (empty) {"type" => "recommendation"}
description (empty) Draw a vertical timeline per worker/stream and trace each action. When event-sourced reactions run as separate handle...
short_description (empty) Per-worker timelines analyze your system for race conditions tests cannot find.
create Stratified Design Applies At Every Scale takeaway
kind (empty) takeaway
name (empty) Stratified Design Applies At Every Scale
slug (empty) stratified-design-applies-at-every-scale
attrs (empty) {"type" => "insight"}
description (empty) Wójtowicz's closing insight: stratified design — layer your system, keep dependencies downward, draw real abstraction...
short_description (empty) Layering thinking applies to functions, classes, apps, microservices and architecture.
create Purity Is The Wrong Lens; Dependency On Time Is The Right One takeaway
kind (empty) takeaway
name (empty) Purity Is The Wrong Lens; Dependency On Time Is The Right One
slug (empty) purity-is-the-wrong-lens-dependency-on-time-is-the-right-one
attrs (empty) {"type" => "insight"}
description (empty) Wójtowicz's subtle but important point: mathematical purity isn't what matters for understanding your system. A funct...
short_description (empty) Classify code by when/how-many-times dependencies, not by 'pure vs side-effectful'.
create How do you determine call-graph arrow direction? question
kind (empty) question
name (empty) How do you determine call-graph arrow direction?
slug (empty) how-do-you-determine-call-graph-arrow-direction
attrs (empty) {"answer_summary" => "An arrow points from the caller to the callee. Views iterating over models create upward depend...
description (empty) Audience member Nick asks how to decide which way an arrow points in the call graphs, especially between views and mo...
short_description (empty) Audience Q on reading direction of arrows between view/model/controller layers.
create How does naming an abstraction relate to OOP design? question
kind (empty) question
name (empty) How does naming an abstraction relate to OOP design?
slug (empty) how-does-naming-an-abstraction-relate-to-oop-design
attrs (empty) {"answer_summary" => "Yes — the refactor is about naming a smaller abstraction with less API surface. Implementable a...
description (empty) An audience member asks whether Wójtowicz's 'frequencies' refactor — pulling a fishy piece of code behind a named met...
short_description (empty) Audience Q relating the 'frequencies' refactor to OO-style class design.

Edges (42)

update Norbert WójtowiczauthoredGrokking FP For The Practicing Rubyist
context The main-stage FP talk he mentions giving 'tomorrow'. Norbert Wójtowicz delivered this main-stage talk at wroclove.rb 2022.
update Grokking FP For The Practicing Rubyistpresented_atwroclove.rb 2022
context The functional programming talk Krzywda mentions as happening 'tomorrow'. Main-stage talk on the second/third day of the conference.
create Norbert Wójtowiczattendedwroclove.rb 2022
context (empty) Gave both a lightning talk and this main-stage talk.
relation (empty) attended
source_node_id (empty) f59530fe-fad2-4834-aaa3-bf68e355fdde
target_node_id (empty) cfc5cfd3-25a6-46c2-8b5d-626986c71c24
create Grokking FP For The Practicing RubyistaboutData
context (empty) First of the three core FP terms defined in the talk.
relation (empty) about
source_node_id (empty) 8dab2a13-ed61-40df-85da-80443066478d
target_node_id (empty) 2e18f05d-f3d3-478d-8ca3-6e9e8934bc53
create Grokking FP For The Practicing RubyistaboutCalculation
context (empty) Second of the three core FP terms defined in the talk.
relation (empty) about
source_node_id (empty) 8dab2a13-ed61-40df-85da-80443066478d
target_node_id (empty) 49484a7c-e01c-414e-8cfd-11bff84aad76
create Grokking FP For The Practicing RubyistaboutAction
context (empty) Third of the three core FP terms defined in the talk.
relation (empty) about
source_node_id (empty) 8dab2a13-ed61-40df-85da-80443066478d
target_node_id (empty) c71790f2-b41d-4e89-a6b8-c6ab430ffe5b
create Grokking FP For The Practicing RubyistaboutStratified Design
context (empty) Presented as the umbrella idea behind the practical advice of the talk.
relation (empty) about
source_node_id (empty) 8dab2a13-ed61-40df-85da-80443066478d
target_node_id (empty) 50033a10-6868-4c52-8065-971d814fa711
create Grokking FP For The Practicing RubyistaboutCall Graph Visualization
context (empty) First of two visualization techniques taught in the talk.
relation (empty) about
source_node_id (empty) 8dab2a13-ed61-40df-85da-80443066478d
target_node_id (empty) c5e5eb3f-103a-41f3-bf0d-bddca2d87913
create Grokking FP For The Practicing RubyistaboutTimeline Visualization
context (empty) Second visualization technique, applied to event-sourced shopping cart.
relation (empty) about
source_node_id (empty) 8dab2a13-ed61-40df-85da-80443066478d
target_node_id (empty) fe5076a6-8885-43b9-b2a5-899d3c6a1b3d
create Grokking FP For The Practicing RubyistaboutAbstraction Barrier
context (empty) One of the four stratified-design tools described.
relation (empty) about
source_node_id (empty) 8dab2a13-ed61-40df-85da-80443066478d
target_node_id (empty) b93ff6ab-9ae4-444f-94d2-aefe5f3218ea
create Grokking FP For The Practicing RubyistaboutMinimal Interface
context (empty) One of the four stratified-design tools described.
relation (empty) about
source_node_id (empty) 8dab2a13-ed61-40df-85da-80443066478d
target_node_id (empty) a3467287-44a3-459c-a7b6-6a44442c54b0
create Grokking FP For The Practicing RubyistaboutComfort With Layers
context (empty) One of the four stratified-design tools described.
relation (empty) about
source_node_id (empty) 8dab2a13-ed61-40df-85da-80443066478d
target_node_id (empty) 0d7a9a92-62f7-43d8-8f8b-5754d6f411ab
create Grokking FP For The Practicing RubyistaboutOnion Architecture
context (empty) Closing slide maps Krzywda's fat application/domain line to onion architecture when redrawn as circles.
relation (empty) about
source_node_id (empty) 8dab2a13-ed61-40df-85da-80443066478d
target_node_id (empty) a2f54a61-a76c-4e87-a4e4-45a4dc888327
create Grokking FP For The Practicing RubyistaboutRuby on Rails
context (empty) Extended example applying call graphs to the historical evolution of Rails architecture.
relation (empty) about
source_node_id (empty) 8dab2a13-ed61-40df-85da-80443066478d
target_node_id (empty) 7aac705a-0987-49f2-b665-9d4e08a6acee
create Grokking FP For The Practicing RubyistaboutGrokking Simplicity
context (empty) Talk title and content are based on Eric Normand's book.
relation (empty) about
source_node_id (empty) 8dab2a13-ed61-40df-85da-80443066478d
target_node_id (empty) 15126248-d917-4e44-914c-e58670f5d2ab
create Grokking FP For The Practicing RubyistaboutHotBits
context (empty) Used as the archetypal real-world example of an action.
relation (empty) about
source_node_id (empty) 8dab2a13-ed61-40df-85da-80443066478d
target_node_id (empty) fad470b8-fd15-40b6-a0c5-8c3c877e5aee
create Eric NormandauthoredGrokking Simplicity
context (empty) Eric Normand wrote Grokking Simplicity.
relation (empty) authored
source_node_id (empty) d066c910-00bd-4cf8-afa3-01daa2a606c7
target_node_id (empty) 15126248-d917-4e44-914c-e58670f5d2ab
create Norbert WójtowiczrecommendsGrokking Simplicity
context (empty) Explicitly recommends the audience read the book for the long-form version of his argument.
relation (empty) recommends
source_node_id (empty) f59530fe-fad2-4834-aaa3-bf68e355fdde
target_node_id (empty) 15126248-d917-4e44-914c-e58670f5d2ab
create Identify Data Calculations Actions In Your Systemfrom_talkGrokking FP For The Practicing Rubyist
context (empty) Central takeaway of the talk.
relation (empty) from_talk
source_node_id (empty) 571f3efe-18d8-40f5-a69b-3a4b1572beb4
target_node_id (empty) 8dab2a13-ed61-40df-85da-80443066478d
create Draw Call Graphs To Expose Wrong-Way Dependenciesfrom_talkGrokking FP For The Practicing Rubyist
context (empty) Practical takeaway built around the first visualization.
relation (empty) from_talk
source_node_id (empty) 94eea62f-ee02-4a66-82fe-26489bcb65c9
target_node_id (empty) 8dab2a13-ed61-40df-85da-80443066478d
create Timeline Diagrams Reveal Possible Race Conditionsfrom_talkGrokking FP For The Practicing Rubyist
context (empty) Practical takeaway built around the second visualization.
relation (empty) from_talk
source_node_id (empty) 31a86466-6a88-4747-b470-03012e9bd997
target_node_id (empty) 8dab2a13-ed61-40df-85da-80443066478d
create Stratified Design Applies At Every Scalefrom_talkGrokking FP For The Practicing Rubyist
context (empty) Closing insight that stratified design is a universal idea.
relation (empty) from_talk
source_node_id (empty) 2f22db0d-b6df-45fa-bdc8-56fb772ccedb
target_node_id (empty) 8dab2a13-ed61-40df-85da-80443066478d
create Purity Is The Wrong Lens; Dependency On Time Is The Right Onefrom_talkGrokking FP For The Practicing Rubyist
context (empty) Closing subtlety about cached I/O and expensive pure functions.
relation (empty) from_talk
source_node_id (empty) 6e26d02c-f9c4-4aa0-9d27-5eb29b5f2805
target_node_id (empty) 8dab2a13-ed61-40df-85da-80443066478d
create Identify Data Calculations Actions In Your SystemaboutData
context (empty) First of the three categories to identify.
relation (empty) about
source_node_id (empty) 571f3efe-18d8-40f5-a69b-3a4b1572beb4
target_node_id (empty) 2e18f05d-f3d3-478d-8ca3-6e9e8934bc53
create Identify Data Calculations Actions In Your SystemaboutCalculation
context (empty) Second of the three categories to identify.
relation (empty) about
source_node_id (empty) 571f3efe-18d8-40f5-a69b-3a4b1572beb4
target_node_id (empty) 49484a7c-e01c-414e-8cfd-11bff84aad76
create Identify Data Calculations Actions In Your SystemaboutAction
context (empty) Third of the three categories to identify.
relation (empty) about
source_node_id (empty) 571f3efe-18d8-40f5-a69b-3a4b1572beb4
target_node_id (empty) c71790f2-b41d-4e89-a6b8-c6ab430ffe5b
create Draw Call Graphs To Expose Wrong-Way DependenciesaboutCall Graph Visualization
context (empty) Actionable application of the call-graph technique.
relation (empty) about
source_node_id (empty) 94eea62f-ee02-4a66-82fe-26489bcb65c9
target_node_id (empty) c5e5eb3f-103a-41f3-bf0d-bddca2d87913
create Timeline Diagrams Reveal Possible Race ConditionsaboutTimeline Visualization
context (empty) Actionable application of the timeline technique.
relation (empty) about
source_node_id (empty) 31a86466-6a88-4747-b470-03012e9bd997
target_node_id (empty) fe5076a6-8885-43b9-b2a5-899d3c6a1b3d
create Stratified Design Applies At Every ScaleaboutStratified Design
context (empty) Generalization of stratified design across scales.
relation (empty) about
source_node_id (empty) 2f22db0d-b6df-45fa-bdc8-56fb772ccedb
target_node_id (empty) 50033a10-6868-4c52-8065-971d814fa711
create Stratified Designrelated_toAbstraction Barrier
context (empty) Abstraction barrier is one of the four tools of stratified design.
relation (empty) related_to
source_node_id (empty) 50033a10-6868-4c52-8065-971d814fa711
target_node_id (empty) b93ff6ab-9ae4-444f-94d2-aefe5f3218ea
create Stratified Designrelated_toMinimal Interface
context (empty) Minimal interface is one of the four tools of stratified design.
relation (empty) related_to
source_node_id (empty) 50033a10-6868-4c52-8065-971d814fa711
target_node_id (empty) a3467287-44a3-459c-a7b6-6a44442c54b0
create Stratified Designrelated_toComfort With Layers
context (empty) Comfort with layers is one of the four tools of stratified design.
relation (empty) related_to
source_node_id (empty) 50033a10-6868-4c52-8065-971d814fa711
target_node_id (empty) 0d7a9a92-62f7-43d8-8f8b-5754d6f411ab
create Actionrelated_toCalculation
context (empty) Composition rule: an action propagates action-ness through the call graph, turning neighbouring calculations into act...
relation (empty) related_to
source_node_id (empty) c71790f2-b41d-4e89-a6b8-c6ab430ffe5b
target_node_id (empty) 49484a7c-e01c-414e-8cfd-11bff84aad76
create How do you determine call-graph arrow direction?asked_atGrokking FP For The Practicing Rubyist
context (empty) First Q&A question of the talk.
relation (empty) asked_at
source_node_id (empty) 9716fdfc-2295-4bc4-a10c-ad62c64f5d59
target_node_id (empty) 8dab2a13-ed61-40df-85da-80443066478d
create How does naming an abstraction relate to OOP design?asked_atGrokking FP For The Practicing Rubyist
context (empty) Second Q&A question of the talk.
relation (empty) asked_at
source_node_id (empty) 436464a2-e702-4024-a846-9c4c18eb0319
target_node_id (empty) 8dab2a13-ed61-40df-85da-80443066478d
create How do you determine call-graph arrow direction?aboutCall Graph Visualization
context (empty) Asks how to interpret the direction of arrows in the talk's call graphs.
relation (empty) about
source_node_id (empty) 9716fdfc-2295-4bc4-a10c-ad62c64f5d59
target_node_id (empty) c5e5eb3f-103a-41f3-bf0d-bddca2d87913
create How does naming an abstraction relate to OOP design?aboutMinimal Interface
context (empty) Relates the frequencies refactor to reducing API surface area.
relation (empty) about
source_node_id (empty) 436464a2-e702-4024-a846-9c4c18eb0319
target_node_id (empty) a3467287-44a3-459c-a7b6-6a44442c54b0
create Grokking FP For The Practicing Rubyistrelated_toTypical DDDomains In Rails Apps
context (empty) Wójtowicz explicitly references Krzywda's previous-day talk, citing the application-vs-domain fat line and layered-DD...
relation (empty) related_to
source_node_id (empty) 8dab2a13-ed61-40df-85da-80443066478d
target_node_id (empty) a4a2cd64-ecaf-4875-bc09-5eedcfc022b0
create Grokking FP For The Practicing Rubyistrelated_to10 Things You Never Wanted To Know About Reform 3
context (empty) Wójtowicz cites Nick Sutterer's Friday Reform 3 talk as an accidental discovery of the minimal-interface principle wh...
relation (empty) related_to
source_node_id (empty) 8dab2a13-ed61-40df-85da-80443066478d
target_node_id (empty) b789fbeb-cd17-4b63-8057-8e2a7b7ffeb9
create Grokking FP For The Practicing Rubyistrelated_toFunctional Programming as Naming Lightning Talk
context (empty) The lightning talk was explicitly framed as a teaser for this main-stage FP talk.
relation (empty) related_to
source_node_id (empty) 8dab2a13-ed61-40df-85da-80443066478d
target_node_id (empty) 08859281-9b16-460f-be17-fb8a156165b7
create Grokking FP For The Practicing RubyistaboutEvent Sourcing
context (empty) Timeline-visualization example uses an event-sourced shopping cart with a max-items rule and a reactive free-gift pol...
relation (empty) about
source_node_id (empty) 8dab2a13-ed61-40df-85da-80443066478d
target_node_id (empty) 687c9da2-de87-4fb2-a758-c7498f394fd5
create Grokking FP For The Practicing RubyistaboutService Object
context (empty) Call-graph walkthrough cites service objects as the first legitimate layered step in the Rails architectural evolutio...
relation (empty) about
source_node_id (empty) 8dab2a13-ed61-40df-85da-80443066478d
target_node_id (empty) b8d19b36-ebfb-4be1-bba5-790358c566d1

Read set

157 nodes

talk Functional Programming as Naming Lightning Talk search_nodes concept Immutable Form Runtime API search_nodes concept Punch Card Programming search_nodes concept Pipeline Operator search_nodes tool PureScript search_nodes concept Reactive Programming search_nodes tool Redux search_nodes concept Idempotent Projectors and Reactors search_nodes concept Domain as Function from Commands to Events search_nodes concept Function as a Service search_nodes takeaway Build APIs with immutability, EDN, context-free, flat search_nodes talk Offline Sandwich Focus Workflow search_nodes takeaway Name Things To Find Their Properties search_nodes takeaway Avoid complexity before fighting it search_nodes resource awesome-ddd search_nodes concept Cynefin Framework search_nodes takeaway Be kind and build useful things search_nodes talk Spice up your life with eql search_nodes talk Ever shorter feedback loop search_nodes question Turning Workshop Enthusiasm Into Real Results search_nodes concept Flat Query Structure search_nodes question Does experienced architect's intuition override precise design vocabulary? search_nodes takeaway Design Must Be Described Precisely Before It Can Be Improved search_nodes concept Architecture Drivers search_nodes concept Context Map search_nodes concept Domain Storytelling search_nodes question Cross-tenant aggregation with row-level multi-tenancy search_nodes takeaway Layered DDD is junior-friendly and estimation-friendly search_nodes concept Event Stream search_nodes event EmberConf list_nodes_by_kind event KanDDDinsky list_nodes_by_kind event wroclove.rb 2018 list_nodes_by_kind+search_nodes event wroclove.rb 2019 list_nodes_by_kind+search_nodes event wroclove.rb 2022 list_nodes_by_kind+search_nodes event wroclove.rb 2023 list_nodes_by_kind+search_nodes event wroclove.rb 2024 list_nodes_by_kind+search_nodes event wroclove.rb 2025 list_nodes_by_kind+search_nodes event wroclove.rb 2026 list_nodes_by_kind+search_nodes person Norbert Wójtowicz search_nodes person Adam Okoń search_nodes concept Application Layer vs Domain Layer search_nodes person Andrzej Krzywda search_nodes concept Application Logic vs Business Logic search_nodes talk Typical DDDomains In Rails Apps search_nodes takeaway Write Domain Code Free of Frameworks search_nodes question Isn't asking password confirmation business logic? search_nodes question Risk of misidentifying domains during legacy re-architecture search_nodes talk Performance of Distributed Applications search_nodes talk How wroclove.rb impacts developers and companies search_nodes talk Rewrite with confidence search_nodes talk One machine please, make it Turing search_nodes talk Reforging (or rather rebrewing) the support for open-source search_nodes talk It is not so bad, after all search_nodes talk Fix Production Bugs 20x Faster search_nodes talk Building LLM powered applications in Ruby search_nodes concept Flame Graphs search_nodes tool Pathom search_nodes takeaway Graph resolvers compute minimal API calls automatically search_nodes tool GraphQL search_nodes concept Breadth-First Search for Code Removal search_nodes tool TSort search_nodes tool Grafana search_nodes talk 10 Things You Never Wanted To Know About Reform 3 search_nodes talk No 'Pundit' Intended search_nodes talk SUPER AIN'T SUPER From OOP To FP and Beyond! search_nodes person Nick Sutterer search_nodes concept Event Sourcing search_nodes concept Snapshotting search_nodes talk Applying CQRS & Event Sourcing on Rails applications search_nodes question What is the biggest challenge with this approach? search_nodes takeaway Event Sourcing Enables Distribution search_nodes takeaway Event Sourcing Is About State Not Distribution search_nodes concept Reservation Pattern search_nodes question How to persist commands in an event-sourced system? search_nodes takeaway Use CQRS And Event Sourcing Independently search_nodes question How do you search across millions of events for top items? search_nodes concept Hexagonal Architecture search_nodes concept Event-Driven Architecture search_nodes concept Distributed Monolith search_nodes concept Single-Tenant Architecture search_nodes concept CQRS search_nodes concept Namespace-Based Folder Hierarchy search_nodes question Is layered DDD really junior-friendly? search_nodes person Paweł Pokrywka search_nodes tool RealtimeBoard search_nodes talk Events events events search_nodes project Ruby Romania search_nodes concept GitHub Self-Hosted Runner search_nodes concept Stalling For Time search_nodes concept Checks, Tests, Reviews and Flags search_nodes resource Domain-Driven Design: Patterns, Principles and Practices search_nodes resource Domain-Driven Design: Tackling Complexity in the Heart of Software search_nodes resource Introducing EventStorming search_nodes resource Implementing Domain-Driven Design search_nodes talk Dealing With A Project's Complexity In A Changing Environment search_nodes talk International cooperation in IT teams search_nodes talk Devise pitfalls and way to tighten security search_nodes talk Prevent account sharing search_nodes talk Debug like a scientist search_nodes talk Grokking FP For The Practicing Rubyist search_nodes+get_node_edges talk Fantastic Databases and Where to Find Them search_nodes talk Towards the post framework future search_nodes question Is building DDD from scratch too slow for the business? search_nodes question Does DDD require object-oriented programming? search_nodes takeaway Risks of DDD: Hierarchy, Perfectionism, Constraints search_nodes concept State Machine search_nodes tool EventMachine search_nodes tool Rust search_nodes tool Brotli search_nodes tool Sync Space VR search_nodes takeaway Buy Faster Hardware search_nodes concept VT100 Terminal search_nodes concept Vector Clock search_nodes tool Trailblazer search_nodes concept Trailblazer Activity search_nodes concept Trailblazer Workflow search_nodes takeaway Trailblazer tracing saves thousands of debugging hours search_nodes tool Ruby on Rails search_nodes concept Trailblazer Operation search_nodes tool TruffleRuby search_nodes tool Rack search_nodes tool Ruby search_nodes tool Standard RB search_nodes tool reviewdog search_nodes tool Codecov search_nodes project gemcheck search_nodes tool Crystal Ball search_nodes question Has Mutant been run against popular Ruby libraries? search_nodes tool ruby/setup-ruby search_nodes talk Scientific Ruby Lightning Talk search_nodes tool test-prof search_nodes tool ruby-contracts search_nodes concept Service Object search_nodes takeaway Don't reuse service objects across applications search_nodes concept Stateless Service Object search_nodes talk The Curse of Service Object search_nodes takeaway Prefer class-method services over stateful service objects search_nodes concept Scope Concerns search_nodes tool interactor search_nodes takeaway Prefer a simple top-to-bottom worker search_nodes talk Business logic in Ruby search_nodes tool aggregate_root search_nodes concept MVC Modularity Violations search_nodes question Can service objects and command handlers call each other? search_nodes talk Rubyana Gems and the Ractorous Rubetta Stones! search_nodes resource Short Ruby Newsletter search_nodes talk Data Management With Ruby search_nodes talk Ruby Rendezvous Method Call, Proc, and Beyond search_nodes talk To Refine or Not to Refine search_nodes talk UringMachine — High Performance Concurrency for Ruby Using io_uring search_nodes talk Methods Gem for Ruby Method References search_nodes talk FaaS for Ruby Lightning Talk search_nodes takeaway Sign serverlessforruby.org petition search_nodes resource serverlessforruby.org Petition search_nodes talk Introducing Sorbet into your Ruby codebase search_nodes talk JRuby: Professional-Grade Ruby search_nodes talk Webmock unmocked search_nodes

2 edges