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

List:       extremeprogramming
Subject:    Re: [XP] Group vote for C unit testing framework
From:       "stephendicks" <stephen () starswan ! com>
Date:       2008-01-29 11:06:48
Message-ID: fnn1c8+duue () eGroups ! com
[Download RAW message or body]

--- In extremeprogramming@yahoogroups.com, David Carlton <carlton@...>
wrote:
>
> On Tue, 29 Jan 2008 09:06:08 +1300 (NZDT), John Carter
<john.carter@...> said:
> > On Sun, 27 Jan 2008, David Carlton wrote:
> >> On Mon, 28 Jan 2008 11:42:40 +1300 (NZDT), John Carter
<john.carter@...> said:
> 
> >>> Hint: Control of the build environment is handy. Instead of using
> >>> "make" which doesn't really give you all that much you care about
> >>> anyway...knock up your own using a rich scripting language like Ruby
> >>> or Python.
> >> 
> >> ? Make knows all about all sorts of handy dependency rules which are
> >> very well suited for C and its derivatives; I wouldn't dream of
> >> hand-rolling something else, if that's what you're suggesting.  I
> >> don't know what compiler the original poster is using, but GCC will
> >> even spit out appropriate make dependencies, making it extremely easy
> >> to write a safe, parallelizable Makefile for C code, in many common
> >> situations.
> 
> > Actually every large commercial make file I've seen has been about
> > 20% make and a mish-mash of shell, awk, grep and other darker things
> > (eg. .bat) for the rest.  Trying to work out the various levels of
> > quote stripping between make,shell and awk can be entertaining at
> > the least!
> 
> To give a bit more context, I'm rather fond of make, and part of the
> reason why I'm fond is that I've spent time taking crap Makefiles and
> turning them into Makefiles that are shorter, have fewer bugs, and are
> more parallelizable.  (With help from gcc -MD -MP and ideas in
> <http://make.paulandlesley.org/autodep.html>.)  At the core, it seems
> to be a reasonable language for handling dependencies in a way that
> can easily handle typical tasks for C and its derivatives on Unix
> systems, which happens to be a situation where I spend some amount of
> time.
> 
> And, to give a bit more context, the only other build language that
> I've used is ant (for a Java project); as far as I can tell, it gets
> dependencies wrong, which I'd previously assumed was the single core
> competency of anything that would call itself a build language.  I
> still tentatively assume that I must be missing something big there,
> but I'm still a bit jaundiced towards other solutions. :-)
> 
> Having said that, I should look at rake and scons; I agree that, all
> else being equal, I'd like my build system to be integrated with a
> pleasant scripting language, and make isn't that.
> 
> John Roth mentioned rake and scons.  Looking at the online
> documentation, though, rake doesn't seem to be anywhere near ready for
> prime time for C programming: I don't see any discussion of C issues,
> and running "rake --help" doesn't mention anything about
> parallelization, which would be an absolute show-stopper for me.
> 
> scons looks more interesting, though: it looks rather more
> fully-featured, the man page mentions parallelization, so it would
> probably work.  I don't know for sure if it will get automatic
> dependency generation completely right, but it might, and even if it
> doesn't, it might be close enough that its other virtues outweigh that
> drawback.  I would certainly play around with it, and (if the results
> were good) it would be quite natural to use it if there was enough
> Python knowledge on the project.  (Or maybe even if there wasn't -
> it's not like make gurus are falling off of every tree, after all.)

I finally 'got around' to using Scons last year. Try it - you will
never go back to 'make' again. The only drawback(s) that I've found so
far are:

Scons scripts are fully-fledged programs, so they can become overly
complex (certainly my first attempts needed some refactoring, and my
2nd and 3rd ones were improvements on the 1st).

It is 'only' a build tool - you cannot trivially (at least I couldnt
work it out) how to emulate 'make test' type behaviour where the tests
are built and then run - I still used 'make' as a trivial controller.

The documentation suggests a 'copy and build' approach, which works
fine but can be confusing if you get a syntax error, as the 'compiled'
source is a 'copy' (a writable copy at that) which should not of
course be edited. [This style is not compulsory - a colleague used it
by following the documentation]


> 
> David Carlton
> carlton@...
>



[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>--- In <a \
href="mailto:extremeprogramming%40yahoogroups.com">extremeprogramming@<wbr>yahoogroups.<wbr>com</a>, \
David Carlton &lt;carlton@...<wbr>&gt;<br> wrote:<br>
&gt;<br>
&gt; On Tue, 29 Jan 2008 09:06:08 &#43;1300 (NZDT), John Carter<br>
&lt;john.carter@<wbr>...&gt; said:<br>
&gt; &gt; On Sun, 27 Jan 2008, David Carlton wrote:<br>
&gt; &gt;&gt; On Mon, 28 Jan 2008 11:42:40 &#43;1300 (NZDT), John Carter<br>
&lt;john.carter@<wbr>...&gt; said:<br>
&gt; <br>
&gt; &gt;&gt;&gt; Hint: Control of the build environment is handy. Instead of \
using<br> &gt; &gt;&gt;&gt; &quot;make&quot; which doesn't really give you all that \
much you care about<br> &gt; &gt;&gt;&gt; anyway...knock up your own using a rich \
scripting language like Ruby<br> &gt; &gt;&gt;&gt; or Python.<br>
&gt; &gt;&gt; <br>
&gt; &gt;&gt; ? Make knows all about all sorts of handy dependency rules which \
are<br> &gt; &gt;&gt; very well suited for C and its derivatives; I wouldn't dream \
of<br> &gt; &gt;&gt; hand-rolling something else, if that's what you're suggesting.  \
I<br> &gt; &gt;&gt; don't know what compiler the original poster is using, but GCC \
will<br> &gt; &gt;&gt; even spit out appropriate make dependencies, making it \
extremely easy<br> &gt; &gt;&gt; to write a safe, parallelizable Makefile for C code, \
in many common<br> &gt; &gt;&gt; situations.<br>
&gt; <br>
&gt; &gt; Actually every large commercial make file I've seen has been about<br>
&gt; &gt; 20% make and a mish-mash of shell, awk, grep and other darker things<br>
&gt; &gt; (eg. .bat) for the rest.  Trying to work out the various levels of<br>
&gt; &gt; quote stripping between make,shell and awk can be entertaining at<br>
&gt; &gt; the least!<br>
&gt; <br>
&gt; To give a bit more context, I'm rather fond of make, and part of the<br>
&gt; reason why I'm fond is that I've spent time taking crap Makefiles and<br>
&gt; turning them into Makefiles that are shorter, have fewer bugs, and are<br>
&gt; more parallelizable.  (With help from gcc -MD -MP and ideas in<br>
&gt; &lt;<a href="http://make.paulandlesley.org/autodep.html">http://make.<wbr>paulandlesley.<wbr>org/autodep.<wbr>html</a>&gt;.) \
At the core, it seems<br> &gt; to be a reasonable language for handling dependencies \
in a way that<br> &gt; can easily handle typical tasks for C and its derivatives on \
Unix<br> &gt; systems, which happens to be a situation where I spend some amount \
of<br> &gt; time.<br>
&gt; <br>
&gt; And, to give a bit more context, the only other build language that<br>
&gt; I've used is ant (for a Java project); as far as I can tell, it gets<br>
&gt; dependencies wrong, which I'd previously assumed was the single core<br>
&gt; competency of anything that would call itself a build language.  I<br>
&gt; still tentatively assume that I must be missing something big there,<br>
&gt; but I'm still a bit jaundiced towards other solutions. :-)<br>
&gt; <br>
&gt; Having said that, I should look at rake and scons; I agree that, all<br>
&gt; else being equal, I'd like my build system to be integrated with a<br>
&gt; pleasant scripting language, and make isn't that.<br>
&gt; <br>
&gt; John Roth mentioned rake and scons.  Looking at the online<br>
&gt; documentation, though, rake doesn't seem to be anywhere near ready for<br>
&gt; prime time for C programming: I don't see any discussion of C issues,<br>
&gt; and running &quot;rake --help&quot; doesn't mention anything about<br>
&gt; parallelization, which would be an absolute show-stopper for me.<br>
&gt; <br>
&gt; scons looks more interesting, though: it looks rather more<br>
&gt; fully-featured, the man page mentions parallelization, so it would<br>
&gt; probably work.  I don't know for sure if it will get automatic<br>
&gt; dependency generation completely right, but it might, and even if it<br>
&gt; doesn't, it might be close enough that its other virtues outweigh that<br>
&gt; drawback.  I would certainly play around with it, and (if the results<br>
&gt; were good) it would be quite natural to use it if there was enough<br>
&gt; Python knowledge on the project.  (Or maybe even if there wasn't -<br>
&gt; it's not like make gurus are falling off of every tree, after all.)<br>
<br>
I finally 'got around' to using Scons last year. Try it - you will<br>
never go back to 'make' again. The only drawback(s) that I've found so<br>
far are:<br>
<br>
Scons scripts are fully-fledged programs, so they can become overly<br>
complex (certainly my first attempts needed some refactoring, and my<br>
2nd and 3rd ones were improvements on the 1st).<br>
<br>
It is 'only' a build tool - you cannot trivially (at least I couldnt<br>
work it out) how to emulate 'make test' type behaviour where the tests<br>
are built and then run - I still used 'make' as a trivial controller.<br>
<br>
The documentation suggests a 'copy and build' approach, which works<br>
fine but can be confusing if you get a syntax error, as the 'compiled'<br>
source is a 'copy' (a writable copy at that) which should not of<br>
course be edited. [This style is not compulsory - a colleague used it<br>
by following the documentation]<br>
<br>
&gt; <br>
&gt; David Carlton<br>
&gt; carlton@...<br>
&gt;<br>
<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/138379;_yl \
c=X3oDMTM4ZjF2dmY2BF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BG1zZ0lkAzEzODQzNQRzZWMDZnRyBHNsawN2dHBjBHN0aW1lAzEyMDE2MDQ4MTQEdHBjSWQDMTM4Mzc5">
                
            Messages in this topic          </a> (<span class="bld">15</span>)
        </span>
        <a href="http://groups.yahoo.com/group/extremeprogramming/post;_ylc=X3oDMTJya3 \
MwODFkBF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BG1zZ0lkAzEzODQzNQRzZWMDZnRyBHNsawNycGx5BHN0aW1lAzEyMDE2MDQ4MTQ-?act=reply&messageNum=138435">
  <span class="bld">
            Reply          </span> (via web post)
        </a>  | 
        <a href="http://groups.yahoo.com/group/extremeprogramming/post;_ylc=X3oDMTJlcT \
I5czRuBF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTIwMTYwNDgxNA--" \
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=X3oDMTJlZmRoOWtiBF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA21zZ3MEc3RpbWUDMTIwMTYwNDgxNA--">Messages</a> \
  |    <a href="http://groups.yahoo.com/group/extremeprogramming/files;_ylc=X3oDMTJmNz \
dwbTJmBF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA2ZpbGVzBHN0aW1lAzEyMDE2MDQ4MTQ-">Files</a> \
  |    <a href="http://groups.yahoo.com/group/extremeprogramming/photos;_ylc=X3oDMTJlZ \
WR2cnM5BF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA3Bob3QEc3RpbWUDMTIwMTYwNDgxNA--">Photos</a> \
  |    <a href="http://groups.yahoo.com/group/extremeprogramming/links;_ylc=X3oDMTJmZD \
BiODhkBF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA2xpbmtzBHN0aW1lAzEyMDE2MDQ4MTQ-">Links</a> \
  |    <a href="http://groups.yahoo.com/group/extremeprogramming/database;_ylc=X3oDMTJ \
jbGE3a2hvBF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA2RiBHN0aW1lAzEyMDE2MDQ4MTQ-">Database</a> \
  |    <a href="http://groups.yahoo.com/group/extremeprogramming/polls;_ylc=X3oDMTJmN2 \
Qya2xyBF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA3BvbGxzBHN0aW1lAzEyMDE2MDQ4MTQ-">Polls</a> \
  |    <a href="http://groups.yahoo.com/group/extremeprogramming/members;_ylc=X3oDMTJl \
ODdxa2ZuBF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA21icnMEc3RpbWUDMTIwMTYwNDgxNA--">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=X3oDMTJkdG82cGc0BF9TAzk3MzU5NzE0BGdycElkA \
                zE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA2dmcARzdGltZQMxMjAxNjA0ODE0">
                
      <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=X3oDMTJmN2w1bjNwBF9TA \
zk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA3N0bmdzBHN0aW1lAzEyMDE2MDQ4MTQ-">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=X3oDMTJkZ3MxZWFnB \
F9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwNmdHIEc2xrA2hwZgRzdGltZQMxMjAxNjA0ODE0">
  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>26</div>  <div class="cat"><a \
href="http://groups.yahoo.com/group/extremeprogramming/members;_ylc=X3oDMTJmN2RpMDRjBF \
9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwN2dGwEc2xrA3ZtYnJzBHN0aW1lAzEyMDE2MDQ4MTQ-">New \
Members</a></div>  </li>
  
            
            
            
            
            
        </ul>
            <a href="http://groups.yahoo.com/group/extremeprogramming;_ylc=X3oDMTJlN2l \
1ZGk0BF9TAzk3MzU5NzE0BGdycElkAzE1MDU0MDkEZ3Jwc3BJZAMxNzA3Mjc2NzE4BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTIwMTYwNDgxNA--">
  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=13oh477kd/M=493064.12016257.12445664.8674578/D \
=groups/S=1707276718:NC/Y=YAHOO/EXP=1201612014/L=/B=I23.ANFJq2g-/J=1201604814853573/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">New business?</div> 
<p><a href="http://us.ard.yahoo.com/SIG=13opjp6bs/M=493064.12016308.12445700.8674578/D \
=groups/S=1707276718:NC/Y=YAHOO/EXP=1201612014/L=/B=JG3.ANFJq2g-/J=1201604814853573/A= \
3848640/R=0/SIG=131an6mds/*http://searchmarketing.yahoo.com/arp/srchv2.php?o=US2002&cmp=Yahoo&ctv=Groups1&s=Y&s2=&s3=&b=50">Get \
new customers.</a></p>  <p>List your web site</p> 
<p>in Yahoo! Search.</p>                  </div>
                    <div class="ad">
                      <div id="hd1">Yahoo! Groups</div> 
<p><a href="http://us.ard.yahoo.com/SIG=13oi4gc6s/M=493064.12117566.12537396.8674578/D \
=groups/S=1707276718:NC/Y=YAHOO/EXP=1201612014/L=/B=JW3.ANFJq2g-/J=1201604814853573/A=5170415/R=0/SIG=11btjb8oo/*http://new.groups.yahoo.com/craftsmanlawn">Lawn \
&amp; Garden</a></p>  <p>ideas and tips</p> 
<p>for a green thumb.</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=138435/stime=1201604814/nc1=4507179/nc2=3848640/nc3=5170415" \
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