Deploy Feature Recommender 2, per issue #172
authorGregg Lind <glind@mozilla.com>
Tue, 05 Aug 2014 11:10:21 -0500
changeset 1037 a2beb261ebc6cd69cc4109cfc350ddb40e2a9f6d
parent 1036 73d69aca200969f07befee944e56c170a725a158
child 1038 a836550e38d6846f148ddeb3b7249a7346308274
push id868
push userglind@mozilla.com
push dateTue, 05 Aug 2014 16:10:58 +0000
Deploy Feature Recommender 2, per issue #172 https://github.com/raymak/contextualfeaturerecommender/issues/172
testcases/featurerecommender2/README.html
testcases/featurerecommender2/README.md
testcases/featurerecommender2/deploy-howto.md
testcases/featurerecommender2/featurerecommender2.jar
testcases/featurerecommender2/featurerecommender2.js
testcases/index.json
new file mode 100644
--- /dev/null
+++ b/testcases/featurerecommender2/README.html
@@ -0,0 +1,284 @@
+<!DOCTYPE html><html><head><meta charset="utf-8"><style>/* Fonts */
+@font-face{
+  font-family: octicons-anchor;
+  src: url(data:x-font-woff;charset=utf-8;base64,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) format('woff');
+}
+
+/* Body */
+html { font-size: 100%; overflow-y: scroll; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }
+
+body{
+  color:#4d4d4c;
+  font-family:Georgia, Palatino, 'Palatino Linotype', Times, 'Times New Roman',
+              "Hiragino Sans GB", "STXihei", "微软雅黑", serif;
+  font-size:12px;
+  line-height:1.5em;
+  background:#fefefe;
+  width: 45em;
+  margin: 10px auto;
+  padding: 30px;
+  border: 1px solid #ddd;
+  outline: 1300px solid #f8f8f8;
+}
+
+/* Links */
+a{ color: #06d; text-decoration:none; }
+a:hover{ color: #06e; text-decoration: underline; }
+a:active{ color:#faa700; }
+a:focus{ outline: thin dotted; }
+a:hover, a:active{ outline: 0; }
+
+::-moz-selection { background:rgba(255,255,0,0.3); color:#000 }
+::selection { background:rgba(255,255,0,0.3); color:#000 }
+
+a::-moz-selection { background:rgba(255,255,0,0.3); color:#0645ad }
+a::selection { background:rgba(255,255,0,0.3); color:#0645ad }
+
+/* Header Anchor Links*/
+a.headeranchor-link {
+  color:#111;
+  border: 0;
+  margin-left: -20px;
+  padding-right: 6px;
+  cursor: pointer;
+  position: absolute;
+  display: block;
+  top: 0;
+  left: 0;
+  bottom: 0;
+}
+
+span.headeranchor {
+  font: normal normal 16px octicons-anchor;
+  line-height: 1;
+  -moz-osx-font-smoothing: grayscale;
+  -webkit-user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+}
+
+a.headeranchor-link:hover { text-decoration: none;}
+a.headeranchor-link:visited { color:#4d4d4c; }
+a.headeranchor-link:active { color:#4d4d4c; }
+a.headeranchor-link:hover span.headeranchor:before { content: '\f05c'; }
+h1:hover a span.headeranchor:before { content: '\f05c'; }
+h2:hover a span.headeranchor:before { content: '\f05c'; }
+h3:hover a span.headeranchor:before { content: '\f05c'; }
+h4:hover a span.headeranchor:before { content: '\f05c'; }
+h5:hover a span.headeranchor:before { content: '\f05c'; }
+h6:hover a span.headeranchor:before { content: '\f05c'; }
+
+abbr { cursor: pointer; }
+
+/* Paragraphs */
+p { margin:1em 0; }
+
+/* Images */
+img {
+  max-width:100%;
+  border: 0;
+  -ms-interpolation-mode: bicubic;
+  vertical-align: middle;
+}
+
+/* Headers */
+h1,h2,h3,h4,h5,h6 {
+  font-weight:normal;
+  color:#111;
+  line-height: 1.7;
+  position: relative;
+}
+h4,h5,h6{ font-weight: bold; }
+h1 { font-size:2.5em; border-bottom: 1px solid #ddd;}
+h2 { font-size:2em; border-bottom:1px solid #eee; padding-bottom: 5px; }
+h3 { font-size:1.5em; }
+h4 { font-size:1.2em; }
+h5 { font-size:1em; }
+h6 { font-size:0.9em; }
+
+/* Block Quotes */
+blockquote {
+  color:#666666;
+  margin:0;
+  padding-left: 3em;
+  border-left: 0.5em #EEE solid;
+}
+hr { display: block; height: 2px; border: 0; border-top: 1px solid #aaa;border-bottom: 1px solid #eee; margin: 1em 0; padding: 0; }
+
+/* Raw Blocks */
+span.backtick {
+  border:1px solid #EAEAEA;
+  border-radius:3px;
+  background:#F8F8F8;
+  padding:0 3px 0 3px;
+}
+
+pre, code, kbd, samp {
+  color: #000;
+  font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
+  -webkit-border-radius: 3px;
+  -moz-border-radius: 3px;
+  border-radius: 3px;
+  font-size: 0.88em;
+  background-color: #F8F8F8;
+  border: 1px solid #CCC;
+}
+
+pre {
+  white-space: pre;
+  white-space: pre-wrap;
+  word-wrap: break-word;
+  padding: 10px;
+}
+
+code { padding: 0 3px 0 3px; }
+pre code { border: 0; padding: 0; }
+
+/* Admonition */
+div.admonition {
+  -webkit-border-radius: 3px;
+  -moz-border-radius: 3px;
+  border-radius: 3px;
+  font-size: 0.88em;
+  padding: 0.5em 1em 0.5em 1em;
+  margin: 10px auto;
+}
+
+div.admonition p {
+  padding: 0;
+  margin: 0.5em 0 0.5em 0;
+}
+
+p.admonition-title {
+  font-weight: bold;
+}
+
+div.admonition.attention {
+  color: #4F8A10;
+  background-color: #DFF2BF;
+  border: 1px solid #4F8A10;
+}
+
+div.admonition.caution {
+  color: #9F6000;
+  background-color: #FEEFB3;
+  border: 1px solid #9F6000;
+}
+
+div.admonition.hint {
+  color: #00529B;
+  background-color: #BDE5F8;
+  border: 1px solid #00529B;
+}
+
+div.admonition.danger {
+  color: #D8000C;
+  background-color: #FFBABA;
+  border: 1px solid #D8000C;
+}
+
+div.admonition.note {
+  color: #888888;
+  background-color: #F8F8F8;
+  border: 1px solid #888888;
+}
+
+/* Inlines */
+b, strong { font-weight: bold; }
+
+ins { background: #ff9; color: #000; text-decoration: none; }
+
+mark { background: #ff0; color: #000; font-style: italic; font-weight: bold; }
+
+sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
+sup { top: -0.5em; }
+sub { bottom: -0.25em; }
+
+dfn { font-style: italic; }
+
+/* Lists */
+ul, ol { padding-left: 30px; }
+li p:last-child { margin:0 }
+li.task-list-item { list-style-type: none; }
+li.task-list-item input { float:left; margin-left: -20px; margin-top: 6px; }
+dt { font-weight: bold; font-style: italic;}
+dd { margin: 0 0 0 2em; }
+
+/* Tables */
+table { border-collapse: collapse; border: 1px solid #ddd; background-color: #fefefe; }
+table tr:nth-child(2n) { background-color: #f8f8f8; }
+td, th { border: 1px solid #ddd; padding: 6px 13px; }
+
+/* Codehilite Tables */
+table.codehilitetable { border: 0; border-spacing: 0; width: 100%; }
+td.linenos, td.code, table.codehilitetable td { border: 0; padding: 0; }
+table.codehilitetable td:not(.linenos) div.linenodiv { padding: 0 !important; }
+td.code { width: 100%; }
+table.codehilitetable td.linenos div pre, td div.linenodiv pre {
+  border: 0;
+  border-top: 1px solid #CCC;
+  border-left: 1px solid #CCC;
+  border-right: 1px solid #CCC;
+  border-bottom: 1px solid #CCC;
+  -webkit-border-radius: 0;
+  -moz-border-radius: 0;
+  border-radius: 0;
+  -webkit-border-top-left-radius: 3px;
+  -webkit-border-bottom-left-radius: 3px;
+  -moz-border-radius-topleft: 3px;
+  -moz-border-radius-bottomleft: 3px;
+  border-top-left-radius: 3px;
+  border-bottom-left-radius: 3px;
+}
+
+table.codehilitetable td.code div pre {
+  border: 0;
+  border-top: 1px solid #CCC;
+  border-right: 1px solid #CCC;
+  border-bottom: 1px solid #CCC;
+  -webkit-border-radius: 0;
+  -moz-border-radius: 0;
+  border-radius: 0;
+  -webkit-border-top-right-radius: 3px;
+  -webkit-border-bottom-right-radius: 3px;
+  -moz-border-radius-topright: 3px;
+  -moz-border-radius-bottomright: 3px;
+  border-top-right-radius: 3px;
+  border-bottom-right-radius: 3px;
+}
+
+/* Media */
+@media only screen and (min-width: 480px) {
+  body{ font-size:14px; }
+}
+
+@media only screen and (min-width: 768px) {
+  body{ font-size:16px; }
+}
+
+@media print {
+  * { background: transparent !important; color: black !important; filter:none !important; -ms-filter: none !important; }
+  body{ font-size:12pt; max-width:100%; outline:none; border: 0;}
+  a, a:visited { text-decoration: underline; }
+  a.headeranchor-link { display: none; }
+  hr { height: 1px; border:0; border-bottom:1px solid black; }
+  a[href]:after { content: " (" attr(href) ")"; }
+  abbr[title]:after { content: " (" attr(title) ")"; }
+  .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; }
+  pre, blockquote { border: 1px solid #999; padding-right: 1em; page-break-inside: avoid; }
+  tr, img { page-break-inside: avoid; }
+  img { max-width: 100% !important; }
+  p, h2, h3 { orphans: 3; widows: 3; }
+  h2, h3 { page-break-after: avoid; }
+}
+</style><title>README</title></head><body><h1 id="in-context-feature-recommendation-experiment"><a name="user-content-in-context-feature-recommendation-experiment" href="#in-context-feature-recommendation-experiment" class="headeranchor-link"  aria-hidden="true"><span class="headeranchor"></span></a>In-Context Feature Recommendation Experiment.</h1>
+<h2 id="summary"><a name="user-content-summary" href="#summary" class="headeranchor-link"  aria-hidden="true"><span class="headeranchor"></span></a>Summary</h2>
+<p>Awesome features, suggested in context.</p>
+<h2 id="author"><a name="user-content-author" href="#author" class="headeranchor-link"  aria-hidden="true"><span class="headeranchor"></span></a>Author:</h2>
+<p>&ldquo;Kamyar Ardekani <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#107;&#97;&#109;&#121;&#97;&#114;&#64;&#109;&#111;&#122;&#105;&#108;&#108;&#97;&#46;&#99;&#111;&#109;">&#107;&#97;&#109;&#121;&#97;&#114;&#64;&#109;&#111;&#122;&#105;&#108;&#108;&#97;&#46;&#99;&#111;&#109;</a>&ldquo;, Mozilla Insights Intern, with help from Gregg Lind <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#103;&#108;&#105;&#110;&#100;&#64;&#109;&#111;&#122;&#105;&#108;&#108;&#97;&#46;&#99;&#111;&#109;">&#103;&#108;&#105;&#110;&#100;&#64;&#109;&#111;&#122;&#105;&#108;&#108;&#97;&#46;&#99;&#111;&#109;</a> and Ilana Segall <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#105;&#115;&#101;&#103;&#97;&#108;&#108;&#64;&#109;&#111;&#122;&#105;&#108;&#108;&#97;&#46;&#99;&#111;&#109;">&#105;&#115;&#101;&#103;&#97;&#108;&#108;&#64;&#109;&#111;&#122;&#105;&#108;&#108;&#97;&#46;&#99;&#111;&#109;</a>.</p>
+<h2 id="project-homepage"><a name="user-content-project-homepage" href="#project-homepage" class="headeranchor-link"  aria-hidden="true"><span class="headeranchor"></span></a>Project Homepage</h2>
+<p><a href="https://github.com/raymak/contextualfeaturerecommender">https://github.com/raymak/contextualfeaturerecommender</a></p>
+<h2 id="what-prompted-mozilla-to-run-this-test"><a name="user-content-what-prompted-mozilla-to-run-this-test" href="#what-prompted-mozilla-to-run-this-test" class="headeranchor-link"  aria-hidden="true"><span class="headeranchor"></span></a>What prompted Mozilla to run this test?</h2>
+<p>We believe that users want a Firefox that is customized to their needs. Creating the right UI to do this in a way that feels timely, but non-invasive is hard.  This experiment implements several kinds and contexts of notification about potential customizations. </p>
+<p>Data collected from this test will be used to inform many uncoming features relating to repair, support, and customizaton modes.</p></body></html>
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/testcases/featurerecommender2/README.md
@@ -0,0 +1,19 @@
+# In-Context Feature Recommendation Experiment.
+
+## Summary
+
+Awesome features, suggested in context
+
+## Author:
+
+"Kamyar Ardekani <kamyar@mozilla.com>", Mozilla Insights Intern, with help from Gregg Lind <glind@mozilla.com> and Ilana Segall <isegall@mozilla.com>.
+
+## Project Homepage
+
+https://github.com/raymak/contextualfeaturerecommender
+
+## What prompted Mozilla to run this test?
+
+We believe that users want a Firefox that is customized to their needs. Creating the right UI to do this in a way that feels timely, but non-invasive is hard.  This experiment implements several kinds and contexts of notification about potential customizations.
+
+Data collected from this test will be used to inform many uncoming features relating to repair, support, and customizaton modes.
new file mode 100644
--- /dev/null
+++ b/testcases/featurerecommender2/deploy-howto.md
@@ -0,0 +1,12 @@
+
+1. Copy files in the directory to hg directory for testpilot web
+
+  /testcases/featurerecommender
+
+2. fabric:
+
+  fab package:featurerecommender,,index.json
+  fab test_valid:index.json
+  fab push
+
+3. Wait and profit?
\ No newline at end of file
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..2fb38326162fc10841367a0786ed33e4efb79352
GIT binary patch
literal 7879
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
Z{~Z%iQ$j`idj;C>>HK@YQdECm{TC=(j{pDw
new file mode 100644
--- /dev/null
+++ b/testcases/featurerecommender2/featurerecommender2.js
@@ -0,0 +1,116 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/*jshint forin:true, noarg:false, noempty:true, eqeqeq:true, bitwise:true,
+  strict:true, undef:true, curly:false, browser:true,
+  unused:true,
+  indent:2, maxerr:50, devel:true, node:true, boss:true, white:true,
+  globalstrict:true, nomen:false, newcap:true, moz: true */
+
+/*global */
+
+BaseClasses = require("study_base_classes.js");
+
+// Configure throttling
+const LOCALE_REGEX = "en";  // en only
+
+const RANDOM_DEPLOY_PREFIX = "extensions.testpilot.deploymentRandomizer";
+const RANDOM = "up-research";
+// Configure the Installer
+const ADDON_ID = "featurerecommender@insights.mozilla.com";
+const ADDON_URL = "https://testpilot.mozillalabs.com/addons/featurerecommender2-testpilot.xpi"; //CHANGE TO PROPER HOST
+
+let modules = {};
+Cu.import("resource://gre/modules/AddonManager.jsm", modules);
+Cu.import("resource://gre/modules/Services.jsm", modules);
+let {AddonManager, Services} = modules;
+
+exports.experimentInfo = {
+  testId: "featurerecommender@insights.mozilla.com",
+  testName: "Feature Recommender Study",
+  testInfoUrl: "https://testpilot.mozillalabs.com/testcases/featurerecommender2/README.html", //CHANGE TO INFO PAGE
+  summary: "Awesome features, suggested in context.",
+  versionNumber: 1,
+  duration: 1, //CHANGE TO NUMBER OF DESIRED DAYS
+  minTPVersion: "1.2.3",
+  minFXVersion: "30.0",
+  optInRequired: false,
+
+  randomDeployment: {
+    minRoll: 49,
+    maxRoll: 50,
+    rolloutCode: RANDOM, //don't overlap with their rollouts, which were 90-91. extra safeguard against mutex
+  },
+
+  runOrNotFunc: function () {
+    // Only run if there's no other study running
+    if (studyMutex.checkConflicted(ADDON_ID)) {
+      return false;
+    }
+
+    // Target appropriate locale
+    let locale = Services.prefs.getCharPref("general.useragent.locale");
+    if (!new RegExp("^" + LOCALE_REGEX, "i").test(locale)) {
+      return false;
+    }
+
+    let rd = Services.prefs.getCharPref(RANDOM_DEPLOY_PREFIX + '.' + RANDOM);
+    dump("random deploy is: " + 1 * rd + "\n");
+    dump("locale is: " + locale + '\n' );
+
+    // Must be good to run
+    return true;
+  },
+
+  // Wrap runOrNotFunc for newer versions of Test Pilot
+  filter: function (cb) {
+    cb(exports.experimentInfo.runOrNotFunc());
+  },
+};
+
+// Prepare to check and claim the study mutex
+let studyMutex = new BaseClasses.CurrentStudyMutex(ADDON_ID);
+
+// Define a data store as empty as possible
+exports.dataStoreInfo = {
+  fileName: "testpilot_" + exports.experimentInfo.testId + "_empty.sqlite",
+  tableName: "empty",
+  columns: [{
+    property: "empty",
+    type: BaseClasses.TYPE_STRING,
+    displayName: "empty"
+  }]
+};
+
+// Define a handler that just installs an add-on
+function Installer() Installer.baseConstructor.call(this, null)
+BaseClasses.extend(Installer, BaseClasses.GenericGlobalObserver);
+exports.handlers = new Installer();
+Installer.prototype.onExperimentStartup = function (store) {
+  Installer.superClass.onExperimentStartup.call(this, store);
+
+  // Claim the current study
+  studyMutex.claimExclusive(ADDON_ID);
+
+  // Don't use BaseClasses.AddonController, which has different
+  // assumptions!
+  AddonManager.getAllAddons(function (addons) {
+    let installed = false;
+    addons.forEach(function ({id}) {
+      // Remember that it was already installed
+      if (id === ADDON_ID) installed = true;
+    });
+    if (!installed) {
+      AddonManager.getInstallForURL(ADDON_URL, function (install) {
+        install.install();
+      }, "application/x-xpinstall");
+    }
+  });
+};
+
+// Define an empty web content as there's no data to show
+function NoData() NoData.baseConstructor.call(this, exports.experimentInfo)
+BaseClasses.extend(NoData, BaseClasses.GenericWebContent);
+NoData.prototype.__defineGetter__("dataCanvas", function () "");
+exports.webContent = new NoData();
--- a/testcases/index.json
+++ b/testcases/index.json
@@ -1,211 +1,219 @@
 {
-  "maintain_experiments": [],
+  "maintain_experiments": [], 
   "legacy": [
     {
-      "url": "https://testpilot.mozillalabs.com/testcases/searchui",
-      "summary": "What are the most used interfaces to access search engines through Firefox?",
-      "thumbnail": "https://testpilot.mozillalabs.com/testcases/search/searchbar-thumbnail.png",
-      "name": "Search",
-      "id": "8"
-    },
+      "url": "https://testpilot.mozillalabs.com/testcases/searchui", 
+      "id": "8", 
+      "thumbnail": "https://testpilot.mozillalabs.com/testcases/search/searchbar-thumbnail.png", 
+      "name": "Search", 
+      "summary": "What are the most used interfaces to access search engines through Firefox?"
+    }, 
     {
-      "url": "https://testpilot.mozillalabs.com/testcases/betaui.html",
-      "summary": "We are studying how the changes to the toolbar and menu bar in the Firefox 4 beta affect usage of the interface.",
-      "thumbnail": "http://hg.mozilla.org/labs/testpilot/raw-file/269edaf8034d/extension/skin/all/badge-default.png",
-      "name": "Firefox 4 Beta Interface",
-      "id": "100"
-    },
+      "url": "https://testpilot.mozillalabs.com/testcases/betaui.html", 
+      "id": "100", 
+      "thumbnail": "http://hg.mozilla.org/labs/testpilot/raw-file/269edaf8034d/extension/skin/all/badge-default.png", 
+      "name": "Firefox 4 Beta Interface", 
+      "summary": "We are studying how the changes to the toolbar and menu bar in the Firefox 4 beta affect usage of the interface."
+    }, 
     {
-      "url": "https://testpilot.mozillalabs.com/testcases/betaui2",
-      "summary": "We are studying how the changes to the toolbar and menu bar in the Firefox 4 beta affect usage of the interface.",
-      "thumbnail": "http://hg.mozilla.org/labs/testpilot/raw-file/269edaf8034d/extension/skin/all/badge-default.png",
-      "name": "Beta UI Survey 2",
-      "id": "101"
-    },
+      "url": "https://testpilot.mozillalabs.com/testcases/betaui2", 
+      "id": "101", 
+      "thumbnail": "http://hg.mozilla.org/labs/testpilot/raw-file/269edaf8034d/extension/skin/all/badge-default.png", 
+      "name": "Beta UI Survey 2", 
+      "summary": "We are studying how the changes to the toolbar and menu bar in the Firefox 4 beta affect usage of the interface."
+    }, 
     {
-      "url": "https://testpilot.mozillalabs.com/testcases/toolbar",
-      "summary": "We would like to have a better understanding of how Firefox's current toolbar is commonly used. How often do people click on the Back  button, how often do people switch search engines? The study data will be directly used to improve the toolbar design for Firefox 4.",
-      "thumbnail": "https://testpilot.mozillalabs.com/testcases/toolbars/toolbar-study-thumbnail.png",
-      "name": "Toolbar Study",
-      "id": "6"
-    },
+      "url": "https://testpilot.mozillalabs.com/testcases/toolbar", 
+      "id": "6", 
+      "thumbnail": "https://testpilot.mozillalabs.com/testcases/toolbars/toolbar-study-thumbnail.png", 
+      "name": "Toolbar Study", 
+      "summary": "We would like to have a better understanding of how Firefox's current toolbar is commonly used. How often do people click on the Back  button, how often do people switch search engines? The study data will be directly used to improve the toolbar design for Firefox 4."
+    }, 
     {
-      "url": "https://testpilot.mozillalabs.com/testcases/tab-open-close.html",
-      "summary": "Tabbed browsing is offered by all major web browsers. The first question we want to explore: what would be the best default browser behavior after users close or open a tab when many tabs are open?",
-      "thumbnail": "https://testpilot.mozillalabs.com/testcases/tab-open-close/tab-study-thumbnail.png",
-      "name": "Tab Open/Close Study",
-      "id": "1"
-    },
+      "url": "https://testpilot.mozillalabs.com/testcases/tab-open-close.html", 
+      "id": "1", 
+      "thumbnail": "https://testpilot.mozillalabs.com/testcases/tab-open-close/tab-study-thumbnail.png", 
+      "name": "Tab Open/Close Study", 
+      "summary": "Tabbed browsing is offered by all major web browsers. The first question we want to explore: what would be the best default browser behavior after users close or open a tab when many tabs are open?"
+    }, 
     {
-      "url": "https://testpilot.mozillalabs.com/testcases/tab-switch-study",
-      "summary": "This 5-day study aims to understand how people switch between tabs. The result of this study will help Firefox team design better ways for people to manage their tabs. ",
-      "thumbnail": "https://testpilot.mozillalabs.com/testcases/tab-open-close/tab-switch-thumbnail.png",
-      "name": "Tab Switch Study",
-      "id": "5"
-    },
+      "url": "https://testpilot.mozillalabs.com/testcases/tab-switch-study", 
+      "id": "5", 
+      "thumbnail": "https://testpilot.mozillalabs.com/testcases/tab-open-close/tab-switch-thumbnail.png", 
+      "name": "Tab Switch Study", 
+      "summary": "This 5-day study aims to understand how people switch between tabs. The result of this study will help Firefox team design better ways for people to manage their tabs. "
+    }, 
     {
-      "url": "https://testpilot.mozillalabs.com/testcases/menuitemusage",
-      "summary": "Remembering which username/password combination to use on a given site can be very frustrating. Firefox tries to help solve a part of this  problem with the Password Manager feature. Can it be more helpful? ",
-      "thumbnail": "https://testpilot.mozillalabs.com/testcases/menu-item-usage/menu-study-thumbnail.png",
-      "name": "Menu Item Usage Study",
-      "id": "4"
-    },
+      "url": "https://testpilot.mozillalabs.com/testcases/menuitemusage", 
+      "id": "4", 
+      "thumbnail": "https://testpilot.mozillalabs.com/testcases/menu-item-usage/menu-study-thumbnail.png", 
+      "name": "Menu Item Usage Study", 
+      "summary": "Remembering which username/password combination to use on a given site can be very frustrating. Firefox tries to help solve a part of this  problem with the Password Manager feature. Can it be more helpful? "
+    }, 
     {
-      "url": "https://testpilot.mozillalabs.com/testcases/account-password.html",
-      "summary": "Remembering which username/password combination to use on a given site can be very frustrating. Firefox tries to help solve a part of this  problem with the Password Manager feature. Can it be more helpful? ",
-      "thumbnail": "https://testpilot.mozillalabs.com/testcases/password-distribution/account-password-study-thumbnail.png",
-      "name": "Accounts and Passwords Study",
-      "id": "3"
-    },
+      "url": "https://testpilot.mozillalabs.com/testcases/account-password.html", 
+      "id": "3", 
+      "thumbnail": "https://testpilot.mozillalabs.com/testcases/password-distribution/account-password-study-thumbnail.png", 
+      "name": "Accounts and Passwords Study", 
+      "summary": "Remembering which username/password combination to use on a given site can be very frustrating. Firefox tries to help solve a part of this  problem with the Password Manager feature. Can it be more helpful? "
+    }, 
     {
-      "url": "https://testpilot.mozillalabs.com/testcases/account-password.html",
-      "summary": "",
-      "thumbnail": "https://testpilot.mozillalabs.com/testcases/pilot-survey-thumbnail.png",
-      "name": "Accounts and Passwords Survey",
-      "id": "account_password_survey"
-    },
+      "url": "https://testpilot.mozillalabs.com/testcases/account-password.html", 
+      "id": "account_password_survey", 
+      "thumbnail": "https://testpilot.mozillalabs.com/testcases/pilot-survey-thumbnail.png", 
+      "name": "Accounts and Passwords Survey", 
+      "summary": ""
+    }, 
     {
-      "url": "https://testpilot.mozillalabs.com/testcases/perception",
-      "summary": "The aim of this survey is to understand users' perception on their Firefox browser in general over time. We will follow up a similar survey in a month to understand the change of user perception.",
-      "thumbnail": "https://testpilot.mozillalabs.com/testcases/pilot-survey-thumbnail.png",
-      "name": "How Do You Feel About Your Firefox Browser",
-      "id": "beta_perception_survey_1"
+      "url": "https://testpilot.mozillalabs.com/testcases/perception", 
+      "id": "beta_perception_survey_1", 
+      "thumbnail": "https://testpilot.mozillalabs.com/testcases/pilot-survey-thumbnail.png", 
+      "name": "How Do You Feel About Your Firefox Browser", 
+      "summary": "The aim of this survey is to understand users' perception on their Firefox browser in general over time. We will follow up a similar survey in a month to understand the change of user perception."
     }
-  ],
+  ], 
   "new_experiments": [
     {
       "default": {
-        "hash": "c2fea1669f36ca3af16a8e19027c6944ca45a988ce9351dc8c368aa0c85e69ad",
-        "name": "Dependencies",
+        "hash": "c2fea1669f36ca3af16a8e19027c6944ca45a988ce9351dc8c368aa0c85e69ad", 
+        "name": "Dependencies", 
         "jarfile": "base_classes.jar"
       }
-    },
+    }, 
     {
       "default": {
-        "studyfile": "research_installer.js",
-        "hash": "df34c8070ddfc712d2f7ebed9408427cd13788b187f92c244be77267b10f4026",
-        "name": "Firefox Personalization Study",
+        "studyfile": "research_installer.js", 
+        "hash": "df34c8070ddfc712d2f7ebed9408427cd13788b187f92c244be77267b10f4026", 
+        "name": "Firefox Personalization Study", 
         "jarfile": "up-research/research_installer-2.jar"
       }
+    }, 
+    {
+      "default": {
+        "studyfile": "featurerecommender2.js", 
+        "hash": "5f976deb6388e5431d096931002c4e64accdea960ded989b1ef992d3fa125eba", 
+        "name": "featurerecommender2", 
+        "jarfile": "featurerecommender2/featurerecommender2.jar"
+      }
     }
-  ],
+  ], 
   "results": [
     {
-      "title": "Min and Max Tabs",
-      "url": "https://testpilot.mozillalabs.com/testcases/tab-open-close/results.html#minmax",
-      "id": "1_results_min_max",
-      "studyId": "1",
-      "date": "Thu Oct 15 2009",
-      "summary": "How many tabs do users have open at a time?",
-      "thumbnail": "https://testpilot.mozillalabs.com/testcases/tab-open-close/graphs/min-max-avg-tabs-open-thumb.png"
-    },
+      "title": "Min and Max Tabs", 
+      "url": "https://testpilot.mozillalabs.com/testcases/tab-open-close/results.html#minmax", 
+      "studyId": "1", 
+      "thumbnail": "https://testpilot.mozillalabs.com/testcases/tab-open-close/graphs/min-max-avg-tabs-open-thumb.png", 
+      "date": "Thu Oct 15 2009", 
+      "summary": "How many tabs do users have open at a time?", 
+      "id": "1_results_min_max"
+    }, 
     {
-      "title": "Tab Lifespans",
-      "url": "https://testpilot.mozillalabs.com/testcases/tab-open-close/results.html#lifespans",
-      "id": "1_results_lifespans",
-      "studyId": "1",
-      "date": "Thu Oct 15 2009",
-      "summary": "How long does an individual tab stay open on average?",
-      "thumbnail": "https://testpilot.mozillalabs.com/testcases/tab-open-close/graphs/tab-lifespans-thumb.png"
-    },
+      "title": "Tab Lifespans", 
+      "url": "https://testpilot.mozillalabs.com/testcases/tab-open-close/results.html#lifespans", 
+      "studyId": "1", 
+      "thumbnail": "https://testpilot.mozillalabs.com/testcases/tab-open-close/graphs/tab-lifespans-thumb.png", 
+      "date": "Thu Oct 15 2009", 
+      "summary": "How long does an individual tab stay open on average?", 
+      "id": "1_results_lifespans"
+    }, 
     {
-      "title": "Switching on Tab Closure",
-      "url": "https://testpilot.mozillalabs.com/testcases/tab-open-close/results.html#close-switch",
-      "id": "1_results_switch_on_close",
-      "studyId": "1",
-      "date": "Thu Oct 15 2009",
-      "summary": "When a user closes a tab, Firefox automatically switches to another tab (call it the 'default' tab). Is this default tab usually the one that the user wants or not?",
-      "thumbnail": "https://testpilot.mozillalabs.com/testcases/tab-open-close/graphs/close-switch-stats-thumb.png"
-    },
+      "title": "Switching on Tab Closure", 
+      "url": "https://testpilot.mozillalabs.com/testcases/tab-open-close/results.html#close-switch", 
+      "studyId": "1", 
+      "thumbnail": "https://testpilot.mozillalabs.com/testcases/tab-open-close/graphs/close-switch-stats-thumb.png", 
+      "date": "Thu Oct 15 2009", 
+      "summary": "When a user closes a tab, Firefox automatically switches to another tab (call it the 'default' tab). Is this default tab usually the one that the user wants or not?", 
+      "id": "1_results_switch_on_close"
+    }, 
     {
-      "title": "Bookmarks",
-      "url": "https://testpilot.mozillalabs.com/testcases/a-week-life/results.html#bookmark",
-      "id": "2_results_num_bookmarks",
-      "studyId": "2",
-      "date": "Thu Jan 14 2010",
-      "summary": "How many bookmarks do people use?",
-      "thumbnail": "https://testpilot.mozillalabs.com/testcases/a-week-life/graphs/bookmark-density.png"
-    },
+      "title": "Bookmarks", 
+      "url": "https://testpilot.mozillalabs.com/testcases/a-week-life/results.html#bookmark", 
+      "studyId": "2", 
+      "thumbnail": "https://testpilot.mozillalabs.com/testcases/a-week-life/graphs/bookmark-density.png", 
+      "date": "Thu Jan 14 2010", 
+      "summary": "How many bookmarks do people use?", 
+      "id": "2_results_num_bookmarks"
+    }, 
     {
-      "title": "Bookmark  Folders",
-      "url": "https://testpilot.mozillalabs.com/testcases/a-week-life/results.html#folder",
-      "id": "2_results_bookmark_folders",
-      "studyId": "2",
-      "date": "Thu Jan 14 2010",
-      "summary": "How many folders do people use to manage their bookmarks?",
-      "thumbnail": "https://testpilot.mozillalabs.com/testcases/a-week-life/graphs/folder-count.png"
-    },
+      "title": "Bookmark  Folders", 
+      "url": "https://testpilot.mozillalabs.com/testcases/a-week-life/results.html#folder", 
+      "studyId": "2", 
+      "thumbnail": "https://testpilot.mozillalabs.com/testcases/a-week-life/graphs/folder-count.png", 
+      "date": "Thu Jan 14 2010", 
+      "summary": "How many folders do people use to manage their bookmarks?", 
+      "id": "2_results_bookmark_folders"
+    }, 
     {
-      "title": "Bookmark Levels",
-      "url": "https://testpilot.mozillalabs.com/testcases/a-week-life/results.html#depth",
-      "id": "2_results_folder_levels",
-      "studyId": "2",
-      "date": "Thu Jan 14 2010",
-      "summary": "How deep are those folders that people use to manage their bookmarks?",
-      "thumbnail": "https://testpilot.mozillalabs.com/testcases/a-week-life/graphs/folder-depth.png"
-    },
+      "title": "Bookmark Levels", 
+      "url": "https://testpilot.mozillalabs.com/testcases/a-week-life/results.html#depth", 
+      "studyId": "2", 
+      "thumbnail": "https://testpilot.mozillalabs.com/testcases/a-week-life/graphs/folder-depth.png", 
+      "date": "Thu Jan 14 2010", 
+      "summary": "How deep are those folders that people use to manage their bookmarks?", 
+      "id": "2_results_folder_levels"
+    }, 
     {
-      "title": "Computer Sharing",
-      "url": "https://testpilot.mozillalabs.com/testcases/password-distribution/results.html#sharecomputer",
-      "id": "3_results_computer_share",
-      "studyId": "3",
-      "date": "Thu Jan 28 2010",
-      "summary": "Do people share their computer?",
-      "thumbnail": "https://testpilot.mozillalabs.com/testcases/password-distribution/graphs/sharecomputer.jpg"
-    },
+      "title": "Computer Sharing", 
+      "url": "https://testpilot.mozillalabs.com/testcases/password-distribution/results.html#sharecomputer", 
+      "studyId": "3", 
+      "thumbnail": "https://testpilot.mozillalabs.com/testcases/password-distribution/graphs/sharecomputer.jpg", 
+      "date": "Thu Jan 28 2010", 
+      "summary": "Do people share their computer?", 
+      "id": "3_results_computer_share"
+    }, 
     {
-      "title": "Password Amount",
-      "url": "https://testpilot.mozillalabs.com/testcases/password-distribution/results.html#passwordcount",
-      "id": "3_results_num_passwords",
-      "studyId": "3",
-      "date": "Thu Jan 28 2010",
-      "summary": "How many passwords do people use?",
-      "thumbnail": "https://testpilot.mozillalabs.com/testcases/password-distribution/graphs/passwordcount.png"
-    },
+      "title": "Password Amount", 
+      "url": "https://testpilot.mozillalabs.com/testcases/password-distribution/results.html#passwordcount", 
+      "studyId": "3", 
+      "thumbnail": "https://testpilot.mozillalabs.com/testcases/password-distribution/graphs/passwordcount.png", 
+      "date": "Thu Jan 28 2010", 
+      "summary": "How many passwords do people use?", 
+      "id": "3_results_num_passwords"
+    }, 
     {
-      "title": "Satisfaction: Accounts and Passwords Management",
-      "url": "https://testpilot.mozillalabs.com/testcases/password-distribution/results.html#feelhappy",
-      "id": "3_results_satisfaction",
-      "studyId": "3",
-      "date": "Thu Jan 28 2010",
-      "summary": "How happy do people feel with current ways of managing accounts and passwords?",
-      "thumbnail": "https://testpilot.mozillalabs.com/testcases/password-distribution/graphs/feelhappy.png"
-    },
+      "title": "Satisfaction: Accounts and Passwords Management", 
+      "url": "https://testpilot.mozillalabs.com/testcases/password-distribution/results.html#feelhappy", 
+      "studyId": "3", 
+      "thumbnail": "https://testpilot.mozillalabs.com/testcases/password-distribution/graphs/feelhappy.png", 
+      "date": "Thu Jan 28 2010", 
+      "summary": "How happy do people feel with current ways of managing accounts and passwords?", 
+      "id": "3_results_satisfaction"
+    }, 
     {
-      "title": "Password Reuse",
-      "url": "https://testpilot.mozillalabs.com/testcases/password-distribution/results.html#repeat",
-      "id": "3_results_password_reuse",
-      "studyId": "3",
-      "date": "Thu Jan 28 2010",
-      "summary": "Do people repeat the same password on different sites?",
-      "thumbnail": "https://testpilot.mozillalabs.com/testcases/password-distribution/graphs/repeat_pw.png"
-    },
+      "title": "Password Reuse", 
+      "url": "https://testpilot.mozillalabs.com/testcases/password-distribution/results.html#repeat", 
+      "studyId": "3", 
+      "thumbnail": "https://testpilot.mozillalabs.com/testcases/password-distribution/graphs/repeat_pw.png", 
+      "date": "Thu Jan 28 2010", 
+      "summary": "Do people repeat the same password on different sites?", 
+      "id": "3_results_password_reuse"
+    }, 
     {
-      "title": "Most Used Menu Items",
-      "url": "https://testpilot.mozillalabs.com/testcases/menu-item-usage/results.html#Q1",
-      "id": "4_results_most_used_items",
-      "studyId": "4",
-      "date": "Thu Mar 11 2010",
-      "summary": " Which menu items are the most or the least commonly used?",
-      "thumbnail": "https://testpilot.mozillalabs.com/testcases/menu-item-usage/graphs/itemid_all.png"
-    },
+      "title": "Most Used Menu Items", 
+      "url": "https://testpilot.mozillalabs.com/testcases/menu-item-usage/results.html#Q1", 
+      "studyId": "4", 
+      "thumbnail": "https://testpilot.mozillalabs.com/testcases/menu-item-usage/graphs/itemid_all.png", 
+      "date": "Thu Mar 11 2010", 
+      "summary": " Which menu items are the most or the least commonly used?", 
+      "id": "4_results_most_used_items"
+    }, 
     {
-      "title": "Most Used Menu Items by Mouse Interaction",
-      "url": "https://testpilot.mozillalabs.com/testcases/menu-item-usage/results.html#Q2",
-      "id": "4_results_most_used_mouse",
-      "studyId": "4",
-      "date": "Thu Mar 11 2010",
-      "summary": " What are most and least used Firefox menu items by only mouse interactions?",
-      "thumbnail": "https://testpilot.mozillalabs.com/testcases/menu-item-usage/graphs/menu_graphic.png"
-    },
+      "title": "Most Used Menu Items by Mouse Interaction", 
+      "url": "https://testpilot.mozillalabs.com/testcases/menu-item-usage/results.html#Q2", 
+      "studyId": "4", 
+      "thumbnail": "https://testpilot.mozillalabs.com/testcases/menu-item-usage/graphs/menu_graphic.png", 
+      "date": "Thu Mar 11 2010", 
+      "summary": " What are most and least used Firefox menu items by only mouse interactions?", 
+      "id": "4_results_most_used_mouse"
+    }, 
     {
-      "title": "Most Used Menu Items by Mouse or Keyboard Shortcut",
-      "url": "https://testpilot.mozillalabs.com/testcases/menu-item-usage/results.html#Q3",
-      "id": "4_results_most_used_keyboard",
-      "studyId": "4",
-      "date": "Thu Mar 11 2010",
-      "summary": " Which menu items are the most or the least commonly used, by mouse click or keyboard shortcut?",
-      "thumbnail": "https://testpilot.mozillalabs.com/testcases/menu-item-usage/graphs/itemid_all_mouse_ordered.png"
+      "title": "Most Used Menu Items by Mouse or Keyboard Shortcut", 
+      "url": "https://testpilot.mozillalabs.com/testcases/menu-item-usage/results.html#Q3", 
+      "studyId": "4", 
+      "thumbnail": "https://testpilot.mozillalabs.com/testcases/menu-item-usage/graphs/itemid_all_mouse_ordered.png", 
+      "date": "Thu Mar 11 2010", 
+      "summary": " Which menu items are the most or the least commonly used, by mouse click or keyboard shortcut?", 
+      "id": "4_results_most_used_keyboard"
     }
   ]
-}
+}
\ No newline at end of file