<?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>Waves.ky</title>
	<atom:link href="http://waves.ky/feed/" rel="self" type="application/rss+xml" />
	<link>http://waves.ky</link>
	<description>Caymanian Geek...</description>
	<lastBuildDate>Thu, 09 Dec 2010 16:22:29 +0000</lastBuildDate>
	<language>en-US</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=3.9.40</generator>
	<item>
		<title>Less Is More</title>
		<link>http://waves.ky/2010/10/28/less-is-more/</link>
		<comments>http://waves.ky/2010/10/28/less-is-more/#comments</comments>
		<pubDate>Thu, 28 Oct 2010 15:01:32 +0000</pubDate>
		<dc:creator><![CDATA[Gareth Farrington]]></dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://waves.ky/?p=208</guid>
		<description><![CDATA[I propose the following law: The value of information is inversely proportional to the complexity of the system used to organize it. The core argument here is that the information itself doesn&#8217;t want to be organized, its humans that want to organize information. More specifically its YOU that wants to organize the information. You have [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>I propose the following law:</p>
<p><em>The value of information is inversely proportional to the complexity of the system used to organize it.</em></p>
<p>The core argument here is that the information itself doesn&#8217;t want to be organized, its humans that want to organize information. More specifically its YOU that wants to organize the information. You have a concept of that organization in your head. Until humans start sharing braincells you are the only person that truly understand the particular structure you want the information in. The more complex and specific that structure is, the more it is specific to you and the less your fellow meat sacks will understand it. Thus by organizing the data you have destroyed its value to anyone but yourself.</p>
<p>Computers have made it possible to increase the complexity of information organization to the point where the average person can no longer understand it. There are lots of organizations in common usage in computers that totally bewilder and frustrate average people. The file system is a great example. Users are endlessly loosing files. The don&#8217;t know &#8220;where&#8221; their files are. They did a search (in the wrong place) and they can&#8217;t find them. A file system is too complex an organizational structure for people to use intuitively.</p>
<p>Search is the ultimate proof of overcomplexity. When a organizational system grows to the point where search becomes the primary mode of information access it has effectively ceased to be an organizational system. All complex organizational structures are subsumed by search. Search presents results in a flat, unstructured list simply ordered by &#8220;relevance&#8221;. Relevance is a user specific concept that imposes the users own ideas of organization. Good search tools can learn what is relevant to an individual user, essentially imposing the users unique organizational view on the information.</p>
<p>This should yield some advice: <em>Treat all attempts to impose organization on the data as a user preference</em>.</p>
<p>If you can understand that then you know better than to bother structuring the data in some complex way. The next user will always want to see things differently.</p>
]]></content:encoded>
			<wfw:commentRss>http://waves.ky/2010/10/28/less-is-more/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Attribute Style CSS Programming</title>
		<link>http://waves.ky/2009/07/11/attribute-style-css-programming/</link>
		<comments>http://waves.ky/2009/07/11/attribute-style-css-programming/#comments</comments>
		<pubDate>Sat, 11 Jul 2009 21:14:10 +0000</pubDate>
		<dc:creator><![CDATA[Gareth Farrington]]></dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://waves.ky/?p=171</guid>
		<description><![CDATA[The Problem At my job we don&#8217;t have a dedicated CSS/web design guy. Programmers do all of the design work themselves. That&#8217;s not to say that such a situation is unnatural, in desktop app development it is the norm. Programmers tend to approach any presentation technology as something that should be able to express their [&#8230;]]]></description>
				<content:encoded><![CDATA[<h3>The Problem</h3>
<p>At my job we don&#8217;t have a dedicated CSS/web design guy. Programmers do all of the design work themselves. That&#8217;s not to say that such a situation is unnatural, in desktop app development it is the norm. Programmers tend to approach any presentation technology as something that should be able to express their will exactly. HTML &amp; CSS are notoriously bad at this because they are not a true presentation framework. HTML is a semantic document markup language and CSS can be overridden by browser specific behavior and user settings. That is as it was intended, the User Agent is in control of the final rendering, not the author. So a typical programmer reaction is to be <em>even more</em> specific to force the User Agent to display what we want. This might include using per-browser style sheets, absolute positioning of elements or tables for non tabular data. This tends to result in more markup, more CSS, more testing and more bugs to fix. The programmers gut reaction is at odds with the reality of the web.</p>
<p>So my goal is to give the programmers something they can live with that achieves these goals:</p>
<ul>
<li>Reduce the number of cross browser bugs and testing</li>
<li>Minimize the amount of custom CSS we write for each new page</li>
<li>Have a single style sheet for all the browsers we support</li>
<li>Allow developers to build layouts that I haven&#8217;t thought of</li>
<li>Be ready to support mobile devices</li>
<li>Make the HTML and CSS maintainable</li>
</ul>
<p>My first attempt was to try and get the team to adopt <a href="http://developer.yahoo.com/yui/grids/">Yahoo&#8217;s YUI CSS</a> for layouts. Adoption by the team didn&#8217;t go so well. It was hard to get the layout you wanted 100% of the time. Nesting of layouts would sometimes introduce bugs. No one liked the cryptic style names. So I went looking for a replacement and found Nichole Sullivan&#8217;s &#8216;<a href="http://www.stubbornella.org/content/2009/02/28/object-oriented-css-grids-on-github/">Object Oriented CSS</a>&#8216; framework. The code is much simpler than the yahoo framework and it&#8217;s a much closer fit for how we work.</p>
<p>The ideas behind Object Oriented CSS make a lot of sense but the name make almost no sense to me. I think it most closely resembles <a href="http://en.wikipedia.org/wiki/Attribute-Oriented_Programming">Attribute-Oriented Programming</a>. You place attributes (CSS classes) on elements (Objects) in combination to achieve some desired effect. In programming Attributes can be used to mark Objects for later use by other code that acts on those objects. They can also describe some quality about an Object, like it being serializable or a database entity. Attributes are written in such a way that they combine gracefully and interact only when necessary. In programming an Attribute can have arguments. In CSS the arguments are the element on which the attribute is acting and the other attributes applied to that element. So now we have a model for thinking about the problem.</p>
<p>CSS attributes combine to produce a wide variety of effects from comparatively little CSS code. To achieve a total effect you combine attributes together on an element. If the exact attribute you need is not available you can use the ones that do exist plus some small amount of style information to produce the effect.</p>
<p>This gives us a way of looking at CSS code and accessing it like we do other kinds of code. We can look for potential refactorings like we do in other kinds of code. Its just a way of looking at the problem.</p>
<p>Once I got my head around this I realized that I couldn&#8217;t just take OOCSS to the programmers because there were things about it that needed to change. It needed to become even more attribute oriented and it needed to be more consistent.</p>
<h3>Sample Refactoring</h3>
<p>Lets take an example from the <a href="http://wiki.github.com/stubbornella/oocss">OOCSS</a> framework and improve on it by thinking in an Attribute Oriented way. In OOCSS there is a debugging style sheet that adds background colors to block so you can visualize your layout. This is a great idea but using it is awkward. First you have to include a separate style sheet in the document. In a template system that means going and finding a separate template with the Head tag and modifying it. Once that&#8217;s done debugging is on for ALL layouts in the document, not just the two boxes you want to debug. Also debugging only works for OOCSS layouts, you cant debug some arbitrary elements.</p>
<p>So, lets define a &#8216;.debug&#8217; attribute the we can use to mark elements we want to debug. For the layout classes it can have special behavior (Attribute behave differently depending on their input, remember?). For non grid elements we can also set a background so we can use &#8216;.debug&#8217; on anything.</p>
<pre class="brush: css; title: ; notranslate">
/* all elements get a gray background as the default behavior*/
.debug {background-color:#e2e2e2;}
/* Extend the .debug attribute with special behavior for layouts: */
.size1of1.debug {background-color:pink;}
.size1of2.debug {background-color:red;}
.size1of3.debug {background-color:orange;}
.size2of3.debug {background-color:yellow;}
.size1of4.debug {background-color:lime;}
.size3of4.debug {background-color:green;}
.size1of5.debug {background-color:aqua;}
.size2of5.debug {background-color:blue;}
.size3of5.debug {background-color:purple;}
.size4of5.debug {background-color:magenta;}
</pre>
<p>Now we have a debug attribute that works anywhere and we can quickly apply it to anything we want to debug.</p>
<h3>Names Matter</h3>
<p>The fixed size grids in OOCSS are focused on laying out the main chunks of the page. This is kind of unfortunate because there are a lot of places where they come in handy. This snipet comes from OOCSS:</p>
<pre class="brush: css; title: ; notranslate">
/* ====== Columns ====== */
.main{overflow: hidden;_overflow:visible;_zoom:1;}
.leftCol{float:left; width:250px;_margin-right:-3px;}
.rightCol{float:right; width: 300px;_margin-left:-3px;}

/* extend columns to allow for common column widths */
.gMail{width:160px;}
.gCal{width:180px;}
.yahoo{width:240px;}
.myYahoo{width:300px;}
</pre>
<p>Here is my proposed re-write:</p>
<pre class="brush: css; title: ; notranslate">
/* Fixed Width Layouts */
.layout-fixed {clear: both;}  /* facilitate layout stacking */
.col-main {overflow:hidden; _overflow:visible; _zoom:1;}
.col-left {float:left; width:30px; _margin-right:-3px;}
.col-right {float:right; width:30px; _margin-left:-3px;}

/* Fixed pixel widths */
.width-160 {width:160px;}
.width-180 {width:180px;}
.width-240 {width:240px;}
.width-300 {width:300px;}
/* + more as you require... */
</pre>
<p>This is very subtle change. The &#8216;.col-left&#8217; and &#8216;.col-right&#8217; attributes now set the same default width. Not setting the width is an option but its better for the column to have some width so the programmer gets some kind of feedback that the attribute is working (default attribute behavior). Setting the same width on .col-left and .col-right promotes a feel of consistency. We programmers like it when things behave consistently. Changing the names of the specific width styles to &#8220;.width-NNN&#8221; has some nice effects. It&#8217;s easier to read in the code. &#8216;.width-300&#8242; is more likely to be re-used than &#8216;.myYahoo&#8217; because its easier to understand what it claims to do. It&#8217;s not clear that its safe to use &#8216;.myYahoo&#8217; in other situations, it might have side effects or set other styles that you don&#8217;t want. &#8216;.width-300&#8242; is a specific attribute which claims to do only one thing. Finally the &#8216;.width-NNN&#8217; sets up a convention. Programmers will be encouraged to try &#8216;.width-500&#8242; before they start writing a custom style for that width.</p>
<p>So the source for a two column layout would go from this in OOCSS:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div&gt;
	&lt;div class=&quot;leftCol myYahoo&quot;&gt;&lt;/div&gt;
	&lt;div class=&quot;main&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>To this with my changes:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div class=&quot;layout-fixed&quot;&gt;
	&lt;div class=&quot;col-left width-300&quot;&gt;&lt;/div&gt;
	&lt;div class=&quot;col-main last&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>The programmers in the crowd will see this as a big win for readability. The designers point out that this is more verbose and size matters. Designers, size wont matter at all if you cant get the programmers you work with to adopt the framework. If you get this into common usage then later you can do a global re-name to smaller names. Honestly for most sites, size does not matter that much. Programmers will implement zip compression on the web server before they do a re-name. Readability and maintainability are more important than page size. If page size really matters that much you can optimize it later. You cant optimize it later if the CSS is an inconsistent mess.</p>
<h3>Integrating Fixed Width and Percentage Width Layouts</h3>
<p>The naming for fixed width and percentage width layouts in OOCSS is very different. Attributes that have similar effects or usage usually have similar names. Certainly the declarations that determine the column widths could follow the &#8216;width-XXX&#8217; convention.</p>
<pre class="brush: css; title: ; notranslate">
.width-auto {width:auto;}
.width-1of1 {width:100%;}	/* set 100% width outside of layouts */
.col.width-1of1 {float:none; width: auto;}	/* this doesn't set width=100% so make this context sensitive */
.width-1of2 {width:50%;}
.width-1of3 {width:33.33333%;}
.width-2of3 {width:66.66666%;}
.width-1of4 {width:25%;}
.width-3of4 {width:75%;}
.width-1of5 {width:20%;}
.width-2of5 {width:40%;}
.width-3of5 {width:60%;}
.width-4of5 {width:80%;}
</pre>
<p>This leaves us with the core of the percentage width grid system. Again from OOCSS (<a href="http://github.com/stubbornella/oocss/blob/8e6c6e7c7543bc76ea4f870a8ca25d27ac857d32/css/grids.css">grid.css</a>):</p>
<pre class="brush: css; title: ; notranslate">
.line, .lastUnit {overflow:hidden; _overflow:visible; _zoom:1;}
.unit {float:left; _zoom:1;}
.lastUnit {float:none; _position:relative; _left:-3px; _margin-right:-3px; width:auto;}
</pre>
<p>It doesn&#8217;t look much like the fixed width system. Lets say that we have a layout with two columns that are split up 1/3 to 2/3. The HTML looks like this:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div class=&quot;line&quot;&gt;
	&lt;div class=&quot;unit size1of3&quot;&gt;&lt;/div&gt;
	&lt;div class=&quot;unit lastUnit size2of3&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>Now lets say there is a requirements change and the developer needs to alter this layout. The new requirement is for the left column to be 300px wide and the right column is flexible. The code using OOCSS would look like this:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div&gt;
	&lt;div class=&quot;leftCol myYahoo&quot;&gt;&lt;/div&gt;
	&lt;div class=&quot;main&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>In addition to changing the width attribute you need to remember to remove the &#8216;lastUnit&#8217; class and to change things from &#8216;unit&#8217; to &#8216;col-&#8217;. We can make the &#8216;last&#8217; marker harmless in the case where its used with fixed-width layouts so forgetting to remove it will not harm the presentation. Then we can tell developers to always include it. It wont be necessary in one case but it will be consistent and that will probably reduce frustration. Also lets name the attribute &#8216;last&#8217; so that we can use this kind of marker attribute in other places as a convention, like the last row in a table or the last button in a button strip. In programming some attributes have no effect unless they are used in conjunction with another attribute or placed on a particular type. &#8216;last&#8217; may get used widely but it wont have any default behavour. Its important to consider this when building your framework. If something has global effects its harder to make it have local effects later.</p>
<p>Then there is the &#8216;.line&#8217; declaration. You cant forget to add that. I think it&#8217;s better if there is a declaration in both layout types so the programmer has to say what they mean, semantically, even if its not necessary. As it turns out it is necessary to make fixed width and percentage width layouts stack ontop of each other. Finally we can re-name &#8216;.unit&#8217; to &#8216;.col&#8217; so it looks more like the fixed width versions.</p>
<pre class="brush: css; title: ; notranslate">
.layout-percent {clear:both;} /* facilitate layout stacking */
.layout-percent, .col.last {overflow:hidden; _overflow:visible; _zoom:1;}
.col {float:left; _zoom:1;}
/* make .last only apply to columns in percentage width layouts */
.col.last {float:none;_position:relative; _left:-3px; _margin-right: -3px; _width:auto;}
</pre>
<p>And now we have the two versions of the source again. First the percentage width version:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div class=&quot;layout-percent&quot;&gt;
	&lt;div class=&quot;col width-1of3&quot;&gt;&lt;/div&gt;
	&lt;div class=&quot;col width-2of3 last&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>And then the fixed width rewrite:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div class=&quot;layout-fixed&quot;&gt;
	&lt;div class=&quot;col-left width-300&quot;&gt;&lt;/div&gt;
	&lt;div class=&quot;col-main last&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>Thats a pretty substantial improvement in ease of use.</p>
<h3>People Make Mistakes</h3>
<p>As simple as this is, someone will get it wrong. They may have it totally wrong and think that the framework is at fault. They may also introduce subtle hard to find bugs. Some &#8216;clever&#8217; developer will mix the fixed width and percentage width column attributes together in the same container and this could produce unexpected results that might not show up on the particular browser they are testing on. They will probably break IE-6 and not know about it till the customer tests it. To help them avoid this we can detect misuse of the framework and flag the offending element.</p>
<p>We can detect use of the wrong column type within a particular layout type. We can also detect some misplacement of the &#8216;.last&#8217; attribute and enforce that its always present on the last block. The &#8216;.col-main&#8217; has to be the last element in the source order and we can use adjacency selectors to check for this too. Unfortunately we can only flag the element that comes after &#8216;.col-main&#8217; but this should be enough.</p>
<p>The selectors are written individually so that when a developer inspects the error with Firebug or the IE Developer Tools they can see the exact cause of the error. This beats having a huge list of potential errors to pick from. I also used a dashed red border so this error detection does not conflict with the debugging support. Developers should not be adding borders to layout elements because it will break the layout. Because borders add to the width of an element adding them will break any percentage width layout where the element widths add up to 100%. Note: 100% + 1px border &gt; 100%, a fact that programmers tend to forget. In one case I have had to turn on a border and only turn it off when they get it right. This could all be included in a seperate css file and removed in a release build.</p>
<p>This technique has already proven to be useful. I get colleages asking why all they got was this annoying red border and I was able to quickly spot the error. Think of it as a CSS compile time error checker.</p>
<pre class="brush: css; title: ; notranslate">
/* Layout Error Detection Support (remove in a production environment) */
/* Detect misuse of the col-* and width-XXX classes based on their container */
/* needs !important because it can be turned off on the last column if .last is applied correctly */
.layout-percent &gt; .col-main {border: dashed 8px red !important;}
.layout-percent &gt; .col-left {border: dashed 8px red !important;}
.layout-percent &gt; .col-right {border: dashed 8px red !important;}
.layout-fixed &gt; .col {border: dashed 8px red !important;}
.layout-fixed &gt; .width-1of1 {border: dashed 8px red !important;}
.layout-fixed &gt; .width-1of2 {border: dashed 8px red !important;}
.layout-fixed &gt; .width-1of3 {border: dashed 8px red !important;}
.layout-fixed &gt; .width-2of3 {border: dashed 8px red !important;}
.layout-fixed &gt; .width-1of4 {border: dashed 8px red !important;}
.layout-fixed &gt; .width-3of4 {border: dashed 8px red !important;}
.layout-fixed &gt; .width-1of5 {border: dashed 8px red !important;}
.layout-fixed &gt; .width-2of5 {border: dashed 8px red !important;}
.layout-fixed &gt; .width-3of5 {border: dashed 8px red !important;}
.layout-fixed &gt; .width-4of5 {border: dashed 8px red !important;}
.col-left.last {border: dashed 8px red !important;}
.col-right.last {border: dashed 8px red !important;}

/* Check that no columns come after .col-main */
.col-main + .col-left {border: dashed 8px red !important;}
.col-main + .col-right {border: dashed 8px red !important;}

/* Enforce that the .last attribute is set on the last column (only works in newer browsers!) */
.col:last-child {border: dashed 8px red;}
.col-main:last-child {border: dashed 8px red;}
.col:last-child.last, .col-main:last-child.last {border: none;}
</pre>
<h3>Alternate Proposals</h3>
<p>We do have two other competing ideas on how css should be used. I&#8217;m presenting them here with examples because it should be clear in either case that the approach is sub optimal. We have backers of either approach in house, either they activly advocate the solution or have rejected all alternate solutions. The point is I have seen these two ideas expressed by actual people in some way. It&#8217;s likely that you will face similar ideas when dealing with programmers in your work.</p>
<h3>Class == 1 Style Rule</h3>
<p>The first is to give the programmer attributes that map 1:1 with style rules:</p>
<pre class="brush: css; title: ; notranslate">
.clear-both {clear:both;}
.overflow-hidden {overflow:hidden;}
.float-left {float:left;}
.width-300 {width:300px;}
</pre>
<pre class="brush: xml; title: ; notranslate">
&lt;div class=&amp;quot;clear-both overflow-hidden&quot;&gt;
	&lt;div class=&quot;float-left width-300&quot;&gt;&lt;/div&gt;
	&lt;div class=&quot;overflow-hidden&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>We do have code like this being written right now. Its being targeted at IE6 and only IE6. Its not clear how this will be evolved in the future to support new browsers. There is nothing semantic about this. There is no way that you can safely change the way &#8216;float-left&#8217; works in the future to support new browsers. &#8216;float-left&#8217; does not indicate that a fixed width layout is being employed. You might as well go back to putting everything in the style tag. In the long term all of this code is going to have to be be rewritten.</p>
<p>The IE-6 compatibility style rules are not included. I left them out so you wouldn&#8217;t think I was being pathological. It&#8217;s not clear how to introduce them into this model. Should &#8216;.ie6-margin-right-hack&#8217; be a class? If you define &#8216;.margin-right&#8211;3&#8242; does that set a negative margin on all browsers or just in IE6? If you define &#8216;.overflow-hidden&#8217; should that have the IE hack in its code or not? Let me at least try to give this a fair attempt:</p>
<pre class="brush: css; title: ; notranslate">
.clear-both {clear:both;}
.float-left {float: left;}
.width-300 {width:300px;}
.overflow-hidden {overflow:hidden;}
.ie6-overflow-fix {_overflow:visible;}
.ie6-zoom-hack {_zoom:1;}
.ie6-width-auto-hack {_width:auto;}
.ie6-margin-fix {_left:-3px; _margin-right: -3px;}
</pre>
<pre class="brush: xml; title: ; notranslate">
&lt;div class=&quot;clear-both overflow-hidden ie6-overflow-fix ie6-zoom-hack&quot;&gt;
	&lt;div class=&quot;float-left width-300 ie6-zoom-hack&quot;&gt;&lt;/div&gt;
	&lt;div class=&quot;overflow-hidden ie6-overflow-fix ie6-zoom-hack ie6-width-auto-hack ie6-margin-fix&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>I am deeply uncomfortable with this approach. Its not semantic and we are back to programmers being a CSS experts, which they are not. Reuseability of the individual styles is high but they fail to capture knowledge about cross browser issues and make that re-usable. I think the example above should be sufficiently bad to deter anyone from going down this road.</p>
<h3>Class == Result</h3>
<p>The other proposal is at the other end of the spectrum. A 1:1 mapping with the desired result. E.g.</p>
<pre class="brush: css; title: ; notranslate">
.col-left-300 div {overflow: hidden; _overflow:visible; _zoom:1;}
.col-left-300:first-child {float:left; width: 300px; _margin-right:-3px;}
</pre>
<pre class="brush: xml; title: ; notranslate">
&lt;div class=&quot;col-left-300&quot;&gt;
	&lt;div&gt;&lt;/div&gt;
	&lt;div&gt;&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>This style does a good job of capturing cross browser bugs and making that knowledge reusable. Its also clearly simple to use. That is the main argument for this style, its &#8216;simple&#8217;.</p>
<p>The problem is its only simple for the programmer when they use the style correctly. It assumes much about how the document is structured. Its not re-usable in any other situation. If you want to define a &#8216;.col-left-250&#8242; attribute you need to copy two existing style rules and modify them both. That&#8217;s pretty much the definition of violating the DRY principal. This is the same approach that YUI takes with their templates. They are difficult to modify if you want a specific pixel width layout. This is one of the reason why I stopped using YUI. The programmer/designer stuck maintaining the CSS has to write gallons of code. When the programmer making a new layout needs something custom they have no idea how to make that happen so they abandon the framework and go back to using the style attributes.</p>
<p>Here again I made the example above very simple. It gets increasingly complex if you want to use more than 2 columns in a layout. There is not enough <a href="http://kimblim.dk/css-tests/selectors/">browser support</a> to make this happen using pseudo-selectors. The :last-child and :nth-child psudo-selectors are in CSS3 but are not supported in any flavor of IE, including IE8. It&#8217;s inevitable that more complex layouts will require additional attributes on the columns to mark their indexes. E.g.:</p>
<pre class="brush: css; title: ; notranslate">
.three-column-150-200-auto first {float:left; width:150px; _margin-right:-3px;}
.three-column-150-200-auto second {float:left; width:200px; _margin-right:-3px;}
.three-column-150-200-auto third {overflow: hidden; _overflow:visible; _zoom:1;}
</pre>
<pre class="brush: xml; title: ; notranslate">
&lt;div class=&quot;three-column-150-200-auto&quot;&gt;
	&lt;div class=&quot;first&quot;&gt;&lt;/div&gt;
	&lt;div class=&quot;second&quot;&gt;&lt;/div&gt;
	&lt;div class=&quot;third&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>This will lead to a huge CSS file with lots of duplicated code that cant be re-used. Programmers will have to be CSS experts to extend the framework. The long term maintainability of this approach is doubtful. I would say that I prefer this over the first alternative but its still not as optimal as the Attribute CSS approach.</p>
<h3>Results</h3>
<p>Attached (<a href="http://waves.ky/wp-content/uploads/2009/06/attribute-css.zip">attribute css.zip</a>) is the re-factored result of all this. It took most of my spare time over the weekend. Its got a test suite based on the OOCSS test pages. All the error detection cases are demonstrated as well as nesting of layout types. The jury is still out on how well this is accepted by the programmers I work with. I think I am on the right track though. Thinking in terms of attributes, providing debugging where appropriate, trying to make names and usage as consistent as possible. The CSS this produces makes sense, promotes css code re-use, captures cross browser bugs and looks maintainable. Nuff respect and thanks goes to <a href="http://www.stubbornella.org">Nichole Sullivan</a> for giving me a 90% solution to start with.</p>
]]></content:encoded>
			<wfw:commentRss>http://waves.ky/2009/07/11/attribute-style-css-programming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>This Weeks Flying Forecast</title>
		<link>http://waves.ky/2009/05/11/this-weeks-flying-forecast/</link>
		<comments>http://waves.ky/2009/05/11/this-weeks-flying-forecast/#comments</comments>
		<pubDate>Mon, 11 May 2009 14:54:30 +0000</pubDate>
		<dc:creator><![CDATA[Gareth Farrington]]></dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://waves.ky/?p=168</guid>
		<description><![CDATA[Monday: Heavy rain Tuesday: Rain moving out and high winds moving in Wednesday: Winds die down and heavy rain moves in Thursday: Rain. Chance of nice weather after 6pm Friday: Gusty winds up to 28mph, chance of rain Saturday: More of the same It&#8217;s going to be a great week to test fly and trim [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Monday: Heavy rain</p>
<p>Tuesday: Rain moving out and high winds moving in</p>
<p>Wednesday: Winds die down and heavy rain moves in</p>
<p>Thursday: Rain. Chance of nice weather after 6pm</p>
<p>Friday: Gusty winds up to 28mph, chance of rain</p>
<p>Saturday: More of the same</p>
<p>It&#8217;s going to be a great week to test fly and trim out an airplane&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://waves.ky/2009/05/11/this-weeks-flying-forecast/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Notes on Making Patties</title>
		<link>http://waves.ky/2009/03/29/notes-on-making-patties/</link>
		<comments>http://waves.ky/2009/03/29/notes-on-making-patties/#comments</comments>
		<pubDate>Sun, 29 Mar 2009 20:36:15 +0000</pubDate>
		<dc:creator><![CDATA[Gareth Farrington]]></dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://waves.ky/?p=161</guid>
		<description><![CDATA[I made a batch of patties and I wanted to capture what I learned so I keep improving the recipe. First the easy part, the filling. This is the first time I used breadcrumbs in the filling and it really works well. I also put the ground beef through the food processor. Those two things [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>I made a batch of patties and I wanted to capture what I learned so I keep improving the recipe.</p>
<p>First the easy part, the filling. This is the first time I used breadcrumbs in the filling and it really works well. I also put the ground beef through the food processor. Those two things totally nailed the texture of the filling that you get in Cayman. I put the beef in a big pot to cook with the breadcrumbs for an hour. I added enough water to make it easy to stir. The pattie is not some magic device, whatever filling you put in is exactly what you will get out when its done cooking.</p>
<p>My crust still sucks. Its not flaky &amp; crunchy like the Island Taste/Tortuga patties. Its sort of crumbly. I&#8217;ve had good patties like that in Cayman, they are just a different style. I think the flaky style takes some additional work <a title="Good Eats: Puff Pastry" href="http://www.youtube.com/watch?v=Un8T3xfF7AA">like puff pastry</a>. I think you do some rolling and folding with a sheet of butter in the middle and the result is a flaky, crispy crust.</p>
<p>I&#8217;ve seen a couple of recipes suggesting the use of <a href="http://en.wikipedia.org/wiki/Bixin">Annatto</a> as the coloring in the pastry. All the other ones suggest using curry powder or turmeric (the stuff that makes curry yellow). I&#8217;ve noticed that the ones I make with turmeric stain everything they touch neon yellow. That&#8217;s not something I ever noticed about the genuine article. Turmeric also adds a subtle but weird flavor and the color never really gets all that red like the real ones. So next time I&#8217;ll try to have some Annatto on hand.</p>
]]></content:encoded>
			<wfw:commentRss>http://waves.ky/2009/03/29/notes-on-making-patties/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>iPhone Review</title>
		<link>http://waves.ky/2008/08/24/iphone-review/</link>
		<comments>http://waves.ky/2008/08/24/iphone-review/#comments</comments>
		<pubDate>Sun, 24 Aug 2008 14:52:32 +0000</pubDate>
		<dc:creator><![CDATA[Gareth Farrington]]></dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Hardware]]></category>

		<guid isPermaLink="false">http://waves.ky/?p=144</guid>
		<description><![CDATA[I haven&#8217;t had a cell phone worth writing about for two years. My venerable Sony i610 is now history, enter iPhone 2.0. Joel just did his review of the Nokia n71 so I hope there is room for one more geeks perspective on the iPhone. My last Apple device, a 40GB iPod, was not worth [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>I haven&#8217;t had a cell phone worth writing about for two years. My venerable Sony i610 is now history, enter iPhone 2.0. Joel just did his <a href="http://www.joelonsoftware.com/items/2008/08/22.html">review of the Nokia n71</a> so I hope there is room for one more geeks perspective on the iPhone.</p>
<p>My last Apple device, a 40GB iPod, was not worth the price of admission. The hard disk failed before I got my moneys worth. With a phone, you just need it to remain reliable for the length of the contract. That&#8217;s a minimum requirement. We will see how this device holds up long term.</p>
<h2>Size &amp; Feel</h2>
<p>It&#8217;s larger than my last phone but much thinner. Walking around with the device in my pocket feels more comfortable than the Sony. In my hand it feels too slippery. It could really use some texture around the edges to help the user keep hold of it. I&#8217;ll be getting some sort of slip cover to help with this.</p>
<p>It does get a bit warm if you start using the networking or push the CPU.</p>
<h2>Keyboard</h2>
<p>It&#8217;s no computer keyboard but it works well. I&#8217;m writing this entire post on the phone. Since it&#8217;s slower than a full sized keyboard it may be helping to keep the word count down. I&#8217;ve never had a cell phone/PDA with a full keyboard so I can&#8217;t compare it to that experience.</p>
<p>The auto correction works well. You can mostly trust it to do the right thing even if you fat finger stuff.</p>
<h2>Usability</h2>
<p>It rocks. I&#8217;ve given the phone to a few people to do simple tasks like take a photo. So far I haven&#8217;t had to show them how to do anything.</p>
<h2>Battery Life</h2>
<p>I was really worried about this because of the reviews I had read. I have used the device now in two very different &#8216;modes&#8217; with very different battery life results.</p>
<p>First I went to a 4 day conference in Orlando.  This involved traveling for most of the day, using airport and hotel WiFi, G3 data when there was no wifi, push e-mail etc. At the conference I got about 5 hours of screen on time each day before the battery went out. It&#8217;s clear that the biggest battery sync is video. You can just watch the bar go down over as little as half an hour. On my 2 1/2 hour flight to Orlando I switched back over to audio to save the battery. If this sounds like your typical usage then you might want to consider another device. If I was going to use the device like this ever single day I would want to double the battery life.</p>
<p>If I use the iPhone like I used my old phone I can go 4 days between charges! The WiFi is left on but does not auto connect. I only use the phone to make a few calls and texts. Most of that time I was in an area with no G3 coverage so that may have helped. 4 days is better than my old phone so I&#8217;m pretty happy about that.</p>
<p>Overall I think this works out well for me. The device is powerful and I can use it in when I&#8217;m on the road to stay connected. When I&#8217;m near a computer (which is most of the time) I can set it to have long battery life. Its a nice trade off, a super powerful device in your pocket when you need it.</p>
<h2>Gripes</h2>
<p>When an app launches the browser you can&#8217;t return to that app from the browser. This is now a common task, send the user off to the Internet. Some mechanism needs to be added to return directly to the app that launched the browser. Twitterific is a great exception to this. The embedded apps need to learn from this.</p>
<p><span style="text-decoration: line-through;">The contacts interface sucks. I should be able to get to search from anywhere in the contacts list. As it is I have to scroll to the top of the list. In fact. Plus they have a bug where typing shows way down in contacts.</span> The new 2.1 firmware totally fixed this issue. I would still prefer if the search view was the default view for contacts. I rarely scrolled through the contacts on my old phone.</p>
<p>If your using the Phone app and the phone rings, how do you answer it? There needs to be a button that indicates the current or incoming call.</p>
<h2>Applications</h2>
<p>This is really a mixed bag. Getting the UI right on the phone requires thought. I haven&#8217;t found the a todo app yet that I like, I may have to write one. A good note taker app would be nice too. The built in one is trying to be a little too much like paper.</p>
<p>The real kicker is the Remote app. This lets you manipulate iTunes over WiFi in your house! So if your in the garage all you need is some cheap speakers and an Airport Express and you are in business. Finally a good way to get online radio in the house.</p>
<h2>Conclusion</h2>
<p>It&#8217;s not as bad as some have said! Not for the serious 24-7 business user, ideal for more casual users. The 2.1 firmware fixed many issues. Go get one.</p>
]]></content:encoded>
			<wfw:commentRss>http://waves.ky/2008/08/24/iphone-review/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python Project</title>
		<link>http://waves.ky/2008/08/20/python-project/</link>
		<comments>http://waves.ky/2008/08/20/python-project/#comments</comments>
		<pubDate>Wed, 20 Aug 2008 17:54:06 +0000</pubDate>
		<dc:creator><![CDATA[Gareth Farrington]]></dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://waves.ky/?p=135</guid>
		<description><![CDATA[I want to do a project in Python. It could be something from scratch or maybe a contribution to an existing project. It could be something to do with media It could be a todo list web application I&#8217;ve been thinking about doing, perhaps on Google&#8217;s App Engine It could be something that runs on [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>I want to do a project in Python. It could be something from scratch or maybe a contribution to an existing project.</p>
<ul>
<li>It could be something to do with media</li>
<li>It could be a todo list web application I&#8217;ve been thinking about doing, perhaps on <a title="Go check out Google's App Engine" href="http://code.google.com/appengine/">Google&#8217;s App Engine</a></li>
<li>It could be something that runs on embedded systems.</li>
<li>It could be something to do with model airplanes in some way</li>
</ul>
<p>I just don&#8217;t know exactly what I should do. I have programmers block.</p>
<p>Suggestions welcome&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://waves.ky/2008/08/20/python-project/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>YUI CSS Kicks Ass</title>
		<link>http://waves.ky/2008/03/20/yui-css-kicks-ass/</link>
		<comments>http://waves.ky/2008/03/20/yui-css-kicks-ass/#comments</comments>
		<pubDate>Fri, 21 Mar 2008 03:24:05 +0000</pubDate>
		<dc:creator><![CDATA[Gareth Farrington]]></dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Rants]]></category>

		<guid isPermaLink="false">http://waves.ky/2008/03/20/yui-css-kicks-ass/</guid>
		<description><![CDATA[I was looking for a color picker widget over at Yahoos YUI site. I have been there before mostly to watch the videos on Javascript. Douglas Crockford is obviously the man when it comes to Javascript. Anyway, I saw a link for a video on YUI&#8217;s CSS component and I was just a little bit [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>I was looking for a color picker widget over at Yahoos <a href="http://developer.yahoo.com/yui/">YUI</a> site. I have been there before mostly to watch the videos on Javascript. Douglas Crockford is obviously the man when it comes to Javascript. </p>
<p>Anyway, I saw a link for a video on <a href="http://developer.yahoo.com/yui/grids/">YUI&#8217;s CSS component</a> and I was just a little bit interested. I though it was probably just another CSS reset. There was some vague promise of Grids and I couldn&#8217;t imagine how they could make that easy so I still didn&#8217;t think it looked promising.</p>
<p>Wow was I wrong. If you haven&#8217;t seen this then you need to go check it out. Nate Koechley and crew have done a seminal piece of CSS work here. Here are the highlights:</p>
<ul>
<li>They provide a reset for all styles and fonts in <a href="http://developer.yahoo.com/yui/articles/gbs/index.html">all major browsers</a>, including IE6. You are leveraging all the cross browser testing done by Yahoo</li>
<li>Everything (fonts, boxes etc) is sized with em&#8217;s or percentages of em&#8217;s so the entire page will scale gracefully for 508C</li>
<li>The Grids can be nested. You can do 2, 3 or 4 columns in a variety of width ratios (e.g. 2 columns: 1/4, 3/4 )</li>
<li>Its really simple to use</li>
</ul>
<p>At work we have struggled with CSS. We don&#8217;t have a full time web designer to work for us. So the devs do all the html &amp; css. I&#8217;m fairly handy with this sort of thing but have no where near enough time to produce the level of product that you can get with YUI. Other devs have even less patience for this sort of thing. For us this make a whole lot of sense. </p>
<p>We are really sensitive to the semantic markup of the page and the use of em&#8217;s for 508C support. We want it to be nice to use not just live up to the letter of some spec. I started using em&#8217;s when we first did the style sheet but I was about to give up because it was getting so difficult to use. Now its going to be easy to provide the kind of experience and cross browser compatibility that I have wanted all along.</p>
<p>Just go to Yahoo&#8217;s home page and increase the font size. Look at how smoothly that works and realize how hard that is to set up. Now realize you can do that to your site and still get work done faster than before. Your developers can pick this up in an hour or two and start building better stuff.</p>
]]></content:encoded>
			<wfw:commentRss>http://waves.ky/2008/03/20/yui-css-kicks-ass/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Setting Wing Incidences</title>
		<link>http://waves.ky/2008/02/14/setting-wing-incidences/</link>
		<comments>http://waves.ky/2008/02/14/setting-wing-incidences/#comments</comments>
		<pubDate>Thu, 14 Feb 2008 05:43:46 +0000</pubDate>
		<dc:creator><![CDATA[Gareth Farrington]]></dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[RC Aircraft]]></category>

		<guid isPermaLink="false">http://waves.ky/2008/02/14/setting-wing-incidences/</guid>
		<description><![CDATA[Here is the Gieco Caveman style How-To on setting wing incidences. This is step #22 in the Carden manual for the 35% 260. This step gets about 1/4 of a page. Its not complicated or hard but it is something you have to plan out. I&#8217;m going to assume that were starting with the wing [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Here is the Gieco Caveman style How-To on setting wing incidences. This is step #22 in the Carden manual for the 35% 260. This step gets about 1/4 of a page. Its not complicated or hard but it is something you have to plan out.</p>
<p>I&#8217;m going to assume that were starting with the wing tube socket installed (step #21) and the wings are done with the leading and trailing edge stock installed and sanded to shape.</p>
<p>First we are going to do all of the drilling that we can on a drill press. Drill 4 of the square mount pads and all 4 of the rectangular mounting brackets dead center with a hole sized to the diameter of the bolt your going to use. Carden suggests using 8-32, I&#8217;m using 4mm. With the remaining 4 square pads drill a hole for the blind nut, again dead center.</p>
<p align="center"><a title="IMG_0864 (by gareth.ky)" href="http://www.flickr.com/photos/garethky/2264467600/"><img width="240" height="180" alt="IMG_0864 (by gareth.ky)" title="IMG_0864 (by gareth.ky)" src="http://farm3.static.flickr.com/2246/2264467600_bda57c877f_m.jpg" /></a><a title="IMG_0866 (by gareth.ky)" href="http://www.flickr.com/photos/garethky/2264467506/"><img width="240" height="180" alt="IMG_0866 (by gareth.ky)" title="IMG_0866 (by gareth.ky)" src="http://farm3.static.flickr.com/2076/2264467506_71753c0092_m.jpg" /></a><a title="IMG_0871 (by gareth.ky)" href="http://www.flickr.com/photos/garethky/2264467716/"><img width="240" height="180" alt="IMG_0871 (by gareth.ky)" title="IMG_0871 (by gareth.ky)" src="http://farm3.static.flickr.com/2106/2264467716_7ee6d67f9d_m.jpg" /></a></p>
<p>On two of those pads add an additional hole clear of the blind nut. This is the setup pin hole. The setup pin will keep the wings level when the anti-rotation bolts are removed. This is handy while you look around for your socket driver at the field. Its just an affordance for setup &#038; tear-down and not a load bearing part.</p>
<p align="center"><a title="IMG_0874 (by gareth.ky)" href="http://www.flickr.com/photos/garethky/2263679633/"><img width="240" height="180" alt="IMG_0874 (by gareth.ky)" title="IMG_0874 (by gareth.ky)" src="http://farm3.static.flickr.com/2235/2263679633_6d7241dcbe_m.jpg" /></a></p>
<p>Next find the root cap stock with the pre-drilled socket tube holes in it. Mark the center line of the plank and then transfer the locations of the mounting pads to the center line. Use one of the pads and a square to mark the locations of the pads. Cut these out inside the lines. Sand until the pads are a snug fit.</p>
<p><a title="IMG_0876 (by gareth.ky)" href="http://www.flickr.com/photos/garethky/2264467826/" /></p>
<p><a title="IMG_0876 (by gareth.ky)" href="http://www.flickr.com/photos/garethky/2264467826/"> </a></p>
<div style="text-align: center"><a title="IMG_0876 (by gareth.ky)" href="http://www.flickr.com/photos/garethky/2264467826/"><img width="240" height="180" alt="IMG_0876 (by gareth.ky)" title="IMG_0876 (by gareth.ky)" src="http://farm3.static.flickr.com/2098/2264467826_64379b39f6_m.jpg" /></a></div>
<p>Install the blind nuts in the wing pads. Place the pads into the root cap holes you just cut. The setup pin hole should be pointing towards the tail. Tack glue the pads with some CA. I just did the 4 corners. I&#8217;m using polyurethane glue to install the root cap so it will make a good bond later on. Cut the root cap stock in half to make two root caps.</p>
<p><a title="IMG_0877 (by gareth.ky)" href="http://www.flickr.com/photos/garethky/2264467900/" /></p>
<p><a title="IMG_0877 (by gareth.ky)" href="http://www.flickr.com/photos/garethky/2264467900/"> </a></p>
<div style="text-align: center"><a title="IMG_0877 (by gareth.ky)" href="http://www.flickr.com/photos/garethky/2264467900/"><img width="240" height="180" alt="IMG_0877 (by gareth.ky)" title="IMG_0877 (by gareth.ky)" src="http://farm3.static.flickr.com/2368/2264467900_c30774369e_m.jpg" /></a></div>
<p>For each wing we need to glue in the wing root cap. To do you have to cut away some of the foam so that the pads are recessed into the wing root. To do this I just fir the root cap over the socket tube and line it up with the center of the airfoil using the center line I drew earlier. Once its aligned I press the pads into the foam so it leaves a mark. Using a Dremel router I cut a deep pocket behind the blind nut so that no glue could enter the back of the nut. Then I set the router to cut the depth of recess needed for the pad and cut out the shape of the square mount pads. Test fit again and it should be good to go. Sand down the tube socket so that its flush with the root cap or even slightly inset.</p>
<p align="center"><a title="IMG_0879 (by gareth.ky)" href="http://www.flickr.com/photos/garethky/2263679917/"><img width="240" height="180" alt="IMG_0879 (by gareth.ky)" title="IMG_0879 (by gareth.ky)" src="http://farm3.static.flickr.com/2403/2263679917_4c90acc64e_m.jpg" /></a><a title="IMG_0881 (by gareth.ky)" href="http://www.flickr.com/photos/garethky/2263679979/"><img width="240" height="180" alt="IMG_0881 (by gareth.ky)" title="IMG_0881 (by gareth.ky)" src="http://farm3.static.flickr.com/2307/2263679979_114ee56848_m.jpg" /></a><a title="IMG_0882 (by gareth.ky)" href="http://www.flickr.com/photos/garethky/2263680029/"><img width="240" height="180" alt="IMG_0882 (by gareth.ky)" title="IMG_0882 (by gareth.ky)" src="http://farm3.static.flickr.com/2233/2263680029_816cb11edd_m.jpg" /></a></p>
<p>Now to get a good fit between the wing root and the fuse sides. I think I saw this on FG somewhere else and it didn&#8217;t look like it could hurt. Flip the fuse on its side, put the wing tube through the fuse and mount one of the wings on top. I use polyurethane glue to attach the root cap. Make sure to get adequate glue around the ply mounting pads. Glue is going to come through the seams where the mounting pads are so put some parchment paper between the fuse and the wing to keep it from sticking. The glue takes 2 hours to set up so this step takes a while. You may want to label the wings left &#038; right at this time because its hard to tell which is which after the root cap is on.</p>
<p align="center"><a title="IMG_0888 (by gareth.ky)" href="http://www.flickr.com/photos/garethky/2264468208/"><img width="240" height="180" alt="IMG_0888 (by gareth.ky)" title="IMG_0888 (by gareth.ky)" src="http://farm3.static.flickr.com/2098/2264468208_a6ce5e7cbd_m.jpg" /></a> <a title="IMG_0894" href="http://www.flickr.com/photos/71624620@N00/2263680345/"><img border="0" alt="IMG_0894" src="http://static.flickr.com/2068/2263680345_682f12c23a_m.jpg" /></a><a title="IMG_0893 (by gareth.ky)" href="http://www.flickr.com/photos/garethky/2263680285/"><img width="180" height="240" alt="IMG_0893 (by gareth.ky)" title="IMG_0893 (by gareth.ky)" src="http://farm3.static.flickr.com/2385/2263680285_45596fb79f_m.jpg" /></a></p>
<p>Resist the urge to trim the root caps, all that extra material is going to come in handy. So now its time to set the incidences. Use a good digital level and an incidence tool. Make sure your table is flat and level. Mount both wings on the fuse with the fuse flat on the table and upside down. Make sure that you got the right wing on the right side of the aircraft and that its underside is facing up. Use the incidence tool to find 0.0 incidence. Use a block of scrap balsa and some push pins to secure the wing in this position. Make sure at least one of the pins goes through the 3/8 square stock in the fuse sides. The soft balsa on the fuse sides is too flimsy to hold the wing and keep it from slipping. Take you hands off everything and verify the level still reads 0. Set both wings this way. The blocks will allow us to move the wing and find 0 incidence again consistently.</p>
<p align="center"><a title="IMG_0897 (by gareth.ky)" href="http://www.flickr.com/photos/garethky/2263680507/"><img width="240" height="180" alt="IMG_0897 (by gareth.ky)" title="IMG_0897 (by gareth.ky)" src="http://farm3.static.flickr.com/2272/2263680507_0a3b8974e0_m.jpg" /></a><a title="IMG_0902 (by gareth.ky)" href="http://www.flickr.com/photos/garethky/2264468678/"><img width="240" height="180" alt="IMG_0902 (by gareth.ky)" title="IMG_0902 (by gareth.ky)" src="http://farm3.static.flickr.com/2387/2264468678_f4444b97b7_m.jpg" /></a></p>
<p>Now we have to find the locations of those blind nuts so we can bore a hole in the fuse side to match up with it. I have seen various methods suggested using tape or sharpened screws. This way is easier and, IMHO, more accurate. Use a pin to probe for the hole from inside the fuse. Don&#8217;t worry, the pin cant go through the ply block in the wing root so it can&#8217;t make big holes in the exterior of the fuse sides. Just the tip goes through the balsa, not the whole thing. The holes on the inside get covered up later. Once you strike pay dirt poke more holes all around to find the extent of the blind nut hole. This will help you see the center when you pull the wings off.</p>
<p><a title="IMG_0915 (by gareth.ky)" href="http://www.flickr.com/photos/garethky/2264468924/" /><a title="IMG_0899 (by gareth.ky)" href="http://www.flickr.com/photos/garethky/2264468578/" /></p>
<p><a title="IMG_0899 (by gareth.ky)" href="http://www.flickr.com/photos/garethky/2264468578/"> </a></p>
<div style="text-align: center"><a title="IMG_0899 (by gareth.ky)" href="http://www.flickr.com/photos/garethky/2264468578/"><img width="240" height="180" alt="IMG_0899 (by gareth.ky)" title="IMG_0899 (by gareth.ky)" src="http://farm3.static.flickr.com/2162/2264468578_2b81fb423b_m.jpg" /><img width="240" height="180" alt="IMG_0915 (by gareth.ky)" title="IMG_0915 (by gareth.ky)" src="http://farm3.static.flickr.com/2213/2264468924_08b759763e_m.jpg" /></a></div>
<p>Pull the wings off and you should see spots on the fuse sides peppered with holes. Open up the center of each area with a pin or small drill bit. Make a sand paper drill from 220 grit paper and drill the holes but twirling it. Open up the hole until its the size of the perforated area. Slide the wings back on and check that all the blind nuts are accessible. You should also make holes for the setup pins at this time.</p>
<p align="center"><a title="IMG_0916 (by gareth.ky)" href="http://www.flickr.com/photos/garethky/2263680973/"><img width="240" height="180" alt="IMG_0916 (by gareth.ky)" title="IMG_0916 (by gareth.ky)" src="http://farm3.static.flickr.com/2250/2263680973_28ef8fd1b1_m.jpg" /></a> <a title="IMG_0903 (by gareth.ky)" href="http://www.flickr.com/photos/garethky/2264468796/"><img width="240" height="180" alt="IMG_0903 (by gareth.ky)" title="IMG_0903 (by gareth.ky)" src="http://farm3.static.flickr.com/2064/2264468796_1fe019171f_m.jpg" /></a><a title="IMG_0917 (by gareth.ky)" href="http://www.flickr.com/photos/garethky/2264469112/"><img width="240" height="180" alt="IMG_0917 (by gareth.ky)" title="IMG_0917 (by gareth.ky)" src="http://farm3.static.flickr.com/2321/2264469112_9dae5cd7a6_m.jpg" /></a> <a title="IMG_0908 (by gareth.ky)" href="http://www.flickr.com/photos/garethky/2263680729/"><img width="240" height="180" title="IMG_0908 (by gareth.ky)" alt="IMG_0908 (by gareth.ky)" src="http://farm3.static.flickr.com/2119/2263680729_e46b25eff9_m.jpg" /></a></p>
<p>Now we glue the 4 remaining mounting pads to the inside of the fuse. The is the *critical* step. Once they are glued in the incidence of the wing is set and you cant change it. I do one wing at a time so I can have the incidence meter to make sure the wing is at 0. Use 30 minute epoxy, not poly glue, for this step. The poly glue could expand and seize the bolt. Put the epoxy on the back of the pads and screw them in place. Do not tighten the bolts down, just snug them. Check once again that the wing reads 0, it might shift when the bolts go in but I didn&#8217;t have this problem. Then just walk away. Wait till the epoxy has cured before moving <em>anything</em>.</p>
<p style="text-align: center"><a title="IMG_0920 (by gareth.ky)" href="http://www.flickr.com/photos/garethky/2264469204/"><img width="240" height="180" alt="IMG_0920 (by gareth.ky)" title="IMG_0920 (by gareth.ky)" src="http://farm3.static.flickr.com/2385/2264469204_8c7aba1de0_m.jpg" /></a><a title="IMG_0927 (by gareth.ky)" href="http://www.flickr.com/photos/garethky/2264469284/"><img width="240" height="180" alt="IMG_0927 (by gareth.ky)" title="IMG_0927 (by gareth.ky)" src="http://farm3.static.flickr.com/2322/2264469284_505c5ec11e_m.jpg" /></a></p>
<p>Now its time to mount the setup pin. Make the pin about 3 inches long and use poly glue to install it in the wing. You only need it to stick out about 3/8&#8243;. If you leave it a little bit longer you can sand it down so its flush with the mount pad inside the fuse when the wing is installed. You may want to harden up the balsa around the setup pin opening with some thin CA. You&#8217;ll have to drill a hole in the mounting pad in the fuse side to match up with the pin. I strongly suggest doing this on a drill press. I tried it with a hand drill but the wood tends to &#8216;climb&#8217; up the drill and mess things up. The drill press took more time but the result was much cleaner.</p>
<p style="text-align: center"><a title="IMG_0930 (by gareth.ky)" href="http://www.flickr.com/photos/garethky/2263681311/"><img width="240" height="180" alt="IMG_0930 (by gareth.ky)" title="IMG_0930 (by gareth.ky)" src="http://farm3.static.flickr.com/2323/2263681311_8e797d46dd_m.jpg" /></a><a title="IMG_0931 (by gareth.ky)" href="http://www.flickr.com/photos/garethky/2263681367/"><img width="240" height="180" alt="IMG_0931 (by gareth.ky)" title="IMG_0931 (by gareth.ky)" src="http://farm3.static.flickr.com/2161/2263681367_3f6b6f725d_m.jpg" /></a></p>
<p>Last step, add the balsa spacer and the retention bands. This is pretty easy, just glue the parts in place. You&#8217;ll probably have to sand and shape the two forward bands to fit. Again I used 30 min epoxy so it didn&#8217;t get into the bolts.</p>
<p>This is the after shot, both wings still read 0.0 degrees. There is not slop or wobble at all. The bolts fit but are very snug and its a bit of a challenge to get them engaged properly. I&#8217;m going to put a few flight on the airplane and see if things sort of shake/wear into position. I don&#8217;t want to mess up a good things with sand paper just yet.</p>
<p><a title="IMG_0936 (by gareth.ky)" href="http://www.flickr.com/photos/garethky/2264469532/" /></p>
<p><a title="IMG_0936 (by gareth.ky)" href="http://www.flickr.com/photos/garethky/2264469532/"> </a></p>
<div style="text-align: center"><a title="IMG_0936 (by gareth.ky)" href="http://www.flickr.com/photos/garethky/2264469532/"><img width="240" height="180" alt="IMG_0936 (by gareth.ky)" title="IMG_0936 (by gareth.ky)" src="http://farm3.static.flickr.com/2097/2264469532_bf5617a245_m.jpg" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://waves.ky/2008/02/14/setting-wing-incidences/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>260 Build Update #3</title>
		<link>http://waves.ky/2007/12/02/260-build-update-3/</link>
		<comments>http://waves.ky/2007/12/02/260-build-update-3/#comments</comments>
		<pubDate>Mon, 03 Dec 2007 02:01:28 +0000</pubDate>
		<dc:creator><![CDATA[Gareth Farrington]]></dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://waves.ky/2007/12/02/260-build-update-3/</guid>
		<description><![CDATA[On with the Sheeting. I did the Belly Pan, Hatch, both H-Stabs, Rudder and Turtle Deck in that order. Then I got help from Dan to do the wings. I used the method I like best for spreading the glue is a small foam roller that you can get at Walmart. This really gets a [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>On with the Sheeting. I did the Belly Pan, Hatch, both H-Stabs, Rudder and Turtle Deck in that order. Then I got help from Dan to do the wings.<br />
I used the method I like best for spreading the glue is a small foam roller that you can get at Walmart. This really gets a nice thin layer of glue evenly all over the sheet. Just keep rolling until the sheet turns a uniform color and you don&#8217;t see any big globs of glue left on it. For the wings I think I used 6oz of glue and at least 1oz of that is waste that ends up in the roller. So at most there is 1.25oz of glue on each skin. Each wings had at least 400lbs on it.</p>
<p>I put parchment paper between the shucks and the skins. The upside of this is glue can&#8217;t get through the skins. The downside is the parts tend to move around very freely until the weight is applied. Take some care and time to align the part with the shucks so its sits square. I used about 300 pounds of weight on all of the other parts in the form of various concrete blocks I got for a few cents each at Home Depot. Even with all that I didn&#8217;t get good adhesion around the edges of some parts. I guess the gap between the shuck and the part was just wider there.<br />
You want to take some care with the rudder sheeting alignment. I just joined the Fin and Rudder sheeting parts with masking tape over the plans so that they covered up the whole rudder. Put the foam over the plan and make some reference marks so you know approximately where you want the sheeting to lay down. Try and get the seam to run through the area that will be cut out for the hinge line. Don&#8217;t do anything stupid when cutting off the excess sheeting. Use a <strong><em>sharp </em></strong>blade and then a sanding block to make it smooth. I chipped some parts with a dull blade and I&#8217;m regretting it now. A hobby saw works well for the curves.<br />
So I&#8217;m sure you can see the holes in some of the parts. The hatch, belly pan and turtle deck are all cosmetic parts. They don&#8217;t contribute much in the way of strength to the model. So they make great targets for lightning. I&#8217;m going to guess that I saved about 5oz off the airframe and much of that is from behind of the CG. This technique leaves the part fully sheeted so its easy to cover but it avoids large chunks of foam and the glue that goes with it. Here is the HowTo:</p>
<p><img src="http://static.flickr.com/2078/2082617100_48cf978594_m.jpg" /><br />
Mark a reference line down the center of the part and the center of the sheeting.<br />
<img src="http://static.flickr.com/2345/2081833509_763c5dae96_m.jpg" /><br />
Make a template of the boundaries of 1/2 of the part.<br />
<img src="http://static.flickr.com/2343/2081833747_fbff6fc3c4_m.jpg" /><br />
Draw your cutouts on the template and cut them out. Be smart, do triangles or cut in the same direction as the surface curvature.</p>
<p><img src="http://static.flickr.com/2027/2082617312_bb600f74c9_m.jpg" /><br />
Place the template on the reference line and mark the cutouts. Flip and repeat for the other side.</p>
<p><img src="http://static.flickr.com/2178/2081834835_cc2db65052_m.jpg" /><img src="http://static.flickr.com/2301/2082618364_fb3939c0d4_m.jpg" /><br />
Cut out the foam with a Dremel router or hot wire tool. IMPORTANT: Keep the tool perpendicular to the surface. Put cutouts back into place with a loop of tape.</p>
<p><img src="http://static.flickr.com/2047/2082618512_46e935bb2e_m.jpg" /><img src="http://static.flickr.com/2247/2081835231_d838f2954b_m.jpg" /><br />
Place overlapping strips of masking tape on parchment paper and cut out shapes.</p>
<p><img src="http://static.flickr.com/2375/2082618838_ee80b12618_m.jpg" /><br />
Use the template to position the cut out tape over the part.</p>
<p><img src="http://static.flickr.com/2079/2082618994_cacaa99e0e_m.jpg" /><img src="http://static.flickr.com/2081/2082619152_003de3afe1_m.jpg" /><img src="http://static.flickr.com/2351/2082619474_aa7267afff_m.jpg" /><br />
Then just spread glue as normal, peel off the tape and carefully align the foam part with the reference mark on the skin. Set up the part in the shuck as normal. When the glue dries you will have to pull out the routed foam pieces, none of mine stuck to the wood.</p>
<ul></ul>
<p>I tried a few different procedures on the hatch and belly pan. The above steps are more involved but the result is the best. The turtle deck isn&#8217;t trimmed yet and it weighs 2.5oz (72g). 20g of foam was removed. I don&#8217;t know how much I saved on glue because I had to work fast and didn&#8217;t get the parts on the scale.</p>
]]></content:encoded>
			<wfw:commentRss>http://waves.ky/2007/12/02/260-build-update-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Carden 260 Build Update #2</title>
		<link>http://waves.ky/2007/11/19/carden-260-build-update-2/</link>
		<comments>http://waves.ky/2007/11/19/carden-260-build-update-2/#comments</comments>
		<pubDate>Mon, 19 Nov 2007 05:18:09 +0000</pubDate>
		<dc:creator><![CDATA[Gareth Farrington]]></dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://waves.ky/2007/11/19/carden-260-build-update-2/</guid>
		<description><![CDATA[This weekend I took on step #1 from the manual, make the skins for all the foam parts. I gotta say this is one of the more mind numbing and labor intensive parts of the build. There is a technique you need to follow to get good results. The quality of this work will eventually [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>This weekend I took on step #1 from the manual, make the skins for all the foam parts. I gotta say this is one of the more mind numbing and labor intensive parts of the build. There is a technique you need to follow to get good results. The quality of this work will eventually play out in the covering so its best not to cut corners.<br />
The sheeting in the kit comes &#8220;edge trued&#8221;. This means that the long edges of each sheet should be a mathematically perfect straight line. The lines don&#8217;t have to be parallel, just straight. As it was I found that just about every sheet in the kit had was slightly bulged in the middle. Sometimes its ok to just bend the sheet and hold it in place with masking tape. Most of the time you <em>should</em> sand the edge to make it straighter. I say should because you don&#8217;t have to, you could just fill the gap with glue. Of course I&#8217;m some sort of perfectionist so I had to go and true the edges myself.</p>
<p>Walt(ref) has a fancy rig(ref) to true his sheeting. I didn&#8217;t have one so I improvised. The edge of the door that tops my workbench is very straight. I just moved the sheet to the edge and held it down with my large ruler. Then I took a 12&#8243; T-Bar sander and sanded it square against the door. You wont have to take off much, the sheets are already 90% there.</p>
<p>I used a gram scale to weight all the pieces and split them up into piles of lite, medium and heavy. On the flight surfaces I put the heavy wood over the wing tube area and the light wood towards the front and back of the panel. On the other panels the wood has already been sorted and cut so you don&#8217;t really have any decisions to make about how to use the wood.</p>
<p>Once you trial fit the sheets and don&#8217;t see any big gaps its time to tape the seams together with 3/4&#8243; masking tape. Here is the first bit of technique: rub the tape in hard so glue can&#8217;t get under it. On the first wing skin I didn&#8217;t press hard enough and got a lot of extra glue under the tape. the rest of them I really got it stuck down and the glue cant go anywhere. Once the skin is taped together its time to glue the seams. What worked best for me was to work 3 seams at a time. Apply the glue, remove the excess and then tape across all three seams. This makes for faster work and fewer pesky bits of tape to remove when its all done.</p>
<p>To apply the glue you are going to need some sort of syringe type device with a fine tip. I went to the local Walgreens and asked the pharmacist if they had any syringes and got a freebie! It came without a tip thought so I had to make something up. I cut the end off a dropper that I had for applying CA, I get them at my LHS. If you cant find these then the CA tips available at Hobby-Lobby on online may also work. Either way plan on having this tool before you get started. Even blunt tipped syringes cant be had at a drug store in the USA.</p>
<p>Once each panel is complete I found that it wanted to curl up due to the tension in the tape. Just flip it back over so the side with the seams taped is on top. I used books to hold the panel flat as it dried. I knew I would need that calculus book for something! I left each panel under the weight for about an hour. They come out very flat and uniform, much more so that some pics I have seen of other builds online, so I think I&#8217;m on the right track. I did some of the smaller skins first to get the hang of it and they went pretty well. I was using an old credit card to scrape off the glue and I didn&#8217;t realize that it had some bumps on it. This put some long scratches in the skins. I switched to a different tool, a soft silicone spatula, for removing the excess glue and this worked much better.</p>
<p>I had a couple of screw ups this week. The instructions show the rudder and fin (v-stab) coming out of some 48&#8243; planks with some scrap on the end. the instructions even list these planks on the materials list. Last week I used some of the &#8220;scrap&#8221; off the end of a 48&#8243; plank as end caps for the wing tube sockets. Turns out that the only 48&#8243; planks packed in this kit are for the wings. The other bits come pre cut in bundles and that &#8220;scrap&#8221; isn&#8217;t in the kit. Luckily i didnt cut very much off the end so I was able to use the piece for the leading edge of two of the wing panels, cut diagonally.</p>
<p>I also managed to screw up the first wing panel by forgetting to include on of the planks. Not a difficult mistake to correct though. I just split on of the planks and inserted the missing piece. You would have to know it was done wrong to spot the mistake.</p>
<p>I still have a few more skins to do this week. I&#8217;m going to get them all done now because this part of the build is boring.</p>
]]></content:encoded>
			<wfw:commentRss>http://waves.ky/2007/11/19/carden-260-build-update-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
