[prev in list] [next in list] [prev in thread] [next in thread] 

List:       extremeprogramming
Subject:    [XP] =?utf-8?q?Re=3a=20=5bXP=5d=20When=20should=20you=20do=20performance=20optimization=3f?=
From:       <simon () tcbventures ! com>
Date:       2008-01-29 14:17:07
Message-ID: E1JJrGt-0006Se-EQ () artemis ! hosts ! co ! uk
[Download RAW message or body]

Hi David and Kent,

I have the a similar area of uncertainty with respect to performance.

on 28/1/08 10:25 PM, extremeprogramming@yahoogroups.com wrote:

> Dear David,
>
> Some performance improvements simplify and clarify the design. Those shou=
ld
> be done as soon as possible. Some performance problems need to be solved
> *now*. In either case, bending the design in the direction of performance=
 is
> the right thing to do. The difficult situation is when you can see a way =
to
> complicate the design to meet future performance needs. Then you have
> certain cost now to potentially gain benefit and avoid cost later.
>

> My strategy is first to make sure I know where I stand with respect to
> performance. What I sketched as I was thinking about your question was a
> curve of the necessary performance over the next several years. I want th=
e
> system to stay comfortably ahead of this curve.
>

This is very interesting. But, I find, quite difficult to put into practice=
. The
reason is that its not usually the predictable growth in system usage that =
is
the problem.

The difficulties for me are when you have the (common) scenario that your
organisation decides to go with an aggressive marketing push in a short tim=
e
frame. i.e. 'we're going to give away X million widgets next month'. You ei=
ther
have a simple surge, that will abate over time (assuming your system stays =
up),
or you will be incredibly successful and significantly increase your user b=
ase
in an ongoing basis.

These unpredictable 'spikes' in usage are much harder to cater for. Its a
difficult problem for which, alas I have no answer. Perhaps the root cause =
is in
how the marketing strategy is planned? But this is beyond my area of expert=
ise.
Perhaps its simply managing the expectations of the marketeers?

I see so much development effort expended on 'phantom' or supposed performa=
nce
problems that part of me wants optimisation to be a low priority without
quantifiable need. But, the nature of the marketing cycle and the increasin=
gly
reactive nature of service based businesses creates the dilemma above. It i=
s
natural for the development team to be wary of sudden performance demands a=
nd
thus, perhaps out of a little fear, begin to add complexity in anticipation=
.

My guess is that building an architecture that is highly 'componentised' wi=
th
very loose coupling and well defined service boundaries is the best approac=
h. At
least it should be easier to identify where the bottleneck is and focus eff=
orts
in the effected service area.

Or at the very least be in a position where you can quickly perform meaning=
ful
performance 'spikes'.

> I have had a hard time writing deterministic performance tests. That's wh=
y I
> like quantitative measures (like the min/max/mean someone mentioned) and
> then tracking those over time. Even though they don't carry the reassuran=
ce
> of red/green, anyone who cares about performance can see where the system=
 is
> with respect to performance goals and see trends so they can predict
> problems.
>
> Ken Auer and I wrote a paper called Lazy Optimization which summarizes my
> philosophy. I don't think it's available online, but the short form is to
> only optimize based on actual data and actual need.
>

I think the scenario I described above is where the actual need changes rap=
idly
and therefore may be hard to quantify.



> Regards,
>
> Kent Beck
> Three Rivers Institute
>
> _____
>
> From: extremeprogramming@yahoogroups.com
> [mailto:extremeprogramming@yahoogroups.com] On Behalf Of dpeterson72
> Sent: Monday, January 28, 2008 3:15 AM
> To: extremeprogramming@yahoogroups.com
> Subject: [XP] When should you do performance optimization?
>
> How much should you compromise today's simple design for tomorrow's
> potential scalability problems? How do you make the call?
>
> David
> ---
> David Peterson
> http://blog. <http://blog.davidpeterson.co.uk> davidpeterson.co.uk
> http://www.concordi <http://www.concordion.org> on.org
>
>
>
> [Non-text portions of this message have been removed]
>
>
>
>

