<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0" xml:lang="en" xml:base="http://www.symphonious.net/wp-atom.php"><title type="text">Symphonious</title> <subtitle type="text">Living in a state of accord.</subtitle> <updated>2012-05-17T10:20:24Z</updated><link rel="alternate" type="text/html" href="http://www.symphonious.net" /> <id>http://www.symphonious.net/feed/atom/</id> <generator uri="http://wordpress.org/" version="3.3.2">WordPress</generator> <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/symphonious" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="symphonious" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry> <author> <name>Adrian Sutton</name> <uri>http://www.symphonious.net</uri> </author><title type="html"><![CDATA[So Long EditLive! and Thanks For All The Fish (with rounded corners and drop shadows)]]></title><link rel="alternate" type="text/html" href="http://www.symphonious.net/2012/05/17/so-long-editlive-and-thanks-for-all-the-fish-with-rounded-corners-and-drop-shadows/" /> <id>http://www.symphonious.net/?p=1691</id> <updated>2012-05-17T10:20:24Z</updated> <published>2012-05-17T10:20:24Z</published> <category scheme="http://www.symphonious.net" term="Editors" /> <summary type="html"><![CDATA[Since the very early days of my blogging, I&#8217;ve integrated a copy of EditLive! to make the editing pleasant and more powerful. For many, many years there was simply no way I could bring myself to use anything else. Lately though, Apple have been making Java applets less and less appealing while browsers have been [...]]]></summary> <content type="html" xml:base="http://www.symphonious.net/2012/05/17/so-long-editlive-and-thanks-for-all-the-fish-with-rounded-corners-and-drop-shadows/">&lt;p&gt;Since the very early days of my blogging, I&amp;#8217;ve integrated a copy of EditLive! to make the editing pleasant and more powerful. For many, many years there was simply no way I could bring myself to use anything else. Lately though, Apple have been making Java applets less and less appealing while browsers have been continuously improving their content editable suport and JavaScript editors have gotten better at working around the remaining quirks and smoothing off the rough edges on the editing experience.  The final straw for me though was that the current early access release of EditLive! 8.0, which appears to include a lot of fixes for the latest OS X, breaks backwards compatibility with a number of APIs I use to integrate it into this blog.&lt;/p&gt;&lt;p&gt;So the time has finally come to switch to TinyMCE. I still have a custom plugin to fix some of the incredibly poor configuration choices made by default in WordPress (&lt;a
title="P tags are important remember" href="http://www.symphonious.net/2010/09/07/why-p-tags-are-your-friends/"&gt;P tags are important remember!&lt;/a&gt;) but it&amp;#8217;s significantly less custom code and complexity. There are also a bunch of new features that have built into WordPress which I&amp;#8217;d never enabled in my EditLive! integration which are nice to have.  The biggest win however is that I can now write blog posts on my iPad, so hopefully I can share a few more links and quick thoughts without having to drag out my laptop.&lt;/p&gt;&lt;p&gt;It is sad to retire EditLive! though. I worked to build it almost from scratch for nearly 10 years and for most if not all of that time it was the absolute cream of the crop for in browser editing with features and usability that were simply unmatched. I have some slight consolation that I&amp;#8217;ve also been able to spend some time contributing to TinyMCE and I know the guys behind it are top notch so I&amp;#8217;m happy to pass the baton of favourite editor over. I will miss the integrated image editor and its rounded corners and drop shadows&amp;#8230;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/symphonious/~4/AugMs9VDoBU" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.symphonious.net/2012/05/17/so-long-editlive-and-thanks-for-all-the-fish-with-rounded-corners-and-drop-shadows/#comments" thr:count="0" /><link rel="replies" type="application/atom+xml" href="http://www.symphonious.net/2012/05/17/so-long-editlive-and-thanks-for-all-the-fish-with-rounded-corners-and-drop-shadows/feed/atom/" thr:count="0" /> <thr:total>0</thr:total> </entry> <entry> <author> <name>Adrian Sutton</name> <uri>http://www.symphonious.net</uri> </author><title type="html"><![CDATA[Growing a Team By Investing in Tools]]></title><link rel="alternate" type="text/html" href="http://www.symphonious.net/2012/05/16/growing-a-team-by-investing-in-tools/" /> <id>http://www.symphonious.net/?p=1683</id> <updated>2012-05-16T00:27:23Z</updated> <published>2012-05-16T00:17:49Z</published> <category scheme="http://www.symphonious.net" term="Code and Geek Stuff" /> <summary type="html"><![CDATA[It&#8217;s widely recognised that adding people to a team often doesn&#8217;t result in increases in velocity and can even reduce the velocity of the team due to the extra communication overhead. Instead, teams look to increasing levels of automation and tools to improve their productivity without adding extra people. Where many teams struggle however is [...]]]></summary> <content type="html" xml:base="http://www.symphonious.net/2012/05/16/growing-a-team-by-investing-in-tools/">&lt;p&gt;&lt;img
class="size-thumbnail wp-image-1687 alignleft" src="http://www.symphonious.net/wp-content/uploads/2012/05/Andy_Tools_Hammer_Spanner-150x150.png" alt="Tools" width="150" height="150" /&gt;It&amp;#8217;s widely recognised that adding people to a team often doesn&amp;#8217;t result in increases in velocity and can even reduce the velocity of the team due to the extra communication overhead. Instead, teams look to increasing levels of automation and tools to improve their productivity without adding extra people.&lt;/p&gt;&lt;p&gt;Where many teams struggle however is in finding the right balance of building out the product versus &amp;#8220;sharpening the saw&amp;#8221; by improving their tools and automating processes. With the same people attempting to do both jobs that contention is unavoidable.&lt;/p&gt;&lt;p&gt;The solution then is to build a second team who&amp;#8217;s job is entirely focussed on building, maintaining, configuring and improving the tools that the product team uses. Since the majority of tools used by a project are fairly orthogonal to the project itself &amp;#8211; and often shared with other product teams &amp;#8211; the tool team can be much more independent, reducing the communication overhead. Not only do the product team now have more time to devote to improving the product, they are continuously made more productive because of the work done by the tools team.&lt;/p&gt;&lt;p&gt;The most common argument against having a separate team devoted to tools is that the people building the actual product are in the best position to know what tools will make them work better and exactly how those tools should work. While this is certainly true, agile development methods are explicitly designed to help one team efficiently deliver solutions to other people&amp;#8217;s problems. The customer for the tools team is the product team &amp;#8211; and they already have a common understanding of software development and speak roughly the same language.&lt;/p&gt;&lt;p&gt;This certainly isn&amp;#8217;t a new idea &amp;#8211; Fred Brooks suggests it in &lt;em&gt;The Mythical Man Month&lt;/em&gt; &amp;#8211; and it&amp;#8217;s used in many large companies but many small teams have a hard time switching over to this level of thinking, unable to really believe that adding people to the product team may make it go slower and that the same number of people could do significantly more if they had better tools. The time to create a dedicated tools team is significantly earlier in a team&amp;#8217;s growth than most people initially think.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/symphonious/~4/Tsy77u7jgEs" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.symphonious.net/2012/05/16/growing-a-team-by-investing-in-tools/#comments" thr:count="0" /><link rel="replies" type="application/atom+xml" href="http://www.symphonious.net/2012/05/16/growing-a-team-by-investing-in-tools/feed/atom/" thr:count="0" /> <thr:total>0</thr:total> </entry> <entry> <author> <name>Adrian Sutton</name> <uri>http://www.symphonious.net</uri> </author><title type="html"><![CDATA[Go Faster By Not Working]]></title><link rel="alternate" type="text/html" href="http://www.symphonious.net/2012/05/02/go-faster-by-not-working/" /> <id>http://www.symphonious.net/?p=1674</id> <updated>2012-05-02T00:37:35Z</updated> <published>2012-05-02T00:37:35Z</published> <category scheme="http://www.symphonious.net" term="Code and Geek Stuff" /> <summary type="html"><![CDATA[We all know by now that continuous integration is part of good software development &#8211; check in regularly and have a suite of automated tests run to confirm that everything is working as expected. If a test fails, jump on it quickly and get the build back to green. Simple right? But what happens when [...]]]></summary> <content type="html" xml:base="http://www.symphonious.net/2012/05/02/go-faster-by-not-working/">&lt;p&gt; We all know by now that continuous integration is part of good software development &amp;#8211; check in regularly and have a suite of automated tests run to confirm that everything is working as expected. If a test fails, jump on it quickly and get the build back to green. Simple right?&lt;/p&gt;&lt;p&gt; But what happens when something goes wrong in a way that can’t be fixed quickly? For example, the build server has a hardware fault or runs out of disk space. You can’t just rollback the faulty change, its going to take time to get the build back to green. As your CI system grows, it may take time just to understand what went wrong. If your team is small they may all be taken up fixing the problem, but if the team is larger a pair focusses on fixing the build as quickly as possible and the other developers carry on working. Now you have two problems.&lt;/p&gt;&lt;p&gt; You still have the build problem, but now you also have a process problem because you’re no longer doing continuous integration. When things are working well in continuous integration, you have a continuous stream of commits proceeding through the build pipeline. If a bug is introduced the build quickly picks it up and you can identify the problem change easily because it can only be one of a few commits.&lt;/p&gt;&lt;p
style=" text-align: center;"&gt; &lt;img
alt="Continuous integration working well - a stream of commits passing through the pipeline." src="http://www.symphonious.net/wp-content/uploads/2012/05/image2965046030390348857_1222225160557456570.png" /&gt;&lt;/p&gt;&lt;p&gt; On the other hand, if developers keep working while the build is broken, they build up a large backlog of commits which makes it more difficult to identify which revision broke the build. It also makes it significantly harder to resolve the build problem because the code keeps changing and you can easily wind up with multiple build breakages starting to overlap and interact.&lt;/p&gt;&lt;p
style=" text-align: center;"&gt; &lt;img
alt="Broken continuous integration - a huge pile of commits building up." src="http://www.symphonious.net/wp-content/uploads/2012/05/image7545922542583712524_8080554261800327154.png" /&gt;&lt;/p&gt;&lt;p&gt; To avoid this problem, many companies put up an embargo on commits or close the source tree to prevent any further changes from being committed. This controls change in the build environment and makes it easier to resolve the problem, but it doesn’t prevent the build-up of changes. The result is that when the embargo is lifted, there is a huge swarm of incoming changes all at once, introducing merging problems and making it difficult to identify the culprit if any of them introduce another problem. There could well be multiple problems introduced by that batch of changes with their effects overlapping and interacting making it even harder. Essentially, the longer an embargo is up the greater the chance that it will need to be put back up because of problems in the batch of changes developed during the embargo.&lt;/p&gt;&lt;p&gt; So what’s the answer? Simple &amp;#8211; stop working. The team as a whole will go faster if developers simply stop writing code once they reach the point where they would normally commit but can’t because there’s an embargo. For short embargos, most developers won’t be affected at all, but as the embargo lasts longer more and more developers will have to stop work. This feels really bad, but it ensures we keep doing continuous integration and overall benefits the team’s productivity. For build problems that are hard to understand, it also means that gradually more and more developers are available to spitball ideas about what’s wrong and to pick up lines of investigation to help get the build working again.&lt;/p&gt;&lt;p&gt; Also, not coding doesn’t mean that developers can’t do anything at all, maybe now is a good time to do those higher level design sessions and ensure everyone is pushing in the same direction, maybe read up on technology that is either in use but not fully understood, or that could be of benefit if it was introduced. If there are spikes to be played, they can usually still be picked up and worked on, write a blog post (like say, this one). Or even just take an early lunch.&lt;/p&gt;&lt;p&gt; The bottom line is that build breakages are always hugely expensive &amp;#8211; pretending that everything is normal and you can continue work when the build system is broken doesn’t make them any less expensive, it just makes you look busier while creating the next problem.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/symphonious/~4/8gqWzIwwUWg" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.symphonious.net/2012/05/02/go-faster-by-not-working/#comments" thr:count="0" /><link rel="replies" type="application/atom+xml" href="http://www.symphonious.net/2012/05/02/go-faster-by-not-working/feed/atom/" thr:count="0" /> <thr:total>0</thr:total> </entry> <entry> <author> <name>Adrian Sutton</name> <uri>http://www.symphonious.net</uri> </author><title type="html"><![CDATA[Ignoring Changes to Tracked Files in Git]]></title><link rel="alternate" type="text/html" href="http://www.symphonious.net/2012/03/27/ignoring-changes-to-tracked-files-in-git/" /> <id>http://www.symphonious.net/?p=1669</id> <updated>2012-03-27T06:25:49Z</updated> <published>2012-03-27T06:25:49Z</published> <category scheme="http://www.symphonious.net" term="Note To Self" /><category scheme="http://www.symphonious.net" term="Source Control" /> <summary type="html"><![CDATA[I’m going to want to remember this one day, so here’s a pointer to Rob Wilderson’s Ignore Changes to Tracked Files in Git. I’m especially going to want to remember the bit about how to find which files I’ve ignored in this way.]]></summary> <content type="html" xml:base="http://www.symphonious.net/2012/03/27/ignoring-changes-to-tracked-files-in-git/">&lt;p&gt; I’m going to want to remember this one day, so here’s a pointer to &lt;a
href="http://archive.robwilkerson.org/2010/03/02/git-tip-ignore-changes-to-tracked-files/"&gt;Rob Wilderson’s Ignore Changes to Tracked Files in Git&lt;/a&gt;.&lt;/p&gt;&lt;p&gt; I’m especially going to want to remember the bit about how to find which files I’ve ignored in this way.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/symphonious/~4/tUHfba32K4c" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.symphonious.net/2012/03/27/ignoring-changes-to-tracked-files-in-git/#comments" thr:count="0" /><link rel="replies" type="application/atom+xml" href="http://www.symphonious.net/2012/03/27/ignoring-changes-to-tracked-files-in-git/feed/atom/" thr:count="0" /> <thr:total>0</thr:total> </entry> <entry> <author> <name>Adrian Sutton</name> <uri>http://www.symphonious.net</uri> </author><title type="html"><![CDATA[Resolving SVN Tree Conflicts]]></title><link rel="alternate" type="text/html" href="http://www.symphonious.net/2012/03/19/resolving-svn-tree-conflicts/" /> <id>http://www.symphonious.net/?p=1666</id> <updated>2012-03-19T23:19:59Z</updated> <published>2012-03-19T23:19:59Z</published> <category scheme="http://www.symphonious.net" term="Code and Geek Stuff" /><category scheme="http://www.symphonious.net" term="Source Control" /> <summary type="html"><![CDATA[SVN tree conflicts can be insanely annoying &#8211; especially when they occur because you’ve deleted something locally and then an incoming change also deletes it. They can also be hard to resolve from most IDEs. The trick is to resolve them from the command line. &#160;Edit/create/delete the files to get things into the state they [...]]]></summary> <content type="html" xml:base="http://www.symphonious.net/2012/03/19/resolving-svn-tree-conflicts/">&lt;p&gt; SVN tree conflicts can be insanely annoying &amp;#8211; especially when they occur because you’ve deleted something locally and then an incoming change also deletes it. They can also be hard to resolve from most IDEs.&lt;/p&gt;&lt;p&gt; The trick is to resolve them from the command line. &amp;#160;Edit/create/delete the files to get things into the state they should be and then from the command line run:&lt;/p&gt;&lt;pre&gt;
svn resolve --accept working &amp;#60;path&amp;#62;
&lt;/pre&gt;&lt;p&gt; No more tree conflict.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/symphonious/~4/IBZRxndHnKc" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.symphonious.net/2012/03/19/resolving-svn-tree-conflicts/#comments" thr:count="3" /><link rel="replies" type="application/atom+xml" href="http://www.symphonious.net/2012/03/19/resolving-svn-tree-conflicts/feed/atom/" thr:count="3" /> <thr:total>3</thr:total> </entry> <entry> <author> <name>Adrian Sutton</name> <uri>http://www.symphonious.net</uri> </author><title type="html"><![CDATA[Alternating Table Row Colours Filling All Available Space]]></title><link rel="alternate" type="text/html" href="http://www.symphonious.net/2012/03/02/alternating-table-row-colours-filling-all-available-space/" /> <id>http://www.symphonious.net/?p=1639</id> <updated>2012-03-02T03:19:01Z</updated> <published>2012-03-02T03:03:15Z</published> <category scheme="http://www.symphonious.net" term="General" /> <summary type="html"><![CDATA[CSS3 makes it trivial to have alternating row colours for tables, but when the table is in a fixed height scroll panel, it’s much more difficult to have those alternating row colours extend beyond the bottom of the table content to fill the available space. Here’s the approach I use. First let’s start with a [...]]]></summary> <content type="html" xml:base="http://www.symphonious.net/2012/03/02/alternating-table-row-colours-filling-all-available-space/">&lt;p&gt; CSS3 makes it trivial to have alternating row colours for tables, but when the table is in a fixed height scroll panel, it’s much more difficult to have those alternating row colours extend beyond the bottom of the table content to fill the available space. Here’s the approach I use.&lt;/p&gt;&lt;p&gt; First let’s start with a simple table with alternating colours in a scroll panel:&lt;/p&gt;&lt;div
id="gist-1955046" class="gist"&gt;&lt;div
class="gist-file"&gt;&lt;div
class="gist-data gist-syntax"&gt;&lt;div
class="highlight"&gt;&lt;pre&gt;&lt;div class='line' id='LC1'&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC2'&gt;&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC3'&gt;&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC4'&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;UTF-8&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC5'&gt;&lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Alternating Rows Example&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC6'&gt;&lt;span class="nt"&gt;&amp;lt;style&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC7'&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;margin&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;padding&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC8'&gt;&lt;span class="nt"&gt;table&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC9'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;border-collapse&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;collapse&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC10'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC11'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;height&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC12'&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC13'&gt;&lt;span class="nc"&gt;.scroll&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC14'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;position&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;absolute&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC15'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;top&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC16'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;bottom&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC17'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;left&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC18'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;right&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC19'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;overflow-y&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;scroll&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC20'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;overflow-x&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC21'&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC22'&gt;&lt;span class="nc"&gt;.scroll&lt;/span&gt; &lt;span class="nt"&gt;tr&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC23'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;height&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC24'&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC25'&gt;&lt;span class="nc"&gt;.striped&lt;/span&gt; &lt;span class="nt"&gt;tr&lt;/span&gt;&lt;span class="nd"&gt;:nth-child&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;odd&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC26'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;background-color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#EAEAEA&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC27'&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC28'&gt;&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC29'&gt;&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC30'&gt;&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC31'&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;scroll&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC32'&gt;&lt;span class="nt"&gt;&amp;lt;table&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;striped&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC33'&gt;&lt;span class="nt"&gt;&amp;lt;tbody&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC34'&gt;&lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;/span&gt;Row 1&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC35'&gt;&lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;/span&gt;Row 2&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC36'&gt;&lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;/span&gt;Row 3&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC37'&gt;&lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;/span&gt;Row 4&lt;span class="nt"&gt;&amp;lt;br&amp;gt;&lt;/span&gt;With an extra line&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC38'&gt;&lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;/span&gt;Row 5&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC39'&gt;&lt;span class="nt"&gt;&amp;lt;/tbody&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC40'&gt;&lt;span class="nt"&gt;&amp;lt;/table&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC41'&gt;&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC42'&gt;&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC43'&gt;&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div
class="gist-meta"&gt; &lt;a
href="https://gist.github.com/raw/1955046/d7ce07713563df5d67afc07765029a4917c7ca53/simpleTable.html" style="float:right;"&gt;view raw&lt;/a&gt; &lt;a
href="https://gist.github.com/1955046#file_simple_table.html" style="float:right;margin-right:10px;color:#666"&gt;simpleTable.html&lt;/a&gt; &lt;a
href="https://gist.github.com/1955046"&gt;This Gist&lt;/a&gt; brought to you by &lt;a
href="http://github.com"&gt;GitHub&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt; That gets us alternating row colours where there is table content. To get it to extend beyond the table content we need to add a filler row:&lt;/p&gt;&lt;div
id="gist-1955046" class="gist"&gt;&lt;div
class="gist-file"&gt;&lt;div
class="gist-data gist-syntax"&gt;&lt;div
class="highlight"&gt;&lt;pre&gt;&lt;div class='line' id='LC1'&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;scroll&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC2'&gt;&lt;span class="nt"&gt;&amp;lt;table&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;striped&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC3'&gt;&lt;span class="nt"&gt;&amp;lt;tbody&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC4'&gt;&lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;/span&gt;Row 1&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC5'&gt;&lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;/span&gt;Row 2&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC6'&gt;&lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;/span&gt;Row 3&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC7'&gt;&lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;/span&gt;Row 4&lt;span class="nt"&gt;&amp;lt;br&amp;gt;&lt;/span&gt;With an extra line&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC8'&gt;&lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;/span&gt;Row 5&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC9'&gt;&lt;span class="nt"&gt;&amp;lt;tr&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;filler&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC10'&gt;&lt;span class="nt"&gt;&amp;lt;/tbody&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC11'&gt;&lt;span class="nt"&gt;&amp;lt;/table&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC12'&gt;&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div
class="gist-meta"&gt; &lt;a
href="https://gist.github.com/raw/1955046/ff4c427ab63554314ec13b24181adbcfd250f047/fillerHtml.html" style="float:right;"&gt;view raw&lt;/a&gt; &lt;a
href="https://gist.github.com/1955046#file_filler_html.html" style="float:right;margin-right:10px;color:#666"&gt;fillerHtml.html&lt;/a&gt; &lt;a
href="https://gist.github.com/1955046"&gt;This Gist&lt;/a&gt; brought to you by &lt;a
href="http://github.com"&gt;GitHub&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt; This gives us an extra row in the table that we know will always start immediately after the last row of content in the table and line up. We can now set a &lt;a
href="http://www.symphonious.net/wp-content/uploads/2012/03/stripes.png"&gt;prepared image&lt;/a&gt; as the background of that row that preserves the alternating colours and stretch it out to take up the remaining space:&lt;/p&gt;&lt;div
id="gist-1955046" class="gist"&gt;&lt;div
class="gist-file"&gt;&lt;div
class="gist-data gist-syntax"&gt;&lt;div
class="highlight"&gt;&lt;pre&gt;&lt;div class='line' id='LC1'&gt;&lt;span class="nc"&gt;.striped&lt;/span&gt; &lt;span class="nc"&gt;.filler&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC2'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;line-height&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC3'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;background&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="sx"&gt;url(stripes.png)&lt;/span&gt; &lt;span class="k"&gt;repeat&lt;/span&gt; &lt;span class="k"&gt;top&lt;/span&gt; &lt;span class="k"&gt;left&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC4'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;height&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC5'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;padding&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC6'&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC7'&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class='line' id='LC8'&gt;&lt;span class="nc"&gt;.striped&lt;/span&gt; &lt;span class="nc"&gt;.filler&lt;/span&gt; &lt;span class="nt"&gt;td&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC9'&gt;&amp;nbsp;&lt;span class="k"&gt;padding&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC10'&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC11'&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class='line' id='LC12'&gt;&lt;span class="nc"&gt;.striped&lt;/span&gt; &lt;span class="nc"&gt;.filler&lt;/span&gt;&lt;span class="nd"&gt;:nth-child&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;even&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC13'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;background-position&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC14'&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div
class="gist-meta"&gt; &lt;a
href="https://gist.github.com/raw/1955046/e5f6e393d0cf1eab500bf259177d6ad7f9ef54c0/fillerStyles.css" style="float:right;"&gt;view raw&lt;/a&gt; &lt;a
href="https://gist.github.com/1955046#file_filler_styles.css" style="float:right;margin-right:10px;color:#666"&gt;fillerStyles.css&lt;/a&gt; &lt;a
href="https://gist.github.com/1955046"&gt;This Gist&lt;/a&gt; brought to you by &lt;a
href="http://github.com"&gt;GitHub&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt; Apart from the background image, we set the height to 100% so that our filler row fills the remaining space. If the table is empty, the filler row will get 100% height and fill all available space, if however the table has other rows in it, the table rendering algorithm will shrink our filler row down so that it can fit within the bounds of the table &amp;#8211; preventing the filler row from overflowing the scroll container and activating the scroll bar.&lt;/p&gt;&lt;p&gt; Since our background image starts with an odd row colour, if the filler row is an even row, we use background-position to shift the background image down by the height of a stripe so it effectively starts with an odd row colour.&lt;/p&gt;&lt;p&gt; We also add line-height: 0 and padding: 0 so that when the table content fills all available space (or starts scrolling), the filler row has no minimum height and disappears entirely.&lt;/p&gt;&lt;p&gt; Note that this approach will adjust perfectly well even if the content rows vary in height, because the filler row will always start immediately after the last content row and fill the available space. The height of the alternating colours in our image will just provide the default row height in the filler space.&lt;/p&gt;&lt;p&gt; If we’re only targeting modern browsers anyway, we can go ahead and replace the background image with a dynamically generated gradient:&lt;/p&gt;&lt;div
id="gist-1955046" class="gist"&gt;&lt;div
class="gist-file"&gt;&lt;div
class="gist-data gist-syntax"&gt;&lt;div
class="highlight"&gt;&lt;pre&gt;&lt;div class='line' id='LC1'&gt;&lt;span class="nc"&gt;.striped&lt;/span&gt; &lt;span class="nc"&gt;.filler&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC2'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;line-height&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC3'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;height&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC4'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;padding&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC5'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;background-image&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;linear&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;gradient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;bottom&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="o"&gt;%,&lt;/span&gt; &lt;span class="k"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC6'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;background-image&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;linear&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;gradient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;bottom&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="o"&gt;%,&lt;/span&gt; &lt;span class="k"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC7'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;background-image&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;moz&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;linear&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;gradient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;bottom&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="o"&gt;%,&lt;/span&gt; &lt;span class="k"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC8'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;background-image&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;webkit&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;linear&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;gradient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;bottom&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="o"&gt;%,&lt;/span&gt; &lt;span class="k"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC9'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;background-image&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ms&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;linear&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;gradient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;bottom&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="o"&gt;%,&lt;/span&gt; &lt;span class="k"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC10'&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class='line' id='LC11'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;background-image&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;webkit&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;gradient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC12'&gt;	&lt;span class="n"&gt;linear&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC13'&gt;	&lt;span class="k"&gt;left&lt;/span&gt; &lt;span class="k"&gt;bottom&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC14'&gt;	&lt;span class="k"&gt;left&lt;/span&gt; &lt;span class="k"&gt;top&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC15'&gt;	&lt;span class="k"&gt;color&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;stop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC16'&gt;	&lt;span class="k"&gt;color&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;stop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC17'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC18'&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class='line' id='LC19'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;webkit&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;background&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;size&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;40px&lt;/span&gt; &lt;span class="m"&gt;40px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC20'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;moz&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;background&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;size&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;40px&lt;/span&gt; &lt;span class="m"&gt;40px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC21'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ms&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;background&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;size&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;40px&lt;/span&gt; &lt;span class="m"&gt;40px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC22'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;background&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;size&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;40px&lt;/span&gt; &lt;span class="m"&gt;40px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC23'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;background&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;size&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;40px&lt;/span&gt; &lt;span class="m"&gt;40px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC24'&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div
class="gist-meta"&gt; &lt;a
href="https://gist.github.com/raw/1955046/77f1ff76b8aa7b956b6ad9b7b916f3f887d27f44/gradientStripes.css" style="float:right;"&gt;view raw&lt;/a&gt; &lt;a
href="https://gist.github.com/1955046#file_gradient_stripes.css" style="float:right;margin-right:10px;color:#666"&gt;gradientStripes.css&lt;/a&gt; &lt;a
href="https://gist.github.com/1955046"&gt;This Gist&lt;/a&gt; brought to you by &lt;a
href="http://github.com"&gt;GitHub&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt; The final version of our page is:&lt;/p&gt;&lt;div
id="gist-1955046" class="gist"&gt;&lt;div
class="gist-file"&gt;&lt;div
class="gist-data gist-syntax"&gt;&lt;div
class="highlight"&gt;&lt;pre&gt;&lt;div class='line' id='LC1'&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC2'&gt;&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC3'&gt;&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC4'&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;UTF-8&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC5'&gt;&lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Alternating Rows Example&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC6'&gt;&lt;span class="nt"&gt;&amp;lt;style&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC7'&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;margin&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;padding&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC8'&gt;&lt;span class="nt"&gt;table&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC9'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;border-collapse&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;collapse&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC10'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC11'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;height&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC12'&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC13'&gt;&lt;span class="nc"&gt;.scroll&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC14'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;position&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;absolute&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC15'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;top&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC16'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;bottom&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC17'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;left&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC18'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;right&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC19'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;overflow-y&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;scroll&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC20'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;overflow-x&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;auto&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC21'&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC22'&gt;&lt;span class="nc"&gt;.scroll&lt;/span&gt; &lt;span class="nt"&gt;tr&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC23'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;height&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC24'&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC25'&gt;&lt;span class="nc"&gt;.striped&lt;/span&gt; &lt;span class="nt"&gt;tr&lt;/span&gt;&lt;span class="nd"&gt;:nth-child&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;odd&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC26'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;background-color&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#EAEAEA&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC27'&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC28'&gt;&lt;span class="nc"&gt;.striped&lt;/span&gt; &lt;span class="nc"&gt;.filler&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC29'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;line-height&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC30'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;height&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC31'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;padding&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC32'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;background-image&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;linear&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;gradient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;bottom&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="o"&gt;%,&lt;/span&gt; &lt;span class="k"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC33'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;background-image&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;linear&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;gradient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;bottom&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="o"&gt;%,&lt;/span&gt; &lt;span class="k"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC34'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;background-image&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;moz&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;linear&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;gradient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;bottom&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="o"&gt;%,&lt;/span&gt; &lt;span class="k"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC35'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;background-image&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;webkit&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;linear&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;gradient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;bottom&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="o"&gt;%,&lt;/span&gt; &lt;span class="k"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC36'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;background-image&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ms&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;linear&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;gradient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;bottom&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="o"&gt;%,&lt;/span&gt; &lt;span class="k"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC37'&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class='line' id='LC38'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;background-image&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;webkit&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;gradient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC39'&gt;	&lt;span class="n"&gt;linear&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC40'&gt;	&lt;span class="k"&gt;left&lt;/span&gt; &lt;span class="k"&gt;bottom&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC41'&gt;	&lt;span class="k"&gt;left&lt;/span&gt; &lt;span class="k"&gt;top&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC42'&gt;	&lt;span class="k"&gt;color&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;stop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC43'&gt;	&lt;span class="k"&gt;color&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;stop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="k"&gt;rgb&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;&lt;span class="m"&gt;234&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC44'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC45'&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class='line' id='LC46'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;webkit&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;background&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;size&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;40px&lt;/span&gt; &lt;span class="m"&gt;40px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC47'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;moz&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;background&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;size&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;40px&lt;/span&gt; &lt;span class="m"&gt;40px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC48'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;ms&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;background&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;size&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;40px&lt;/span&gt; &lt;span class="m"&gt;40px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC49'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;background&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;size&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;40px&lt;/span&gt; &lt;span class="m"&gt;40px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC50'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;background&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;size&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;40px&lt;/span&gt; &lt;span class="m"&gt;40px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC51'&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC52'&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class='line' id='LC53'&gt;&lt;span class="nc"&gt;.striped&lt;/span&gt; &lt;span class="nc"&gt;.filler&lt;/span&gt; &lt;span class="nt"&gt;td&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC54'&gt;&amp;nbsp;&lt;span class="k"&gt;padding&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC55'&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC56'&gt;&lt;br/&gt;&lt;/div&gt;&lt;div class='line' id='LC57'&gt;&lt;span class="nc"&gt;.striped&lt;/span&gt; &lt;span class="nc"&gt;.filler&lt;/span&gt;&lt;span class="nd"&gt;:nth-child&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;even&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC58'&gt;&amp;nbsp;&amp;nbsp;&lt;span class="k"&gt;background-position&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC59'&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC60'&gt;&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC61'&gt;&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC62'&gt;&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC63'&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;scroll&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC64'&gt;&lt;span class="nt"&gt;&amp;lt;table&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;striped&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC65'&gt;&lt;span class="nt"&gt;&amp;lt;tbody&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC66'&gt;&lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;/span&gt;Row 1&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC67'&gt;&lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;/span&gt;Row 2&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC68'&gt;&lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;/span&gt;Row 3&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC69'&gt;&lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;/span&gt;Row 4&lt;span class="nt"&gt;&amp;lt;br&amp;gt;&lt;/span&gt;With an extra line&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC70'&gt;&lt;span class="nt"&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&lt;/span&gt;Row 5&lt;span class="nt"&gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC71'&gt;&lt;span class="nt"&gt;&amp;lt;tr&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;filler&amp;quot;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC72'&gt;&lt;span class="nt"&gt;&amp;lt;/tbody&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC73'&gt;&lt;span class="nt"&gt;&amp;lt;/table&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC74'&gt;&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC75'&gt;&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div class='line' id='LC76'&gt;&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div
class="gist-meta"&gt; &lt;a
href="https://gist.github.com/raw/1955046/5740eab08e1828c236ac30a23c176be6648585c2/final.html" style="float:right;"&gt;view raw&lt;/a&gt; &lt;a
href="https://gist.github.com/1955046#file_final.html" style="float:right;margin-right:10px;color:#666"&gt;final.html&lt;/a&gt; &lt;a
href="https://gist.github.com/1955046"&gt;This Gist&lt;/a&gt; brought to you by &lt;a
href="http://github.com"&gt;GitHub&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt; Or &lt;a
href="/alternating.html"&gt;try the demo&lt;/a&gt; in your browser.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/symphonious/~4/xvEJl5LLnIw" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.symphonious.net/2012/03/02/alternating-table-row-colours-filling-all-available-space/#comments" thr:count="0" /><link rel="replies" type="application/atom+xml" href="http://www.symphonious.net/2012/03/02/alternating-table-row-colours-filling-all-available-space/feed/atom/" thr:count="0" /> <thr:total>0</thr:total> </entry> <entry> <author> <name>Adrian Sutton</name> <uri>http://www.symphonious.net</uri> </author><title type="html"><![CDATA[How To Round-Trip Data Via SSH]]></title><link rel="alternate" type="text/html" href="http://www.symphonious.net/2012/02/28/how-to-round-trip-data-via-ssh/" /> <id>http://www.symphonious.net/?p=1637</id> <updated>2012-02-28T01:59:58Z</updated> <published>2012-02-28T01:59:58Z</published> <category scheme="http://www.symphonious.net" term="Code and Geek Stuff" /><category scheme="http://www.symphonious.net" term="Note To Self" /> <summary type="html"><![CDATA[I keep forgetting this so for the record, you can use SSH to round trip data out to a remote server and back to your own box. &#160;This is most useful for adding latency and bandwidth limitations to a connection when doing website testing. &#160;The trick is to use both local and remote port forwards: [...]]]></summary> <content type="html" xml:base="http://www.symphonious.net/2012/02/28/how-to-round-trip-data-via-ssh/">&lt;p&gt; I keep forgetting this so for the record, you can use SSH to round trip data out to a remote server and back to your own box. &amp;#160;This is most useful for adding latency and bandwidth limitations to a connection when doing website testing. &amp;#160;The trick is to use both local and remote port forwards:&lt;/p&gt;&lt;pre&gt;
ssh -L 9090:localhost:9091 -R 9091:localhost:80 remote.server.com
&lt;/pre&gt;&lt;p&gt; The -L argument starts listening on port 9090 locally and sends all that traffic to port 9091 on the remote server (the domain name, localhost, is resolved by the remote server so it refers to the remote server, not your local machine). &amp;#160;Then the -R argument listens on port 9091 of the remote server and forwards all that traffic back to your machine’s port 80 (here localhost is resolved on your local machine).&lt;/p&gt;&lt;p&gt; You don’t have to use localhost as the domain name. For example, if the site you want to test is deployed on your intranet at testmachine.intranet which remote.server.com doesn’t have access to, you could use:&lt;/p&gt;&lt;pre&gt;
ssh -L 9090:localhost:9091 -R 9091:testmachine.intranet:80 remote.server.com
&lt;/pre&gt;&lt;p&gt; Or if the test site is publicly available you can do it all without the -R argument:&lt;/p&gt;&lt;pre&gt;
ssh -L 9090:testmachine.com:80 remote.server.com
&lt;/pre&gt;&lt;p&gt; In all these cases, you connect to localhost:9090 to utilise the tunnel.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/symphonious/~4/2-9A9UWBHTw" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.symphonious.net/2012/02/28/how-to-round-trip-data-via-ssh/#comments" thr:count="0" /><link rel="replies" type="application/atom+xml" href="http://www.symphonious.net/2012/02/28/how-to-round-trip-data-via-ssh/feed/atom/" thr:count="0" /> <thr:total>0</thr:total> </entry> <entry> <author> <name>Adrian Sutton</name> <uri>http://www.symphonious.net</uri> </author><title type="html"><![CDATA[The Business of Standards]]></title><link rel="alternate" type="text/html" href="http://www.symphonious.net/2012/01/25/the-business-of-standards/" /> <id>http://www.symphonious.net/?p=1626</id> <updated>2012-01-25T21:25:34Z</updated> <published>2012-01-25T21:25:34Z</published> <category scheme="http://www.symphonious.net" term="Rants" /> <summary type="html"><![CDATA[Recently I’ve been getting spam from the “standards organisation” OASIS inviting a company that I don’t work for1 to join a new standards initiative. There’s no pretense that I’m being invited because of my clearly superior knowledge of the area involved, merely that the company could get great advertising exposure by participating &#8211; including being [...]]]></summary> <content type="html" xml:base="http://www.symphonious.net/2012/01/25/the-business-of-standards/">&lt;p&gt; Recently I’ve been getting spam from the “standards organisation” OASIS inviting a company that I don’t work for&lt;a
class="footnote" id="footlink1:1327526703777" href="#footnote1:1327526703777"&gt;1&lt;/a&gt; to join a new standards initiative. There’s no pretense that I’m being invited because of my clearly superior knowledge of the area involved, merely that the company could get great advertising exposure by participating &amp;#8211; including being listed on a press release! Naturally we’d need to become OASIS members and pay the appropriate fee, and to be in the press release you’d have to be at minimum a “sponsor level member”.&lt;/p&gt;&lt;p&gt; On the one hand it’s nice that they aren’t pretending to be anything other than a for-profit marketing company, but isn’t it a bit sad that we think standards are just a marketing tool?&lt;/p&gt;&lt;p
class="footnote"&gt; &lt;a
href="#footlink1:1327526703777" id="footnote1:1327526703777"&gt;1&lt;/a&gt; &amp;#8211; yes, they’ve done so much research into how much I have to contribute that they’ve got the company wrong &lt;a
class="footnotereturn" href="#footlink1:1327526703777"&gt;↩&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/symphonious/~4/oVRe2xbvwiQ" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.symphonious.net/2012/01/25/the-business-of-standards/#comments" thr:count="0" /><link rel="replies" type="application/atom+xml" href="http://www.symphonious.net/2012/01/25/the-business-of-standards/feed/atom/" thr:count="0" /> <thr:total>0</thr:total> </entry> <entry> <author> <name>Adrian Sutton</name> <uri>http://www.symphonious.net</uri> </author><title type="html"><![CDATA[Development Mode &#8211; Concatenating Scripts and CSS]]></title><link rel="alternate" type="text/html" href="http://www.symphonious.net/2012/01/11/development-mode-concatenating-scripts-and-css/" /> <id>http://www.symphonious.net/?p=1623</id> <updated>2012-01-11T21:37:30Z</updated> <published>2012-01-11T21:37:30Z</published> <category scheme="http://www.symphonious.net" term="Code and Geek Stuff" /> <summary type="html"><![CDATA[HTML 5 Boilerplate reminded me of an old-school tool which is extremely useful for concatenating JS and CSS files on the fly &#8211; server side includes: &#60;FilesMatch &#34;.*\.combined\.(js&#124;css)$&#34;&#62; Options +Includes SetOutputFilter INCLUDES &#60;/FilesMatch&#62; Then you have a main scripts.combined.js (or css) which contains: &#60;!--#include file=&#34;libs/backbone-min.js&#34; --&#62; &#60;!--#include file=&#34;libs/underscore-min.js&#34; --&#62; &#60;!--#include file=&#34;libs/jquery-1.7.1.min.js&#34; --&#62; Plus any other [...]]]></summary> <content type="html" xml:base="http://www.symphonious.net/2012/01/11/development-mode-concatenating-scripts-and-css/">&lt;p&gt; HTML 5 Boilerplate reminded me of an old-school tool which is extremely useful for concatenating JS and CSS files on the fly &amp;#8211; server side includes:&lt;/p&gt;&lt;pre&gt;
&amp;#60;FilesMatch &amp;quot;.*\.combined\.(js|css)$&amp;quot;&amp;#62;
  Options +Includes
  SetOutputFilter INCLUDES
