<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Loosely Typed in Ohio</title>
	<atom:link href="http://www.innova-partners.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.innova-partners.com/blog</link>
	<description>Innova Partners, software, networking, and websites.</description>
	<lastBuildDate>Mon, 08 Feb 2010 22:37:19 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>The Innova Team</title>
		<link>http://www.innova-partners.com/blog/2010/02/08/the-innova-team/</link>
		<comments>http://www.innova-partners.com/blog/2010/02/08/the-innova-team/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 22:30:30 +0000</pubDate>
		<dc:creator>Matt Scantland</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.innova-partners.com/blog/2010/02/08/the-innova-team/</guid>
		<description><![CDATA[We took pictures right before the annual holiday feast.

Chip, Eddie, Keith, Reva, Matt, Dan, Jon, Michelle, Scott, Amanda, Bruce, Mary, Kent, Brian, Robert, Chris. Chad, who holds court at the Oregon branch office not pictured.


]]></description>
			<content:encoded><![CDATA[<p>We took pictures right before the annual holiday feast.</p>

<p>Chip, Eddie, Keith, Reva, Matt, Dan, Jon, Michelle, Scott, Amanda, Bruce, Mary, Kent, Brian, Robert, Chris. Chad, who holds court at the Oregon branch office not pictured.</p>

<p><a href="http://www.flickr.com/groups/innova_partners/"><img title="Innova Team" src="http://farm3.static.flickr.com/2625/4177974153_933d0d92e4.jpg" alt="Holiday picture" width="500" height="215" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.innova-partners.com/blog/2010/02/08/the-innova-team/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flickr and Versioning</title>
		<link>http://www.innova-partners.com/blog/2009/12/14/flickr-and-versioning/</link>
		<comments>http://www.innova-partners.com/blog/2009/12/14/flickr-and-versioning/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 22:13:15 +0000</pubDate>
		<dc:creator>Eddie Bowen</dc:creator>
				<category><![CDATA[Productivity]]></category>

		<guid isPermaLink="false">http://www.innova-partners.com/blog/?p=403</guid>
		<description><![CDATA[We often maintain and deploy projects as a single HEAD version in a Subversion repository. We don&#8217;t, generally, tend to do a lot of forking. This is good, as forking can be undisciplined, but sometimes you might want to be able to add or change features and not have to worry about adding broken code [...]]]></description>
			<content:encoded><![CDATA[<p>We often maintain and deploy projects as a single HEAD version in a Subversion repository. We don&#8217;t, generally, tend to do a lot of forking. This is good, as forking can be undisciplined, but sometimes you might want to be able to add or change features and not have to worry about adding broken code to a project.</p>

<p>It turns out that Flickr does the same sort of thing. Their solution: <a href="http://code.flickr.com/blog/2009/12/02/flipping-out/">flags and flippers</a>. Interesting read.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.innova-partners.com/blog/2009/12/14/flickr-and-versioning/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visualizing CSS</title>
		<link>http://www.innova-partners.com/blog/2009/09/30/visualizing-css/</link>
		<comments>http://www.innova-partners.com/blog/2009/09/30/visualizing-css/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 18:45:53 +0000</pubDate>
		<dc:creator>Eddie Bowen</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.innova-partners.com/blog/?p=363</guid>
		<description><![CDATA[

Converting a Photoshop pitch to a static HTML/CSS layout is a fundamental part of client-oriented web development. It can be hard work, not least because it is difficult to simultaneously focus on the appearance of the site and its structural foundations.

The usual solution to this is to muddle through and keep tweaking a steadily expanding [...]]]></description>
			<content:encoded><![CDATA[<p><img style="position:relative; left:-140px" src="http://www.innova-partners.com/blog/wp-content/uploads/2009/09/animation2.gif" alt="animation2" title="animation2" width="720" height="751" class="alignnone size-full wp-image-391" /></p>

<p>Converting a Photoshop pitch to a static HTML/CSS layout is a fundamental part of client-oriented web development. It can be hard work, not least because it is difficult to simultaneously focus on the appearance of the site and its structural foundations.</p>

<p>The usual solution to this is to muddle through and keep tweaking a steadily expanding morass of CSS until the site resembles the original .psd. This way of working is <strong>unstructured</strong>, which makes it stressful and self-limiting. </p>

<p>Let&#8217;s look at a better way.</p>

<p><span id="more-363"></span></p>

<h3>Separating structure and appearance</h3>

<p>A more disciplined way of working involves <strong>separating the structure and appearance</strong> of the CSS into two separate files, like this:</p>

<p><code><pre>
    &lt;link rel='stylesheet' href='styles/structure.css' type='text/css' /&gt;
    &lt;link rel='stylesheet' href='styles/appearance.css' type='text/css' /&gt;
</pre></code></p>

<h3>But aren&#8217;t appearance and structure separate already in CSS?</h3>

<p>At this point you may be thinking that CSS is <em>already</em> predicated on the idea that structure and content should be separate. HTML for structure and CSS for appearance, right?</p>

<p>This is true if &#8220;appearance&#8221; includes attributes such as <em>float</em> or <em>position</em>.</p>

<p>We want to <em>really</em> separate the the attributes responsible for layout &#8211; <em>position, float, padding, margin, width, height, border, etc</em> &#8211; from those responsible for decoration &#8211; <em>background, color, font-&#42;, text-&#42;, etc</em>.</p>

<p>We also want to be able to <strong>visualize</strong> the structure of the CSS. This means adding false background colors to elements in <em>structure.css</em> so we can see what effects those elements have on the layout. The predefined CSS colors such as &#8220;green&#8221; or &#8220;red&#8221; are great for this.</p>

<h3>How <em>structure.css</em> and <em>appearance.css</em> see a page element</h3>

<p><em>Structure.css</em> might describe a page element like this:</p>

<p><code><pre>
div.feature_content
{
    background: green;
    padding: 5px 20px 15px 20px;
}
</pre></code></p>

<p>while <em>appearance.css</em> is concerned with this:</p>

<p><code><pre>
div.feature&#95;content
{
    color: #00326a;
    background: #e8e8e8 url(images/feature&#95;foot.png) no-repeat left bottom;
}
</pre></code></p>

<p>This means we can easily switch off the appearance file and look at a purely structural layout. If, for example, we need to add an element and inadvertently break a float clearance, we can metaphorically lift the hood on the layout and immediately see what is wrong. It&#8217;s like having X-ray vision for HTML.</p>

<p><img src="http://www.innova-partners.com/blog/wp-content/uploads/2009/09/appearance.png" alt="appearance" title="appearance" width="300" height="345" class="alignnone size-full wp-image-383" />
With both stylesheets switched on.</p>

<p><img src="http://www.innova-partners.com/blog/wp-content/uploads/2009/09/structure.png" alt="structure" title="structure" width="300" height="345" class="alignnone size-full wp-image-384" />
With just <em>structure.css</em> switched on.</p>

<h3>Visualizing in action</h3>

<p>If you watch the animation at the start of this post again, pay close attention to the position of the top navbar.</p>

<p>When I first started blocking out the page the navbar was inside the top (&#8216;header&#8217;) block. Later I realized it would be easier to position if it were the first element in the second (&#8216;content&#8217;) block.</p>

<p>So I switched off <em>appearance.css</em> (by breaking the tag with an underscore,) and moved the nav bar&#8217;s div. The structure was fine, so I deleted that underscore and the hood went down.</p>

<p>The important part of this is that I was immediately confident that the change had no unexpected impact on other elements in the layout. I <em>knew</em> the layout of the page, even when it was in flux, because I could <em>see</em> it.</p>

<h3>Divide and conquer</h3>

<p>The important thing is that visualizing CSS isn&#8217;t a tedious &#8220;best practices&#8221; kind of thing. It really does remove a lot of stress and confusion from development. Give it a try; once you start dividing your CSS this way you&#8217;ll wonder how you managed before.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.innova-partners.com/blog/2009/09/30/visualizing-css/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>More great opportunities at CoverMyMeds</title>
		<link>http://www.innova-partners.com/blog/2009/09/03/more-great-opportunities-at-covermymeds/</link>
		<comments>http://www.innova-partners.com/blog/2009/09/03/more-great-opportunities-at-covermymeds/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 20:22:37 +0000</pubDate>
		<dc:creator>Matt Scantland</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.innova-partners.com/blog/?p=355</guid>
		<description><![CDATA[CoverMyMeds is looking for entry level account managers.


More about CMM
The job posting

]]></description>
			<content:encoded><![CDATA[<p>CoverMyMeds is looking for entry level account managers.</p>

<p><ul>
<li><a href="http://covermymeds.com">More about CMM</a></li>
<li><a href="http://columbus.craigslist.org/hea/1357013285.html">The job posting</a></li>
</ul></p>
]]></content:encoded>
			<wfw:commentRss>http://www.innova-partners.com/blog/2009/09/03/more-great-opportunities-at-covermymeds/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>GitHub Saves The Day</title>
		<link>http://www.innova-partners.com/blog/2009/07/31/github-saves-the-day/</link>
		<comments>http://www.innova-partners.com/blog/2009/07/31/github-saves-the-day/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 15:35:44 +0000</pubDate>
		<dc:creator>Jon Canady</dc:creator>
				<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[grackle]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[twitter-async]]></category>

		<guid isPermaLink="false">http://www.innova-partners.com/blog/2009/07/31/github-saves-the-day/</guid>
		<description><![CDATA[In the dark times (a few years ago) if Innova decided to make use of a third-party library that had bugs, we essentially had three options:


App-specific workarounds: sometimes feasible, sometimes not
Local modifications: wherein we dork around with the library code on our end, fix the bugs, and then maintain our own separate branch of the [...]]]></description>
			<content:encoded><![CDATA[<p>In the dark times (a few years ago) if Innova decided to make use of a third-party library that had bugs, we essentially had three options:</p>

<ol>
<li><strong>App-specific workarounds</strong>: sometimes feasible, sometimes not</li>
<li><strong>Local modifications</strong>: wherein we dork around with the library code on our end, fix the bugs, and then maintain our own separate branch of the library. These made merging in new changes from upstream <em>fun</em> (in that <em>why was I programmed to feel pain</em> kind of way).</li>
<li><strong>Find/Write a replacement</strong>: You&#8217;d be shocked at how often we didn&#8217;t do this. Or, alternatively, underestimated how difficult a particular issue is.</li>
</ol>

<p>In the last few weeks alone, GitHub&#8217;s changed that.  Now, the libraries I want are on GitHub as rubygems or PHP tarballs or what have you.  And when we encounter issues, the process is <em>smooth</em>:</p>

<ol>
<li>Fork project.  GitHub has a button for this.</li>
<li>Get our fork, make local changes, commit and push up to GitHub.</li>
<li>Send a &#8220;pull request&#8221; to the original author to let them know we have patches that they may want.  GitHub has a button for this.</li>
</ol>

<p><a href="http://github.com/joncanady">My contributions</a> are available for whoever wants them.</p>

<p>Now, if the original project checks in a few bugfixes I want, I can cleanly merge them in <em>and</em> keep my local fixes. And if upstream wants my fixes for the &#8220;canonical&#8221; repository for a project, then they&#8217;re welcome to them whenever they like.  Git makes the magic happen, and GitHub makes the magic ridiculously easy.</p>

<p>How the hell did we develop software before this?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.innova-partners.com/blog/2009/07/31/github-saves-the-day/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
