<?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 &#187; Blog</title>
	<atom:link href="http://waves.ky/category/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://waves.ky</link>
	<description>Caymanian Geek...</description>
	<lastBuildDate>Mon, 30 Nov 2009 22:07:16 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<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>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 will [...]]]></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 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>One 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 be come 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 the grids. 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 the template with the Head tag and modifying it. Once that&#8217;s done debugging is on for ALL the grids in the document, not just the two boxes you want to debug. Also debugging only works for grids, 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 grid 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;">
/* all elements get a gray background as the default behavior*/
.debug {background-color:#e2e2e2;}
/* Extend the .debug attribute with special behavior for grids: */
.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 the <a href="http://github.com/stubbornella/oocss/blob/8e6c6e7c7543bc76ea4f870a8ca25d27ac857d32/css/template.css" template.css="template.css"></a>file in OOCSS:</p>
<pre class="brush: css;">
/* ====== 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;">
/* 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 the feel of consistency. We programmers like it when things behave consistently. Changing the names of the specific width styles to &quot;.width-NNN&quot; 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:</p>
<pre class="brush: xml;">
&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:</p>
<pre class="brush: xml;">
&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;">
.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;">
.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;">
&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;">
&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 it 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;">
.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;">
&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;">
&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 turned on a border and only turned 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 usefull. 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;">
/* 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;">
.clear-both {clear:both;}
.overflow-hidden {overflow:hidden;}
.float-left {float:left;}
.width-300 {width:300px;}
</pre>
<pre class="brush: xml;">
&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;">
.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;">
&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;">
.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;">
&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 &#8217;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 use the style tag.</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;">
.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;">
&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>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 out an airplane&#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>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 totally [...]]]></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>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 the [...]]]></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>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 embedded systems.
It could [...]]]></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>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 [...]]]></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>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>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 nice [...]]]></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>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 [...]]]></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>
		<item>
		<title>Carden 260 Build Update #1</title>
		<link>http://waves.ky/2007/11/14/carden-260-build-update-1/</link>
		<comments>http://waves.ky/2007/11/14/carden-260-build-update-1/#comments</comments>
		<pubDate>Wed, 14 Nov 2007 17:17:18 +0000</pubDate>
		<dc:creator>Gareth Farrington</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://waves.ky/2007/11/14/carden-260-build-update-1/</guid>
		<description><![CDATA[The first step in the Carden manual is to make sheeting for the various parts. I don&#8217;t want to stray too far from the manual but I was afraid that the sheeting might get damaged in the shop while I did the next few steps. I&#8217;ll do the sheeting at the last minute before its [...]]]></description>
			<content:encoded><![CDATA[<p>The first step in the Carden manual is to make sheeting for the various parts. I don&#8217;t want to stray too far from the manual but I was afraid that the sheeting might get damaged in the shop while I did the next few steps. I&#8217;ll do the sheeting at the last minute before its needed. I have a very generous offer to use some professional layup tables  for skinning the flight surfaces on this project. So I&#8217;m going to work on getting them all skinned before I go any further.</p>
<p>The first big decision I had to make in the build was where to mount the servos in the wings. I really wanted to run 1 servo in each wing but I just couldn&#8217;t bring myself to do it. Saving 4oz and $300+ was really tempting. It probably would have worked just fine. I just don&#8217;t know enough to make that call so I went with the recommended 2 servos. My limited experience with model airplanes has been that servos are the worst place to be cheap.</p>
<p>I drew up the tapered ailerons to the dimension indicated on the plans and they looked fine to me. I just extended the aileron 1&#8243; towards the wing root. I split the length into 4 and put the servos at the 1/4 marks, biased towards the root by 1&#8243;. Another big question was how far the servos should be from the hinge line. I looked at a bunch of build threads and came up with the magic number of 2 1/2 inches. I wouldn&#8217;t be surprised if they could be closer, there is enough thickness in the core for it.</p>
<p>I made up some servo boxes using the supplied servo rails (lengthened to 2 1/2 inches) and some 3/32&#8243; ply. I made a little fixture to assemble the boxes so they where square. The main reason for the boxes it to make sure the servo rails go in square. The box internal dimensions are 21mm x 41mm. Standard servos are metric and about 20mmx40mm so the extra 1mm gives a little play. I used a paper template and the Dremel router to mark and cut pockets for the servo boxes. I just did the routing free hand and it worked out well. Just have the shop-vac handy to clean up the mess!</p>
<p>The tunnel for the servo wire is up next. I cut it with the Dremel to the same depth as the bottom of the servo cutouts. I did two passes guided by a straight edge to make it wider. The servo wire can wrap under the servo and into the tunnel and pass out of the servo box through the arch in the ply support. Study the plans and pick a spot on the side of the fuse clear of obstructions and run the channel out to that point. My exit was about 11cm behind the wing tube.<br />
Finally I installed the servo boxes with Polyurethane glue. Once the first wing was finished the second one went much faster. I swear, the hardest part is just getting started!</p>
<p>On the the stabs. The plans call for a servo box up against the root of the surface. You don&#8217;t have much room to get creative here or the front of the servo box will come out of the bottom of the core. Also be careful not to put the servo over the tube socket, check the plans. I put the servo box 5mm in front of the stab, parallel with the tube (which is parallel to the hinge line) with one corner just touching the end of the foam.</p>
<p>I got my first scare after doing the first stab. I thought I had done it upside down! Then I checked everything over and it was alright. Unlike the wings, where there is an obvious left and right half and stabs are both identical cores. They both have the same side marked as &#8220;down&#8221; and that was what threw me off. If you follow that you will make two left stabs. You have to flip one over ad cut the &#8216;up&#8217; side so you have both a right and a left. When you sheet them always put the side marked bottom on the table. One stab will be upside down in the shuck and the other upright. Confused yet? Good!</p>
<p>The whole &#8216;down&#8217; side business is important. The bottom shuck has a perfectly flat surface but the top shuck is not flat. Sheet them upside down and you could warp the surface.</p>
<p>On to the wing tube sockets. I put the little dowel through the tube and added the 1/16&#8243; balsa end cap, no problem there. Then I tried to fit the tube socket support plate and had my first real DOH! moment. At this point I had never picked the cores up out of the shucks for fear of causing damage to the foam. So I didn&#8217;t know that the hole the support plate goes in is cut clear through the wing core! I started jamming it into the slot and wondered why is was so far off center. I cut some material off one side. Luckily I realized my mistake before I cut too much for it to make contact with the wing skins on both sides of the wing.</p>
<p>Coat the tube and support plate up with lots of PU and do the push and twist ;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://waves.ky/2007/11/14/carden-260-build-update-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AllSizes+ Rocks My Socks</title>
		<link>http://waves.ky/2007/11/06/allsizes-rocks-my-socks/</link>
		<comments>http://waves.ky/2007/11/06/allsizes-rocks-my-socks/#comments</comments>
		<pubDate>Wed, 07 Nov 2007 04:44:25 +0000</pubDate>
		<dc:creator>Gareth Farrington</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://waves.ky/2007/11/06/allsizes-rocks-my-socks/</guid>
		<description><![CDATA[This thing is a god send for cross posting flickr photos in BB code to forums. AllSizes+
]]></description>
			<content:encoded><![CDATA[<p>This thing is a god send for cross posting flickr photos in BB code to forums. <a href="http://www.flickr.com/groups/flickrhacks/discuss/72157594303798688/">AllSizes+</a></p>
]]></content:encoded>
			<wfw:commentRss>http://waves.ky/2007/11/06/allsizes-rocks-my-socks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
