[pypy-svn] r71441 - in codespeed: pyspeed/codespeed pyspeed/media/css pyspeed/media/images pyspeed/templates tools

tobami at codespeak.net tobami at codespeak.net
Tue Feb 23 21:40:18 CET 2010


Author: tobami
Date: Tue Feb 23 21:40:16 2010
New Revision: 71441

Added:
   codespeed/pyspeed/media/css/main.css
      - copied, changed from r71429, codespeed/pyspeed/media/css/main5.css
   codespeed/pyspeed/media/images/pypy_logo.png   (contents, props changed)
Removed:
   codespeed/pyspeed/media/css/main2.css
   codespeed/pyspeed/media/css/main5.css
   codespeed/pyspeed/media/images/logo-pypy.png
Modified:
   codespeed/pyspeed/codespeed/tests.py
   codespeed/pyspeed/templates/base.html
   codespeed/tools/test.py
Log:
brighter style, smaller logo for more space

Modified: codespeed/pyspeed/codespeed/tests.py
==============================================================================
--- codespeed/pyspeed/codespeed/tests.py	(original)
+++ codespeed/pyspeed/codespeed/tests.py	Tue Feb 23 21:40:16 2010
@@ -9,7 +9,7 @@
     def setUp(self):
         self.path = reverse('pyspeed.codespeed.views.addresult')
         self.client = Client()
-        self.e = Environment(name='Dual Core Linux', cpu='Core 2 Duo 8200')
+        self.e = Environment(name='bigdog', cpu='Core 2 Duo 8200')
         self.e.save()
         self.cdate = datetime.today()
         self.data = {
@@ -18,7 +18,7 @@
                 'interpreter_name': 'pypy-c',
                 'interpreter_coptions': 'gc=Böhm',
                 'benchmark_name': 'Richards',
-                'environment': 'Dual Core Linux',
+                'environment': 'bigdog',
                 'result_value': 456,
                 'result_date': self.cdate,
         }        
@@ -29,7 +29,7 @@
         response = self.client.post(self.path, self.data)
         self.assertEquals(response.status_code, 200)
         self.assertEquals(response.content, "Result data saved succesfully")
-        e = Environment.objects.get(name='Dual Core Linux')        
+        e = Environment.objects.get(name='bigdog')        
         b = Benchmark.objects.get(name='Richards')
         r = Revision.objects.get(number='23232', project='pypy')
         i = Interpreter.objects.get(name='pypy-c', coptions='gc=Böhm')
@@ -46,12 +46,12 @@
         """
         Add result associated with non-existing environment
         """
-        no_name = 'Dual Core Linux1'
-        self.data['environment'] = no_name
+        bad_name = 'bigdog1'
+        self.data['environment'] = bad_name
         response = self.client.post(self.path, self.data)
         self.assertEquals(response.status_code, 404)