[Attachment #3 (text/html)]

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" \
"http://www.w3.org/TR/html4/strict.dtd"> <html>
<head>
</head>




<body style="background-color: #ffffff;">

<!--~-|**|PrettyHtmlStartT|**|-~-->
<div id="ygrp-mlmsg" style="width:655px; position:relative;">
  <div id="ygrp-msg" style="width: 490px; padding: 0 15px 0 0; float:left;  \
z-index:1;"> <!--~-|**|PrettyHtmlEndT|**|-~-->

    <div id="ygrp-text">
            <p>Hi David and Kent,<br>
<br>
I have the a similar area of uncertainty with respect to performance.<br>
<br>
on 28/1/08 10:25 PM, <a \
href="mailto:extremeprogramming%40yahoogroups.com">extremeprogramming@<wbr>yahoogroups.<wbr>com</a> \
wrote:<br> <br>
&gt; Dear David,<br>
&gt;<br>
&gt; Some performance improvements simplify and clarify the design. Those should<br>
&gt; be done as soon as possible. Some performance problems need to be solved<br>
&gt; *now*. In either case, bending the design in the direction of performance is<br>
&gt; the right thing to do. The difficult situation is when you can see a way to<br>
&gt; complicate the design to meet future performance needs. Then you have<br>
&gt; certain cost now to potentially gain benefit and avoid cost later.<br>
&gt;<br>
<br>
&gt; My strategy is first to make sure I know where I stand with respect to<br>
&gt; performance. What I sketched as I was thinking about your question was a<br>
&gt; curve of the necessary performance over the next several years. I want the<br>
&gt; system to stay comfortably ahead of this curve.<br>
&gt;<br>
<br>
This is very interesting. But, I find, quite difficult to put into practice. The<br>
reason is that its not usually the predictable growth in system usage that is<br>
the problem.<br>
<br>
The difficulties for me are when you have the (common) scenario that your<br>
organisation decides to go with an aggressive marketing push in a short time<br>
frame. i.e. 'we're going to give away X million widgets next month'. You either<br>
have a simple surge, that will abate over time (assuming your system stays up),<br>
or you will be incredibly successful and significantly increase your user base<br>
in an ongoing basis.<br>
<br>
These unpredictable 'spikes' in usage are much harder to cater for. Its a<br>
difficult problem for which, alas I have no answer. Perhaps the root cause is in<br>
how the marketing strategy is planned? But this is beyond my area of expertise.<br>
Perhaps its simply managing the expectations of the marketeers?<br>
<br>
I see so much development effort expended on 'phantom' or supposed performance<br>
problems that part of me wants optimisation to be a low priority without<br>
quantifiable need. But, the nature of the marketing cycle and the increasingly<br>
reactive nature of service based businesses creates the dilemma above. It is<br>
natural for the development team to be wary of sudden performance demands and<br>
thus, perhaps out of a little fear, begin to add complexity in anticipation.<br>
<br>
My guess is that building an architecture that is highly 'componentised' with<br>
very loose coupling and well defined service boundaries is the best approach. At<br>
least it should be easier to identify where the bottleneck is and focus efforts<br>
in the effected service area.<br>
<br>
Or at the very least be in a position where you can quickly perform meaningful<br>
performance 'spikes'.<br>
<br>
&gt; I have had a hard time writing deterministic performance tests. That's why I<br>
&gt; like quantitative measures (like the min/max/mean someone mentioned) and<br>
&gt; then tracking those over time. Even though they don't carry the reassurance<br>
&gt; of red/green, anyone who cares about performance can see where the system is<br>
&gt; with respect to performance goals and see trends so they can predict<br>
&gt; problems.<br>
&gt;<br>
&gt; Ken Auer and I wrote a paper called Lazy Optimization which summarizes my<br>
&gt; philosophy. I don't think it's available online, but the short form is to<br>
&gt; only optimize based on actual data and actual need.<br>
&gt;<br>
<br>
I think the scenario I described above is where the actual need changes rapidly<br>
and therefore may be hard to quantify.<br>
<br>
&gt; Regards,<br>
&gt;<br>
&gt; Kent Beck<br>
&gt; Three Rivers Institute<br>
&gt;<br>
&gt; _____<br>
&gt;<br>
&gt; From: <a href="mailto:extremeprogramming%40yahoogroups.com">extremeprogramming@<wbr>yahoogroups.<wbr>com</a><br>
 &gt; [mailto:<a href="mailto:extremeprogramming%40yahoogroups.com">extremeprogramming@<wbr>yahoogroups.<wbr>com</a>] \
On Behalf Of dpeterson72<br> &gt; Sent: Monday, January 28, 2008 3:15 AM<br>
&gt; To: <a href="mailto:extremeprogramming%40yahoogroups.com">extremeprogramming@<wbr>yahoogroups.<wbr>com</a><br>
 &gt; Subject: [XP] When should you do performance optimization?<br>
&gt;<br>
&gt; How much should you compromise today's simple design for tomorrow's<br>
&gt; potential scalability problems? How do you make the call?<br>
&gt;<br>
&gt; David<br>
&gt; ---<br>
&gt; David Peterson<br>
&gt; <a href="http://blog.">http://blog.</a> &lt;<a \
href="http://blog.davidpeterson.co.uk">http://blog.<wbr>davidpeterson.<wbr>co.uk</a>&gt; \
davidpeterson.<wbr>co.uk<br> &gt; <a \
href="http://www.concordi">http://www.concordi</a> &lt;<a \
href="http://www.concordion.org">http://www.concordi<wbr>on.org</a>&gt; on.org<br> \
&gt;<br> &gt;<br>
&gt;<br>
&gt; [Non-text portions of this message have been removed]<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
</p>
    </div>  

    <!--~-|**|PrettyHtmlStart|**|-~-->
    <span width="1" style="color: white;">__._,_.___</span>
    <!-- Start the section with Message In topic -->
    <div id="ygrp-actbar">
              <span class="left">
          <a href="http://groups.yahoo.com/group/extremeprogramming/message/138439;_yl \
c=X3oDMTM4MzRkaWxxBF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BG1zZ0lkAzEzODQzOQRzZWMDZnRyBHNsawN2dHBjBHN0aW1lAzEyMDE2MTYyMzEEdHBjSWQDMTM4NDM5">
                
            Messages in this topic          </a> (<span class="bld">1</span>)
        </span>
        <a href="http://groups.yahoo.com/group/extremeprogramming/post;_ylc=X3oDMTJyZT \
U1MDlmBF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BG1zZ0lkAzEzODQzOQRzZWMDZnRyBHNsawNycGx5BHN0aW1lAzEyMDE2MTYyMzE-?act=reply&messageNum=138439">
  <span class="bld">
            Reply          </span> (via web post)
        </a>  | 
        <a href="http://groups.yahoo.com/group/extremeprogramming/post;_ylc=X3oDMTJldD \
BiY25kBF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTIwMTYxNjIzMQ--" \
class="bld">  Start a new topic        </a>
          </div> 
    <!-------     Start Nav Bar  ------>
    <!-- |**|begin egp html banner|**| -->
    <div id="ygrp-vitnav">
                <a href="http://groups.yahoo.com/group/extremeprogramming/messages;_yl \
c=X3oDMTJlMDZza2VoBF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA21zZ3MEc3RpbWUDMTIwMTYxNjIzMQ--">Messages</a> \
  |    <a href="http://groups.yahoo.com/group/extremeprogramming/files;_ylc=X3oDMTJmZ2 \
01a2w1BF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA2ZpbGVzBHN0aW1lAzEyMDE2MTYyMzE-">Files</a> \
  |    <a href="http://groups.yahoo.com/group/extremeprogramming/photos;_ylc=X3oDMTJlN \
ThudGp0BF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA3Bob3QEc3RpbWUDMTIwMTYxNjIzMQ--">Photos</a> \
  |    <a href="http://groups.yahoo.com/group/extremeprogramming/links;_ylc=X3oDMTJmNz \
BtZXI2BF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA2xpbmtzBHN0aW1lAzEyMDE2MTYyMzE-">Links</a> \
  |    <a href="http://groups.yahoo.com/group/extremeprogramming/database;_ylc=X3oDMTJ \
jb24ybWg5BF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA2RiBHN0aW1lAzEyMDE2MTYyMzE-">Database</a> \
  |    <a href="http://groups.yahoo.com/group/extremeprogramming/polls;_ylc=X3oDMTJmaT \
hlbnF1BF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA3BvbGxzBHN0aW1lAzEyMDE2MTYyMzE-">Polls</a> \
  |    <a href="http://groups.yahoo.com/group/extremeprogramming/members;_ylc=X3oDMTJl \
NHY4dTNmBF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA21icnMEc3RpbWUDMTIwMTYxNjIzMQ--">Members</a> \
  
    </div>  
    <!-- |**|end egp html banner|**| -->

                <div id="ygrp-grft">
                  
<!-- |**|begin egp html banner|**| -->

          To Post a message, send it to:&nbsp;&nbsp; \
extremeprogramming@eGroups.com<BR> <BR>
To Unsubscribe, send a blank message to: \
extremeprogramming-unsubscribe@eGroups.com<BR> <BR>
ad-free courtesy of objectmentor.com          
<!-- |**|end egp html banner|**| -->

              </div>
    
    <!-- yahoo logo -->
    <!-- |**|begin egp html banner|**| -->
    <div id="ygrp-ft">
      <a href="http://groups.yahoo.com/;_ylc=X3oDMTJkampyb21rBF9TAzk3MzU5NzE0BGdycElkA \
                zE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA2dmcARzdGltZQMxMjAxNjE2MjMx">
                
      <img src="http://us.i1.yimg.com/us.yimg.com/i/yg/img/logo/ma_grp_160.gif" \
height="15" width="106" border="0" alt="Yahoo! Groups"></a> <br>  <a \
href="http://groups.yahoo.com/group/extremeprogramming/join;_ylc=X3oDMTJmNWN0aXNmBF9TA \
zk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA3N0bmdzBHN0aW1lAzEyMDE2MTYyMzE-">Change \
settings via the Web</a> (Yahoo! ID required) <br>  Change settings via email: <a \
href="mailto:extremeprogramming-digest@yahoogroups.com?subject=Email Delivery: \
Digest">Switch delivery to Daily Digest</a> | <a href = \
"mailto:extremeprogramming-traditional@yahoogroups.com?subject=Change Delivery \
Format: Traditional">Switch format to Traditional</a> <br>

      <a href="http://groups.yahoo.com/group/extremeprogramming;_ylc=X3oDMTJkYjB1a20zB \
F9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA2hwZgRzdGltZQMxMjAxNjE2MjMx">
  Visit Your Group 
      </a> |
      <a href="http://docs.yahoo.com/info/terms/">
        Yahoo! Groups Terms of Use      </a> |
      <a href="mailto:extremeprogramming-unsubscribe@yahoogroups.com?subject=">
        Unsubscribe      </a> 
    </div>     <!-- |**|end egp html banner|**| -->
  </div> <!-- ygrp-msg -->

  
  <!-- Sponsor -->
  <!-- |**|begin egp html banner|**| -->
  <div id="ygrp-sponsor" style="width:140px;float: left; clear: none; margin-left: \
5px; background:white; margin-bottom:25px ;position:absolute; top:0; right: 0;">  \
<!-- Network content -->  
    <!-- Start vitality -->
    <div id="ygrp-vital">
              <div id="vithd">Recent Activity</div>
        <ul style="list-style-type:none; padding: 0; margin: 2px 0;">
                <li style="clear: both;">
      <div class="ct" style="float: right;"><span \
style="display:none">&nbsp;</span>27</div>  <div class="cat"><a \
href="http://groups.yahoo.com/group/extremeprogramming/members;_ylc=X3oDMTJmbmthdmZyBF \
9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwN2dGwEc2xrA3ZtYnJzBHN0aW1lAzEyMDE2MTYyMzE-">New \
Members</a></div>  </li>
  
            
            
            
            
            
        </ul>
            <a href="http://groups.yahoo.com/group/extremeprogramming;_ylc=X3oDMTJlc3R \
1NW83BF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTIwMTYxNjIzMQ--">
  Visit Your Group      </a>
    </div> 
              
    <!-- Network content -->
              <div id="nc">
              <div class="ad">
                      <div id="hd1">Yahoo! Finance</div> 
<p><a href="http://us.ard.yahoo.com/SIG=13o8crmcp/M=493064.12016257.12445664.8674578/D \
=groups/S=1707276718:NC/Y=YAHOO/EXP=1201623431/L=/B=pW5LAUJe5do-/J=1201616231350156/A= \
4507179/R=0/SIG=12de4rskk/*http://us.rd.yahoo.com/evt=50284/*http://finance.yahoo.com/personal-finance">It's \
Now Personal</a></p>  <p>Guides, news,</p> 
<p>advice & more.</p>                   </div>
                    <div class="ad">
                      <div id="hd1">Need traffic?</div> 
<p><a href="http://us.ard.yahoo.com/SIG=13oco4u7n/M=493064.12016308.12445700.8674578/D \
=groups/S=1707276718:NC/Y=YAHOO/EXP=1201623431/L=/B=pm5LAUJe5do-/J=1201616231350156/A= \
3848644/R=0/SIG=131l83flq/*http://searchmarketing.yahoo.com/arp/srchv2.php?o=US2006&cmp=Yahoo&ctv=Groups5&s=Y&s2=&s3=&b=50">Drive \
customers</a></p>  <p>With search ads</p> 
<p>on Yahoo!</p>                  </div>
                    <div class="ad">
                      <div id="hd1">Do-It-Yourselfers</div> 
<p><a href="http://us.ard.yahoo.com/SIG=13oavrv1t/M=493064.12117566.12537396.8674578/D \
=groups/S=1707276718:NC/Y=YAHOO/EXP=1201623431/L=/B=p25LAUJe5do-/J=1201616231350156/A=5170408/R=0/SIG=11gfoiqic/*http://advision.webevents.yahoo.com/craftsman/">on \
Yahoo! Groups</a></p>  <p>How-to ideas,</p> 
<p>projects and more.</p>                  </div>
          </div>
    
  </div>   <!-- |**|end egp html banner|**| -->
  <div style="clear:both; color: #FFF; font-size:1px;">.</div>
</div>   <img src="http://geo.yahoo.com/serv?s=97359714/grpId=1505409/grpspId=1707276718/msgId=138439/stime=1201616231/nc1=4507179/nc2=3848644/nc3=5170408" \
width="1" height="1"> <br>

<span  style="color: white;">__,_._,___</span>
<!--~-|**|PrettyHtmlEnd|**|-~-->
</body>
<!--~-|**|PrettyHtmlStart|**|-~-->
<head>
<style type="text/css">
<!--
#ygrp-mkp{
  border: 1px solid #d8d8d8;
  font-family: Arial;
  margin: 14px 0px;
  padding: 0px 14px;
}
#ygrp-mkp hr{
  border: 1px solid #d8d8d8;
}
#ygrp-mkp #hd{
  color: #628c2a;
  font-size: 85%;
  font-weight: bold;
  line-height: 122%;
  margin: 10px 0px;
}
#ygrp-mkp #ads{
  margin-bottom: 10px;
}
#ygrp-mkp .ad{
  padding: 0 0;
}
#ygrp-mkp .ad a{
  color: #0000ff;
  text-decoration: none;
}
-->
</style>
</head>
<head>
<style type="text/css">
<!--
#ygrp-sponsor #ygrp-lc{
  font-family: Arial;
}
#ygrp-sponsor #ygrp-lc #hd{
  margin: 10px 0px;
  font-weight: bold;
  font-size: 78%;
  line-height: 122%;
}
#ygrp-sponsor #ygrp-lc .ad{
  margin-bottom: 10px;
  padding: 0 0;
}
-->
</style>
</head>
<head>
<style type="text/css">
<!--
#ygrp-mlmsg {font-size:13px; font-family: \
arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;} #ygrp-mlmsg table \
{font-size:inherit;font:100%;} #ygrp-mlmsg select, input, textarea {font:99% \
arial,helvetica,clean,sans-serif;} #ygrp-mlmsg pre, code {font:115% \
monospace;*font-size:100%;} #ygrp-mlmsg * {line-height:1.22em;}
#ygrp-text{
    font-family: Georgia;	
}
#ygrp-text p{
    margin: 0 0 1em 0;
}
#ygrp-tpmsgs{
    font-family: Arial;	
    clear: both;
}
#ygrp-vitnav{
	padding-top: 10px;
	font-family: Verdana;
	font-size: 77%;
	margin: 0;
}
#ygrp-vitnav a{
	padding: 0 1px;
}
#ygrp-actbar{
	clear: both;
	margin: 25px 0;
	white-space:nowrap;
	color: #666;
	text-align: right;
}
#ygrp-actbar .left{
	float: left;
	white-space:nowrap;
}
.bld{font-weight:bold;}
#ygrp-grft{
	font-family: Verdana;
	font-size: 77%;
	padding: 15px 0;
}
#ygrp-ft{
  font-family: verdana;
  font-size: 77%;
  border-top: 1px solid #666; 
  padding: 5px 0; 
}
#ygrp-mlmsg #logo{
  padding-bottom: 10px;
}

