{"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-04T11:47:16","modified_gmt":"2026-09-04T10:47:16","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\" 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\" decoding=\"async\">\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\"><a class=\"rdap-button\" href=\"mailto:james-britt@ruby-doc.org\">Contact James<\/a><a class=\"rdap-button rdap-button-secondary\" href=\"https:\/\/jamesbritt.com\/\" rel=\"me noopener\">Personal website<\/a><\/div>\n\t\t\t<\/div>\n\t\t<\/div>\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\"><li>Ruby programming<\/li><li>Ruby documentation<\/li><li>JRuby development<\/li><li>Developer education<\/li><\/ul>\n\t\t<\/div>\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\"><h3>Technical writing<\/h3><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><\/article>\n\t\t\t\t<article class=\"rdap-evidence-card\"><h3>Conference speaking<\/h3><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><\/article>\n\t\t\t\t<article class=\"rdap-evidence-card\"><h3>JRuby and open source<\/h3><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><\/article>\n\t\t\t\t<article class=\"rdap-evidence-card\"><h3>Published Ruby packages<\/h3><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><\/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\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><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><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><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><\/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\t\t<div class=\"rdap-section\">\n\t\t\t<h2>Articles by James Britt<\/h2>\n\t\t\t\t\t\t\t<div class=\"rdap-articles\">\n\t\t\t\t\t\t\t\t\t\t\t<article class=\"rdap-card\">\n\t\t\t\t\t\t\t<a class=\"rdap-card-image\" href=\"https:\/\/ruby-doc.org\/learn\/legacy-rails-modernization-ui-design-agencies\/\" aria-hidden=\"true\" tabindex=\"-1\"><img decoding=\"async\" width=\"768\" height=\"432\" src=\"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/10\/legacy-ruby-on-rails-ui-modernization-768x432.png\" class=\"attachment-medium_large size-medium_large wp-post-image\" alt=\"Ruby-themed illustration of developers updating a legacy application&#039;s forms and dashboards\" loading=\"lazy\" srcset=\"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/10\/legacy-ruby-on-rails-ui-modernization-768x432.png 768w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/10\/legacy-ruby-on-rails-ui-modernization-300x169.png 300w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/10\/legacy-ruby-on-rails-ui-modernization-1024x576.png 1024w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/10\/legacy-ruby-on-rails-ui-modernization-1536x864.png 1536w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/10\/legacy-ruby-on-rails-ui-modernization.png 1672w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/a>\t\t\t\t\t\t\t<div class=\"rdap-card-body\"><time datetime=\"2026-10-09T09:04:09+01:00\">October 9, 2026<\/time><h3><a href=\"https:\/\/ruby-doc.org\/learn\/legacy-rails-modernization-ui-design-agencies\/\">UI Design Agencies for Modernizing Legacy Ruby on Rails Apps<\/a><\/h3><p>Eight UI design agencies to consider for an established Ruby on Rails application, with practical questions about Ruby experience, workflow preservation, testing, and implementation.<\/p><\/div>\n\t\t\t\t\t\t<\/article>\n\t\t\t\t\t\t\t\t\t\t\t<article class=\"rdap-card\">\n\t\t\t\t\t\t\t<a class=\"rdap-card-image\" href=\"https:\/\/ruby-doc.org\/learn\/using-rust-with-ruby-integration-options-and-how-to-choose-a-development-partner\/\" aria-hidden=\"true\" tabindex=\"-1\"><img decoding=\"async\" width=\"768\" height=\"512\" src=\"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/10\/using-rust-with-ruby-768x512.png\" class=\"attachment-medium_large size-medium_large wp-post-image\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/10\/using-rust-with-ruby-768x512.png 768w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/10\/using-rust-with-ruby-300x200.png 300w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/10\/using-rust-with-ruby-1024x683.png 1024w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/10\/using-rust-with-ruby.png 1536w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/a>\t\t\t\t\t\t\t<div class=\"rdap-card-body\"><time datetime=\"2026-10-07T09:10:15+01:00\">October 7, 2026<\/time><h3><a href=\"https:\/\/ruby-doc.org\/learn\/using-rust-with-ruby-integration-options-and-how-to-choose-a-development-partner\/\">Using Rust with Ruby: Integration Options and How to Choose a Development Partner<\/a><\/h3><p>A Ruby application can work well for years before one job starts taking too long. A nightly import may spend hours parsing files. A calculation may hold up requests even though the rest of the Rails application has little to do. That is a useful point to investigate Rust. Ruby can handle application behaviour, database [&hellip;]<\/p><\/div>\n\t\t\t\t\t\t<\/article>\n\t\t\t\t\t\t\t\t\t\t\t<article class=\"rdap-card\">\n\t\t\t\t\t\t\t<a class=\"rdap-card-image\" href=\"https:\/\/ruby-doc.org\/learn\/download-instagram-highlights-ruby\/\" aria-hidden=\"true\" tabindex=\"-1\"><img decoding=\"async\" width=\"768\" height=\"512\" src=\"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/10\/download-instagram-highlights-ruby-768x512.png\" class=\"attachment-medium_large size-medium_large wp-post-image\" alt=\"Ruby gemstone, laptop and phone illustrating how developers can archive Instagram Highlights\" loading=\"lazy\" srcset=\"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/10\/download-instagram-highlights-ruby-768x512.png 768w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/10\/download-instagram-highlights-ruby-300x200.png 300w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/10\/download-instagram-highlights-ruby-1024x683.png 1024w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/10\/download-instagram-highlights-ruby.png 1536w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/a>\t\t\t\t\t\t\t<div class=\"rdap-card-body\"><time datetime=\"2026-10-06T15:43:36+01:00\">October 6, 2026<\/time><h3><a href=\"https:\/\/ruby-doc.org\/learn\/download-instagram-highlights-ruby\/\">Download Instagram Highlights: A Sixteen-Year Changelog for Ruby Developers<\/a><\/h3><p>A Ruby developer\u2019s guide to Instagram Highlights: the history of old gems, current API limits, manual download options and authorised Story archiving.<\/p><\/div>\n\t\t\t\t\t\t<\/article>\n\t\t\t\t\t\t\t\t\t\t\t<article class=\"rdap-card\">\n\t\t\t\t\t\t\t<a class=\"rdap-card-image\" href=\"https:\/\/ruby-doc.org\/learn\/building-a-reliable-ruby-development-environment\/\" aria-hidden=\"true\" tabindex=\"-1\"><img decoding=\"async\" width=\"768\" height=\"432\" src=\"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/10\/Ruby-development-workspace-768x432.png\" class=\"attachment-medium_large size-medium_large wp-post-image\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/10\/Ruby-development-workspace-768x432.png 768w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/10\/Ruby-development-workspace-300x169.png 300w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/10\/Ruby-development-workspace-1024x576.png 1024w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/10\/Ruby-development-workspace-1536x864.png 1536w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/10\/Ruby-development-workspace.png 1672w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/a>\t\t\t\t\t\t\t<div class=\"rdap-card-body\"><time datetime=\"2026-10-02T10:46:30+01:00\">October 2, 2026<\/time><h3><a href=\"https:\/\/ruby-doc.org\/learn\/building-a-reliable-ruby-development-environment\/\">Building a Reliable Ruby Development Environment<\/a><\/h3><p>A Rails test works for your colleague but fails on your laptop. Before changing the application, check Ruby versions, installed gems and database configurations. A difference in the setup can send you looking for a bug that has little to do with the code you were editing. A useful Ruby development environment makes it easy [&hellip;]<\/p><\/div>\n\t\t\t\t\t\t<\/article>\n\t\t\t\t\t\t\t\t\t\t\t<article class=\"rdap-card\">\n\t\t\t\t\t\t\t<a class=\"rdap-card-image\" href=\"https:\/\/ruby-doc.org\/learn\/build-a-digital-wardrobe-in-ruby\/\" aria-hidden=\"true\" tabindex=\"-1\"><img decoding=\"async\" width=\"768\" height=\"432\" src=\"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/10\/ruby-digital-wardrobe-768x432.png\" class=\"attachment-medium_large size-medium_large wp-post-image\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/10\/ruby-digital-wardrobe-768x432.png 768w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/10\/ruby-digital-wardrobe-300x169.png 300w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/10\/ruby-digital-wardrobe-1024x576.png 1024w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/10\/ruby-digital-wardrobe-1536x864.png 1536w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/10\/ruby-digital-wardrobe.png 1672w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/a>\t\t\t\t\t\t\t<div class=\"rdap-card-body\"><time datetime=\"2026-10-01T13:15:00+01:00\">October 1, 2026<\/time><h3><a href=\"https:\/\/ruby-doc.org\/learn\/build-a-digital-wardrobe-in-ruby\/\">Build a Digital Wardrobe in Ruby<\/a><\/h3><p>A wardrobe tracker makes a useful Ruby project because its rules are easy to inspect. An item belongs to someone, has a category and may be available to wear. An outfit combines several items. A wear log records what actually happened. The interesting work starts when those records disagree. A saved outfit contains shoes that [&hellip;]<\/p><\/div>\n\t\t\t\t\t\t<\/article>\n\t\t\t\t\t\t\t\t\t\t\t<article class=\"rdap-card\">\n\t\t\t\t\t\t\t<a class=\"rdap-card-image\" href=\"https:\/\/ruby-doc.org\/learn\/ruby-on-rails-cloud-migration\/\" aria-hidden=\"true\" tabindex=\"-1\"><img decoding=\"async\" width=\"768\" height=\"432\" src=\"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/Ruby-on-Rails-Cloud-Migration-768x432.png\" class=\"attachment-medium_large size-medium_large wp-post-image\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/Ruby-on-Rails-Cloud-Migration-768x432.png 768w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/Ruby-on-Rails-Cloud-Migration-300x169.png 300w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/Ruby-on-Rails-Cloud-Migration-1024x576.png 1024w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/Ruby-on-Rails-Cloud-Migration-1536x864.png 1536w, https:\/\/ruby-doc.org\/learn\/wp-content\/uploads\/2026\/09\/Ruby-on-Rails-Cloud-Migration.png 1672w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/a>\t\t\t\t\t\t\t<div class=\"rdap-card-body\"><time datetime=\"2026-09-30T07:32:00+01:00\">September 30, 2026<\/time><h3><a href=\"https:\/\/ruby-doc.org\/learn\/ruby-on-rails-cloud-migration\/\">Ruby on Rails Cloud Migration in 2026: What CIOs Should Check Before Moving<\/a><\/h3><p>The Rails application boots on its new cloud host. The home page loads, staff can sign in, and the migration looks finished. Then someone downloads an old attachment and gets an error. A scheduled export runs twice. The database reaches its connection limit while the web servers still have spare capacity. Those are useful problems [&hellip;]<\/p><\/div>\n\t\t\t\t\t\t<\/article>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<nav class=\"rdap-pagination\" aria-label=\"James Britt article pages\"><ul class=\"page-numbers\">\n\t<li><span aria-current=\"page\" class=\"page-numbers current\">1<\/span><\/li>\n\t<li><a class=\"page-numbers\" href=\"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/pages\/1188\/page\/2\/\">2<\/a><\/li>\n\t<li><a class=\"page-numbers\" href=\"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/pages\/1188\/page\/3\/\">3<\/a><\/li>\n\t<li><span class=\"page-numbers dots\">&hellip;<\/span><\/li>\n\t<li><a class=\"page-numbers\" href=\"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/pages\/1188\/page\/10\/\">10<\/a><\/li>\n\t<li><a class=\"next page-numbers\" href=\"https:\/\/ruby-doc.org\/learn\/wp-json\/wp\/v2\/pages\/1188\/page\/2\/\">Next &raquo;<\/a><\/li>\n<\/ul>\n<\/nav>\t\t\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.7 - 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-04T10:47:16+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-04T10:47:16+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-04T10:47:16+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-04T10:47:16+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}]}}