← Extractions

Spice up your life with eql — Norbert Wójtowicz at wroclove.rb 2019

Norbert Wójtowicz's wroclove.rb 2019 talk closes his multi-year arc on Clojure ideas (frontends, backends, databases) by showing how to build APIs using immutability, EDN, context-free namespaced identifiers, and flat data. He demonstrates Pathom, a Clojure graph-resolver library, solving GraphQL's type-explosion problem and composing YouTube and SpaceX APIs via fully-qualified keyword aliases.

Model
claude-opus-4-7
Ingestion
04766a78
Input tokens
801,724
fresh
662,700
cached
125,735
cache write
13,289
Output tokens
13,352
Duration
211.3s
Roundtrips
8
Tool calls
19
Cost
$0.00
Nodes/edges extracted
26 / 47
Read set (nodes/edges)
460 / 4

Nodes (26)

update Spice up your life with eql talk
description Talk at wroclove.rb 2019. → Norbert Wójtowicz's wroclove.rb 2019 talk, the fourth in a multi-year arc after his 2015 wroclove.rb talk on ClojureS...
short_description Talk at wroclove.rb 2019. → Talk advocating Pathom/EQL-style graph APIs using immutability, EDN, and context-free flat data.
update Norbert Wójtowicz person
description Conference speaker. → Polish Clojure advocate and conference speaker, recurring at wroclove.rb every two years. Originally a Ruby back-end ...
short_description Conference speaker. → Polish Clojure advocate and conference speaker; recurring wroclove.rb speaker on immutable-data architectures.
create Pathom tool
kind (empty) → tool
name (empty) → Pathom
slug (empty) → pathom
attrs (empty) → {"category" => "library", "language" => "Clojure"}
description (empty) → Clojure library implementing EQL-based graph APIs. Developers define resolvers as nodes of a graph: each resolver dec...
short_description (empty) → Clojure library for building graph APIs via composable resolvers.
create Fulcro tool
kind (empty) → tool
name (empty) → Fulcro
slug (empty) → fulcro
attrs (empty) → {"category" => "framework"}
description (empty) → ClojureScript full-stack framework demonstrated in the talk as the runtime for a React component that issues Pathom/E...
short_description (empty) → ClojureScript full-stack framework using EQL queries for front-end data.
create Fulcro Inspect tool
kind (empty) → tool
name (empty) → Fulcro Inspect
slug (empty) → fulcro-inspect
attrs (empty) → {"category" => "library"}
description (empty) → Chrome DevTools extension for Fulcro apps. Displays operations, network calls, and other runtime metadata. Itself a F...
short_description (empty) → Chrome DevTools panel for inspecting Fulcro applications.
create Workspaces tool
kind (empty) → tool
name (empty) → Workspaces
slug (empty) → workspaces
attrs (empty) → {"category" => "platform"}
description (empty) → ClojureScript tool for live-coding React components and mounting Fulcro applications inside a development environment...
short_description (empty) → ClojureScript development tool for mounting live React/Fulcro components.
create EDN tool
kind (empty) → tool
name (empty) → EDN
slug (empty) → edn
attrs (empty) → {"category" => "library"}
description (empty) → Extensible Data Notation. A data format describing how to serialize and deserialize a set of scalars (numbers, ration...
short_description (empty) → Extensible Data Notation — Clojure's cross-language data serialization format.
create EQL concept
kind (empty) → concept
name (empty) → EQL
slug (empty) → eql
attrs (empty) → {"category" => "pattern"}
description (empty) → EDN Query Language. Expresses API queries as EDN data structures instead of a string DSL: vectors list attributes of ...
short_description (empty) → EDN Query Language — data-structure-based query notation for graph APIs.
create Namespaced Keywords concept
kind (empty) → concept
name (empty) → Namespaced Keywords
slug (empty) → namespaced-keywords
attrs (empty) → {"category" => "pattern"}
description (empty) → Clojure/EDN feature where a keyword carries a namespace prefix (e.g. :youtube.video/id vs :youtube.channel/id). In th...
short_description (empty) → Clojure keywords carrying a namespace, making identifiers globally unambiguous.
create Context-Free Identifiers concept
kind (empty) → concept
name (empty) → Context-Free Identifiers
slug (empty) → context-free-identifiers
attrs (empty) → {"category" => "principle"}
description (empty) → Design principle of making every identifier carry enough qualification to be understood on its own — removing the nee...
short_description (empty) → Identifiers meaningful without surrounding scope, enabled by namespacing.
create Flat Query Structure concept
kind (empty) → concept
name (empty) → Flat Query Structure
slug (empty) → flat-query-structure
attrs (empty) → {"category" => "pattern"}
description (empty) → Design step that follows once identifiers are context-free: because a video always has exactly one channel, a YouTube...
short_description (empty) → API design where 1:1 relationships are expressed as sibling attributes, not joins.
create Resolver concept
kind (empty) → concept
name (empty) → Resolver
slug (empty) → resolver
attrs (empty) → {"category" => "pattern"}
description (empty) → Central building block of Pathom: a node in the attribute graph declaring which input attributes are required and whi...
short_description (empty) → Pathom graph node declaring input-to-output attribute mapping plus a fetch function.
create Decomplecting concept
kind (empty) → concept
name (empty) → Decomplecting
slug (empty) → decomplecting
attrs (empty) → {"category" => "practice"}
description (empty) → Rich Hickey's term for the process of taking apart concerns that were unintentionally braided together but don't actu...
short_description (empty) → Rich Hickey's practice of separating things unintentionally coupled together.
create Rich Hickey person
kind (empty) → person
name (empty) → Rich Hickey
slug (empty) → rich-hickey
description (empty) → Creator of Clojure. Cited by Norbert Wójtowicz for the decomplecting framing — solving problems by separating concern...
short_description (empty) → Creator of Clojure; author of the 'decomplecting' framing.
create Falcor tool
kind (empty) → tool
name (empty) → Falcor
slug (empty) → falcor
attrs (empty) → {"category" => "library"}
description (empty) → Netflix-built data-fetching library with goals similar to GraphQL: client-driven data selection over a unified graph....
short_description (empty) → Netflix data-fetching library for unified API graph.
create jq tool
kind (empty) → tool
name (empty) → jq
slug (empty) → jq
attrs (empty) → {"category" => "tool"}
description (empty) → Command-line JSON processor. Used in the talk as an analogy for what EQL does: a pearl-like string notation for trave...
short_description (empty) → Command-line JSON processor with a Perl-like traversal string syntax.
create Hash Slice / select-keys concept
kind (empty) → concept
name (empty) → Hash Slice / select-keys
slug (empty) → hash-slice-select-keys
attrs (empty) → {"category" => "pattern"}
description (empty) → Everyday primitive available in Clojure as select-keys and in Ruby as Hash#slice: given a map and a list of keys, ret...
short_description (empty) → Language primitive for projecting a map to a subset of keys.
create YouTube company
kind (empty) → company
name (empty) → YouTube
slug (empty) → youtube
attrs (empty) → {"industry" => "video streaming"}
description (empty) → Google-owned video-sharing platform. Used throughout the talk as the canonical complex single-page app: a video page ...
short_description (empty) → Google-owned video platform used as the case study for API design.
create SpaceX company
kind (empty) → company
name (empty) → SpaceX
slug (empty) → spacex
attrs (empty) → {"industry" => "spaceflight"}
description (empty) → Private spaceflight company. Ships a public API returning launch information (launcher, fairings, recovery, launch si...
short_description (empty) → Private spaceflight company; public API used to demonstrate cross-service joins.
create Facebook company
kind (empty) → company
name (empty) → Facebook
slug (empty) → facebook
attrs (empty) → {"industry" => "social media"}
description (empty) → Social-media company. Mentioned as the originator of GraphQL, which it created to solve the multi-source data-fetchin...
short_description (empty) → Social-media company; originator of GraphQL.
create Netflix company
kind (empty) → company
name (empty) → Netflix
slug (empty) → netflix
attrs (empty) → {"industry" => "video streaming"}
description (empty) → Streaming company. Mentioned as the originator of the Falcor data-fetching library, which addresses similar problems ...
short_description (empty) → Streaming company; originator of Falcor.
create REST concept
kind (empty) → concept
name (empty) → REST
slug (empty) → rest
attrs (empty) → {"category" => "architecture"}
description (empty) → Dominant architectural style for HTTP APIs. Critiqued in the talk for forcing clients into N+1 fetches (video, channe...
short_description (empty) → Architectural style for HTTP APIs centered on resources and representations.
create Build APIs with immutability, EDN, context-free, flat takeaway
kind (empty) → takeaway
name (empty) → Build APIs with immutability, EDN, context-free, flat
slug (empty) → build-apis-with-immutability-edn-context-free-flat
attrs (empty) → {"type" => "recommendation"}
description (empty) → Norbert Wójtowicz's four-step recipe for building APIs the way Pathom does, presented as 'too-few-steps-to-ignore': (...
short_description (empty) → Four-step recipe for API design: immutable, EDN-based, context-free, flat.
create Use fully namespace-qualified keywords to bridge services takeaway
kind (empty) → takeaway
name (empty) → Use fully namespace-qualified keywords to bridge services
slug (empty) → use-fully-namespace-qualified-keywords-to-bridge-services
attrs (empty) → {"type" => "insight"}
description (empty) → Because keywords like :youtube.video/id and :spacex.launch/youtube-id are unambiguous, you can declare a one-to-one a...
short_description (empty) → Namespaced keywords enable aliasing identifiers across services in one API.
create Port Pathom's ideas to Ruby takeaway
kind (empty) → takeaway
name (empty) → Port Pathom's ideas to Ruby
slug (empty) → port-pathom-s-ideas-to-ruby
attrs (empty) → {"type" => "recommendation"}
description (empty) → The speaker's explicit invitation: the ideas behind Pathom (immutability, EDN-like data queries, context-free namespa...
short_description (empty) → The Pathom approach isn't Clojure-specific and can be implemented in Ruby.
create Graph resolvers compute minimal API calls automatically takeaway
kind (empty) → takeaway
name (empty) → Graph resolvers compute minimal API calls automatically
slug (empty) → graph-resolvers-compute-minimal-api-calls-automatically
attrs (empty) → {"type" => "insight"}
description (empty) → When every resolver declares only its input and output attributes, Pathom treats the union of resolvers as a graph an...
short_description (empty) → Small resolvers composed into a graph yield batched, parallel, fallback-aware fetching.

Edges (47)

update Norbert Wójtowicz → authored → Spice up your life with eql
context (empty) → Speaker of the wroclove.rb 2019 talk.
update Spice up your life with eql → presented_at → wroclove.rb 2019
context (empty) → Delivered as a main-stage talk.
create Spice up your life with eql → about → Pathom
context (empty) → Talk centers on Pathom as a concrete implementation of the four-step API recipe.
relation (empty) → about
source_node_id (empty) → ea6ac02a-8bc2-44db-9d8d-8701615db851
target_node_id (empty) → cb76cb8b-6374-450f-93f9-b80a01b10362
create Norbert Wójtowicz → has_skill → Clojure
attrs (empty) → {"level" => "expert"}
context (empty) → Recurring Clojure speaker.
relation (empty) → has_skill
source_node_id (empty) → f59530fe-fad2-4834-aaa3-bf68e355fdde
target_node_id (empty) → bd3fce39-7c57-4f81-ad35-5061d9ea1137
create Norbert Wójtowicz → has_skill → ClojureScript
attrs (empty) → {"level" => "expert"}
context (empty) → 2015 talk on ClojureScript+React for front-end.
relation (empty) → has_skill
source_node_id (empty) → f59530fe-fad2-4834-aaa3-bf68e355fdde
target_node_id (empty) → cf0f6cf8-dbc2-4f1a-ae8e-be03f30c1f9f
create Norbert Wójtowicz → uses → Pathom
context (empty) → Uses Pathom on a daily basis at work per the talk.
relation (empty) → uses
source_node_id (empty) → f59530fe-fad2-4834-aaa3-bf68e355fdde
target_node_id (empty) → cb76cb8b-6374-450f-93f9-b80a01b10362
create Spice up your life with eql → about → EQL
context (empty) → EQL is the query language the talk advocates for.
relation (empty) → about
source_node_id (empty) → ea6ac02a-8bc2-44db-9d8d-8701615db851
target_node_id (empty) → 2d2242fd-daa3-43e0-9b28-a42ca3670a80
create Spice up your life with eql → about → EDN
context (empty) → EDN is the data notation EQL is built on.
relation (empty) → about
source_node_id (empty) → ea6ac02a-8bc2-44db-9d8d-8701615db851
target_node_id (empty) → ffcaf8f4-bfc0-40fc-be90-9b8726e4a8ee
create Spice up your life with eql → about → Namespaced Keywords
context (empty) → Third step of the recipe: use namespaced keywords for context-free identifiers.
relation (empty) → about
source_node_id (empty) → ea6ac02a-8bc2-44db-9d8d-8701615db851
target_node_id (empty) → 95e7fa66-f7f8-49c6-b9f8-f773651a97ba
create Spice up your life with eql → about → Context-Free Identifiers
context (empty) → Design principle enabled by namespaced keywords.
relation (empty) → about
source_node_id (empty) → ea6ac02a-8bc2-44db-9d8d-8701615db851
target_node_id (empty) → 8d0e393f-fdd8-46a2-9094-ffb1364fbc16
create Spice up your life with eql → about → Flat Query Structure
context (empty) → Fourth step of the recipe: flatten 1:1 joins.
relation (empty) → about
source_node_id (empty) → ea6ac02a-8bc2-44db-9d8d-8701615db851
target_node_id (empty) → 376a108d-1d5f-47c7-9807-09d6456c3bb3
create Spice up your life with eql → about → Resolver
context (empty) → Resolvers are Pathom's building block demonstrated in the live coding.
relation (empty) → about
source_node_id (empty) → ea6ac02a-8bc2-44db-9d8d-8701615db851
target_node_id (empty) → 3fc84d32-ef02-4542-ad25-8a50ac190672
create Spice up your life with eql → about → GraphQL
context (empty) → Talk critiques GraphQL's type explosion as motivation for EQL.
relation (empty) → about
source_node_id (empty) → ea6ac02a-8bc2-44db-9d8d-8701615db851
target_node_id (empty) → c6a1041c-3116-4194-b7f0-eba7cd4a7e64
create Spice up your life with eql → about → REST
context (empty) → Talk critiques REST and YouTube's 'part' quota system.
relation (empty) → about
source_node_id (empty) → ea6ac02a-8bc2-44db-9d8d-8701615db851
target_node_id (empty) → 1e449edf-802d-44aa-b87c-911f69be1091
create Spice up your life with eql → about → Falcor
context (empty) → Mentioned as Netflix's equivalent to GraphQL.
relation (empty) → about
source_node_id (empty) → ea6ac02a-8bc2-44db-9d8d-8701615db851
target_node_id (empty) → 207e784b-492c-4f0c-b8e7-71c5f172b5f3
create Spice up your life with eql → about → jq
context (empty) → Used as an analogy for traversal/derivation notation.
relation (empty) → about
source_node_id (empty) → ea6ac02a-8bc2-44db-9d8d-8701615db851
target_node_id (empty) → 3143d961-aa4b-44ea-8f16-0c1b99a0ea62
create Spice up your life with eql → about → Decomplecting
context (empty) → Justifies separating query from scope.
relation (empty) → about
source_node_id (empty) → ea6ac02a-8bc2-44db-9d8d-8701615db851
target_node_id (empty) → 0853dcb6-42a4-43d1-a19d-c63dbd5221b5
create Spice up your life with eql → about → Fulcro
context (empty) → Used in the live demo to host the Pathom-driven React component.
relation (empty) → about
source_node_id (empty) → ea6ac02a-8bc2-44db-9d8d-8701615db851
target_node_id (empty) → 2f4fa3eb-d89c-4438-bae6-eb5b7363b42d
create Spice up your life with eql → about → Workspaces
context (empty) → Live demo environment for writing EQL queries.
relation (empty) → about
source_node_id (empty) → ea6ac02a-8bc2-44db-9d8d-8701615db851
target_node_id (empty) → bf50e7b5-76f4-41e3-a1aa-0dea50f4a45e
create Spice up your life with eql → about → Fulcro Inspect
context (empty) → Shown as a DevTools panel with trace metadata attached via globally unique identifiers.
relation (empty) → about
source_node_id (empty) → ea6ac02a-8bc2-44db-9d8d-8701615db851
target_node_id (empty) → 251105a4-dda2-4e7b-af2c-d1ae26e0412a
create Spice up your life with eql → about → YouTube
context (empty) → YouTube is the primary API case study.
relation (empty) → about
source_node_id (empty) → ea6ac02a-8bc2-44db-9d8d-8701615db851
target_node_id (empty) → 3aeebed3-a622-4a67-b9c3-89e277027c45
create Spice up your life with eql → about → SpaceX
context (empty) → SpaceX API is the cross-service integration case study.
relation (empty) → about
source_node_id (empty) → ea6ac02a-8bc2-44db-9d8d-8701615db851
target_node_id (empty) → 39a85c8d-1477-4713-86f2-592e3f388cd9
create EQL → related_to → EDN
context (empty) → EQL stands for EDN Query Language — queries are EDN data.
relation (empty) → related_to
source_node_id (empty) → 2d2242fd-daa3-43e0-9b28-a42ca3670a80
target_node_id (empty) → ffcaf8f4-bfc0-40fc-be90-9b8726e4a8ee
create Clojure → uses → EDN
context (empty) → Clojure uses EDN as the syntax for its source code.
relation (empty) → uses
source_node_id (empty) → bd3fce39-7c57-4f81-ad35-5061d9ea1137
target_node_id (empty) → ffcaf8f4-bfc0-40fc-be90-9b8726e4a8ee
create Pathom → related_to → Clojure
context (empty) → Pathom is a Clojure library.
relation (empty) → related_to
source_node_id (empty) → cb76cb8b-6374-450f-93f9-b80a01b10362
target_node_id (empty) → bd3fce39-7c57-4f81-ad35-5061d9ea1137
create Pathom → uses → EQL
context (empty) → Pathom parses and resolves EQL queries.
relation (empty) → uses
source_node_id (empty) → cb76cb8b-6374-450f-93f9-b80a01b10362
target_node_id (empty) → 2d2242fd-daa3-43e0-9b28-a42ca3670a80
create Fulcro → related_to → ClojureScript
context (empty) → Fulcro is a ClojureScript full-stack framework.
relation (empty) → related_to
source_node_id (empty) → 2f4fa3eb-d89c-4438-bae6-eb5b7363b42d
target_node_id (empty) → cf0f6cf8-dbc2-4f1a-ae8e-be03f30c1f9f
create Workspaces → related_to → Fulcro
context (empty) → Workspaces is built as a Fulcro application.
relation (empty) → related_to
source_node_id (empty) → bf50e7b5-76f4-41e3-a1aa-0dea50f4a45e
target_node_id (empty) → 2f4fa3eb-d89c-4438-bae6-eb5b7363b42d
create Fulcro Inspect → related_to → Fulcro
context (empty) → Fulcro Inspect is itself a Fulcro application, running as a Chrome DevTools panel.
relation (empty) → related_to
source_node_id (empty) → 251105a4-dda2-4e7b-af2c-d1ae26e0412a
target_node_id (empty) → 2f4fa3eb-d89c-4438-bae6-eb5b7363b42d
create Namespaced Keywords → related_to → Context-Free Identifiers
context (empty) → Namespaced keywords are how context-free identifiers are implemented in EDN.
relation (empty) → related_to
source_node_id (empty) → 95e7fa66-f7f8-49c6-b9f8-f773651a97ba
target_node_id (empty) → 8d0e393f-fdd8-46a2-9094-ffb1364fbc16
create Context-Free Identifiers → related_to → Flat Query Structure
context (empty) → Flat queries become possible once identifiers are context-free.
relation (empty) → related_to
source_node_id (empty) → 8d0e393f-fdd8-46a2-9094-ffb1364fbc16
target_node_id (empty) → 376a108d-1d5f-47c7-9807-09d6456c3bb3
create Resolver → related_to → Pathom
context (empty) → Resolvers are Pathom's core abstraction.
relation (empty) → related_to
source_node_id (empty) → 3fc84d32-ef02-4542-ad25-8a50ac190672
target_node_id (empty) → cb76cb8b-6374-450f-93f9-b80a01b10362
create Decomplecting → related_to → Rich Hickey
context (empty) → Decomplecting is Rich Hickey's framing.
relation (empty) → related_to
source_node_id (empty) → 0853dcb6-42a4-43d1-a19d-c63dbd5221b5
target_node_id (empty) → 0af6123d-a6ae-4e2a-a320-6576786e5346
create Falcor → related_to → Netflix
context (empty) → Falcor is built by Netflix.
relation (empty) → related_to
source_node_id (empty) → 207e784b-492c-4f0c-b8e7-71c5f172b5f3
target_node_id (empty) → 0d0d2abf-08d3-4a9a-8cec-1052c9284aa3
create GraphQL → related_to → Facebook
context (empty) → GraphQL was created by Facebook.
relation (empty) → related_to
source_node_id (empty) → c6a1041c-3116-4194-b7f0-eba7cd4a7e64
target_node_id (empty) → 7a64ac69-5d72-4225-9f26-e97ce73dc261
create EQL → related_to → Hash Slice / select-keys
context (empty) → EQL selection generalizes hash-slice/select-keys to the API level.
relation (empty) → related_to
source_node_id (empty) → 2d2242fd-daa3-43e0-9b28-a42ca3670a80
target_node_id (empty) → 50bf1ef4-72f0-43ef-806e-a7bd725165e5
create EQL → related_to → jq
context (empty) → EQL is inspired by jq's traversal idea but uses data instead of a string syntax.
relation (empty) → related_to
source_node_id (empty) → 2d2242fd-daa3-43e0-9b28-a42ca3670a80
target_node_id (empty) → 3143d961-aa4b-44ea-8f16-0c1b99a0ea62
create Build APIs with immutability, EDN, context-free, flat → from_talk → Spice up your life with eql
context (empty) → The talk's central four-step recipe.
relation (empty) → from_talk
source_node_id (empty) → 12185684-50be-4207-83d1-cba241563807
target_node_id (empty) → ea6ac02a-8bc2-44db-9d8d-8701615db851
create Use fully namespace-qualified keywords to bridge services → from_talk → Spice up your life with eql
context (empty) → Demonstrated via the YouTube+SpaceX integration.
relation (empty) → from_talk
source_node_id (empty) → 808f4277-8146-4a9c-bb41-ca40e4d827a6
target_node_id (empty) → ea6ac02a-8bc2-44db-9d8d-8701615db851
create Port Pathom's ideas to Ruby → from_talk → Spice up your life with eql
context (empty) → Explicit invitation to the Ruby-conference audience.
relation (empty) → from_talk
source_node_id (empty) → 71acb587-2ad4-493d-93a0-bb3b8f6e3804
target_node_id (empty) → ea6ac02a-8bc2-44db-9d8d-8701615db851
create Graph resolvers compute minimal API calls automatically → from_talk → Spice up your life with eql
context (empty) → Shown in the live demo's tracer and the 403 fallback example.
relation (empty) → from_talk
source_node_id (empty) → 4a69ec6a-a1ba-4ead-a713-f9ed1cb84b66
target_node_id (empty) → ea6ac02a-8bc2-44db-9d8d-8701615db851
create Build APIs with immutability, EDN, context-free, flat → about → Pathom
context (empty) → Recipe is exemplified by Pathom.
relation (empty) → about
source_node_id (empty) → 12185684-50be-4207-83d1-cba241563807
target_node_id (empty) → cb76cb8b-6374-450f-93f9-b80a01b10362
create Use fully namespace-qualified keywords to bridge services → about → Namespaced Keywords
context (empty) → Takeaway applies namespaced keywords across services.
relation (empty) → about
source_node_id (empty) → 808f4277-8146-4a9c-bb41-ca40e4d827a6
target_node_id (empty) → 95e7fa66-f7f8-49c6-b9f8-f773651a97ba
create Port Pathom's ideas to Ruby → about → Pathom
context (empty) → The ideas to port are Pathom's.
relation (empty) → about
source_node_id (empty) → 71acb587-2ad4-493d-93a0-bb3b8f6e3804
target_node_id (empty) → cb76cb8b-6374-450f-93f9-b80a01b10362
create Graph resolvers compute minimal API calls automatically → about → Resolver
context (empty) → About Pathom's resolver-graph execution model.
relation (empty) → about
source_node_id (empty) → 4a69ec6a-a1ba-4ead-a713-f9ed1cb84b66
target_node_id (empty) → 3fc84d32-ef02-4542-ad25-8a50ac190672
create Norbert Wójtowicz → recommends → Pathom
context (empty) → Talk is an extended recommendation of Pathom's ideas.
relation (empty) → recommends
source_node_id (empty) → f59530fe-fad2-4834-aaa3-bf68e355fdde
target_node_id (empty) → cb76cb8b-6374-450f-93f9-b80a01b10362
create Norbert Wójtowicz → uses → Fulcro
context (empty) → Builds Fulcro applications including the Workspaces-hosted demo.
relation (empty) → uses
source_node_id (empty) → f59530fe-fad2-4834-aaa3-bf68e355fdde
target_node_id (empty) → 2f4fa3eb-d89c-4438-bae6-eb5b7363b42d

Read set

460 nodes

person Aaron Patterson list_nodes_by_kind person Adam Okoń list_nodes_by_kind+search_nodes person Adam Piotrowski list_nodes_by_kind person Adrian Marin list_nodes_by_kind person Agnieszka Małaszkiewicz list_nodes_by_kind person Akira Matsuda list_nodes_by_kind person Alberto Brandolini list_nodes_by_kind person Amelia Walter-Dzikowska list_nodes_by_kind person Andrei Bondarev list_nodes_by_kind person Andrei Kaleshka list_nodes_by_kind person Andrzej Krzywda list_nodes_by_kind person Andrzej Śliwa list_nodes_by_kind person Andy Maleh list_nodes_by_kind person Anita Jaszewska list_nodes_by_kind person Anton Davydov list_nodes_by_kind person Armin Pašalić list_nodes_by_kind person Arturo Herrero list_nodes_by_kind person Ayush Newatia list_nodes_by_kind person Bartosz Blimke list_nodes_by_kind person Bertrand Meyer list_nodes_by_kind person Caio Almeida list_nodes_by_kind person Charles Nutter list_nodes_by_kind person Chikahiro Tokoro list_nodes_by_kind person Claude Lévi-Strauss list_nodes_by_kind person Damir Zekić list_nodes_by_kind person David Halasz list_nodes_by_kind person DHH list_nodes_by_kind person Dimitry Salahutdinov list_nodes_by_kind person Emiliano Della Casa list_nodes_by_kind person Eric Evans list_nodes_by_kind person Erwin Kroon list_nodes_by_kind person Ethan Garofolo list_nodes_by_kind person Greg Molnar list_nodes_by_kind person Greg Young list_nodes_by_kind person Ismael Celis list_nodes_by_kind person Ivan Nemytchenko list_nodes_by_kind person Jakub Rodzik list_nodes_by_kind person Janko Marohnic list_nodes_by_kind person Joel Drapper list_nodes_by_kind person John Gallagher list_nodes_by_kind person Josef Strzibny list_nodes_by_kind person José Valim list_nodes_by_kind person Julik Tarkhanov list_nodes_by_kind+search_nodes person Karol Szuster list_nodes_by_kind person Koichi Sasada list_nodes_by_kind person Krzysztof Hasiński list_nodes_by_kind person Kuba Suder list_nodes_by_kind person Louis Antonopoulos list_nodes_by_kind person Łukasz Reszke list_nodes_by_kind person Łukasz Szydło list_nodes_by_kind person Maciej Rząsa list_nodes_by_kind person Maciek list_nodes_by_kind person Marco Heimeshoff list_nodes_by_kind person Mariusz Gil list_nodes_by_kind person Markus Schirp list_nodes_by_kind person Martin Gamsjaeger list_nodes_by_kind person Mateusz Nowak list_nodes_by_kind person Matthias Verraes list_nodes_by_kind person Matz list_nodes_by_kind person Michal Matyas list_nodes_by_kind person Michał Młoźniak list_nodes_by_kind person Michał Zajączkowski de Mezer list_nodes_by_kind person Miron Marczuk list_nodes_by_kind person Nathan Ladd list_nodes_by_kind person Nick Sutterer list_nodes_by_kind person Nicolò Rebughini list_nodes_by_kind person Norbert Wójtowicz list_nodes_by_kind+get_node_edges person Paweł Dąbrowski list_nodes_by_kind person Paweł Pacana list_nodes_by_kind person Paweł Pokrywka list_nodes_by_kind person Paweł Strzałkowski list_nodes_by_kind person Piotr Solnica list_nodes_by_kind person Radoslav Stankov list_nodes_by_kind person Rafał Cymerys list_nodes_by_kind person Rafał Rothenberger list_nodes_by_kind person Ryan Townsend list_nodes_by_kind person Scott Bell list_nodes_by_kind person Scott Bellware list_nodes_by_kind person Scott Wlaschin list_nodes_by_kind person Sebastian Wilgosz list_nodes_by_kind person Sergey Ivanov list_nodes_by_kind person Sergey Sergyenko list_nodes_by_kind person Seth Horsley list_nodes_by_kind person Sharon Rosner list_nodes_by_kind person Shugo Maeda list_nodes_by_kind person Stefan Wintermeyer list_nodes_by_kind person Stephen Margheim list_nodes_by_kind person Stephen Wolfram list_nodes_by_kind person Steve Ballmer list_nodes_by_kind person Szymon Fiedler list_nodes_by_kind person Szymon Kulec list_nodes_by_kind person Tomasz Donarski list_nodes_by_kind person Victor Shepelev list_nodes_by_kind person Vladimir Dementyev list_nodes_by_kind person Wojtek Wrona list_nodes_by_kind person Yaroslav Shmarov list_nodes_by_kind person Yatish Mehta list_nodes_by_kind person Yehuda Katz list_nodes_by_kind 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 event wroclove.rb 2025 list_nodes_by_kind event wroclove.rb 2026 list_nodes_by_kind tool Abbrev list_nodes_by_kind tool Action Cable list_nodes_by_kind tool Active Storage list_nodes_by_kind tool acts_as_api list_nodes_by_kind tool aggregate_root list_nodes_by_kind tool Akamai list_nodes_by_kind tool Amazon Elastic Transcoder list_nodes_by_kind+search_nodes tool Amazon S3 list_nodes_by_kind tool Angular list_nodes_by_kind tool Apache HTTP Server list_nodes_by_kind tool Apache Kafka list_nodes_by_kind tool Apple QuickTime list_nodes_by_kind tool async list_nodes_by_kind tool AWS Lambda list_nodes_by_kind tool Babel list_nodes_by_kind+search_nodes tool BME280 list_nodes_by_kind tool Brotli list_nodes_by_kind+search_nodes tool Browserslist list_nodes_by_kind tool C++ list_nodes_by_kind tool CarrierWave list_nodes_by_kind tool carrierwave_backgrounder list_nodes_by_kind tool carrierwave-video list_nodes_by_kind tool Cassandra list_nodes_by_kind tool Cells list_nodes_by_kind tool Celluloid list_nodes_by_kind tool Clojure list_nodes_by_kind+search_nodes tool ClojureScript list_nodes_by_kind+search_nodes tool Crystal list_nodes_by_kind+search_nodes tool curses list_nodes_by_kind tool DBM / SDBM / GDBM list_nodes_by_kind tool Devise list_nodes_by_kind tool Discourse list_nodes_by_kind tool Distributed Ruby list_nodes_by_kind tool Docker list_nodes_by_kind tool dry-container list_nodes_by_kind tool dry-struct list_nodes_by_kind tool dry-types list_nodes_by_kind tool dry-validation list_nodes_by_kind tool Elasticsearch list_nodes_by_kind tool Electron list_nodes_by_kind tool Elixir list_nodes_by_kind+search_nodes tool Elm list_nodes_by_kind+search_nodes tool Ember.js list_nodes_by_kind+search_nodes tool Entity Store list_nodes_by_kind tool Erlang list_nodes_by_kind tool ESP32 list_nodes_by_kind tool ESP-IDF list_nodes_by_kind tool Ethereum list_nodes_by_kind tool EventMachine list_nodes_by_kind tool Faker list_nodes_by_kind tool FFmpeg list_nodes_by_kind+search_nodes tool ffprobe list_nodes_by_kind tool file (Unix command) list_nodes_by_kind tool find-slow script list_nodes_by_kind tool flag_shih_tzu list_nodes_by_kind tool Flow list_nodes_by_kind+search_nodes tool FreeRTOS list_nodes_by_kind tool git bisect list_nodes_by_kind tool Glimmer list_nodes_by_kind tool Go list_nodes_by_kind tool Grafana list_nodes_by_kind tool GraphQL list_nodes_by_kind+search_nodes tool gRPC list_nodes_by_kind tool Guard list_nodes_by_kind tool gzip list_nodes_by_kind tool Hanami list_nodes_by_kind tool heapy list_nodes_by_kind tool Heckle list_nodes_by_kind tool Heroku list_nodes_by_kind tool HTTP/2 list_nodes_by_kind tool ImageMagick list_nodes_by_kind+search_nodes tool image_processing gem list_nodes_by_kind tool interactor list_nodes_by_kind tool Iodine list_nodes_by_kind tool Java list_nodes_by_kind tool JIRA list_nodes_by_kind tool JSON API Resources list_nodes_by_kind+search_nodes tool libvips list_nodes_by_kind tool Matrix (Ruby stdlib) list_nodes_by_kind tool methods gem list_nodes_by_kind tool mini_magick list_nodes_by_kind tool MinIO list_nodes_by_kind tool minitest list_nodes_by_kind tool MobX list_nodes_by_kind tool mruby list_nodes_by_kind tool Mutant list_nodes_by_kind tool .NET list_nodes_by_kind tool nginx list_nodes_by_kind tool Node.js list_nodes_by_kind tool Opal list_nodes_by_kind tool OptionParser list_nodes_by_kind tool Outlook list_nodes_by_kind tool Paperclip list_nodes_by_kind tool Perl list_nodes_by_kind tool Phoenix list_nodes_by_kind tool Plezi list_nodes_by_kind tool PostgreSQL list_nodes_by_kind tool power_assert list_nodes_by_kind tool Preact list_nodes_by_kind+search_nodes tool Prime (Ruby stdlib) list_nodes_by_kind tool Prometheus list_nodes_by_kind tool Protocol Buffers list_nodes_by_kind+search_nodes tool PStore list_nodes_by_kind tool Puma list_nodes_by_kind tool PureScript list_nodes_by_kind+search_nodes tool QEMU list_nodes_by_kind tool Rack list_nodes_by_kind tool Rails 5.2 list_nodes_by_kind tool rails_event_store list_nodes_by_kind tool React list_nodes_by_kind tool RealtimeBoard list_nodes_by_kind+search_nodes tool Redis list_nodes_by_kind tool Redmine list_nodes_by_kind tool Refile list_nodes_by_kind tool Reform list_nodes_by_kind tool RSpec list_nodes_by_kind tool Ruby list_nodes_by_kind tool Ruby Browser Detection Gem list_nodes_by_kind tool ruby-contracts list_nodes_by_kind tool Ruby Event Store list_nodes_by_kind tool Ruby on Rails list_nodes_by_kind tool Rust list_nodes_by_kind tool Sequel list_nodes_by_kind tool Shrine list_nodes_by_kind tool Sidekiq list_nodes_by_kind tool Sonic Pi list_nodes_by_kind+search_nodes tool Spring list_nodes_by_kind tool Stimulus list_nodes_by_kind tool streamio-ffmpeg list_nodes_by_kind tool Sync Space VR list_nodes_by_kind tool ThingSpeak list_nodes_by_kind tool Trailblazer list_nodes_by_kind tool TruffleRuby list_nodes_by_kind tool TSort list_nodes_by_kind tool TypeScript list_nodes_by_kind tool Tyrant list_nodes_by_kind tool Uppy list_nodes_by_kind tool WebP list_nodes_by_kind tool webpagetest.org list_nodes_by_kind tool Wolfram Language list_nodes_by_kind tool Zencoder list_nodes_by_kind+search_nodes concept Active Record list_nodes_by_kind concept ActiveSupport Core Extensions list_nodes_by_kind concept Aggregate Root list_nodes_by_kind concept Aggregate Root Anti-Pattern list_nodes_by_kind concept Aggregate-Scoped Sequence Number list_nodes_by_kind concept Aggregator list_nodes_by_kind concept Alive and Dead Mutations list_nodes_by_kind concept Anti-Corruption Layer list_nodes_by_kind concept Application Logic vs Business Logic list_nodes_by_kind concept Architecture Drivers list_nodes_by_kind concept Auto-yielding Fibers list_nodes_by_kind concept Belarus list_nodes_by_kind concept Blocking I/O list_nodes_by_kind concept Boolean Flags as Implicit State list_nodes_by_kind+search_nodes concept Bouncing Select list_nodes_by_kind concept Bounded Context list_nodes_by_kind concept BPMN list_nodes_by_kind concept Breadth-First Search for Code Removal list_nodes_by_kind concept Cache Preheating list_nodes_by_kind concept Command Bus list_nodes_by_kind concept Command Form list_nodes_by_kind+search_nodes concept Command Handler list_nodes_by_kind concept Command Message list_nodes_by_kind concept Command Query Separation list_nodes_by_kind concept Commands, Queries, and Events list_nodes_by_kind concept Command UUID Deduplication list_nodes_by_kind+search_nodes concept Common Table Expression list_nodes_by_kind concept Context Map list_nodes_by_kind concept Contextualized Complexity list_nodes_by_kind concept Convention over Configuration list_nodes_by_kind concept Conway's Law list_nodes_by_kind concept Core Domain list_nodes_by_kind concept Coupling list_nodes_by_kind concept CQRS list_nodes_by_kind concept CSS-in-JS list_nodes_by_kind+search_nodes concept Current State list_nodes_by_kind concept Cynefin Framework list_nodes_by_kind concept DDD Whirlpool list_nodes_by_kind+search_nodes concept Denormalizer / Read Model list_nodes_by_kind concept Dependency Injection list_nodes_by_kind concept DescendantsTracker list_nodes_by_kind concept Developer vs Programmer list_nodes_by_kind concept Direct Upload to Cloud list_nodes_by_kind concept Distributed Monolith list_nodes_by_kind+search_nodes concept Distributed Systems list_nodes_by_kind concept Domain-Driven Design list_nodes_by_kind concept Domain Model (vs Active Record Model) list_nodes_by_kind concept Domain Storytelling list_nodes_by_kind concept Duck Typing list_nodes_by_kind concept Elixir Pipe Operator list_nodes_by_kind concept Embrace The Evented Model list_nodes_by_kind concept Entity Caching and Snapshotting list_nodes_by_kind concept Entity Coupled To Messaging list_nodes_by_kind concept Entity Projection list_nodes_by_kind concept epoll list_nodes_by_kind concept Equivalent Mutation list_nodes_by_kind concept Event Bus list_nodes_by_kind concept Event-Driven Architecture list_nodes_by_kind concept Event Handler Error Strategy list_nodes_by_kind concept Events and Commands list_nodes_by_kind concept Event Sourcing list_nodes_by_kind+search_nodes concept Event Store list_nodes_by_kind+search_nodes concept EventStorming list_nodes_by_kind concept Eventual Consistency list_nodes_by_kind concept Event Versioning / Upcasting list_nodes_by_kind concept Expected Version list_nodes_by_kind concept Five Whys list_nodes_by_kind concept Fixtures over Factories list_nodes_by_kind concept Flame Graphs list_nodes_by_kind concept Flat Model Structure list_nodes_by_kind concept Form Object as Model Concern list_nodes_by_kind concept Fragment Caching list_nodes_by_kind concept Function as a Service list_nodes_by_kind concept Global Interpreter Lock list_nodes_by_kind concept H.264 list_nodes_by_kind concept Hexagonal Architecture list_nodes_by_kind concept HTTP/2 Server Push list_nodes_by_kind concept HTTP Caching with ETag and Last-Modified list_nodes_by_kind concept Ideal Rails System Properties list_nodes_by_kind concept Idempotence list_nodes_by_kind concept Idempotent Projectors and Reactors list_nodes_by_kind concept Image bomb list_nodes_by_kind concept Immersion-Driven Workflow list_nodes_by_kind concept Incremental Mutation Testing list_nodes_by_kind concept Initial Coin Offering list_nodes_by_kind concept Interface Wrapper for Ruby list_nodes_by_kind concept IO.select list_nodes_by_kind concept JSON API list_nodes_by_kind+search_nodes concept kqueue list_nodes_by_kind concept LATERAL join list_nodes_by_kind concept Magic bytes MIME detection list_nodes_by_kind concept Majestic Monolith list_nodes_by_kind concept Match Expression list_nodes_by_kind concept Message Store list_nodes_by_kind concept Method References in Ruby list_nodes_by_kind concept Mind Map Knowledge Base for Event Sourcing list_nodes_by_kind concept Monolith as Data Model list_nodes_by_kind concept MP4 list_nodes_by_kind concept Mutation Operator list_nodes_by_kind concept Mutation Testing list_nodes_by_kind concept Mutation Testing Preconditions list_nodes_by_kind concept Mutator Layer list_nodes_by_kind concept MVC Modularity Violations list_nodes_by_kind concept Named Routes and I18n Everywhere list_nodes_by_kind concept Namespace-Based Folder Hierarchy list_nodes_by_kind concept Nested Aggregates list_nodes_by_kind concept Non-blocking I/O list_nodes_by_kind concept Null Object Pattern list_nodes_by_kind concept ObjectSpace heap dumps list_nodes_by_kind concept On-the-fly Processing list_nodes_by_kind concept On-Upload Processing list_nodes_by_kind concept Opaque Dependencies list_nodes_by_kind concept Orphan Files list_nodes_by_kind concept Page Load Time Budget list_nodes_by_kind concept Partitioning list_nodes_by_kind concept Performance Time Budget list_nodes_by_kind concept Petri Nets list_nodes_by_kind+search_nodes concept Pipeline Operator list_nodes_by_kind+search_nodes concept Plain Old Java Object list_nodes_by_kind concept Policies and Strategies list_nodes_by_kind concept Polymorphic Aggregate list_nodes_by_kind concept Preloading and Prefetching list_nodes_by_kind concept Process Manager list_nodes_by_kind concept Progressive Web Apps list_nodes_by_kind concept Projector list_nodes_by_kind concept Rails Reload-Safe ES Configuration list_nodes_by_kind concept Rails RouteSet clear list_nodes_by_kind concept Rails Testing Pyramid (Ivan's version) list_nodes_by_kind concept Railway Oriented Programming list_nodes_by_kind concept Reactive Programming list_nodes_by_kind concept Reactor list_nodes_by_kind concept Read/Write Disparity list_nodes_by_kind concept Read-Write Split list_nodes_by_kind concept Real-time Web Applications list_nodes_by_kind concept Refinements list_nodes_by_kind concept Reservation Pattern list_nodes_by_kind+search_nodes concept respond_to Anti-Pattern list_nodes_by_kind concept REST Representations list_nodes_by_kind concept Resumable Uploads list_nodes_by_kind concept Ruby memory retention behavior list_nodes_by_kind concept Ruby Module Customization Mechanics list_nodes_by_kind concept Ruby undef_method performance list_nodes_by_kind concept Russian Doll Caching list_nodes_by_kind concept Saga Pattern list_nodes_by_kind+search_nodes concept Saga / Process Manager list_nodes_by_kind concept Scope Concerns list_nodes_by_kind concept Selection (Mutant) list_nodes_by_kind concept Senior Developer Title list_nodes_by_kind concept Serverless list_nodes_by_kind concept Service Autonomy list_nodes_by_kind concept Smart Contract list_nodes_by_kind question How is the event-write kept consistent with external operations? search_nodes concept Snapshotting list_nodes_by_kind+search_nodes concept Socket Hijacking list_nodes_by_kind concept Sometimes Nothing Is Enough list_nodes_by_kind concept Stalling For Time list_nodes_by_kind concept Stateless Service Object list_nodes_by_kind concept State Machine list_nodes_by_kind concept Static Page Caching via nginx list_nodes_by_kind concept Stubs over Mocks list_nodes_by_kind concept Subject (Mutant) list_nodes_by_kind concept Tacit Knowledge list_nodes_by_kind concept Task-Driven UI list_nodes_by_kind concept TC39 list_nodes_by_kind concept TCP Slow Start list_nodes_by_kind concept Trailblazer Activity list_nodes_by_kind concept Trailblazer Operation list_nodes_by_kind concept Trailblazer Workflow list_nodes_by_kind concept Transpilers list_nodes_by_kind concept tus protocol list_nodes_by_kind concept Ubiquitous Language list_nodes_by_kind concept Unique Per-Site Email Leak Detection list_nodes_by_kind concept Value Object list_nodes_by_kind concept Vector Clock list_nodes_by_kind concept VFIO PCI passthrough list_nodes_by_kind concept View-Biased Event Schemas list_nodes_by_kind concept Virtual DOM list_nodes_by_kind concept VNC list_nodes_by_kind concept Waterfall Analysis list_nodes_by_kind concept Weasel Words list_nodes_by_kind concept WebAssembly list_nodes_by_kind concept WebM list_nodes_by_kind concept WebSockets list_nodes_by_kind concept yield_self list_nodes_by_kind concept YUV 4:2:0 list_nodes_by_kind concept Zero-Disconnect Deployment list_nodes_by_kind question JSON API or GraphQL — what do you recommend? search_nodes takeaway Sign serverlessforruby.org petition search_nodes takeaway Don't follow JSON API religiously search_nodes talk Towards the post framework future search_nodes talk Adventures in durable execution search_nodes takeaway Replay-Based Debugging search_nodes takeaway Silver Bullet Anti-Pattern search_nodes takeaway Avoid complexity before fighting it search_nodes question How to detect coupling in a large existing project? search_nodes talk Building LLM powered applications in Ruby search_nodes talk Scientific Ruby Lightning Talk search_nodes talk Rubyana Gems and the Ractorous Rubetta Stones! search_nodes talk JavaScript and Frontend Panel search_nodes talk How wroclove.rb impacts developers and companies search_nodes talk Ever shorter feedback loop search_nodes takeaway Immutable Database Raises Mistake Cost search_nodes talk Fantastic Databases and Where to Find Them search_nodes question How do you deal with GDPR in an immutable event store? search_nodes talk Ethereum Smart Contracts Lightning Talk search_nodes talk FaaS for Ruby Lightning Talk search_nodes talk Gaming With Ruby and VMs Lightning Talk search_nodes talk Spice up your life with eql search_nodes+get_node_edges talk An Introduction to Test Bench search_nodes takeaway Collect as much video metadata as you can search_nodes talk Events events events search_nodes company Transloadit search_nodes

4 edges