Featurerecommender study launch.
authorGregg Lind <glind@mozilla.com>
Thu, 31 Jul 2014 09:03:40 -0500
changeset 1034 e364765a0366
parent 1033 90d84dfb6ed9
child 1035 5284ac662ddb
push id865
push userglind@mozilla.com
push dateThu, 31 Jul 2014 14:03:52 +0000
Featurerecommender study launch. - Author: Kamyar Ardekani - url: https://github.com/raymak/contextualfeaturerecommender - 10% of all EN-* Launch bug: https://github.com/raymak/contextualfeaturerecommender/issues/157
testcases/featurerecommender/README.html
testcases/featurerecommender/README.md
testcases/featurerecommender/deploy-howto.md
testcases/featurerecommender/featurerecommender.jar
testcases/featurerecommender/featurerecommender.js
testcases/index.json
new file mode 100644
--- /dev/null
+++ b/testcases/featurerecommender/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,d09GRgABAAAAAAYcAA0AAAAACjQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABMAAAABwAAAAca8vGTk9TLzIAAAFMAAAARAAAAFZG1VHVY21hcAAAAZAAAAA+AAABQgAP9AdjdnQgAAAB0AAAAAQAAAAEACICiGdhc3AAAAHUAAAACAAAAAj//wADZ2x5ZgAAAdwAAADRAAABEKyikaNoZWFkAAACsAAAAC0AAAA2AtXoA2hoZWEAAALgAAAAHAAAACQHngNFaG10eAAAAvwAAAAQAAAAEAwAACJsb2NhAAADDAAAAAoAAAAKALIAVG1heHAAAAMYAAAAHwAAACABEAB2bmFtZQAAAzgAAALBAAAFu3I9x/Nwb3N0AAAF/AAAAB0AAAAvaoFvbwAAAAEAAAAAzBdyYwAAAADP2IQvAAAAAM/bz7t4nGNgZGFgnMDAysDB1Ml0hoGBoR9CM75mMGLkYGBgYmBlZsAKAtJcUxgcPsR8iGF2+O/AEMPsznAYKMwIkgMA5REMOXicY2BgYGaAYBkGRgYQsAHyGMF8FgYFIM0ChED+h5j//yEk/3KoSgZGNgYYk4GRCUgwMaACRoZhDwCs7QgGAAAAIgKIAAAAAf//AAJ4nHWMMQrCQBBF/0zWrCCIKUQsTDCL2EXMohYGSSmorScInsRGL2DOYJe0Ntp7BK+gJ1BxF1stZvjz/v8DRghQzEc4kIgKwiAppcA9LtzKLSkdNhKFY3HF4lK69ExKslx7Xa+vPRVS43G98vG1DnkDMIBUgFN0MDXflU8tbaZOUkXUH0+U27RoRpOIyCKjbMCVejwypzJJG4jIwb43rfl6wbwanocrJm9XFYfskuVC5K/TPyczNU7b84CXcbxks1Un6H6tLH9vf2LRnn8Ax7A5WQAAAHicY2BkYGAA4teL1+yI57f5ysDNwgAC529f0kOmWRiYVgEpDgYmEA8AUzEKsQAAAHicY2BkYGB2+O/AEMPCAAJAkpEBFbAAADgKAe0EAAAiAAAAAAQAAAAEAAAAAAAAKgAqACoAiAAAeJxjYGRgYGBhsGFgYgABEMkFhAwM/xn0QAIAD6YBhwB4nI1Ty07cMBS9QwKlQapQW3VXySvEqDCZGbGaHULiIQ1FKgjWMxknMfLEke2A+IJu+wntrt/QbVf9gG75jK577Lg8K1qQPCfnnnt8fX1NRC/pmjrk/zprC+8D7tBy9DHgBXoWfQ44Av8t4Bj4Z8CLtBL9CniJluPXASf0Lm4CXqFX8Q84dOLnMB17N4c7tBo1AS/Qi+hTwBH4rwHHwN8DXqQ30XXAS7QaLwSc0Gn8NuAVWou/gFmnjLrEaEh9GmDdDGgL3B4JsrRPDU2hTOiMSuJUIdKQQayiAth69r6akSSFqIJuA19TrzCIaY8sIoxyrNIrL//pw7A2iMygkX5vDj+G+kuoLdX4GlGK/8Lnlz6/h9MpmoO9rafrz7ILXEHHaAx95s9lsI7AHNMBWEZHULnfAXwG9/ZqdzLI08iuwRloXE8kfhXYAvE23+23DU3t626rbs8/8adv+9DWknsHp3E17oCf+Z48rvEQNZ78paYM38qfk3v/u3l3u3GXN2Dmvmvpf1Srwk3pB/VSsp512bA/GG5i2WJ7wu430yQ5K3nFGiOqgtmSB5pJVSizwaacmUZzZhXLlZTq8qGGFY2YcSkqbth6aW1tRmlaCFs2016m5qn36SbJrqosG4uMV4aP2PHBmB3tjtmgN2izkGQyLWprekbIntJFing32a5rKWCN/SdSoga45EJykyQ7asZvHQ8PTm6cslIpwyeyjbVltNikc2HTR7YKh9LBl9DADC0U/jLcBZDKrMhUBfQBvXRzLtFtjU9eNHKin0x5InTqb8lNpfKv1s1xHzTXRqgKzek/mb7nB8RZTCDhGEX3kK/8Q75AmUM/eLkfA+0Hi908Kx4eNsMgudg5GLdRD7a84npi+YxNr5i5KIbW5izXas7cHXIMAau1OueZhfj+cOcP3P8MNIWLyYOBuxL6DRylJ4cAAAB4nGNgYoAALjDJyIAOWMCiTIxMLDmZedkABtIBygAAAA==) 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/featurerecommender/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/featurerecommender/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..dc4cadc8286854f0cc12953eae6d41d38f378223
GIT binary patch
literal 7876
zc$|HCbyOVPv+WREgOea3K>`d80|X21LvVL@CfH!X-Q7L7yNAKuA-KB}B)HvtZ@qQj
zm)~3Wp0nzY?moNfba$<;-L>Uq;1TcvD1Rok#EU54Ujr3@0FV_^7Gjk8BF_9g1OUJT
z<Ykai{<-w(|1OdLAHn#4?7zXXLSLlB#gvqpWW_IKM~1;Nj7*c5GK|2nk?~qZmY?kF
zJN8V{vJ6tPlTIZFsL2O!d(u*X=AQ`hxATB5yVOS(7xw4&aQ`Q|m&B)jzCXVC{)&Dg
z{&#frKc*-qBq}S$WbSBVJ*sJ8za<HM)+-!P=yg=77sUZMOXst8=x9^LYDz}-<AekN
zf>i|V%lETBcRXhD&Le-FZ?yB@BlJuG&?-{3w(J~W#eF~-7-`%czJY-^?_bZf4t3wc
z0x>q{x#rGQx(`R|b8*7);gNI1VVR?YAQisWW~{-*S=%Xr?=5?=*iXsNXL3qSGP2d*
zJs!N}AJ>zwTf+GQl0)|b>5hScMA|}LZ)i<GuaC!pADeziSD(v3c-o{zS*6t2u<E~E
z3-3rr_%KORJcJV{Y|rbM%o6p&ZrRC;S*wuw-KI^VWZYD~+D*DtNx#mJMSpixW+ljc
zCFSR3`8fh{Ret}{pOw2X-b3dHbI2jsX#*>h5;OTMRoy~mB+!!f?fv{W<Cf}Y4W2gq
zQapo%G<jgcP^F@RVtE@U<MQRlai=h>*KcvQfWgMwA--@P94^QE;q*tpxOCdo`Y|)7
z_b&~ba}k!+Y(+Ho-zrNc4BqVLGeR{tmHfCseR;g5kBMNZ;*Zk4$3F-C?HA+~$PV}J
z`KE#8Q*HU_2MYOz7Is!wuiUQ!euU>ujf*SJ8C`3)5otalS{)bc$od$sh|6Vx4qKMW
zLyxL}=Q?TZKLWQgr4wvF>^YK<SuIEZuBKdw!*--@9NLmrJM9*lwEh`z*;=Q5v>HUB
zM%vgqoS5(2yPQ4SMv^k54roCl?2kn}XFUxvbXeJ+4Ri9)hB!5cDwJlDa3}jYjY^v>
zu401@4z{WjY%qXP_cdX?Lmg>vW=yCVeqSM}wB|QzfnO|$!LZSm(LLKna^?G2WjTkm
zy=+B`dh&-2k@_hd%iIdHaFXtvEku$0oj^ZviK5jA2uFp)qwmkpa}ZYxl|2zQjS<cR
zv1*=)i06U=V@B*ckl319k7AJZVn$B>bvV=`-D0*D%BxpWzL?Vn3_rWu^gIKNm=aT?
zXu%FOXKZEMejf2xXpzaD^i#x~Z=X&Q^K&*|O60JdAwBC@=~#?!+wMrEG0r{jUN^*K
z)F;|=;(<>d6?F~glzg=cK_yXzIUHUk+lvQ55A`(%{Dj+v4Qz_r2?Q5Wwy+eM3{wkM
z0v`A|#?VsVWcPyVDdXp$X1rd8NuI~MmIQjR151BfK9j1wu*Hyu^VnqvslWk8I~uz-
zUfAYV!7SFF*KZtYFt{9=s26w0hDqJVXi196qO`1IbzWE=#%$PYl(BeX$ytCi5gm?g
zXoJ!GeYXBEu<5u!jcJZZ%aB7LF+4xsN$asYm7Z3|Lj90=2}=I(v^O$s&aeGbw<JMI
z#CCnxsNeeP&P^+e-&rkjDFbSm_%V2|eCh6PiW*MpW~b0X3W9H63$2jf-|yvonQE^D
z>&#L29t8iw1X`@6Aga1;AtziK)(hr26)*nGkGbJHF{|DDE?G0hz)PpfBYGGQtZ=m&
z|0S{cb;yY{**odJXr9@0rZsXY;Z~Tr6o4K@6m$S{wdG^TH|134OdHm%=5aePYr=^p
zyl<){1!{LQUhi&B*K)}nIrV2a`4U&W%@0&kDaCAyi>YZeU}>uSjMmqku|PHkA=k2O
zUF)|}q7sMUZ&!1W&gymO#xV0Eq)DSkg&7QMmHX+^@8?ZF*StqFbuQP+UH;C)3rW{<
zsLYM5!EBxULd09qHdq*;IOqJMRnfb!vtZ&d+;a3Ip<2GSdQG>gko9%Tl!MKyQ)uC)
z`2uY|4fA2a^k(SpH}0x7g>rM*h)H$rpZ+7w(Z!!lC3Odo?bX3V)h(ZxRk9eltnX8Z
z_0E9Pmr@OH7%ZPw^W=Y@H>J_Rz~v(p{NwW}t_7@zs48X~43BgI7>TNVNmFv&6XWN;
z3<V?+>2!Q+go&5dfm$~XC*fL<WM^g`yFkUUb`RpzH0r+4%TEj7aE1O%z90B{#1Z%E
zZ|Fsi#E{xI%rY@ZNz@K=I?i2bZZ=IXMD93U&b!2+s~$s}?i(;VZpFZn;M^Mo2P2OA
zqp@0Y^TcKQL7NrFt8i}zp@-%vnb$Kpg<IAY(AI|8r&m}sVW#aaFYDV06SjB5^$nSW
za-0V#i4-7mqyW1mS|_SjWr9+IQ&#>X+Nr!ntd_o9(1}dgr2g~=CpLEmi#F3G$7Yp^
zozFi8#9H^{me4<MtBsC!o1cAe<VsC|Zu`;`Ajbts&zS!de~WI~pf?aQX2ezQR95UV
z#xaVkW?fmM$$Wh1pfb+EbC|8!(OY(uwzs9iJdn~1mGK-)NyEWHmv;Dh80s>%Hd-IT
znvp^8Jmj$pn?I?~<UKmi0O>hh%ycfoMyJpis_$6?*=AEzAaji8r_EZd<eH_ng@<6!
z3@-Il>};8^=hHo+x5T>s#T{NRZWc`2<MyB%S&%Nau!2r9rvu3&Y(mQ1wvKI+`!q^z
zK+8Ouu+0Q*Lb?bc(?&1nr(zsqTwZWPC{ke+Pg)RFjuiLC;OA(dpJb>%{`j@;MSmHZ
z-p(N=$kJRlJMH$>iV+Fk^cB-Y;WnYuy6`OQ`rs9RawMTJ`9qZ3A}%H$a%&co_uA=R
znFW%1VUNghV9|#Ro$T6;?g0=eZuR-b>uKrbaj*U53G#A(^Kwhi7o@5GrICj<=*+kM
zJ7dFvC0+Iurs6KML#hagNtwFa`lwF*qg}})vyDzFkadWb<h4CZ^0uPfExrF<Pj19#
zRTY$DwxO>$UJK~TjNS??w7;#D#K=`t^7&WO<u@i0Hk#&EEn+<5P!ZSEF`%1}>Yzyp
zrb^upoRlR6E^wbF9fm9REFC|8UC566!K=wj8qon_%-*CV#u#wQp%x`Cd_(k!=`hu8
zi0|>bgpn0YRQ&EkY76DBS8Z$ySSF;O<A>?`m-2*1XYqlgoA&+fK1^HV!c5LWFHPvD
zY?nJg1;4FN`tnTeY4~;S?PuROgH%j6TJa?Z4j4EMf^rZgjhB4QzZ}Ht5|{BWGUj!d
z5iV*-@s0mN!oDGPpwmk0!Udz+h4%_2p{e8Ne*0N6;ukIM{VRoOa^AM*MwmU-i$SDm
z6gA9h2E&6yL_FF?uG$>^{83$>DkKd5LyyBeygI@C{K_;r^->O-y@hQ}oEP7|gSAy%
z>jgG@f@}g&Uu)jPIUligRq}5@r3m5@c!f%D)Ig;lPe!a|F|ju!^US3`Mx2;CC=O4I
z$G@Y~(ok7|EMFse-CkB~ZIw#W@taFspy$E9WR71k?J#kCP%t`}KO<J|g>T1xh-PSD
z-H7M0lrF$o$#hjV#e>V_bS3`oM$xmQ228nqvKV&R!5>&cpueV1w-V%IhqJ*!GnU9w
zvZJqKL<yEK8y@N`RaW*;U+_pHFgIuChMCm{`>SLNKPSkVV0k&BsKcXUFVR`2@rafg
zm6ViIt9%@i1Lt+>z3B>wX=bS*5<l%4fXs1}@iwUDns_)x7hTU?nivRdAP}qAbc%i~
zYd<+hOta=do8aH4s45}VN|&ygNOP0+bI3Z3HVqP;&OW2IU^htd`!Q(f6s3TGrcMR3
zAlkfM_H<uPU9;L@l2PClu>g&Ke_p1X1l9g{5GHrN^vd*rMk6(*9p(0<hn!0ro28c(
zckLUMtA>@CyekyC`#7F!TtSPwh+5=NLjQ{QbN3s)j7)^xNk*#BE?4xxh8+Hm;Q=>O
zE-mf4Oks2JeCAohAc$<<8W|;gS?Xm~ddS8MmSQQ<fiqEn9ZKK_s7Vf1S`_-%N;EYY
zRX8HU{xv)9?^PR&j$#C~T2&Q*#7rl!MwtEQL$?a#ftu20PVa?KuGipDUs7|V+W0o<
z`bzFl6|?+9m$~y<GSIjVVHhOG63Dta^ID?AEMHMdyOTkWSUyt`Y$B;9gy6VVm!BA2
ztB!nT^cq{lC$JpfX5O!jkEk`(?XBS{2LiO<m9I}|RM4^LszFCE&?P<}o0z4fxv8g;
zam|y4yuGA1kudCZ`?Ti^pw27T8sD6k@Dy8oxoO)AB*fc8XNarCJJ6%h#~1Guf?5s^
z35#tSm<^*C&p=7FY-5tV!V`*<e<!WjvD|1cef8}}WF(?lxoQ#{%{EnhkUao7mW!T)
zCO!{OIM0&N*&gxFNnz#VL(M9h0!@SfV4-!f%y+6x>_09-?QZb+@70a7ZpwE3*^sc9
z$~zULe7413jn7PmP&{<{dt9#CA~j@APtE88`FtGdxcw`fB*)uwq7w0*F!RH~ujWOX
zd2+sdDg=%{Jt>6=|M{#wboiQvh{)S{L-v2s4PJ9@4h?C9%9L;q7&X%XjVG9T$jE;d
zx2hQGT^h^06K_WtJwe}IsFY$V9@LKCw8pzLDI%fDe^XEn^W~3p(#0j!1Z?Gy*ObGr
z9A}1rC%2;2%*e4gb-cb5B{l>}r3|(4G;o0zlTYp>852lfhfpGQuanhVc=}eJg&Mu9
zvX<Bo-(TTOnx3z(CVy49eR}v)XrMYeDoR^Wx+e+2B<W2Ii2(X(Qd^UIekj%#T7r0}
z;c<LoBU__JvaRf06O}?3P(D@=?e@0ZE@`O2YHeO;Kvc$5v3+y;`*wPGQ4;7K9GSQ6
zp$UR;q{GL<ag|;rkoWN5o@gJDsKb}v0OyB*+t&qK?r@z<Ap~LQ=UNeRDALCAIKdx)
z@-BMXub8f(bTs<Z@KliZ$AhQ0{#(W`IQqn|Kl$J_Dbf1y`r<TEhIfz_{D!-jCnuzX
ze%tnO90H9|(*%iP+=zQf<o>dFMZdlsUyE|rK6?BzUTmcKRMX7+`S<>IZ-Xb~`Z~x%
zuJo5BUVc?YL27ba(Rvl{c>Ub(GQDYSe;oo3X!d(5i3PDDT)j<Hl{xpNdFyxrp95xn
z<pCl&wxM<tgwv4D<tPX?0%{dHHwbXnl9a!R&%DF}tu(S+MCghp9BPBQQQ+R>_>E;n
zTF~8=`JZOgTFces3O^EG#={p#tX3Af3wU*5bw`n1!)yoR6r-@0N+3}R(1zXRgG-Fv
zWc9JE2*I@H{P05m3>90s;<1T6b_5c?b#}5d#0(GaFgj!ITlOXWM+O3tY7wXf((jQh
zT<spkmz|>p3}%*|;Dfk}1wAY`flM+y9CqV;;~U!TeXJbi7B~0R(J$KH%B+gbmCy!e
z^ZNB%Hc~8m(!2?eSx$JjzOz;ubcAjQo!t@*V6R8L!*}(82u^h28dI-ni8oq*jAP|x
zOS$5u@Vft+5xL6RVu}TO`?JTg5t<R1Sus61ECterRA9bKIh<oxhmN>ne^tVa<F=lF
zN8#(A)aKxMo>qksCZB=FY%5spt8+d0jrNwS=akw*k-twP*WMfj<9EO|=4$<_1pK1W
z!Rc&Zm6_#AGpb~(-?H@Nt^MZN^s*1@<S>ioV(C1%5((n$&P=4DhM9HT^!~MPO`Hh3
z^<Pf`(K=c7l2aM;EgsK|BX7h<goNPme?xlm3Ed(C4J!j3Y4VOVC6&SszRw@%N55FU
zw*EocATb)^j%O9yzt;68=9~!<ao4G80H;@9UE2qTYk;aX&w;c5mhQ4!B9mU{>8x70
z>3btLlyQna%S`QE1@~+Rfo{J7uI_px<~PEMyJIWz+%3cnMm4AjNMoqIj{ObFxUDBS
z_fMs2GbZ`DrQ|ARUrcvNC3O_8Xu@Umf%jDqR?w2fbccgH<%DC#vu+V=+#`kTWL_}S
z=w?}9!l}I+<B&6uQ<D?QN^Hr~aB{;<smMg!1zEvUf|XoET@3&F7};Vjz;WxtHH{z3
z_P%gp(E%t$8ZI-{YtRpg`E*K2SM*k9!8H2hH?jY%0e8l%fyRi*e88szKqZ-V{#N{_
zerP&-V}K<5hhMq5JSTT{7W%tX{XwE&1wNfRz=TrgvMf$_-mhMN8ku9}yf5FLWrAJ^
z+0QX*6e!%&GJ=ByIXyNgMU}6!8t{IXebA_twSh|$k(NHen#2X*b`{zB3atVU;S^2Y
zz0yRCE?101$hPs;mR0JOQHBGH0tP2ldnQQTtS1#ph(ZE3gM5DR7;?^lNR)jJZ7bn`
zW2gb6026@y6#1yZ4<Gm|+#F=-hfp!VY^P`HY5*-lKD;$0daUIDn+z%Lhl_%asAMIj
zkZgoRxEIPbBeMg+*f(8nLJzd6k7>XHNTfTbhaVu^IK}-4BzX{BWgKxI%-!L5P^#t4
zy25dc^ZvHzNopfX4pc1BaaRQ#@y-ZUymiH~XjORy$`iN@v_8=*qzq0rt*m=t{-@XE
z=io!jjtc<nGyQM9Ce;7eYqBv`Q5?2i62$m%M2~bnQ~k?la#k{J)*KyQHZ0vDEVf}a
zsAH#36$XnpCK-^TXEOW5zKjSxe`Xcisoe~b3S;rS{1DJl{n3eTbGX^e?z*zHM3do6
zTloFk5=-~Z^jEnlcCI1Xi;1=Nm_&BT7BnLb=1JQ*C8sc@H<DEesZsc3oc+aTba`BR
z{N>iagIcLQ$J#$Kw>C^$Bb$WCq^Cpo=WooZ5Wf-FYCV3f?kl*uc9lS=xgS%a;&YH$
zHQKsxbeZFPxTiiKC&ynKQIca+Qz=~B3%Y8lPcac_s0auY?7!;O`ryUNJU62Lu_h@J
zzm4v=A5>ur5|Z|ZGKnx2MX6kM&DT0V4ykg22N~YdgrarD;n_~P!dORgjAc99-sUS<
z^nbxlIr`C+n~Y7gRE_qQy?bqCUZv1A)5bsCIeC!S6hdrW?x}95htJyUPNYZ28)x`L
zCe`-pIb0pa57#u|{!Z@gf+)HxDdRPtm`4aTB}ZRjg<a4c=H%yv;LpWy8A27}1xwa<
zULUFb+#w_^&eOIK)`ck>C--;VDe0~ARH!KU$noZbQGJ!;*j>-K0lhY*j%=_InB4ba
zja{1-DfD7fr8Dw>5@4uxXLJY-06>HP-xA>UA2T-jY7KE^G>14lLjI(INjNW77Ynwi
zdzK-VHz}MBF&dUo2<J7AhNSiIDxjG^MARqV(o@bTl5j4b2;ptBFomPO3*9j&0Wp>3
zw-<NbtDO>!zC0HPGmHuAh}@xiR4@;b?m0-7l%L4x3!zU7Ma9bc3`Lx~;`mACXHw&Y
zD371`UT08GuSr_iij8Z9AFEjyNr>-v2`0K=UD!Xjg5sM#8~JCW^Z#q#l;Dq<nix1b
z*_+s#7(r}oOl*x!?3pYbBGe2ZTb#I0r+Tb2N%O6d=_@uqr4fjSi(f3?S7Y+JpKQ9B
zP2k!%(1&QohMq88tUX9d*ZdeI2m^#jj(rVehpd9#D);S}LFL9d6kjOcI<zDJsgDl~
zFGC~(!>MZbjGLr62Ftbh1_Z=nSv2v}L`50h#BL}yQ+9RS&<<=|@TMGP!YNX+EHirf
z$&w4e#GwJ4($;9*Mm#9BK>!9@v98wZny8xWU=u2?K-9;<Ppl&DMi-uyNp4Fy%B}BC
zk2^J)^VHf@OK%S2R>MXnRDm&95x{l1k12~+jSQ2vozu(dLzK@8&+%aqEXX;{diB9&
zelc{f!x(m#E_i{;_9aZqw5}7{Gn!(m=I`cY;MzuhuR-ZdBr23&g3_3JA46#BomneM
zqcxMVg4$Tj<e(wT9h%cw-~zr<^4`}t!^3!@g>u)m;lXOqu&k8bTz`vEjy9TJ0V3gZ
zXtpd))+`BW1*I3U=ai5c;N%^4j7@Ka{J@K@lo4*siDt}5UCzUuxr=}XGmUfH+E=}f
zT75wTGF$e<bj|!_`%fg}<g;6Yo1V{hZR%fa3w58(z2Cs4OnkMmkCDXd<CEJ)jbfKc
z>}4bHvM0b`vaM+m^DJ-L1&g_-d+yK_(&cHyepLZt^>5u-^OI@KFq$FRhf1&oWF(hn
zAuP|IL}1aIZxnGJIteiRDz6F1MnW3LN&=!TnU~HQ*<sYLu9a(NIYl-L7P+-eGIuYm
z_`ln$Qy(LWqkdx3<8RPJ<&regrec!Q%S0|$zzGE<4b{Q(EzJPa=jm4Icicp*u6<0b
z`w6C!kX8;u#~O<&o7{xqj@pYg^<W_8Uy9TZ7<<w}`T^wSaAcdzYF!_{rrP9Rk)t%o
zW%WHlUVAnwr&h;{oXnO^UX)4Dqc3Sr5I<zcJ~!qKWQuw}$Y>lg(sZA9Q!S@~gx;re
zr;gdi6m6{Z#EQfefHU-MT?9pyzU-*9gw?KK5q4N-GwBZi_H!J5htP-JXvEkGzWv>I
z+8bbqlm>M*u)W^cFcUQNl-U}zY)KEd;CpQH6$jSz_qIQ&d|j8l<@~l+(cgIj+4FPe
z+K5<6;_j;by%S00GHbpe*o;duM?L2}Xivmw;;RpPP@98P<*wbrmgUt4yXHM7nTMy`
zUMFk6jdd~Wx(J<bmQVNr{YiLo;GH}j#Wg1YLq*+C2nQ`)=yWQBt&zthHuCqeB-Gun
zVT23Xqj}AYH7Jk{2nmO!vvgJ`oI`YE0_6sA<fdA~LUi5Qw)$A6X<}y?Qr@ENO(!v0
zE`QW>705R*aJ!y<Y+sph9bO`ooxH<m$=z0^k9^WZo}OVmVI)C6P>F&v@hgq~@Bp&{
zj#KqcD8vb+eloKdk?=&npS?mI_j?#^yq2kOrRiOh{XH-CXK4d2?%k7hFSs^X_9hb|
z#r`L08}}86tB(_Q^^3%wF4e`HBZ2NlqX0u&co=?#t4mCwBN)Gf3Slj~y?e?E&2!ur
z{f<pALBHAGXRVgL=BWtdN(9c)`qN2X_=%%$UITGd?I=Wk3+bXA=v^H`&PzUDfvO%)
zeSnlE;U7+z$d(<X(KAoMPszBbY!}XXl61git!d%RlTR`ZOQHzot|gO>g(vy&**}q9
zajuR}nE%j*XKY?n(|U;HiI<c>x^urIk$Y=~gygck$_TG_B)cWt-vC3;_OY6ry8yEq
zj;}OHy*Yuv>a2lmKpL&$z|qFx&;R}}*VSF<2}Z!ZgRfLyEokXyQnN@S$zYx&yYZvI
z=eh>BCbmNK542hK`yB9Rw|1-=mG6?K7cz)CB~xgQ9Su4IU)oh}kAjbJoJWvQcmjvy
z2*F+B=)`Y7fX=K^>JNX+)glxXJY$_Sfod*&fD{Of2+DB{WQMGf1X5ELSXw!0j+@Z(
zl{S~b3`SR+m1ZFun9v4%{D2|B)|8IU_w0@FY$qs+5BpRgUHn4c*w7G*NhoQF87VJ=
z3vJen6CA<bq|E*3p6iv6hE^^yEJh+Ps5~ue{HJBW$9`J6I+sl%NvEW6oh87IPEW5a
zS#WjrXgAVmV<dkEN!UrEmX$8~#e3`ro+mOWlj#TSc^0YVMB6OC_5Qk&Y@6nUH|vQA
zB#--uA}oFWVh??odZLftKB~G@Z__nKtZYfYxf#cj!8fBly1!Ojy=d|-zWH^uQRlEB
z+-oTKHSXRjruLvROY0-SOP_(c&D@q%Bb?7g;w72#0@iT*$yCt}Gup(=1i?!B6tAw)
zw<}=+4}r!XNqPjDsx_lNkVjGk$M;kbv&T)Sjzu>YUn`nYNR7yMb_Je`XLWaTh)T!x
zt_=^KhPWtyk-t+Q=AWB(BWp!ovGa?p(rtu4x(+sx10%15DNvyhJGmD@80j0`=CZGd
z{;8(^vdPHk$N+%z>wl^#+$(&*-zw;<|K^4WfWOCIg6e-l|1ECf{{`d!ALP`3d-$iA
z|C_R+|K*|eZ%On&f&ZpDsDA-z@czYb{}c9aTJicX7%jp7$BO<F{O_ko@E7=!;D6vD
W@-m1>|13cIGj0BCSBUJNqyGY5@sD2s
new file mode 100644
--- /dev/null
+++ b/testcases/featurerecommender/featurerecommender.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/featurerecommender-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/featurerecommender/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: 38,
+    maxRoll: 48,
+    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",
-      "thumbnail": "https://testpilot.mozillalabs.com/testcases/search/searchbar-thumbnail.png",
-      "id": "8",
-      "name": "Search",
-      "summary": "What are the most used interfaces to access search engines through Firefox?"
-    },
+      "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/betaui.html",
-      "thumbnail": "http://hg.mozilla.org/labs/testpilot/raw-file/269edaf8034d/extension/skin/all/badge-default.png",
-      "id": "100",
-      "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/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/betaui2",
-      "thumbnail": "http://hg.mozilla.org/labs/testpilot/raw-file/269edaf8034d/extension/skin/all/badge-default.png",
-      "id": "101",
-      "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/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/toolbar",
-      "thumbnail": "https://testpilot.mozillalabs.com/testcases/toolbars/toolbar-study-thumbnail.png",
-      "id": "6",
-      "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/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/tab-open-close.html",
-      "thumbnail": "https://testpilot.mozillalabs.com/testcases/tab-open-close/tab-study-thumbnail.png",
-      "id": "1",
-      "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-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-switch-study",
-      "thumbnail": "https://testpilot.mozillalabs.com/testcases/tab-open-close/tab-switch-thumbnail.png",
-      "id": "5",
-      "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/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/menuitemusage",
-      "thumbnail": "https://testpilot.mozillalabs.com/testcases/menu-item-usage/menu-study-thumbnail.png",
-      "id": "4",
-      "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/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/account-password.html",
-      "thumbnail": "https://testpilot.mozillalabs.com/testcases/password-distribution/account-password-study-thumbnail.png",
-      "id": "3",
-      "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": "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",
-      "thumbnail": "https://testpilot.mozillalabs.com/testcases/pilot-survey-thumbnail.png",
-      "id": "account_password_survey",
-      "name": "Accounts and Passwords Survey",
-      "summary": ""
-    },
+      "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/perception",
-      "thumbnail": "https://testpilot.mozillalabs.com/testcases/pilot-survey-thumbnail.png",
-      "id": "beta_perception_survey_1",
-      "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."
+      "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"
     }
-  ],
+  ], 
   "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": "featurerecommender.js", 
+        "hash": "58a19f90927634efd9ac3a2a6933675535f1de1bf395d43cd1eaafc16c55e2c1", 
+        "name": "featurerecommender", 
+        "jarfile": "featurerecommender/featurerecommender.jar"
+      }
     }
-  ],
+  ], 
   "results": [
     {
-      "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": "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": "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": "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": "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": "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": "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": "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": "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  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 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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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", 
+      "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 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 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 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"
+      "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"
     }
   ]
-}
+}
\ No newline at end of file