#ygrp-vital{
	background-color: #e0ecee;
	margin-bottom: 20px;
	padding: 2px 0 8px 8px;
}
#ygrp-vital #vithd{
	font-size: 77%;
	font-family: Verdana;
	font-weight: bold;
	color: #333;
	text-transform: uppercase;
}
#ygrp-vital ul{
	padding: 0;
	margin: 2px 0;
}
#ygrp-vital ul li{
  list-style-type: none;
  clear: both;
  border: 1px solid #e0ecee;  
}
#ygrp-vital ul li .ct{
  font-weight: bold;
  color: #ff7900;
  float: right;
  width: 2em;
  text-align:right;
  padding-right: .5em;
}
#ygrp-vital ul li .cat{
  font-weight: bold;
}
#ygrp-vital a{
	text-decoration: none;
}

#ygrp-vital a:hover{
  text-decoration: underline;
}

#ygrp-sponsor #hd{
	color: #999;
	font-size: 77%;
}
#ygrp-sponsor #ov{
	padding: 6px 13px;
	background-color: #e0ecee;
	margin-bottom: 20px;
}
#ygrp-sponsor #ov ul{
	padding: 0 0 0 8px;
	margin: 0;
}
#ygrp-sponsor #ov li{
	list-style-type: square;
	padding: 6px 0;
	font-size: 77%;
}
#ygrp-sponsor #ov li a{
	text-decoration: none;
	font-size: 130%;
}
#ygrp-sponsor #nc{
  background-color: #eee;
  margin-bottom: 20px;
  padding: 0 8px;
}
#ygrp-sponsor .ad{
	padding: 8px 0;
}
#ygrp-sponsor .ad #hd1{
	font-family: Arial;
	font-weight: bold;
	color: #628c2a;
	font-size: 100%;
	line-height: 122%;
}
#ygrp-sponsor .ad a{
	text-decoration: none;
}
#ygrp-sponsor .ad a:hover{
	text-decoration: underline;
}
#ygrp-sponsor .ad p{
	margin: 0;
}
o{font-size: 0; }
.MsoNormal{
   margin: 0 0 0 0;
}
#ygrp-text tt{
  font-size: 120%;
}
blockquote{margin: 0 0 0 4px;}
.replbq{margin:4}
-->
</style>
</head>
<!--~-|**|PrettyHtmlEnd|**|-~-->
</html><!--End group email -->



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic