{"id":469,"date":"2007-03-13T18:15:25","date_gmt":"2007-03-13T23:15:25","guid":{"rendered":"http:\/\/josh.ev9.org\/weblog\/archives\/469"},"modified":"2007-03-14T08:52:09","modified_gmt":"2007-03-14T13:52:09","slug":"the-design-of-cruisecontrolrb","status":"publish","type":"post","link":"http:\/\/josh.ev9.org\/weblog\/archives\/469","title":{"rendered":"The Design of CruiseControl.rb"},"content":{"rendered":"<p>If you&#8217;ve heard me talk about work lately, you have probably heard me talk about an Open Source project I&#8217;ve been working on with a handful of other folks at ThoughtWorks. Previous to now, it&#8217;s been &#8220;privately public,&#8221; existing on servers where people could get to it, but not so public that we were letting people know that we were working on it. Well, yesterday <a href=\"http:\/\/cruisecontrolrb.thoughtworks.com\/\">CruiseControl.rb<\/a> finally went public, and I&#8217;m proud to say that I&#8217;m an Open Source contributor. I&#8217;ve dreamed of saying that for a while&#8230;<\/p>\n<p>For those that aren&#8217;t familiar, CruiseControl.rb is a tool that software developers will use to monitor whether the software they are creating is &#8220;Building.&#8221; And it helps them to fix problems when they come up. That&#8217;s probably the simplest explanation you&#8217;ll get about what CruiseControl.rb does. Notice that I said simplest, not most complete. The original <a href=\"http:\/\/cruisecontrol.sourceforge.net\/\">CruiseControl<\/a> is a ThoughtWorks-led Open Source project, and was the first Continuous Integration tool&#8230;as far as I know.<\/p>\n<p>Anyway, let&#8217;s talk about what went into the design of CruiseControl.rb. For today, I&#8217;m going to talk about the concept of iteration, and how it was applied in a unique, but purely designerly way on this project. I&#8217;ve blogged on this <a href=\"http:\/\/josh.ev9.org\/weblog\/archives\/461\">concept<\/a> <a href=\"http:\/\/josh.ev9.org\/weblog\/archives\/466\">before<\/a>&#8230;but this will serve as proof that we&#8217;re eating our own dog food here at ThoughtWorks.<\/p>\n<p>My view of design is that you have to try out similar concepts over and over again before you&#8217;ll get to your final idea. The first example I want to point out was when we were working out what the CruiseControl.rb logo should look like. I talked over some ideas with the team, sketched out a bunch of options, and then created some high-fidelity prototypes in Photoshop. Here&#8217;s what I came up with:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"200\" id=\"image470\" alt=\"cruise_logo.gif\" src=\"http:\/\/josh.ev9.org\/weblog\/wp-content\/uploads\/2007\/03\/cruise_logo.gif\" \/><\/p>\n<p>Now, the first thing you might notice is that in the end we used none of these ideas. Our final result, shown below was a conglomeration of a bunch of the concepts used in these designs. In the end, we threw out all of these designs in favor of a combination. This means that as a designer, I have to be ready to trash ideas at the drop of a hat. I&#8217;m happy to do it though, in favor of a better design.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"266\" height=\"45\" alt=\"cruise_logo_large2.png\" id=\"image479\" src=\"http:\/\/josh.ev9.org\/weblog\/wp-content\/uploads\/2007\/03\/cruise_logo_large2.png\" \/><\/p>\n<p>Now, it would be easy enough to apply this iterative design idea simply to the graphic design of system elements, but we used this concept throughout development. The dashboard is a great example of this. There were endless options when it came to possible ways for the information to be laid out. In the beginning, we started with this:<\/p>\n<p><a href=\"http:\/\/josh.ev9.org\/weblog\/wp-content\/uploads\/2007\/03\/dashboard1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"261\" alt=\"dashboard1.png\" id=\"image472\" src=\"http:\/\/josh.ev9.org\/weblog\/wp-content\/uploads\/2007\/03\/dashboard1.png\" \/><\/a><\/p>\n<p>Pretty straightforward solution. A table with all the basics laid out inline. An iteration later, we played with some of the graphic treatments, and had this:<\/p>\n<p><a href=\"http:\/\/josh.ev9.org\/weblog\/wp-content\/uploads\/2007\/03\/dashboard2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"275\" alt=\"dashboard2.png\" id=\"image473\" src=\"http:\/\/josh.ev9.org\/weblog\/wp-content\/uploads\/2007\/03\/dashboard2.png\" \/><\/a><\/p>\n<p>A couple new concepts there. The status is in a color that helps to quickly perceive the state, even without reading. The build buttons disappear in favor of a progress indicator if a build is already in progress.<\/p>\n<p>But at this point we were just feeling a bit underwhelmed with the way that each project&#8217;s information was laid out. All text was equal with respect to visual hierarchy. There was nothing to signal what was the most important information at a given moment. And we just knew there had to be a better way to lay this stuff out. So we gave it another shot:<\/p>\n<p><a href=\"http:\/\/josh.ev9.org\/weblog\/wp-content\/uploads\/2007\/03\/dashboard3.png\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"279\" alt=\"dashboard3.png\" id=\"image474\" src=\"http:\/\/josh.ev9.org\/weblog\/wp-content\/uploads\/2007\/03\/dashboard3.png\" \/><\/a><\/p>\n<p>There were a number of variations of this design. In this version,  you see a thought bubble bearing information about things people said about the most recent build. Other versions had no thought bubble, but portrayed the a failing project&#8217;s name in large text displayed as negative space in the red gradient. The idea behind this was that if a team set up a monitor across the room from where they were developing, they would be able to see which project was failing at a glance.<\/p>\n<p>In the end, we bounced around between a number of ideas and ended up where we are today:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"304\" id=\"image475\" alt=\"dashboard4.png\" src=\"http:\/\/josh.ev9.org\/weblog\/wp-content\/uploads\/2007\/03\/dashboard4.png\" \/><\/p>\n<p>I&#8217;d say it all worked out pretty well. To all the users of CruiseControl.rb: I sincerely hope you enjoy it. Your experience while using the tool was heavily taken into account. Part of ThoughtWorks&#8217; mission is to create excellent software, and in this case the software is Open Source&#8230;a concept many of us at ThoughtWorks very strongly believe in. With CruiseControl.rb we have tried to marry an excellent User Experience with an Open Source license, and I hope that you agree that this project is a success.<\/p>\n<p>Rock on.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>If you&#8217;ve heard me talk about work lately, you have probably heard me talk about an Open Source project I&#8217;ve been working on with a handful of other folks at ThoughtWorks. Previous to now, it&#8217;s been &#8220;privately public,&#8221; existing on servers where people could get to it, but not so public that we were letting [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"nf_dc_page":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[16,25,17,2,21,12,13],"tags":[],"class_list":["post-469","post","type-post","status-publish","format-standard","hentry","category-agile-development","category-cool-software","category-design","category-hci-topic","category-professional","category-technology","category-thoughtworks"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.8 - aioseo.com -->\n\t<meta name=\"description\" content=\"If you&#039;ve heard me talk about work lately, you have probably heard me talk about an Open Source project I&#039;ve been working on with a handful of other folks at ThoughtWorks. Previous to now, it&#039;s been &quot;privately public,&quot; existing on servers where people could get to it, but not so public that we were letting\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"jevnin\"\/>\n\t<link rel=\"canonical\" href=\"http:\/\/josh.ev9.org\/weblog\/archives\/469\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.8\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Josh Evnin \u2013 Startups, Product Design, and Building the Future\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"The Design of CruiseControl.rb \u2013 Josh Evnin\" \/>\n\t\t<meta property=\"og:description\" content=\"If you&#039;ve heard me talk about work lately, you have probably heard me talk about an Open Source project I&#039;ve been working on with a handful of other folks at ThoughtWorks. Previous to now, it&#039;s been &quot;privately public,&quot; existing on servers where people could get to it, but not so public that we were letting\" \/>\n\t\t<meta property=\"og:url\" content=\"http:\/\/josh.ev9.org\/weblog\/archives\/469\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2007-03-13T23:15:25+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2007-03-14T13:52:09+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"The Design of CruiseControl.rb \u2013 Josh Evnin\" \/>\n\t\t<meta name=\"twitter:description\" content=\"If you&#039;ve heard me talk about work lately, you have probably heard me talk about an Open Source project I&#039;ve been working on with a handful of other folks at ThoughtWorks. Previous to now, it&#039;s been &quot;privately public,&quot; existing on servers where people could get to it, but not so public that we were letting\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"http:\\\/\\\/josh.ev9.org\\\/weblog\\\/archives\\\/469#blogposting\",\"name\":\"The Design of CruiseControl.rb \\u2013 Josh Evnin\",\"headline\":\"The Design of CruiseControl.rb\",\"author\":{\"@id\":\"http:\\\/\\\/josh.ev9.org\\\/weblog\\\/archives\\\/author\\\/jevnin#author\"},\"publisher\":{\"@id\":\"http:\\\/\\\/josh.ev9.org\\\/weblog\\\/#person\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"http:\\\/\\\/josh.ev9.org\\\/weblog\\\/wp-content\\\/uploads\\\/2007\\\/03\\\/cruise_logo.gif\",\"@id\":\"http:\\\/\\\/josh.ev9.org\\\/weblog\\\/archives\\\/469\\\/#articleImage\"},\"datePublished\":\"2007-03-13T18:15:25-05:00\",\"dateModified\":\"2007-03-14T08:52:09-05:00\",\"inLanguage\":\"en-US\",\"commentCount\":2,\"mainEntityOfPage\":{\"@id\":\"http:\\\/\\\/josh.ev9.org\\\/weblog\\\/archives\\\/469#webpage\"},\"isPartOf\":{\"@id\":\"http:\\\/\\\/josh.ev9.org\\\/weblog\\\/archives\\\/469#webpage\"},\"articleSection\":\"agile development, cool software, design, HCI topic, professional, technology, ThoughtWorks\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\\\/\\\/josh.ev9.org\\\/weblog\\\/archives\\\/469#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"http:\\\/\\\/josh.ev9.org\\\/weblog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"http:\\\/\\\/josh.ev9.org\\\/weblog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"http:\\\/\\\/josh.ev9.org\\\/weblog\\\/archives\\\/category\\\/hci-topic#listItem\",\"name\":\"HCI topic\"}},{\"@type\":\"ListItem\",\"@id\":\"http:\\\/\\\/josh.ev9.org\\\/weblog\\\/archives\\\/category\\\/hci-topic#listItem\",\"position\":2,\"name\":\"HCI topic\",\"item\":\"http:\\\/\\\/josh.ev9.org\\\/weblog\\\/archives\\\/category\\\/hci-topic\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"http:\\\/\\\/josh.ev9.org\\\/weblog\\\/archives\\\/469#listItem\",\"name\":\"The Design of CruiseControl.rb\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"http:\\\/\\\/josh.ev9.org\\\/weblog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"http:\\\/\\\/josh.ev9.org\\\/weblog\\\/archives\\\/469#listItem\",\"position\":3,\"name\":\"The Design of CruiseControl.rb\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"http:\\\/\\\/josh.ev9.org\\\/weblog\\\/archives\\\/category\\\/hci-topic#listItem\",\"name\":\"HCI topic\"}}]},{\"@type\":\"Person\",\"@id\":\"http:\\\/\\\/josh.ev9.org\\\/weblog\\\/#person\",\"name\":\"jevnin\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"http:\\\/\\\/josh.ev9.org\\\/weblog\\\/archives\\\/469#personImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/915ce0ad84a5b27b2117ac5655b49255c7133d9cb5610423bb6f73ead01e1403?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"jevnin\"}},{\"@type\":\"Person\",\"@id\":\"http:\\\/\\\/josh.ev9.org\\\/weblog\\\/archives\\\/author\\\/jevnin#author\",\"url\":\"http:\\\/\\\/josh.ev9.org\\\/weblog\\\/archives\\\/author\\\/jevnin\",\"name\":\"jevnin\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"http:\\\/\\\/josh.ev9.org\\\/weblog\\\/archives\\\/469#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/915ce0ad84a5b27b2117ac5655b49255c7133d9cb5610423bb6f73ead01e1403?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"jevnin\"}},{\"@type\":\"WebPage\",\"@id\":\"http:\\\/\\\/josh.ev9.org\\\/weblog\\\/archives\\\/469#webpage\",\"url\":\"http:\\\/\\\/josh.ev9.org\\\/weblog\\\/archives\\\/469\",\"name\":\"The Design of CruiseControl.rb \\u2013 Josh Evnin\",\"description\":\"If you've heard me talk about work lately, you have probably heard me talk about an Open Source project I've been working on with a handful of other folks at ThoughtWorks. Previous to now, it's been \\\"privately public,\\\" existing on servers where people could get to it, but not so public that we were letting\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"http:\\\/\\\/josh.ev9.org\\\/weblog\\\/#website\"},\"breadcrumb\":{\"@id\":\"http:\\\/\\\/josh.ev9.org\\\/weblog\\\/archives\\\/469#breadcrumblist\"},\"author\":{\"@id\":\"http:\\\/\\\/josh.ev9.org\\\/weblog\\\/archives\\\/author\\\/jevnin#author\"},\"creator\":{\"@id\":\"http:\\\/\\\/josh.ev9.org\\\/weblog\\\/archives\\\/author\\\/jevnin#author\"},\"datePublished\":\"2007-03-13T18:15:25-05:00\",\"dateModified\":\"2007-03-14T08:52:09-05:00\"},{\"@type\":\"WebSite\",\"@id\":\"http:\\\/\\\/josh.ev9.org\\\/weblog\\\/#website\",\"url\":\"http:\\\/\\\/josh.ev9.org\\\/weblog\\\/\",\"name\":\"Josh Evnin\",\"description\":\"Startups, Product Design, and Building the Future\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"http:\\\/\\\/josh.ev9.org\\\/weblog\\\/#person\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"The Design of CruiseControl.rb \u2013 Josh Evnin","description":"If you've heard me talk about work lately, you have probably heard me talk about an Open Source project I've been working on with a handful of other folks at ThoughtWorks. Previous to now, it's been \"privately public,\" existing on servers where people could get to it, but not so public that we were letting","canonical_url":"http:\/\/josh.ev9.org\/weblog\/archives\/469","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"http:\/\/josh.ev9.org\/weblog\/archives\/469#blogposting","name":"The Design of CruiseControl.rb \u2013 Josh Evnin","headline":"The Design of CruiseControl.rb","author":{"@id":"http:\/\/josh.ev9.org\/weblog\/archives\/author\/jevnin#author"},"publisher":{"@id":"http:\/\/josh.ev9.org\/weblog\/#person"},"image":{"@type":"ImageObject","url":"http:\/\/josh.ev9.org\/weblog\/wp-content\/uploads\/2007\/03\/cruise_logo.gif","@id":"http:\/\/josh.ev9.org\/weblog\/archives\/469\/#articleImage"},"datePublished":"2007-03-13T18:15:25-05:00","dateModified":"2007-03-14T08:52:09-05:00","inLanguage":"en-US","commentCount":2,"mainEntityOfPage":{"@id":"http:\/\/josh.ev9.org\/weblog\/archives\/469#webpage"},"isPartOf":{"@id":"http:\/\/josh.ev9.org\/weblog\/archives\/469#webpage"},"articleSection":"agile development, cool software, design, HCI topic, professional, technology, ThoughtWorks"},{"@type":"BreadcrumbList","@id":"http:\/\/josh.ev9.org\/weblog\/archives\/469#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"http:\/\/josh.ev9.org\/weblog#listItem","position":1,"name":"Home","item":"http:\/\/josh.ev9.org\/weblog","nextItem":{"@type":"ListItem","@id":"http:\/\/josh.ev9.org\/weblog\/archives\/category\/hci-topic#listItem","name":"HCI topic"}},{"@type":"ListItem","@id":"http:\/\/josh.ev9.org\/weblog\/archives\/category\/hci-topic#listItem","position":2,"name":"HCI topic","item":"http:\/\/josh.ev9.org\/weblog\/archives\/category\/hci-topic","nextItem":{"@type":"ListItem","@id":"http:\/\/josh.ev9.org\/weblog\/archives\/469#listItem","name":"The Design of CruiseControl.rb"},"previousItem":{"@type":"ListItem","@id":"http:\/\/josh.ev9.org\/weblog#listItem","name":"Home"}},{"@type":"ListItem","@id":"http:\/\/josh.ev9.org\/weblog\/archives\/469#listItem","position":3,"name":"The Design of CruiseControl.rb","previousItem":{"@type":"ListItem","@id":"http:\/\/josh.ev9.org\/weblog\/archives\/category\/hci-topic#listItem","name":"HCI topic"}}]},{"@type":"Person","@id":"http:\/\/josh.ev9.org\/weblog\/#person","name":"jevnin","image":{"@type":"ImageObject","@id":"http:\/\/josh.ev9.org\/weblog\/archives\/469#personImage","url":"https:\/\/secure.gravatar.com\/avatar\/915ce0ad84a5b27b2117ac5655b49255c7133d9cb5610423bb6f73ead01e1403?s=96&d=mm&r=g","width":96,"height":96,"caption":"jevnin"}},{"@type":"Person","@id":"http:\/\/josh.ev9.org\/weblog\/archives\/author\/jevnin#author","url":"http:\/\/josh.ev9.org\/weblog\/archives\/author\/jevnin","name":"jevnin","image":{"@type":"ImageObject","@id":"http:\/\/josh.ev9.org\/weblog\/archives\/469#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/915ce0ad84a5b27b2117ac5655b49255c7133d9cb5610423bb6f73ead01e1403?s=96&d=mm&r=g","width":96,"height":96,"caption":"jevnin"}},{"@type":"WebPage","@id":"http:\/\/josh.ev9.org\/weblog\/archives\/469#webpage","url":"http:\/\/josh.ev9.org\/weblog\/archives\/469","name":"The Design of CruiseControl.rb \u2013 Josh Evnin","description":"If you've heard me talk about work lately, you have probably heard me talk about an Open Source project I've been working on with a handful of other folks at ThoughtWorks. Previous to now, it's been \"privately public,\" existing on servers where people could get to it, but not so public that we were letting","inLanguage":"en-US","isPartOf":{"@id":"http:\/\/josh.ev9.org\/weblog\/#website"},"breadcrumb":{"@id":"http:\/\/josh.ev9.org\/weblog\/archives\/469#breadcrumblist"},"author":{"@id":"http:\/\/josh.ev9.org\/weblog\/archives\/author\/jevnin#author"},"creator":{"@id":"http:\/\/josh.ev9.org\/weblog\/archives\/author\/jevnin#author"},"datePublished":"2007-03-13T18:15:25-05:00","dateModified":"2007-03-14T08:52:09-05:00"},{"@type":"WebSite","@id":"http:\/\/josh.ev9.org\/weblog\/#website","url":"http:\/\/josh.ev9.org\/weblog\/","name":"Josh Evnin","description":"Startups, Product Design, and Building the Future","inLanguage":"en-US","publisher":{"@id":"http:\/\/josh.ev9.org\/weblog\/#person"}}]},"og:locale":"en_US","og:site_name":"Josh Evnin \u2013 Startups, Product Design, and Building the Future","og:type":"article","og:title":"The Design of CruiseControl.rb \u2013 Josh Evnin","og:description":"If you've heard me talk about work lately, you have probably heard me talk about an Open Source project I've been working on with a handful of other folks at ThoughtWorks. Previous to now, it's been &quot;privately public,&quot; existing on servers where people could get to it, but not so public that we were letting","og:url":"http:\/\/josh.ev9.org\/weblog\/archives\/469","article:published_time":"2007-03-13T23:15:25+00:00","article:modified_time":"2007-03-14T13:52:09+00:00","twitter:card":"summary","twitter:title":"The Design of CruiseControl.rb \u2013 Josh Evnin","twitter:description":"If you've heard me talk about work lately, you have probably heard me talk about an Open Source project I've been working on with a handful of other folks at ThoughtWorks. Previous to now, it's been &quot;privately public,&quot; existing on servers where people could get to it, but not so public that we were letting"},"aioseo_meta_data":{"post_id":"469","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"BlogPosting","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2022-02-18 19:36:03","updated":"2025-06-04 15:34:47","seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"http:\/\/josh.ev9.org\/weblog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"http:\/\/josh.ev9.org\/weblog\/archives\/category\/hci-topic\" title=\"HCI topic\">HCI topic<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tThe Design of CruiseControl.rb\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"http:\/\/josh.ev9.org\/weblog"},{"label":"HCI topic","link":"http:\/\/josh.ev9.org\/weblog\/archives\/category\/hci-topic"},{"label":"The Design of CruiseControl.rb","link":"http:\/\/josh.ev9.org\/weblog\/archives\/469"}],"_links":{"self":[{"href":"http:\/\/josh.ev9.org\/weblog\/wp-json\/wp\/v2\/posts\/469","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/josh.ev9.org\/weblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/josh.ev9.org\/weblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/josh.ev9.org\/weblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/josh.ev9.org\/weblog\/wp-json\/wp\/v2\/comments?post=469"}],"version-history":[{"count":0,"href":"http:\/\/josh.ev9.org\/weblog\/wp-json\/wp\/v2\/posts\/469\/revisions"}],"wp:attachment":[{"href":"http:\/\/josh.ev9.org\/weblog\/wp-json\/wp\/v2\/media?parent=469"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/josh.ev9.org\/weblog\/wp-json\/wp\/v2\/categories?post=469"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/josh.ev9.org\/weblog\/wp-json\/wp\/v2\/tags?post=469"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}