{"id":1188,"date":"2026-09-02T15:13:39","date_gmt":"2026-09-02T14:13:39","guid":{"rendered":"https:\/\/ruby-doc.org\/learn\/?page_id=1188"},"modified":"2026-09-03T14:08:40","modified_gmt":"2026-09-03T13:08:40","slug":"james-britt","status":"publish","type":"page","link":"https:\/\/ruby-doc.org\/learn\/james-britt\/","title":{"rendered":"James Britt"},"content":{"rendered":"\t<section class=\"rdap-profile\" aria-label=\"Verified author profile for James Britt\">\n\t\t<div class=\"rdap-hero\">\n\t\t\t<img loading=\"lazy\" decoding=\"async\" class=\"rdap-headshot\" src=\"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/jgb_self-portrait-20140914-256x300.png\" width=\"300\" height=\"352\" alt=\"James Britt, Ruby developer and creator of Ruby-Doc.org\" \/>\n\t\t\t<div>\n\t\t\t\t<p class=\"rdap-kicker\">Verified Ruby-Doc.org author<\/p>\n\t\t\t\t<p class=\"rdap-role\">Ruby developer, writer, and creator of Ruby-Doc.org<\/p>\n\t\t\t\t<p>James Britt created Ruby-Doc.org in 2002 as a central home for Ruby documentation and learning resources. After serving as its long-term maintainer, he now writes practical Ruby tutorials and code examples for Ruby-Doc Learn.<\/p>\n\t\t\t\t<div class=\"rdap-actions\">\n\t\t\t\t\t<a class=\"rdap-button\" href=\"mailto:james-britt@ruby-doc.org\">Contact James<\/a>\n\t\t\t\t\t<a class=\"rdap-button rdap-button-secondary\" href=\"https:\/\/jamesbritt.com\/\" rel=\"me noopener\">Personal website<\/a>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\n\t\t<div class=\"rdap-section\">\n\t\t\t<h2>About James Britt<\/h2>\n\t\t\t<p>James is an artist, writer, musician, technologist and Ruby developer based in Scottsdale, Arizona. He operates <a href=\"https:\/\/neurogami.com\/\" rel=\"noopener\">Neurogami<\/a>, which he founded in 2001 for software, art and interactive technology projects.<\/p>\n\t\t\t<p>His Ruby work spans documentation, teaching, JRuby desktop development and open-source projects. For Ruby-Doc Learn, his focus is useful, runnable examples that explain not only what a piece of Ruby does, but when a developer would use it.<\/p>\n\t\t\t<ul class=\"rdap-expertise\" aria-label=\"Areas of expertise\">\n\t\t\t\t<li>Ruby programming<\/li>\n\t\t\t\t<li>Ruby documentation<\/li>\n\t\t\t\t<li>JRuby development<\/li>\n\t\t\t\t<li>Developer education<\/li>\n\t\t\t<\/ul>\n\t\t<\/div>\n\n\t\t<div class=\"rdap-section\">\n\t\t\t<h2>Ruby community work<\/h2>\n\t\t\t<p>James's public Ruby record extends beyond maintaining Ruby-Doc.org. Independent sources document his technical writing, conference talks, JRuby open-source work and published Ruby packages.<\/p>\n\t\t\t<div class=\"rdap-evidence-grid\">\n\t\t\t\t<article class=\"rdap-evidence-card\">\n\t\t\t\t\t<h3>Technical writing<\/h3>\n\t\t\t\t\t<p><a href=\"https:\/\/www.ruby-lang.org\/en\/news\/2004\/\" rel=\"noopener\">Ruby-lang.org highlighted<\/a> his 2004 <a href=\"https:\/\/www.linuxjournal.com\/article\/7236\" rel=\"noopener\"><cite>Linux Journal<\/cite> article<\/a> on manipulating OpenOffice.org documents with Ruby.<\/p>\n\t\t\t\t<\/article>\n\t\t\t\t<article class=\"rdap-evidence-card\">\n\t\t\t\t\t<h3>Conference speaking<\/h3>\n\t\t\t\t\t<p><a href=\"https:\/\/www.rubyevents.org\/profiles\/james-britt\" rel=\"noopener\">RubyEvents records<\/a> his MountainWest RubyConf talks \u201cBlack-boxing with Ruby\u201d (2007) and \u201cHubris: The Ruby\/Haskell Bridge\u201d (2010).<\/p>\n\t\t\t\t<\/article>\n\t\t\t\t<article class=\"rdap-evidence-card\">\n\t\t\t\t\t<h3>JRuby and open source<\/h3>\n\t\t\t\t\t<p><a href=\"https:\/\/www.infoq.com\/news\/2009\/01\/monkeybars-gui-mvc\/\" rel=\"noopener\">InfoQ interviewed James<\/a> about Monkeybars, a JRuby MVC framework, and the Rawr packaging tool.<\/p>\n\t\t\t\t<\/article>\n\t\t\t\t<article class=\"rdap-evidence-card\">\n\t\t\t\t\t<h3>Published Ruby packages<\/h3>\n\t\t\t\t\t<p>RubyGems lists James as an author of <a href=\"https:\/\/rubygems.org\/gems\/qft\" rel=\"noopener\">qft<\/a> and <a href=\"https:\/\/rubygems.org\/gems\/Neurogami-wiiremotejruby\" rel=\"noopener\">Neurogami-wiiremotejruby<\/a>.<\/p>\n\t\t\t\t<\/article>\n\t\t\t<\/div>\n\t\t\t<p class=\"rdap-scope-note\">These sources support James's documented work in Ruby publishing, conference speaking and open-source development. They do not identify him as a Ruby core committer.<\/p>\n\t\t<\/div>\n\n\t\t<div class=\"rdap-section rdap-verification\">\n\t\t\t<h2>Why this profile is verified<\/h2>\n\t\t\t<p>Ruby-Doc.org has verified James's identity and current author role. The site's history and his professional background are independently supported by:<\/p>\n\t\t\t<ul>\n\t\t\t\t<li><a href=\"https:\/\/rubytalk.org\/t\/ann-www-ruby-doc-org\/2783\" rel=\"noopener\">James Britt's original Ruby-Talk announcement<\/a> of Ruby-Doc.org on 10 November 2002.<\/li>\n\t\t\t\t<li><a href=\"https:\/\/www.oreilly.com\/pub\/au\/2595\" rel=\"noopener\">O'Reilly's James Britt author biography<\/a>, which records his Ruby community, writing and Ruby-Doc.org work.<\/li>\n\t\t\t\t<li><a href=\"https:\/\/jamesbritt.com\/about\/\" rel=\"me noopener\">James Britt's official personal profile<\/a> and <a href=\"https:\/\/neurogami.com\/about\/\" rel=\"noopener\">Neurogami profile<\/a>.<\/li>\n\t\t\t<\/ul>\n\t\t\t<p class=\"rdap-verified-note\"><span aria-hidden=\"true\">\u2713<\/span> Identity and role verified by Ruby-Doc.org. Last verified 2 September 2026.<\/p>\n\t\t<\/div>\n\n\t\t<div class=\"rdap-section\">\n\t\t\t<h2>Articles by James Britt<\/h2>\n\t\t\t\t<div class=\"rdap-articles\">\n\t\t\t\t\t<article class=\"rdap-card\">\n\t\t\t\t\t\t\t\t\t<a class=\"rdap-card-image\" href=\"https:\/\/ruby-doc.org\/learn\/the-rails-app-was-running-but-it-wasnt-working\/\" aria-hidden=\"true\" tabindex=\"-1\">\n\t\t\t\t\t\t<img decoding=\"async\" width=\"768\" height=\"432\" src=\"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/ruby-on-rails-monitoring-health-checks-768x432.png\" class=\"attachment-medium_large size-medium_large wp-post-image\" alt=\"Ruby on Rails monitoring illustration showing a healthy web service beside a stalled background job queue\" loading=\"lazy\" srcset=\"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/ruby-on-rails-monitoring-health-checks-768x432.png 768w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/ruby-on-rails-monitoring-health-checks-300x169.png 300w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/ruby-on-rails-monitoring-health-checks-1024x576.png 1024w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/ruby-on-rails-monitoring-health-checks-1536x864.png 1536w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/ruby-on-rails-monitoring-health-checks.png 1672w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/>\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<div class=\"rdap-card-body\">\n\t\t\t\t\t<time datetime=\"2026-09-03T10:57:10+01:00\">September 3, 2026<\/time>\n\t\t\t\t\t<h3><a href=\"https:\/\/ruby-doc.org\/learn\/the-rails-app-was-running-but-it-wasnt-working\/\">The Rails App Was Running, But It Wasn\u2019t Working<\/a><\/h3>\n\t\t\t\t\t<p>A Rails app can look healthy while background work has stopped. James Britt explains how health checks, job heartbeats and status pages reveal the failure.<\/p>\n\t\t\t\t<\/div>\n\t\t\t<\/article>\n\t\t\t\t\t<article class=\"rdap-card\">\n\t\t\t\t\t\t\t\t\t<a class=\"rdap-card-image\" href=\"https:\/\/ruby-doc.org\/learn\/ruby-vs-python\/\" aria-hidden=\"true\" tabindex=\"-1\">\n\t\t\t\t\t\t<img decoding=\"async\" width=\"768\" height=\"512\" src=\"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/ruby-vs-python-featured-768x512.webp\" class=\"attachment-medium_large size-medium_large wp-post-image\" alt=\"Ruby vs Python programming language comparison\" loading=\"lazy\" srcset=\"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/ruby-vs-python-featured-768x512.webp 768w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/ruby-vs-python-featured-300x200.webp 300w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/ruby-vs-python-featured-1024x682.webp 1024w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/ruby-vs-python-featured.webp 1400w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/>\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<div class=\"rdap-card-body\">\n\t\t\t\t\t<time datetime=\"2026-09-03T09:49:54+01:00\">September 3, 2026<\/time>\n\t\t\t\t\t<h3><a href=\"https:\/\/ruby-doc.org\/learn\/ruby-vs-python\/\">Ruby vs Python: Key Differences and Which One Should You Choose?<\/a><\/h3>\n\t\t\t\t\t<p>A practical Ruby vs Python comparison covering syntax, web frameworks, automation, data work, performance, learning, and career paths.<\/p>\n\t\t\t\t<\/div>\n\t\t\t<\/article>\n\t\t\t\t\t<article class=\"rdap-card\">\n\t\t\t\t\t\t\t\t\t<a class=\"rdap-card-image\" href=\"https:\/\/ruby-doc.org\/learn\/ruby-code-examples\/\" aria-hidden=\"true\" tabindex=\"-1\">\n\t\t\t\t\t\t<img decoding=\"async\" width=\"768\" height=\"512\" src=\"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/ruby-code-examples-featured-768x512.webp\" class=\"attachment-medium_large size-medium_large wp-post-image\" alt=\"Ruby code examples represented by a glowing red gemstone surrounded by code editor panels\" loading=\"lazy\" srcset=\"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/ruby-code-examples-featured-768x512.webp 768w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/ruby-code-examples-featured-300x200.webp 300w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/ruby-code-examples-featured.webp 800w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/>\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<div class=\"rdap-card-body\">\n\t\t\t\t\t<time datetime=\"2026-09-02T15:37:58+01:00\">September 2, 2026<\/time>\n\t\t\t\t\t<h3><a href=\"https:\/\/ruby-doc.org\/learn\/ruby-code-examples\/\">Ruby Code Examples: 20 Practical Snippets for Beginners<\/a><\/h3>\n\t\t\t\t\t<p>Learn Ruby through 20 practical code examples covering strings, arrays, hashes, methods, classes, files, JSON, regex, and more.<\/p>\n\t\t\t\t<\/div>\n\t\t\t<\/article>\n\t\t\t<\/div>\n\t\t\t<\/div>\n\t<\/section>\n\t\n","protected":false},"excerpt":{"rendered":"<p>James Britt is a Ruby developer, writer, and the creator and long-term maintainer of Ruby-Doc.org. Read his biography and practical Ruby articles.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1188","page","type-page","status-publish","hentry"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":7}},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>James Britt - Ruby-Doc Learn<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ruby-doc.org\/learn\/james-britt\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"James Britt - Ruby-Doc Learn\" \/>\n<meta property=\"og:description\" content=\"James Britt is a Ruby developer, writer, and the creator and long-term maintainer of Ruby-Doc.org. Read his biography and practical Ruby articles.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ruby-doc.org\/learn\/james-britt\/\" \/>\n<meta property=\"og:site_name\" content=\"Ruby-Doc Learn\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-03T13:08:40+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/james-britt\\\/\",\"url\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/james-britt\\\/\",\"name\":\"James Britt - Ruby-Doc Learn\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/#website\"},\"datePublished\":\"2026-09-02T14:13:39+00:00\",\"dateModified\":\"2026-09-03T13:08:40+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/james-britt\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/james-britt\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/james-britt\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"James Britt\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/#website\",\"url\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/\",\"name\":\"Ruby-Doc Learn\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/#organization\",\"name\":\"Ruby-Doc Learn\",\"url\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/ruby-doc-logo-transparent.png\",\"contentUrl\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/ruby-doc-logo-transparent.png\",\"width\":1650,\"height\":305,\"caption\":\"Ruby-Doc Learn\"},\"image\":{\"@id\":\"https:\\\/\\\/ruby-doc.org\\\/learn\\\/#\\\/schema\\\/logo\\\/image\\\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"James Britt - Ruby-Doc Learn","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ruby-doc.org\/learn\/james-britt\/","og_locale":"en_US","og_type":"article","og_title":"James Britt - Ruby-Doc Learn","og_description":"James Britt is a Ruby developer, writer, and the creator and long-term maintainer of Ruby-Doc.org. Read his biography and practical Ruby articles.","og_url":"https:\/\/ruby-doc.org\/learn\/james-britt\/","og_site_name":"Ruby-Doc Learn","article_modified_time":"2026-09-03T13:08:40+00:00","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/ruby-doc.org\/learn\/james-britt\/","url":"https:\/\/ruby-doc.org\/learn\/james-britt\/","name":"James Britt - Ruby-Doc Learn","isPartOf":{"@id":"https:\/\/ruby-doc.org\/learn\/#website"},"datePublished":"2026-09-02T14:13:39+00:00","dateModified":"2026-09-03T13:08:40+00:00","breadcrumb":{"@id":"https:\/\/ruby-doc.org\/learn\/james-britt\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ruby-doc.org\/learn\/james-britt\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/ruby-doc.org\/learn\/james-britt\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ruby-doc.org\/learn\/"},{"@type":"ListItem","position":2,"name":"James Britt"}]},{"@type":"WebSite","@id":"https:\/\/ruby-doc.org\/learn\/#website","url":"https:\/\/ruby-doc.org\/learn\/","name":"Ruby-Doc Learn","description":"","publisher":{"@id":"https:\/\/ruby-doc.org\/learn\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ruby-doc.org\/learn\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/ruby-doc.org\/learn\/#organization","name":"Ruby-Doc Learn","url":"https:\/\/ruby-doc.org\/learn\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ruby-doc.org\/learn\/#\/schema\/logo\/image\/","url":"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/ruby-doc-logo-transparent.png","contentUrl":"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/ruby-doc-logo-transparent.png","width":1650,"height":305,"caption":"Ruby-Doc Learn"},"image":{"@id":"https:\/\/ruby-doc.org\/learn\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/pages\/1188","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/comments?post=1188"}],"version-history":[{"count":1,"href":"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/pages\/1188\/revisions"}],"predecessor-version":[{"id":1189,"href":"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/pages\/1188\/revisions\/1189"}],"wp:attachment":[{"href":"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/media?parent=1188"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}