[TFUI] Re: [XP] What's up with Rails?
"Phlip" <[email protected]> Fri, 1 Dec 2006 11:35:32 -0800
| Newsgroups | gmane.comp.programming.test-first-user-interfaces,gmane.comp.programming.extreme-programming |
|---|---|
| Message-ID | <046401c7157f$de993180$81a1b04c@Marley> |
--0iBPp0zTnWtjA5IZFOdJZdvP4x1dvn8PKPx8QQx
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 7bit
Shane Mingins wrote:
> That currently would be my sentiment too. I am hoping to use Rails
> more.
The best accolade for Ruby, so far, comes from the Pragmatic Programmers:
Ruby stays out of your way
That's a good way to say that Ruby has a user-interface tuned for
programmer's needs. (It's also an excuse why Ruby puts the needs of the
programmer above those of the CPU!)
I thought of a similar accolade for Rails:
Rails shortens the distances between two points
Under classical web programming, you typically must add a variable to both
the SQL and HTML, then you must spend hours adding plumbing and
infrastructure to link the two.
Rails flattens that problem. You can often add a variable to the SQL, match
it in the HTML, and add _nothing_ in between. Rails took care of the
plumbing for you. And if you need that variable in the controller layer, to
add business logic, then it's usually ready and waiting for you.
> I have just read Cody Fauser's RJS Template for Rails which had
> a link about TDD RJS. I have yet to try it out. It may be of
> interest to you if you have not already seen it.
>
> http://glu.ttono.us/articles/2006/05/29/guide-test-driven-rjs-with-arts
I rebutt that effort (although I am almost about to use it myself). It's a
good first start, but it's not really TDD as we know it. I will explain why,
starting with a simpler HTML example.
(RJS is a module that generates JavaScript, so you can minimize swapping
between languages, not worry about escapes, etc...)
If I wrote HTML, it might look like: <em>yo<strong>dude</em></strong>.
So this is not a good test for that:
assert_equal '<em>yo<strong>dude</em></strong>', my_html
We wouldn't do that for TDD on the Logic Layer, so we shouldn't accept it
for the GUI Layer. It only tests that an intermediate artifact trivially
matches our test reference.
And it didn't catch the bug - the tags are not nested.
assert_rjs is a very pretty, high-level way to do just this. It does not
test that RJS emitted JavaScript that indeed updates one of our panels, and
indeed turned another panel blue. Instead, it trivially tests that the
production code emitted the JavaScript said it would emit.
Here's the RJS to update a panel:
page.replace_html 'span_id', '<em>yo<strong>dude</strong></em>'
That is light-years more convenient than the equivalent 200 lines of
portable and browser-neutral JavaScript. But is this a valid test for it?
assert_rjs :replace_html, 'span_id', '<em>yo<strong>dude</strong></em>'
It's a decorated form of a Log String Test. It treats the RJS page object as
a mock object that absorbs a string recording all its calls, then it
trivially matches that the page object contains JavaScript matching all
those calls.
Bugs could waltz thru that system with impunity. And, that system would
impede legitimate re-work which did . Those are the two indicators of TFUI
failure.
Short-term, the only fix is to augment our Ajax with acceptance tests, such
as Watir. Long term, assert_rjs could upgrade to start interpreting that
JavaScript instead of just matching it.
Tip: Much JavaScript looks a lot like Ruby. So if we tweaked it and then
trivially eval()-ed it, we could build a mock browser.
> BTW ... nice job on the amazon site ;-)
Dude, I have finally go to the point where writing about this stuff takes
longer than actually doing it!!
--
Phlip
http://www.greencheese.us/ZeekLand <-- NOT a blog!!!
--0iBPp0zTnWtjA5IZFOdJZdvP4x1dvn8PKPx8QQx
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
</head>
<!-- Network content -->
<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>Shane Mingins wrote:<br>
<br>
> That currently would be my sentiment too. I am hoping to use Rails<br>
> more.<br>
<br>
The best accolade for Ruby, so far, comes from the Pragmatic Programmers:<br>
<br>
Ruby stays out of your way<br>
<br>
That's a good way to say that Ruby has a user-interface tuned for <br>
programmer's needs. (It's also an excuse why Ruby puts the needs of the <br>
programmer above those of the CPU!)<br>
<br>
I thought of a similar accolade for Rails:<br>
<br>
Rails shortens the distances between two points<br>
<br>
Under classical web programming, you typically must add a variable to both <br>
the SQL and HTML, then you must spend hours adding plumbing and <br>
infrastructure to link the two.<br>
<br>
Rails flattens that problem. You can often add a variable to the SQL, match <br>
it in the HTML, and add _nothing_ in between. Rails took care of the <br>
plumbing for you. And if you need that variable in the controller layer, to <br>
add business logic, then it's usually ready and waiting for you.<br>
<br>
> I have just read Cody Fauser's RJS Template for Rails which had<br>
> a link about TDD RJS. I have yet to try it out. It may be of<br>
> interest to you if you have not already seen it.<br>
><br>
> <a href="http://glu.ttono.us/articles/2006/05/29/guide-test-driven-rjs-with-arts">http://glu.ttono.<wbr>us/articles/<wbr>2006/05/29/<wbr>guide-test-<wbr>driven-rjs-<wbr>with-arts</a><br>
<br>
I rebutt that effort (although I am almost about to use it myself). It's a <br>
good first start, but it's not really TDD as we know it. I will explain why, <br>
starting with a simpler HTML example.<br>
<br>
(RJS is a module that generates JavaScript, so you can minimize swapping <br>
between languages, not worry about escapes, etc...)<br>
<br>
If I wrote HTML, it might look like: <em>yo<strong><wbr>dude</em><wbr></strong><wbr>.<br>
<br>
So this is not a good test for that:<br>
<br>
assert_equal '<em>yo<strong><wbr>dude</em><wbr></strong><wbr>', my_html<br>
<br>
We wouldn't do that for TDD on the Logic Layer, so we shouldn't accept it <br>
for the GUI Layer. It only tests that an intermediate artifact trivially <br>
matches our test reference.<br>
<br>
And it didn't catch the bug - the tags are not nested.<br>
<br>
assert_rjs is a very pretty, high-level way to do just this. It does not <br>
test that RJS emitted JavaScript that indeed updates one of our panels, and <br>
indeed turned another panel blue. Instead, it trivially tests that the <br>
production code emitted the JavaScript said it would emit.<br>
<br>
Here's the RJS to update a panel:<br>
<br>
page.replace_<wbr>html 'span_id', '<em>yo<strong><wbr>dude</strong><wbr></em>'<br>
<br>
That is light-years more convenient than the equivalent 200 lines of <br>
portable and browser-neutral JavaScript. But is this a valid test for it?<br>
<br>
assert_rjs :replace_html, 'span_id', '<em>yo<strong><wbr>dude</strong><wbr></em>'<br>
<br>
It's a decorated form of a Log String Test. It treats the RJS page object as <br>
a mock object that absorbs a string recording all its calls, then it <br>
trivially matches that the page object contains JavaScript matching all <br>
those calls.<br>
<br>
Bugs could waltz thru that system with impunity. And, that system would <br>
impede legitimate re-work which did . Those are the two indicators of TFUI <br>
failure.<br>
<br>
Short-term, the only fix is to augment our Ajax with acceptance tests, such <br>
as Watir. Long term, assert_rjs could upgrade to start interpreting that <br>
JavaScript instead of just matching it.<br>
<br>
Tip: Much JavaScript looks a lot like Ruby. So if we tweaked it and then <br>
trivially eval()-ed it, we could build a mock browser.<br>
<br>
> BTW ... nice job on the amazon site ;-)<br>
<br>
Dude, I have finally go to the point where writing about this stuff takes <br>
longer than actually doing it!!<br>
<br>
-- <br>
Phlip<br>
<a href="http://www.greencheese.us/ZeekLand">http://www.greenche<wbr>ese.us/ZeekLand</a> <-- NOT a blog!!! <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/TestFirstUserInterfaces/message/973;_ylc=X3oDMTMydGJ0cmRyBF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxNzA1MDA3MjA3BG1zZ0lkAzk3MwRzZWMDZnRyBHNsawN2dHBjBHN0aW1lAzExNjUwMDE4NTgEdHBjSWQDOTcz">
Messages in this topic </a> (<span class="bld">1</span>)
</span>
<a href="http://groups.yahoo.com/group/TestFirstUserInterfaces/post;_ylc=X3oDMTJvZXB1dnRwBF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxNzA1MDA3MjA3BG1zZ0lkAzk3MwRzZWMDZnRyBHNsawNycGx5BHN0aW1lAzExNjUwMDE4NTg-?act=reply&messageNum=973">
<span class="bld">
Reply </span> (via web post)
</a> |
<a href="http://groups.yahoo.com/group/TestFirstUserInterfaces/post;_ylc=X3oDMTJlZmp2azA2BF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxNzA1MDA3MjA3BHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTE2NTAwMTg1OA--" 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/TestFirstUserInterfaces/messages;_ylc=X3oDMTJlNXQ2bHJ1BF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxNzA1MDA3MjA3BHNlYwNmdHIEc2xrA21zZ3MEc3RpbWUDMTE2NTAwMTg1OA--">Messages</a>
| <a href="http://groups.yahoo.com/group/TestFirstUserInterfaces/files;_ylc=X3oDMTJmOTdobDg5BF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxNzA1MDA3MjA3BHNlYwNmdHIEc2xrA2ZpbGVzBHN0aW1lAzExNjUwMDE4NTg-">Files</a>
| <a href="http://groups.yahoo.com/group/TestFirstUserInterfaces/photos;_ylc=X3oDMTJlMjd0NHVrBF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxNzA1MDA3MjA3BHNlYwNmdHIEc2xrA3Bob3QEc3RpbWUDMTE2NTAwMTg1OA--">Photos</a>
| <a href="http://groups.yahoo.com/group/TestFirstUserInterfaces/links;_ylc=X3oDMTJmaDZvajgxBF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxNzA1MDA3MjA3BHNlYwNmdHIEc2xrA2xpbmtzBHN0aW1lAzExNjUwMDE4NTg-">Links</a>
| <a href="http://groups.yahoo.com/group/TestFirstUserInterfaces/database;_ylc=X3oDMTJjNGEwamc1BF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxNzA1MDA3MjA3BHNlYwNmdHIEc2xrA2RiBHN0aW1lAzExNjUwMDE4NTg-">Database</a>
| <a href="http://groups.yahoo.com/group/TestFirstUserInterfaces/polls;_ylc=X3oDMTJmZGtwM2p2BF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxNzA1MDA3MjA3BHNlYwNmdHIEc2xrA3BvbGxzBHN0aW1lAzExNjUwMDE4NTg-">Polls</a>
| <a href="http://groups.yahoo.com/group/TestFirstUserInterfaces/members;_ylc=X3oDMTJlcWljdW5sBF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxNzA1MDA3MjA3BHNlYwNmdHIEc2xrA21icnMEc3RpbWUDMTE2NTAwMTg1OA--">Members</a>
| <a href="http://groups.yahoo.com/group/TestFirstUserInterfaces/calendar;_ylc=X3oDMTJka2wya2E3BF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxNzA1MDA3MjA3BHNlYwNmdHIEc2xrA2NhbARzdGltZQMxMTY1MDAxODU4">Calendar</a>
</div>
<!-- |**|end egp html banner|**| -->
<!-- Do not have place to put it yet -->
<div id="ygrp-grft">
</div>
<!-- yahoo logo -->
<!-- |**|begin egp html banner|**| -->
<div id="ygrp-ft">
<a href="http://groups.yahoo.com/;_ylc=X3oDMTJkNTQ3ZHM0BF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxNzA1MDA3MjA3BHNlYwNmdHIEc2xrA2dmcARzdGltZQMxMTY1MDAxODU4">
<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/TestFirstUserInterfaces/join;_ylc=X3oDMTJmcDdpbGozBF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxNzA1MDA3MjA3BHNlYwNmdHIEc2xrA3N0bmdzBHN0aW1lAzExNjUwMDE4NTg-">Change settings via the Web</a> (Yahoo! ID required) <br>
Change settings via email: <a href="mailto:TestFirstUserInterfaces-digest-hHKSG33TihhbjbujkaE4pw@public.gmane.org?subject=Email Delivery: Digest">Switch delivery to Daily Digest</a> | <a href = "mailto:TestFirstUserInterfaces-traditional-hHKSG33TihhbjbujkaE4pw@public.gmane.org?subject=Change Delivery Format: Traditional">Switch format to Traditional</a> <br>
<a href="http://groups.yahoo.com/group/TestFirstUserInterfaces;_ylc=X3oDMTJkcGFmMzZ0BF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxNzA1MDA3MjA3BHNlYwNmdHIEc2xrA2hwZgRzdGltZQMxMTY1MDAxODU4">
Visit Your Group
</a> |
<a href="http://docs.yahoo.com/info/terms/">
Yahoo! Groups Terms of Use </a> |
<a href="mailto:TestFirstUserInterfaces-unsubscribe-hHKSG33TihhbjbujkaE4pw@public.gmane.org?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">
<a href="http://groups.yahoo.com/group/TestFirstUserInterfaces;_ylc=X3oDMTJla2ptazVsBF9TAzk3MzU5NzE0BGdycElkAzg3NDQ3MDQEZ3Jwc3BJZAMxNzA1MDA3MjA3BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTE2NTAwMTg1OA--">
Visit Your Group </a>
</div>
<div id="hd">SPONSORED LINKS</div>
<div id="ov">
<ul>
<li><a href="http://groups.yahoo.com/gads;_ylc=X3oDMTJjbjk5OTNmBF9TAzk3MzU5NzE0BF9wAzEEZ3JwSWQDODc0NDcwNARncnBzcElkAzE3MDUwMDcyMDcEc2VjA3NsbW9kBHN0aW1lAzExNjUwMDE4NTk-?t=ms&k=Software+development+tool&w1=Software+development+tool&w2=Application+development+software&w3=Development+software&w4=Development+outsourcing+software&w5=Embedded+software+development&c=5&s=168&g=2&.sig=dMdO9VHGmvW_YJCzvobcVA">Software development tool</a></li>
<li><a href="http://groups.yahoo.com/gads;_ylc=X3oDMTJjdWtzY3FlBF9TAzk3MzU5NzE0BF9wAzIEZ3JwSWQDODc0NDcwNARncnBzcElkAzE3MDUwMDcyMDcEc2VjA3NsbW9kBHN0aW1lAzExNjUwMDE4NTk-?t=ms&k=Application+development+software&w1=Software+development+tool&w2=Application+development+software&w3=Development+software&w4=Development+outsourcing+software&w5=Embedded+software+development&c=5&s=168&g=2&.sig=L7Zs-h76VVahdNyx1QnUHg">Application development software</a></li>
<li><a href="http://groups.yahoo.com/gads;_ylc=X3oDMTJjNXBsZ2d0BF9TAzk3MzU5NzE0BF9wAzMEZ3JwSWQDODc0NDcwNARncnBzcElkAzE3MDUwMDcyMDcEc2VjA3NsbW9kBHN0aW1lAzExNjUwMDE4NTk-?t=ms&k=Development+software&w1=Software+development+tool&w2=Application+development+software&w3=Development+software&w4=Development+outsourcing+software&w5=Embedded+software+development&c=5&s=168&g=2&.sig=mgzP-_wxW4LP9qRGd-WceA">Development software</a></li>
<li><a href="http://groups.yahoo.com/gads;_ylc=X3oDMTJjMWJnajg2BF9TAzk3MzU5NzE0BF9wAzQEZ3JwSWQDODc0NDcwNARncnBzcElkAzE3MDUwMDcyMDcEc2VjA3NsbW9kBHN0aW1lAzExNjUwMDE4NTk-?t=ms&k=Development+outsourcing+software&w1=Software+development+tool&w2=Application+development+software&w3=Development+software&w4=Development+outsourcing+software&w5=Embedded+software+development&c=5&s=168&g=2&.sig=To5fERSOzD6F-d_wLzNE1w">Development outsourcing software</a></li>
<li><a href="http://groups.yahoo.com/gads;_ylc=X3oDMTJjNWFpMXZiBF9TAzk3MzU5NzE0BF9wAzUEZ3JwSWQDODc0NDcwNARncnBzcElkAzE3MDUwMDcyMDcEc2VjA3NsbW9kBHN0aW1lAzExNjUwMDE4NTk-?t=ms&k=Embedded+software+development&w1=Software+development+tool&w2=Application+development+software&w3=Development+software&w4=Development+outsourcing+software&w5=Embedded+software+development&c=5&s=168&g=2&.sig=uSsL2YUoig8RH1hp4MMhQg">Embedded software development</a></li>
</ul>
</div>
<!-- Network content -->
<div id="nc">
<div class="ad">
<div id="hd1">New business?</div>
<p><a href="http://us.ard.yahoo.com/SIG=12hk0kqd5/M=493064.8985663.9760769.8674578/D=groups/S=1705007207:NC/Y=YAHOO/EXP=1165009059/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">Y! Toolbar</div>
<p><a href="http://us.lrd.yahoo.com/_ylc=X3oDMTJvbGZkcjlmBF9TAzk3MzU5NzE0BF9wAzIEZ3JwSWQDODc0NDcwNARncnBzcElkAzE3MDUwMDcyMDcEc2VjA25jbW9kBHNsawN0b29sYmFyBHN0aW1lAzExNjUwMDE4NTg-;_ylg=1/SIG=11c6dvmk9/**http%3a//toolbar.yahoo.com/%3f.cpdl=ygrps">Get it Free!</a></p>
<p>easy 1-click access</p>
<p>to your groups.</p>
</div>
<div class="ad">
<div id="hd1">Yahoo! Groups</div>
<p><a href="http://groups.yahoo.com/start;_ylc=X3oDMTJvbmNvcGJxBF9TAzk3MzU5NzE0BF9wAzMEZ3JwSWQDODc0NDcwNARncnBzcElkAzE3MDUwMDcyMDcEc2VjA25jbW9kBHNsawNncm91cHMyBHN0aW1lAzExNjUwMDE4NTg-">Start a group</a></p>
<p>in 3 easy steps.</p>
<p>Connect with others.</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=8744704/grpspId=1705007207/msgId=973/stime=1165001858/nc1=3848640/nc2=2/nc3=3" width="1" height="1"> <br>
<span style="color: white;">__,_._,___</span>
<!--~-|**|PrettyHtmlEnd|**|-~-->
</body>
<!--~-|**|PrettyHtmlStart|**|-~-->
<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 -->
--0iBPp0zTnWtjA5IZFOdJZdvP4x1dvn8PKPx8QQx--