-        self.assertEquals(response.content, "Environment " + no_name + " not found")
-        self.data['environment'] = 'Dual Core Linux'
+        self.assertEquals(response.content, "Environment " + bad_name + " not found")
+        self.data['environment'] = 'bigdog'
     
     def test_empty_argument(self):
         """

Copied: codespeed/pyspeed/media/css/main.css (from r71429, codespeed/pyspeed/media/css/main5.css)
==============================================================================
--- codespeed/pyspeed/media/css/main5.css	(original)
+++ codespeed/pyspeed/media/css/main.css	Tue Feb 23 21:40:16 2010
@@ -8,18 +8,21 @@
 
 h1 { margin: 0; font-style: italic; }
 div#containter { width: 68em; margin-left: auto; margin-right: auto; }
-div#header { width: 100%; margin: 0; margin-bottom: 0.8em; float:left; }
+/* div#header { width: 100%; margin: 0; margin-bottom: 0.8em; padding: 0.8em; float:left; } */
 div#title {
     width: 100%;
     float: left;
-    background-color: #EAEAEA; color: #000000;
+    margin-bottom: 0.8em;
+    padding: 0.2em;
+    background-color: #F1F1F1;
+    color: #000000;
     -moz-border-radius-bottomleft: 12px;
     -moz-border-radius-bottomright: 12px;
     -webkit-border-radius-bottomleft: 12px;
     -webkit-border-radius-bottomright: 12px;
 }
 div#title img { float: left; }
-div#title h1 { float: left; margin-top: 23px; }
+div#title h1 { float: left; margin-top: 19px; }
 
 div#wrapper { width: 100%; margin: 0; margin-bottom: 0.8em; float:left; }
 
@@ -30,10 +33,11 @@
     display: inline-block;
     margin-left: 0.5em;
 }
+
 div#tabs ul li a:link, div#tabs ul li a:visited {
     display: block;
     text-decoration: none;
-    background-color: #F5F5F5;
+    background-color: #DADADA;
     color: #888888;
     padding: 1em;
     padding-top: 0.6em;
@@ -43,12 +47,24 @@
     -webkit-border-radius-topleft: 20px;
     -webkit-border-radius-topright: 20px;
 }
+
 div#tabs ul li a.current {
-    background-color: #EAEAEA;
+    background-color: #F1F1F1;
     color: #000000;
     font-weight: bold;
 }
-div#tabs ul li a:hover { background-color: #EAEAEA; color: #2D2F32; }
+
+div#tabs ul li a:hover { background-color: #F1F1F1; color: #2D2F32; }
+
+
+div#workarea {
+    float: left;
+    width: 98%;
+    background-color: #F1F1F1;
+    padding: 0.8em;
+    -moz-border-radius: 12px;
+    -webkit-border-radius: 12px;
+}
 
 div#configbar {
     width: 51em;
@@ -61,12 +77,7 @@
     -moz-border-radius: 12px;
     -webkit-border-radius: 12px;
 }
-div#workarea {
-    float: left; width: 97.9%;
-    background-color: #EAEAEA; padding: 0.8em;
-    -moz-border-radius: 12px;
-    -webkit-border-radius: 12px;
-}
+
 div#sidebar {
 /*     border: 1px dashed red; */
     float: left;
@@ -74,6 +85,7 @@
     -moz-border-radius: 12px;
     -webkit-border-radius: 12px;
 }
+
 div#content {
     width: 51em;
     float: right;
@@ -112,7 +124,7 @@
 }
 .boxbody {
 /*     background: url(sbbody-l.gif) no-repeat bottom left; */
-/*     background-color: #EAEAEA; */
+/*     background-color: #F1F1F1; */
     -moz-border-radius-bottomleft: 12px;
     -moz-border-radius-bottomright: 12px;
     -webkit-border-radius-bottomleft: 12px;
@@ -224,4 +236,4 @@
     content: " ";
     clear: both;
     height: 0;
-    }
+}

Added: codespeed/pyspeed/media/images/pypy_logo.png
==============================================================================
Binary file. No diff available.

Modified: codespeed/pyspeed/templates/base.html
==============================================================================
--- codespeed/pyspeed/templates/base.html	(original)
+++ codespeed/pyspeed/templates/base.html	Tue Feb 23 21:40:16 2010
@@ -6,8 +6,7 @@
 
 <!--   <link href="/media/css/main2.css" rel="alternate stylesheet" type="text/css" title="default" /> -->
 <!--   <link href="/media/css/main3.css" rel="alternate stylesheet" type="text/css" title="main3" /> -->
-<!--   <link href="/media/css/main4.css" rel="alternate stylesheet" type="text/css" title="main4" /> -->
-  <link href="/media/css/main5.css" rel="stylesheet" type="text/css" title="main5" />
+  <link href="/media/css/main.css" rel="stylesheet" type="text/css" />
   
   
   <script type="text/javascript" src="/media/js/jquery-1.4.1.min.js"></script>
@@ -19,9 +18,9 @@
 
 <body>
 <div id="containter">
-<div id="header">
-<div id="title"><img src="/media/images/logo-pypy.png" hight="86" width="248" align="middle"/><h1>SPEED CENTER</h1></div>
-</div>
+<!-- <div id="header"> -->
+<div id="title"><img src="/media/images/pypy_logo.png" hight="68" width="200" align="middle"/><h1>SPEED CENTER</h1></div>
+<!-- </div> -->
 
 <div id="wrapper">
 <div id="navigation">

Modified: codespeed/tools/test.py
==============================================================================
--- codespeed/tools/test.py	(original)
+++ codespeed/tools/test.py	Tue Feb 23 21:40:16 2010
@@ -1,6 +1,24 @@
 # -*- coding: utf-8 -*-
 import saveresults
 
-results = [['ai', 'ComparisonResult', {'avg_base': 0.42950453758219992, 'timeline_link': None, 'avg_changed': 0.43322672843939997, 'min_base': 0.42631793022199999, 'delta_min': '1.0065x faster', 'delta_avg': '1.0087x slower', 'std_changed': 0.0094009621054567376, 'min_changed': 0.423564910889, 'delta_std': '2.7513x larger', 'std_base': 0.0034169249420902843, 't_msg': 'Not significant\n'}], ['chaos', 'ComparisonResult', {'avg_base': 0.41804099082939999, 'timeline_link': None, 'avg_changed': 0.11744904518135998, 'min_base': 0.41700506210299998, 'delta_min': '9.0148x faster', 'delta_avg': '3.5593x faster', 'std_changed': 0.14350186143481433, 'min_changed': 0.046257972717299999, 'delta_std': '108.8162x larger', 'std_base': 0.0013187546718754512, 't_msg': 'Significant (t=4.683672, a=0.95)\n'}], ['django', 'ComparisonResult', {'avg_base': 0.83651852607739996, 'timeline_link': None, 'avg_changed': 0.48571481704719999, 'min_base': 0.82990884780899998, 'delta_min': '1.7315x faster', 'delta_avg': '1.7222x faster', 'std_changed': 0.006386606999421761, 'min_changed': 0.47929787635799997, 'delta_std': '1.7229x smaller', 'std_base': 0.011003382690633789, 't_msg': 'Significant (t=61.655971, a=0.95)\n'}], ['fannkuch', 'ComparisonResult', {'avg_base': 1.8561528205879998, 'timeline_link': None, 'avg_changed': 0.38401727676399999, 'min_base': 1.84801197052, 'delta_min': '5.0064x faster', 'delta_avg': '4.8335x faster', 'std_changed': 0.029594360755246251, 'min_changed': 0.36913013458299998, 'delta_std': '3.2353x larger', 'std_base': 0.0091472519207758066, 't_msg': 'Significant (t=106.269998, a=0.95)\n'}], ['float', 'ComparisonResult', {'avg_base': 0.50523018836940004, 'timeline_link': None, 'avg_changed': 0.15490598678593998, 'min_base': 0.49911379814099999, 'delta_min': '6.2651x faster', 'delta_avg': '3.2615x faster', 'std_changed': 0.057739598339608837, 'min_changed': 0.079665899276699995, 'delta_std': '7.7119x larger', 'std_base': 0.007487037523761327, 't_msg': 'Significant (t=13.454285, a=0.95)\n'}], ['gcbench', 'SimpleComparisonResult', {'base_time': 27.236408948899999, 'changed_time': 5.3500790595999996, 'time_delta': '5.0908x faster'}], ['html5lib', 'SimpleComparisonResult', {'base_time': 11.666918992999999, 'changed_time': 12.6703209877, 'time_delta': '1.0860x slower'}], ['meteor-contest', 'ComparisonResult', {'avg_base': 0.31436119079579999, 'timeline_link': None, 'avg_changed': 0.38782238960260002, 'min_base': 0.30970501899699998, 'delta_min': '1.1797x slower', 'delta_avg': '1.2337x slower', 'std_changed': 0.031661664106086736, 'min_changed': 0.36536192894000002, 'delta_std': '5.8221x larger', 'std_base': 0.0054382066306700701, 't_msg': 'Significant (t=-5.113235, a=0.95)\n'}], ['nbody_modified', 'ComparisonResult', {'avg_base': 0.53968458175659995, 'timeline_link': None, 'avg_changed': 0.078919744491499993, 'min_base': 0.53349304199199998, 'delta_min': '7.4887x faster', 'delta_avg': '6.8384x faster', 'std_changed': 0.012773911876380514, 'min_changed': 0.071239948272699999, 'delta_std': '3.3435x larger', 'std_base': 0.0038204885103676109, 't_msg': 'Significant (t=77.274529, a=0.95)\n'}], ['richards', 'ComparisonResult', {'avg_base': 0.29083266258220003, 'timeline_link': None, 'avg_changed': 0.029299402236939998, 'min_base': 0.29025602340700002, 'delta_min': '10.7327x faster', 'delta_avg': '9.9262x faster', 'std_changed': 0.0033452973342946888, 'min_changed': 0.027044057846099999, 'delta_std': '5.6668x larger', 'std_base': 0.00059033067516221327, 't_msg': 'Significant (t=172.154488, a=0.95)\n'}], ['rietveld', 'ComparisonResult', {'avg_base': 0.46909418106079998, 'timeline_link': None, 'avg_changed': 1.312631273269, 'min_base': 0.46490097045899997, 'delta_min': '2.1137x slower', 'delta_avg': '2.7982x slower', 'std_changed': 0.44401595627955542, 'min_changed': 0.98267102241500004, 'delta_std': '76.0238x larger', 'std_base': 0.0058404831974135556, 't_msg': 'Significant (t=-4.247692, a=0.95)\n'}], ['slowspitfire', 'ComparisonResult', {'avg_base': 0.66740002632140005, 'timeline_link': None, 'avg_changed': 1.6204295635219998, 'min_base': 0.65965509414699997, 'delta_min': '1.9126x slower', 'delta_avg': '2.4280x slower', 'std_changed': 0.27415559151786589, 'min_changed': 1.26167798042, 'delta_std': '20.1860x larger', 'std_base': 0.013581457669479846, 't_msg': 'Significant (t=-7.763579, a=0.95)\n'}], ['spambayes', 'ComparisonResult', {'avg_base': 0.279049730301, 'timeline_link': None, 'avg_changed': 1.0178018569945999, 'min_base': 0.27623891830399999, 'delta_min': '3.3032x slower', 'delta_avg': '3.6474x slower', 'std_changed': 0.064953583956645466, 'min_changed': 0.91246294975300002, 'delta_std': '28.9417x larger', 'std_base': 0.0022442880892229711, 't_msg': 'Significant (t=-25.416839, a=0.95)\n'}], ['spectral-norm', 'ComparisonResult', {'avg_base': 0.48315834999099999, 'timeline_link': None, 'avg_changed': 0.066225481033300004, 'min_base': 0.476922035217, 'delta_min': '8.0344x faster', 'delta_avg': '7.2957x faster', 'std_changed': 0.013425108838933627, 'min_changed': 0.059360027313200003, 'delta_std': '1.9393x larger', 'std_base': 0.0069225510731835901, 't_msg': 'Significant (t=61.721418, a=0.95)\n'}], ['spitfire', 'ComparisonResult', {'avg_base': 7.1179999999999994, 'timeline_link': None, 'avg_changed': 7.2780000000000005, 'min_base': 7.04, 'delta_min': '1.0072x faster', 'delta_avg': '1.0225x slower', 'std_changed': 0.30507376157250898, 'min_changed': 6.9900000000000002, 'delta_std': '3.4948x larger', 'std_base': 0.08729261137118062, 't_msg': 'Not significant\n'}], ['spitfire_cstringio', 'ComparisonResult', {'avg_base': 8.4520000000000017, 'timeline_link': None, 'avg_changed': 4.306, 'min_base': 8.4199999999999999, 'delta_min': '2.0637x faster', 'delta_avg': '1.9628x faster', 'std_changed': 0.3298181317029128, 'min_changed': 4.0800000000000001, 'delta_std': '9.8552x larger', 'std_base': 0.033466401061363157, 't_msg': 'Significant (t=27.965041, a=0.95)\n'}], ['telco', 'ComparisonResult', {'avg_base': 0.99600000000000011, 'timeline_link': None, 'avg_changed': 0.42199999999999999, 'min_base': 0.98999999999999999, 'delta_min': '2.4146x faster', 'delta_avg': '2.3602x faster', 'std_changed': 0.010954451150103331, 'min_changed': 0.40999999999999998, 'delta_std': '2.0000x larger', 'std_base': 0.0054772255750516665, 't_msg': 'Significant (t=104.797583, a=0.95)\n'}], ['twisted_iteration', 'SimpleComparisonResult', {'base_time': 0.148289627437, 'changed_time': 0.035354803126799998, 'time_delta': '4.1943x faster'}], ['twisted_web', 'SimpleComparisonResult', {'base_time': 0.11312217194599999, 'changed_time': 0.625, 'time_delta': '5.5250x slower'}]]
+results = [
+    ['ai', 'ComparisonResult', {'avg_base': 0.42950453758219992, 'timeline_link': None, 'avg_changed': 0.43322672843939997, 'min_base': 0.42631793022199999, 'delta_min': '1.0065x faster', 'delta_avg': '1.0087x slower', 'std_changed': 0.0094009621054567376, 'min_changed': 0.423564910889, 'delta_std': '2.7513x larger', 'std_base': 0.0034169249420902843, 't_msg': 'Not significant\n'}],
+    ['chaos', 'ComparisonResult', {'avg_base': 0.41804099082939999, 'timeline_link': None, 'avg_changed': 0.11744904518135998, 'min_base': 0.41700506210299998, 'delta_min': '9.0148x faster', 'delta_avg': '3.5593x faster', 'std_changed': 0.14350186143481433, 'min_changed': 0.046257972717299999, 'delta_std': '108.8162x larger', 'std_base': 0.0013187546718754512, 't_msg': 'Significant (t=4.683672, a=0.95)\n'}],
+    ['django', 'ComparisonResult', {'avg_base': 0.83651852607739996, 'timeline_link': None, 'avg_changed': 0.48571481704719999, 'min_base': 0.82990884780899998, 'delta_min': '1.7315x faster', 'delta_avg': '1.7222x faster', 'std_changed': 0.006386606999421761, 'min_changed': 0.47929787635799997, 'delta_std': '1.7229x smaller', 'std_base': 0.011003382690633789, 't_msg': 'Significant (t=61.655971, a=0.95)\n'}],
+    ['fannkuch', 'ComparisonResult', {'avg_base': 1.8561528205879998, 'timeline_link': None, 'avg_changed': 0.38401727676399999, 'min_base': 1.84801197052, 'delta_min': '5.0064x faster', 'delta_avg': '4.8335x faster', 'std_changed': 0.029594360755246251, 'min_changed': 0.36913013458299998, 'delta_std': '3.2353x larger', 'std_base': 0.0091472519207758066, 't_msg': 'Significant (t=106.269998, a=0.95)\n'}],
+    ['float', 'ComparisonResult', {'avg_base': 0.50523018836940004, 'timeline_link': None, 'avg_changed': 0.15490598678593998, 'min_base': 0.49911379814099999, 'delta_min': '6.2651x faster', 'delta_avg': '3.2615x faster', 'std_changed': 0.057739598339608837, 'min_changed': 0.079665899276699995, 'delta_std': '7.7119x larger', 'std_base': 0.007487037523761327, 't_msg': 'Significant (t=13.454285, a=0.95)\n'}], ['gcbench', 'SimpleComparisonResult', {'base_time': 27.236408948899999, 'changed_time': 5.3500790595999996, 'time_delta': '5.0908x faster'}],
+    ['html5lib', 'SimpleComparisonResult', {'base_time': 11.666918992999999, 'changed_time': 12.6703209877, 'time_delta': '1.0860x slower'}],
+    ['meteor-contest', 'ComparisonResult', {'avg_base': 0.31436119079579999, 'timeline_link': None, 'avg_changed': 0.38782238960260002, 'min_base': 0.30970501899699998, 'delta_min': '1.1797x slower', 'delta_avg': '1.2337x slower', 'std_changed': 0.031661664106086736, 'min_changed': 0.36536192894000002, 'delta_std': '5.8221x larger', 'std_base': 0.0054382066306700701, 't_msg': 'Significant (t=-5.113235, a=0.95)\n'}],
+    ['nbody_modified', 'ComparisonResult', {'avg_base': 0.53968458175659995, 'timeline_link': None, 'avg_changed': 0.078919744491499993, 'min_base': 0.53349304199199998, 'delta_min': '7.4887x faster', 'delta_avg': '6.8384x faster', 'std_changed': 0.012773911876380514, 'min_changed': 0.071239948272699999, 'delta_std': '3.3435x larger', 'std_base': 0.0038204885103676109, 't_msg': 'Significant (t=77.274529, a=0.95)\n'}],
+    ['richards', 'ComparisonResult', {'avg_base': 0.29083266258220003, 'timeline_link': None, 'avg_changed': 0.029299402236939998, 'min_base': 0.29025602340700002, 'delta_min': '10.7327x faster', 'delta_avg': '9.9262x faster', 'std_changed': 0.0033452973342946888, 'min_changed': 0.027044057846099999, 'delta_std': '5.6668x larger', 'std_base': 0.00059033067516221327, 't_msg': 'Significant (t=172.154488, a=0.95)\n'}],
+    ['rietveld', 'ComparisonResult', {'avg_base': 0.46909418106079998, 'timeline_link': None, 'avg_changed': 1.312631273269, 'min_base': 0.46490097045899997, 'delta_min': '2.1137x slower', 'delta_avg': '2.7982x slower', 'std_changed': 0.44401595627955542, 'min_changed': 0.98267102241500004, 'delta_std': '76.0238x larger', 'std_base': 0.0058404831974135556, 't_msg': 'Significant (t=-4.247692, a=0.95)\n'}],
+    ['slowspitfire', 'ComparisonResult', {'avg_base': 0.66740002632140005, 'timeline_link': None, 'avg_changed': 1.6204295635219998, 'min_base': 0.65965509414699997, 'delta_min': '1.9126x slower', 'delta_avg': '2.4280x slower', 'std_changed': 0.27415559151786589, 'min_changed': 1.26167798042, 'delta_std': '20.1860x larger', 'std_base': 0.013581457669479846, 't_msg': 'Significant (t=-7.763579, a=0.95)\n'}],
+    ['spambayes', 'ComparisonResult', {'avg_base': 0.279049730301, 'timeline_link': None, 'avg_changed': 1.0178018569945999, 'min_base': 0.27623891830399999, 'delta_min': '3.3032x slower', 'delta_avg': '3.6474x slower', 'std_changed': 0.064953583956645466, 'min_changed': 0.91246294975300002, 'delta_std': '28.9417x larger', 'std_base': 0.0022442880892229711, 't_msg': 'Significant (t=-25.416839, a=0.95)\n'}],
+    ['spectral-norm', 'ComparisonResult', {'avg_base': 0.48315834999099999, 'timeline_link': None, 'avg_changed': 0.066225481033300004, 'min_base': 0.476922035217, 'delta_min': '8.0344x faster', 'delta_avg': '7.2957x faster', 'std_changed': 0.013425108838933627, 'min_changed': 0.059360027313200003, 'delta_std': '1.9393x larger', 'std_base': 0.0069225510731835901, 't_msg': 'Significant (t=61.721418, a=0.95)\n'}],
+    ['spitfire', 'ComparisonResult', {'avg_base': 7.1179999999999994, 'timeline_link': None, 'avg_changed': 7.2780000000000005, 'min_base': 7.04, 'delta_min': '1.0072x faster', 'delta_avg': '1.0225x slower', 'std_changed': 0.30507376157250898, 'min_changed': 6.9900000000000002, 'delta_std': '3.4948x larger', 'std_base': 0.08729261137118062, 't_msg': 'Not significant\n'}],
+    ['spitfire_cstringio', 'ComparisonResult', {'avg_base': 8.4520000000000017, 'timeline_link': None, 'avg_changed': 4.306, 'min_base': 8.4199999999999999, 'delta_min': '2.0637x faster', 'delta_avg': '1.9628x faster', 'std_changed': 0.3298181317029128, 'min_changed': 4.0800000000000001, 'delta_std': '9.8552x larger', 'std_base': 0.033466401061363157, 't_msg': 'Significant (t=27.965041, a=0.95)\n'}], ['telco', 'ComparisonResult', {'avg_base': 0.99600000000000011, 'timeline_link': None, 'avg_changed': 0.42199999999999999, 'min_base': 0.98999999999999999, 'delta_min': '2.4146x faster', 'delta_avg': '2.3602x faster', 'std_changed': 0.010954451150103331, 'min_changed': 0.40999999999999998, 'delta_std': '2.0000x larger', 'std_base': 0.0054772255750516665, 't_msg': 'Significant (t=104.797583, a=0.95)\n'}],
+    ['twisted_iteration', 'SimpleComparisonResult', {'base_time': 0.148289627437, 'changed_time': 0.035354803126799998, 'time_delta': '4.1943x faster'}],
+    ['twisted_web', 'SimpleComparisonResult', {'base_time': 0.11312217194599999, 'changed_time': 0.625, 'time_delta': '5.5250x slower'}]
+]
 
 saveresults.save(71212, results, "", "trunk", "pypy-c-jit", "gc=hybrid")



More information about the Pypy-commit mailing list