← Extractions

Cables! Cables! Cables! — Vladimir Dementyev at wroclove.rb 2018

Vladimir Dementyev (Evil Martians) surveys Ruby solutions for real-time web apps, dissecting Action Cable's strengths and weaknesses around memory usage and broadcast latency. He introduces AnyCable, which replaces Action Cable's server with a Go (or Erlang) WebSocket server talking to Rails over gRPC, and covers related projects LiteCable, Iodine, and Plezi.

Model
claude-opus-4-7
Ingestion
31879d5d
Input tokens
392,720
fresh
235,511
cached
149,205
cache write
8,004
Output tokens
14,542
Duration
225.9s
Roundtrips
13
Tool calls
24
Cost
$0.00
Nodes/edges extracted
26 / 48
Read set (nodes/edges)
72 / 2

Nodes (26)

update Vladimir Dementyev person
attrs (empty) → {"role" => "developer/open-source author", "location" => "Moscow, Russia"}
description Conference speaker. → Conference speaker from Moscow working at Evil Martians. Programs in Ruby, Erlang, Go, and Crystal, and maintains a l...
short_description Conference speaker. → Ruby developer at Evil Martians; open-source author of AnyCable and LiteCable.
create Prometheus tool
kind (empty) → tool
name (empty) → Prometheus
slug (empty) → prometheus
attrs (empty) → {"category" => "service"}
description (empty) → Monitoring system whose metrics format AnyCable exposes from its WebSocket server, enabling Grafana dashboards and al...
short_description (empty) → Metrics collection and monitoring system with a pull model.
create Grafana tool
kind (empty) → tool
name (empty) → Grafana
slug (empty) → grafana
attrs (empty) → {"category" => "service"}
description (empty) → Used alongside Prometheus-compatible AnyCable metrics to build real-time dashboards (total/unique clients, etc.) and ...
short_description (empty) → Dashboard and alerting tool for time-series metrics.
create WebSockets concept
kind (empty) → concept
name (empty) → WebSockets
slug (empty) → websockets
attrs (empty) → {"category" => "protocol"}
description (empty) → Protocol underlying real-time web apps such as chat. Action Cable speaks WebSockets only, which excludes a small perc...
short_description (empty) → Bi-directional protocol for persistent client-server communication.
create Real-time Web Applications concept
kind (empty) → concept
name (empty) → Real-time Web Applications
slug (empty) → real-time-web-applications
attrs (empty) → {"category" => "architecture"}
description (empty) → Applications in which users receive information as soon as it appears elsewhere in the system, without periodic polli...
short_description (empty) → Web apps delivering updates instantly without client polling.
create Global Interpreter Lock concept
kind (empty) → concept
name (empty) → Global Interpreter Lock
slug (empty) → global-interpreter-lock
attrs (empty) → {"category" => "architecture"}
description (empty) → MRI Ruby's GIL, together with suboptimal Matz-Ruby-Moritomo concurrency internals, limits Ruby's suitability for conc...
short_description (empty) → MRI Ruby's lock preventing true parallel execution of Ruby threads.
create Zero-Disconnect Deployment concept
kind (empty) → concept
name (empty) → Zero-Disconnect Deployment
slug (empty) → zero-disconnect-deployment
attrs (empty) → {"category" => "practice"}
description (empty) → Analog of zero-downtime deployment for WebSocket-heavy apps. Reloading a classic Action Cable server disconnects ever...
short_description (empty) → Deploying an app without dropping WebSocket connections.
update Cables! Cables! Cables! talk
description Talk at wroclove.rb 2018. → Vladimir Dementyev's wroclove.rb 2018 talk surveying Ruby 'cables' (tools for building real-time web applications). R...
short_description Talk at wroclove.rb 2018. → Talk on real-time Ruby, Action Cable limitations, and AnyCable.
create Evil Martians company
kind (empty) → company
name (empty) → Evil Martians
slug (empty) → evil-martians
attrs (empty) → {"industry" => "software consulting / product development"}
description (empty) → Consultancy/product-development shop employing Vladimir Dementyev. Works with big companies and small startups on pro...
short_description (empty) → Product development consultancy working with startups and large companies; prolific Ruby OSS.
create Action Cable tool
kind (empty) → tool
name (empty) → Action Cable
slug (empty) → action-cable
attrs (empty) → {"category" => "framework"}
description (empty) → Framework bundled with Rails for real-time web applications. Composed of four parts: a WebSocket server (runs inside ...
short_description (empty) → Rails framework for WebSocket-based real-time features.
create AnyCable project
kind (empty) → project
name (empty) → AnyCable
slug (empty) → anycable
attrs (empty) → {"status" => "active", "license" => "open-source"}
description (empty) → Open-source project by Vladimir Dementyev that enhances (rather than replaces) Action Cable by extracting the WebSock...
short_description (empty) → Drop-in Action Cable replacement with an external Go/Erlang WebSocket server over gRPC.
create LiteCable project
kind (empty) → project
name (empty) → LiteCable
slug (empty) → litecable
attrs (empty) → {"status" => "active", "license" => "open-source"}
description (empty) → Vladimir Dementyev's Ruby library implementing the Action Cable protocol without depending on Rails or ActiveSupport....
short_description (empty) → Rails-free, Action Cable-compatible channels framework compatible with AnyCable.
create Iodine tool
kind (empty) → tool
name (empty) → Iodine
slug (empty) → iodine
attrs (empty) → {"category" => "service"}
description (empty) → Rack-compatible Ruby web server implemented as a wrapper over a C HTTP framework. CPU- and memory-efficient, alternat...
short_description (empty) → C-based high-performance Ruby web server with real-time support.
create Plezi tool
kind (empty) → tool
name (empty) → Plezi
slug (empty) → plezi
attrs (empty) → {"category" => "framework"}
description (empty) → Ruby framework for building real-time web applications on top of the Iodine web server. Performance-oriented and simp...
short_description (empty) → Ruby real-time web framework built on top of Iodine.
create gRPC tool
kind (empty) → tool
name (empty) → gRPC
slug (empty) → grpc
attrs (empty) → {"category" => "framework"}
description (empty) → Universal RPC framework, popularly attributed to Google (powers many public Google APIs). Uses HTTP/2 (allowing many ...
short_description (empty) → Google-born RPC framework using HTTP/2 and Protocol Buffers.
create Protocol Buffers tool
kind (empty) → tool
name (empty) → Protocol Buffers
slug (empty) → protocol-buffers
attrs (empty) → {"category" => "library"}
description (empty) → Binary wire format with fast (de)serialization and effective implicit compression. Paired with HTTP/2 inside gRPC.
short_description (empty) → Google's binary serialization format used by gRPC.
create Go tool
kind (empty) → tool
name (empty) → Go
slug (empty) → go
attrs (empty) → {"category" => "language"}
description (empty) → Language used for the primary AnyCable WebSocket server implementation. Ships as a single binary and is easy to run, ...
short_description (empty) → Statically-typed compiled language suited to concurrent network services.
create Erlang tool
kind (empty) → tool
name (empty) → Erlang
slug (empty) → erlang
attrs (empty) → {"category" => "language"}
description (empty) → Functional/concurrent language running on the BEAM VM. Used for a secondary AnyCable WebSocket server implementation....
short_description (empty) → BEAM-VM language known for soft-realtime concurrency.
create Redis tool
kind (empty) → tool
name (empty) → Redis
slug (empty) → redis
attrs (empty) → {"category" => "service"}
description (empty) → Used by AnyCable as the default transport for broadcasting messages from the Rails application to the external WebSoc...
short_description (empty) → In-memory data store often used as a pub/sub broker.
create Hanami tool
kind (empty) → tool
name (empty) → Hanami
slug (empty) → hanami
attrs (empty) → {"category" => "framework"}
description (empty) → Ruby web framework. Does not ship its own real-time/cable solution; combined with LiteCable + AnyCable in an Internet...
short_description (empty) → Alternative Ruby web framework to Rails.
create Rocket Real-Time Benchmark resource
kind (empty) → resource
name (empty) → Rocket Real-Time Benchmark
slug (empty) → rocket-real-time-benchmark
attrs (empty) → {"type" => "repository"}
description (empty) → Benchmark written by the 'rocket' company (as presented) that measures real-time performance — the time a server take...
short_description (empty) → Benchmark measuring WebSocket broadcast latency across cable implementations.
create Equestrian-Shows Platform Case Study resource
kind (empty) → resource
name (empty) → Equestrian-Shows Platform Case Study
slug (empty) → equestrian-shows-platform-case-study
attrs (empty) → {"type" => "case-study"}
description (empty) → Real-life usage story of AnyCable told by its owners to Vladimir Dementyev. The platform manages and monitors equestr...
short_description (empty) → Production case switching from Action Cable to AnyCable with ~10x cost reduction.
create Extract the slow server out of Ruby takeaway
kind (empty) → takeaway
name (empty) → Extract the slow server out of Ruby
slug (empty) → extract-the-slow-server-out-of-ruby
attrs (empty) → {"type" => "recommendation"}
description (empty) → For high-performance real-time Ruby apps, leave business logic in Ruby (where it is easiest to write) and move the lo...
short_description (empty) → Keep business logic in Ruby, push low-level WebSocket I/O to Go/Erlang.
create Action Cable Crowded-Channel Trade-off takeaway
kind (empty) → takeaway
name (empty) → Action Cable Crowded-Channel Trade-off
slug (empty) → action-cable-crowded-channel-trade-off
attrs (empty) → {"type" => "warning"}
description (empty) → When using Action Cable you must either tolerate high broadcast latency or avoid crowded channels (channels with many...
short_description (empty) → Action Cable is fine up to ~thousands of subscribers per channel; beyond that, switch.
create Start with Action Cable, switch when performance hurts takeaway
kind (empty) → takeaway
name (empty) → Start with Action Cable, switch when performance hurts
slug (empty) → start-with-action-cable-switch-when-performance-hurts
attrs (empty) → {"type" => "recommendation"}
description (empty) → Many teams (small projects, MVPs) can happily start with Action Cable. Once performance or memory issues bite, the se...
short_description (empty) → Use Action Cable for MVPs and small apps; swap in AnyCable when scaling.
create Why two AnyCable server implementations question
kind (empty) → question
name (empty) → Why two AnyCable server implementations
slug (empty) → why-two-anycable-server-implementations
attrs (empty) → {"answer_summary" => "Erlang lacked gRPC library; Go prototype became primary because it's easier to run."}
description (empty) → Audience question at the end of the talk asking why AnyCable has two WebSocket server implementations. Answer: the sp...
short_description (empty) → Audience asked why AnyCable ships both Go and Erlang servers.

Edges (48)

create gRPC → uses → Protocol Buffers
context (empty) → gRPC uses protobuf for wire serialization.
relation (empty) → uses
source_node_id (empty) → 52c07f52-77b9-46e0-a04d-57af30c94ab9
target_node_id (empty) → 36c750b4-667e-4c23-a1e1-4517b927d583
create Action Cable → uses → WebSockets
context (empty) → Action Cable is a WebSocket-only server.
relation (empty) → uses
source_node_id (empty) → 013851e3-4ca1-43b2-ab9a-8c531798c325
target_node_id (empty) → aed5cd48-754d-4e28-81ee-a14e040adf2b
create Action Cable → uses → Ruby
context (empty) → Runs inside MRI Ruby, inheriting GIL-related limitations.
relation (empty) → uses
source_node_id (empty) → 013851e3-4ca1-43b2-ab9a-8c531798c325
target_node_id (empty) → c7f25b33-06c9-460e-aca7-fe993123ebee
update Vladimir Dementyev → authored → Cables! Cables! Cables!
context (empty) → Speaker of the wroclove.rb 2018 talk.
update Cables! Cables! Cables! → presented_at → wroclove.rb 2018
context (empty) → Talk delivered at wroclove.rb on 2018-03-16.
create Vladimir Dementyev → attended → wroclove.rb 2018
context (empty) → Traveled from Moscow to speak at the conference.
relation (empty) → attended
source_node_id (empty) → db49cf54-53a3-4357-a923-951ddf06b59b
target_node_id (empty) → 9243ef2c-21bb-4f23-b450-9ecd87882dfe
create Vladimir Dementyev → works_at → Evil Martians
attrs (empty) → {"role" => "developer"}
context (empty) → Self-identifies as working at Evil Martians.
relation (empty) → works_at
source_node_id (empty) → db49cf54-53a3-4357-a923-951ddf06b59b
target_node_id (empty) → 4f724c14-2ccc-4769-bd4a-0719505d1188
create Vladimir Dementyev → works_on → AnyCable
attrs (empty) → {"role" => "creator/maintainer"}
context (empty) → Creator and maintainer of AnyCable.
relation (empty) → works_on
source_node_id (empty) → db49cf54-53a3-4357-a923-951ddf06b59b
target_node_id (empty) → 91a3f2b0-4b18-4814-997e-b70b169a9214
create Vladimir Dementyev → works_on → LiteCable
attrs (empty) → {"role" => "creator"}
context (empty) → Built LiteCable as a Rails-free cable framework.
relation (empty) → works_on
source_node_id (empty) → db49cf54-53a3-4357-a923-951ddf06b59b
target_node_id (empty) → 03d501ec-8f88-45e7-b65f-34c2528a2dc9
create Vladimir Dementyev → has_skill → Ruby
attrs (empty) → {"level" => "expert"}
context (empty) → Primary programming language.
relation (empty) → has_skill
source_node_id (empty) → db49cf54-53a3-4357-a923-951ddf06b59b
target_node_id (empty) → c7f25b33-06c9-460e-aca7-fe993123ebee
create Vladimir Dementyev → has_skill → Erlang
context (empty) → Uses Erlang among other languages; authored AnyCable's Erlang server.
relation (empty) → has_skill
source_node_id (empty) → db49cf54-53a3-4357-a923-951ddf06b59b
target_node_id (empty) → 53c364ea-6dbe-4a30-9f29-ad30ba08feb1
create Vladimir Dementyev → has_skill → Go
context (empty) → Learned Go while building AnyCable's Go server.
relation (empty) → has_skill
source_node_id (empty) → db49cf54-53a3-4357-a923-951ddf06b59b
target_node_id (empty) → 05765f80-6e8f-47a6-87e1-77548619f272
create Cables! Cables! Cables! → about → Action Cable
context (empty) → Deep dive into Action Cable's architecture, strengths, and weaknesses.
relation (empty) → about
source_node_id (empty) → 49862192-1473-4288-ba9c-93e8571cf6ff
target_node_id (empty) → 013851e3-4ca1-43b2-ab9a-8c531798c325
create Cables! Cables! Cables! → about → AnyCable
context (empty) → Introduces AnyCable as a solution to Action Cable's performance problems.
relation (empty) → about
source_node_id (empty) → 49862192-1473-4288-ba9c-93e8571cf6ff
target_node_id (empty) → 91a3f2b0-4b18-4814-997e-b70b169a9214
create Cables! Cables! Cables! → about → LiteCable
context (empty) → Presents LiteCable as a Rails-free Action Cable-compatible framework.
relation (empty) → about
source_node_id (empty) → 49862192-1473-4288-ba9c-93e8571cf6ff
target_node_id (empty) → 03d501ec-8f88-45e7-b65f-34c2528a2dc9
create Cables! Cables! Cables! → about → Iodine
context (empty) → Mentioned as an efficient alternative Ruby web server.
relation (empty) → about
source_node_id (empty) → 49862192-1473-4288-ba9c-93e8571cf6ff
target_node_id (empty) → a7ffd876-5542-42e1-af56-e71b3d8d9aad
create Cables! Cables! Cables! → about → Plezi
context (empty) → Described as an in-progress integration target for LiteCable/AnyCable.
relation (empty) → about
source_node_id (empty) → 49862192-1473-4288-ba9c-93e8571cf6ff
target_node_id (empty) → 371ba978-c125-4f5d-a3a6-31e3c6b2371d
create Cables! Cables! Cables! → about → Real-time Web Applications
context (empty) → Central subject of the talk.
relation (empty) → about
source_node_id (empty) → 49862192-1473-4288-ba9c-93e8571cf6ff
target_node_id (empty) → 135d680d-6b44-417f-b465-1c2023478fac
create Cables! Cables! Cables! → about → WebSockets
context (empty) → Discusses WebSocket-only protocol support and its limitations.
relation (empty) → about
source_node_id (empty) → 49862192-1473-4288-ba9c-93e8571cf6ff
target_node_id (empty) → aed5cd48-754d-4e28-81ee-a14e040adf2b
create Cables! Cables! Cables! → about → gRPC
context (empty) → Explains gRPC as the transport between AnyCable's WebSocket server and Rails.
relation (empty) → about
source_node_id (empty) → 49862192-1473-4288-ba9c-93e8571cf6ff
target_node_id (empty) → 52c07f52-77b9-46e0-a04d-57af30c94ab9
create AnyCable → uses → gRPC
context (empty) → WebSocket server proxies Action Cable protocol to Rails via gRPC.
relation (empty) → uses
source_node_id (empty) → 91a3f2b0-4b18-4814-997e-b70b169a9214
target_node_id (empty) → 52c07f52-77b9-46e0-a04d-57af30c94ab9
create AnyCable → uses → Redis
context (empty) → Default broadcasting transport from Rails to AnyCable server.
relation (empty) → uses
source_node_id (empty) → 91a3f2b0-4b18-4814-997e-b70b169a9214
target_node_id (empty) → 4651221d-1a5e-4989-bac2-017a8b614da1
create AnyCable → uses → Go
context (empty) → Primary WebSocket server implementation in Go.
relation (empty) → uses
source_node_id (empty) → 91a3f2b0-4b18-4814-997e-b70b169a9214
target_node_id (empty) → 05765f80-6e8f-47a6-87e1-77548619f272
create AnyCable → uses → Erlang
context (empty) → Secondary WebSocket server implementation in Erlang.
relation (empty) → uses
source_node_id (empty) → 91a3f2b0-4b18-4814-997e-b70b169a9214
target_node_id (empty) → 53c364ea-6dbe-4a30-9f29-ad30ba08feb1
create AnyCable → uses → Protocol Buffers
context (empty) → Serialization format via gRPC.
relation (empty) → uses
source_node_id (empty) → 91a3f2b0-4b18-4814-997e-b70b169a9214
target_node_id (empty) → 36c750b4-667e-4c23-a1e1-4517b927d583
create AnyCable → uses → Prometheus
context (empty) → Exposes Prometheus-compatible metrics endpoint.
relation (empty) → uses
source_node_id (empty) → 91a3f2b0-4b18-4814-997e-b70b169a9214
target_node_id (empty) → 4afe605c-464c-4dfe-8493-fada9935e1d0
create LiteCable → related_to → Action Cable
context (empty) → Implements the same protocol as Action Cable without Rails dependency.
relation (empty) → related_to
source_node_id (empty) → 03d501ec-8f88-45e7-b65f-34c2528a2dc9
target_node_id (empty) → 013851e3-4ca1-43b2-ab9a-8c531798c325
create LiteCable → related_to → AnyCable
context (empty) → Designed to be compatible with AnyCable out of the box.
relation (empty) → related_to
source_node_id (empty) → 03d501ec-8f88-45e7-b65f-34c2528a2dc9
target_node_id (empty) → 91a3f2b0-4b18-4814-997e-b70b169a9214
create LiteCable → related_to → Hanami
context (empty) → Example integration: LiteCable + AnyCable + Hanami for IoT projects.
relation (empty) → related_to
source_node_id (empty) → 03d501ec-8f88-45e7-b65f-34c2528a2dc9
target_node_id (empty) → 9e549b38-6071-4b4d-88ea-ca5c3d86afa7
create Plezi → uses → Iodine
context (empty) → Plezi is built on top of the Iodine web server.
relation (empty) → uses
source_node_id (empty) → 371ba978-c125-4f5d-a3a6-31e3c6b2371d
target_node_id (empty) → a7ffd876-5542-42e1-af56-e71b3d8d9aad
create Action Cable → related_to → Global Interpreter Lock
context (empty) → Cited as a root cause of Action Cable's concurrency limits.
relation (empty) → related_to
source_node_id (empty) → 013851e3-4ca1-43b2-ab9a-8c531798c325
target_node_id (empty) → b2da1bdf-0293-4d62-8478-327f08bd9f7f
create AnyCable → related_to → Zero-Disconnect Deployment
context (empty) → AnyCable's stateless proxy enables zero-disconnect deployment.
relation (empty) → related_to
source_node_id (empty) → 91a3f2b0-4b18-4814-997e-b70b169a9214
target_node_id (empty) → c03b09d5-7e27-459e-8076-bd14ccca8715
create Equestrian-Shows Platform Case Study → about → AnyCable
context (empty) → Production migration from Action Cable to AnyCable.
relation (empty) → about
source_node_id (empty) → ffb9fac4-8d0c-47ef-97f1-8f5494c6d391
target_node_id (empty) → 91a3f2b0-4b18-4814-997e-b70b169a9214
create Equestrian-Shows Platform Case Study → about → Action Cable
context (empty) → Case study describes prior Action Cable memory problems.
relation (empty) → about
source_node_id (empty) → ffb9fac4-8d0c-47ef-97f1-8f5494c6d391
target_node_id (empty) → 013851e3-4ca1-43b2-ab9a-8c531798c325
create Equestrian-Shows Platform Case Study → about → Heroku
context (empty) → Hosted on Heroku; metrics expressed in dynos.
relation (empty) → about
source_node_id (empty) → ffb9fac4-8d0c-47ef-97f1-8f5494c6d391
target_node_id (empty) → d3785e15-2805-4486-a633-6e785e4f8ae3
create Rocket Real-Time Benchmark → about → Action Cable
context (empty) → Used to measure Action Cable broadcast latency.
relation (empty) → about
source_node_id (empty) → f357db90-b219-4183-9d52-6f562e5019d6
target_node_id (empty) → 013851e3-4ca1-43b2-ab9a-8c531798c325
create Rocket Real-Time Benchmark → about → AnyCable
context (empty) → Used to compare AnyCable (Go/Erlang) against Action Cable.
relation (empty) → about
source_node_id (empty) → f357db90-b219-4183-9d52-6f562e5019d6
target_node_id (empty) → 91a3f2b0-4b18-4814-997e-b70b169a9214
create Extract the slow server out of Ruby → from_talk → Cables! Cables! Cables!
context (empty) → Guiding principle stated by the speaker.
relation (empty) → from_talk
source_node_id (empty) → 7c635b53-08a3-4652-b9ff-1fb1e18d7e19
target_node_id (empty) → 49862192-1473-4288-ba9c-93e8571cf6ff
create Extract the slow server out of Ruby → about → AnyCable
context (empty) → Principle that AnyCable embodies.
relation (empty) → about
source_node_id (empty) → 7c635b53-08a3-4652-b9ff-1fb1e18d7e19
target_node_id (empty) → 91a3f2b0-4b18-4814-997e-b70b169a9214
create Action Cable Crowded-Channel Trade-off → from_talk → Cables! Cables! Cables!
context (empty) → Warning derived from benchmark results.
relation (empty) → from_talk
source_node_id (empty) → 72128e20-2ead-4ad1-982f-f0822c96be0d
target_node_id (empty) → 49862192-1473-4288-ba9c-93e8571cf6ff
create Action Cable Crowded-Channel Trade-off → about → Action Cable
context (empty) → Limitation of Action Cable at scale.
relation (empty) → about
source_node_id (empty) → 72128e20-2ead-4ad1-982f-f0822c96be0d
target_node_id (empty) → 013851e3-4ca1-43b2-ab9a-8c531798c325
create Start with Action Cable, switch when performance hurts → from_talk → Cables! Cables! Cables!
context (empty) → Closing recommendation.
relation (empty) → from_talk
source_node_id (empty) → 900c670f-b6c8-478c-bfd0-2c51d76b743a
target_node_id (empty) → 49862192-1473-4288-ba9c-93e8571cf6ff
create Start with Action Cable, switch when performance hurts → about → AnyCable
context (empty) → Recommended swap-in when Action Cable hits limits.
relation (empty) → about
source_node_id (empty) → 900c670f-b6c8-478c-bfd0-2c51d76b743a
target_node_id (empty) → 91a3f2b0-4b18-4814-997e-b70b169a9214
create Why two AnyCable server implementations → asked_at → Cables! Cables! Cables!
context (empty) → Audience Q&A.
relation (empty) → asked_at
source_node_id (empty) → 152458bc-b726-41f1-a07d-011fd80edff8
target_node_id (empty) → 49862192-1473-4288-ba9c-93e8571cf6ff
create Why two AnyCable server implementations → about → AnyCable
context (empty) → Question about AnyCable's dual Go/Erlang implementations.
relation (empty) → about
source_node_id (empty) → 152458bc-b726-41f1-a07d-011fd80edff8
target_node_id (empty) → 91a3f2b0-4b18-4814-997e-b70b169a9214
create Cables! Cables! Cables! → related_to → Better WebPerformance with Rails
context (empty) → Speaker opens by thanking Stefan for the preceding Rails performance talk.
relation (empty) → related_to
source_node_id (empty) → 49862192-1473-4288-ba9c-93e8571cf6ff
target_node_id (empty) → 8a072c53-4edf-401f-8a73-78d7e3b1e763
create Vladimir Dementyev → recommends → AnyCable
context (empty) → Speaker's own project, recommended for scaling real-time Ruby apps.
relation (empty) → recommends
source_node_id (empty) → db49cf54-53a3-4357-a923-951ddf06b59b
target_node_id (empty) → 91a3f2b0-4b18-4814-997e-b70b169a9214
create Vladimir Dementyev → recommends → LiteCable
context (empty) → Recommended for non-Rails real-time Ruby apps.
relation (empty) → recommends
source_node_id (empty) → db49cf54-53a3-4357-a923-951ddf06b59b
target_node_id (empty) → 03d501ec-8f88-45e7-b65f-34c2528a2dc9

Read set

72 nodes

talk Orchestrating video transcoding in ruby search_nodes talk When REST is Not Enough: Implementing Alternative Protocols in Ruby on Rails search_nodes talk Building on Bluesky's AT Protocol with Ruby search_nodes tool rails_event_store search_nodes concept Rails Reload-Safe ES Configuration search_nodes talk Building LLM powered applications in Ruby search_nodes talk Business logic in Ruby search_nodes talk Better WebPerformance with Rails search_nodes talk Working with RailsEventStore in Cashflow Management System search_nodes talk UringMachine — High Performance Concurrency for Ruby Using io_uring search_nodes person Vladimir Dementyev search_nodes+get_node_edges talk Applying CQRS & Event Sourcing on Rails applications search_nodes talk Event Sourcing and Actor model in Ruby search_nodes tool Rails 5.2 search_nodes concept Static Page Caching via nginx 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 Counterintuitive Rails pt. 2 search_nodes talk Counterintuitive Rails pt. 1 search_nodes tool HTTP/2 search_nodes tool Brotli search_nodes takeaway Switch on HTTP/2 search_nodes tool Phoenix search_nodes tool Elixir search_nodes tool Heroku search_nodes talk Rubyana Gems and the Ractorous Rubetta Stones! search_nodes talk Spice up your life with eql search_nodes concept Event Store search_nodes talk No-build Utopia: Modern User Experiences with Rails & Web Standards search_nodes talk Cables! Cables! Cables! get_node_edges takeaway Time Travel Superpower search_nodes concept Russian Doll Caching search_nodes concept Cache Preheating search_nodes talk MVCC for Ruby developers search_nodes concept CQRS search_nodes takeaway Per-Event Backups Via Reactors search_nodes talk Fantastic Databases and Where to Find Them search_nodes takeaway Eventual Consistency Trade-off search_nodes tool RealtimeBoard search_nodes talk Events events events search_nodes talk Setup and operation of mutation testing in agentic world search_nodes takeaway Upgrade Ruby version for free speed search_nodes talk JRuby: Professional-Grade Ruby search_nodes tool Ruby search_nodes person Emiliano Della Casa search_nodes talk Introducing Sorbet into your Ruby codebase search_nodes person Julik Tarkhanov search_nodes tool webpagetest.org search_nodes concept Waterfall Analysis search_nodes talk 18 months of using hotwire and viewcomponent in production search_nodes concept HTTP/2 Server Push search_nodes concept HTTP Caching with ETag and Last-Modified search_nodes person Stefan Wintermeyer search_nodes resource Stefan Wintermeyer's Rails 5.2 Book search_nodes person Adam Okoń search_nodes talk Extracting logic from templates with Hanami Views search_nodes talk Towards the post framework future search_nodes talk Building Rails SPAs in Frontend Ruby with Glimmer DSL for Web search_nodes tool Ruby on Rails search_nodes tool Faker search_nodes talk Forms Are Dead: Building Agentic Workflows in Ruby search_nodes concept Command UUID Deduplication search_nodes tool WebP search_nodes tool dry-struct search_nodes talk Adventures in durable execution search_nodes takeaway Replay-Based Debugging search_nodes tool ruby-contracts search_nodes

2 edges