&amp;#60;/FilesMatch&amp;#62;
&lt;/pre&gt;&lt;p&gt; Then you have a main scripts.combined.js (or css) which contains:&lt;/p&gt;&lt;pre&gt;
&amp;#60;!--#include file=&amp;quot;libs/backbone-min.js&amp;quot; --&amp;#62;
&amp;#60;!--#include file=&amp;quot;libs/underscore-min.js&amp;quot; --&amp;#62;
&amp;#60;!--#include file=&amp;quot;libs/jquery-1.7.1.min.js&amp;quot; --&amp;#62;
&lt;/pre&gt;&lt;p&gt; Plus any other files you need, in the order you specify. This works great for development mode so you can change a file on the fly and just refresh the browser without running any kind of build script. When it comes time to push to production, it’s easy for a build script to process the file ahead of time and be confident that you’ll get exactly the same result.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/symphonious/~4/iz-v0QgM1dY" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.symphonious.net/2012/01/11/development-mode-concatenating-scripts-and-css/#comments" thr:count="0" /><link rel="replies" type="application/atom+xml" href="http://www.symphonious.net/2012/01/11/development-mode-concatenating-scripts-and-css/feed/atom/" thr:count="0" /> <thr:total>0</thr:total> </entry> <entry> <author> <name>Adrian Sutton</name> <uri>http://www.symphonious.net</uri> </author><title type="html"><![CDATA[Cross Pairing]]></title><link rel="alternate" type="text/html" href="http://www.symphonious.net/2012/01/03/cross-pairing/" /> <id>http://www.symphonious.net/?p=1613</id> <updated>2012-01-03T21:43:11Z</updated> <published>2012-01-03T21:42:38Z</published> <category scheme="http://www.symphonious.net" term="Code and Geek Stuff" /><category scheme="http://www.symphonious.net" term="XP" /> <summary type="html"><![CDATA[This evening I stumbled across two interesting posts about alternate layouts for pairing rather than sitting side by side. Firstly Tom Dale talking about Tilde&#8217;s corner desk pairing setup (and some of the software setup they use) and that was inspired by Josh Susser&#8217;s face to face pairing setup at Pivotal Labs. Both approaches require [...]]]></summary> <content type="html" xml:base="http://www.symphonious.net/2012/01/03/cross-pairing/">&lt;p&gt; This evening I stumbled across two interesting posts about alternate layouts for pairing rather than sitting side by side.  Firstly &lt;a
href="http://tomdale.net/2012/01/tildes-pairing-setup/"&gt;Tom Dale talking about Tilde&amp;#8217;s corner desk pairing setup&lt;/a&gt; (and some of the software setup they use) and that was inspired by &lt;a
href="http://pivotallabs.com/users/jsusser/blog/articles/1505-pairing-tete-a-tete"&gt;Josh Susser&amp;#8217;s face to face pairing setup at Pivotal Labs&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Both approaches require more floor space which makes them difficult to setup but I would expect the face to face pairing to be a heck of a lot better if done well. I&amp;#8217;ve always preferred having separate screens in mirror configuration as well as separate keyboards and mice to allow the developers to sit a little further apart to be comfortable and to be able to look straight ahead at the screen. That said, I quite like having a second monitor for spreading out windows as we have at LMAX so it&amp;#8217;s not clear cut which is better.&lt;/p&gt;&lt;p&gt;It&amp;#8217;s also interesting to note the popularity of the flat screen iMacs as opposed to Mac Pros or laptops. The former being too expensive for extra power and extensibility that generally isn&amp;#8217;t required and the latter often being a bit too individualised to be good as pairing machines. Plus laptops, while amazingly powerful these days still have less bang for the buck and the reduction in performance is just enough to matter for development.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/symphonious/~4/93rBMBxBOjk" height="1" width="1"/&gt;</content><link rel="replies" type="text/html" href="http://www.symphonious.net/2012/01/03/cross-pairing/#comments" thr:count="0" /><link rel="replies" type="application/atom+xml" href="http://www.symphonious.net/2012/01/03/cross-pairing/feed/atom/" thr:count="0" /> <thr:total>0</thr:total> </entry> </feed><!-- Dynamic page generated in 0.530 seconds. --><!-- Cached page generated by WP-Super-Cache on 2012-05-17 11:22:33 --><!-- Compression = gzip -->

