<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>The Haystack.</title>
	
	<link>http://www.the-haystack.com</link>
	<description>Web, design, and web design</description>
	<lastBuildDate>Sun, 13 May 2012 17:37:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/TheHaystack" /><feedburner:info uri="thehaystack" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Learn You a Flexbox for Great Good!</title>
		<link>http://feedproxy.google.com/~r/TheHaystack/~3/bGpKj56UP7E/</link>
		<comments>http://www.the-haystack.com/2012/01/04/learn-you-a-flexbox/#comments</comments>
		<pubDate>Wed, 04 Jan 2012 21:48:59 +0000</pubDate>
		<dc:creator>Stephen</dc:creator>
				<category><![CDATA[browsers]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Layout]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[flexbox]]></category>

		<guid isPermaLink="false">http://www.the-haystack.com/?p=350</guid>
		<description><![CDATA[Yet Another Note (2012-05-13): It might be obvious that the flexbox spec is changing often, but a kind commenter suggested I add a note here regarding the fact that in the spec, the flex() function has been replaced by the &#8230; <a href="http://www.the-haystack.com/2012/01/04/learn-you-a-flexbox/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><ins style="background-color:darkred;" datetime="2012-05-13"><strong>Yet Another Note (2012-05-13):</strong> It might be obvious that the flexbox spec is changing often, but a kind commenter suggested I add a note here regarding the fact that in the spec, <em>the flex() function has been replaced by the `flex` property</em>, which makes plenty of stuff in this article obsolete. Also, expect <em>more</em> to change. I will most likely leave this article as is. I will write an update as soon as I see an implementation in at least one more browser. As of this note&#8217;s date, Chrome still supports the version described below. —Stephen</ins></p>
<p><ins datetime="2012-05-12"><strong>Note (2012-05-12):</strong> I have added -moz-, -ms- and -o- vendor prefixes to all code examples and the demo. <a href="http://christianheilmann.com/2012/02/09/now-vendor-prefixes-have-become-a-problem-want-to-help-fix-it/">Here&#8217;s why</a>. The spec is—at the time of this note—still in flux, so I intentionally left out the non-prefixed properties/values.</ins></p>
<p>So you want to learn Flexbox? Perhaps you&#8217;ve heard about it. Perhaps you&#8217;ve read a <a href="http://www.the-haystack.com/2010/01/23/css3-flexbox-part-1">tutorial</a> or two about it. Perhaps you&#8217;ve even played around with it already.</p>
<p>If you&#8217;ve never heard of Flexbox, or if it&#8217;s been awhile since you&#8217;ve used it, forget what you know. We&#8217;re starting over! The spec has been rewritten; the last version at the time of this writing is dated 29 November 2011!</p>
<h2>What you&#8217;ll need</h2>
<p><del datetime="2012-05-12">Currently</del><ins datetime="2012-05-12">At the time of this writing</ins>, <del datetime="2012-05-12">Chrome Canary</del> <ins datetime="2012-05-12">Google Chrome</ins> has a partial implementation of the spec. If you&#8217;d like to follow along, you&#8217;ll need nothing more than <del datetime="2012-05-12">Chrome Canary</del> <ins datetime="2012-05-12">Google Chrome</ins> and your favorite text editor.</p>
<ul>
<li><del datetime="2012-05-12">Chrome Canary: <a href="http://tools.google.com/dlpage/chromesxs">http://tools.google.com/dlpage/chromesxs</a>;</del></li>
<li><ins datetime="2012-05-12">Google Chrome: <a href="https://www.google.com/chrome">https://www.google.com/chrome</a></ins></li>
<li>Your favorite text editor: <a href="http://www.vim.org/">http://www.vim.org/</a> (Relax, <em>relax</em>)</li>
</ul>
<p>Ready? Let&#8217;s get to it!</p>
<h2>What is Flexbox?</h2>
<p>Flexbox is a nickname for CSS Flexible Box Layout Module. It&#8217;s one of a few CSS Working Drafts having to do with visual layout. Flexbox offers us a new box model which has been optimized for laying out user interfaces. In short: the children of a “box” can be ordered either vertically or horizontally within their parent, and we can control what happens to any remaining space. It is possible to nest these boxes, allowing for very complex layouts.</p>
<h3>Caution!</h3>
<p>There are other CSS layout modules in development which, in my opinion, are much more suited to general page layout than Flexbox. Flexbox is fairly straightforward, but can become unruly when used for complex layouts. In any case it is <a href="http://www.xanthir.com/blog/b4580" title="Why Flexboxes Aren't Good for Page Layout">not the best solution for all types of layout</a>. But for UI-components like buttons, forms, toolbars or rows and columns of content/media blocks for which you&#8217;d normally use floats, Flexbox makes code simpler and is a huge time-saver. Flexbox is designed to play nicely with existing CSS properties. Thus, you are still free to use floats or other types of positioning on non-Flexbox elements.</p>
<h2>Three Little Boxes</h2>
<p>If you&#8217;re feeling a bit lazy, you&#8217;re welcome to simply download and edit the <a href="/playground/css3-flexbox/new-flexbox.html">demo page</a> Otherwise&#8230;</p>
<p>Open your editor, create a simple HTML document with a single box. In this case, we&#8217;ll use a <code>div</code>:</p>
<pre>
<code>
    &lt;!DOCTYPE html&gt;
    &lt;html lang="en"&gt;
        &lt;head&gt;
             &lt;meta charset="utf-8"&gt;
             &lt;title&gt;Flexbox&lt;/title&gt;
        &lt;/head&gt;
        &lt;body&gt;
            &lt;div&gt;
            &lt;/div&gt;
        &lt;/body&gt;
    &lt;/html&gt;
</code>
</pre>
<p>Great, But it would be nice to see something, so we&#8217;ll have to add some style:</p>
<pre>
<code>
    &lt;style&gt;
        body&gt;div {
            height: 500px;
            padding: 1em;
            background-color: gray;
        }
    &lt;/style&gt;
</code>
</pre>
<p>Now we&#8217;ll put three boxes into our <code>div</code>. These are, of course, the first <code>div</code>&#8216;s children:</p>
<pre>
<code>
    &lt;div&gt;
        &lt;div&gt;A&lt;/div&gt;
        &lt;div&gt;B&lt;/div&gt;
        &lt;div&gt;C&lt;/div&gt;
    &lt;/div&gt;
</code>
</pre>
<p>Let&#8217;s style those as well:</p>
<pre>
<code>
    div&gt;div {
        width: 100px;
        height: 100px;
        background-color: pink;
    }
</code>
</pre>
<p>Now look at this page in <del datetime="2012-05-12">Canary</del><ins>the browser</ins>. Nothing unusual here, just three block-level elements one under another, as block-level elements are known to do. But we&#8217;ll put a stop to <em>that</em>. We&#8217;ve created our own Flexbox playground, so let&#8217;s play.</p>
<h2>Defining a flexbox</h2>
<p>We would like to apply the magic of Flexbox to the children of our parent <code>div</code>. We do so with the <code>display</code> property. By applying <code>display: flexbox;</code> to our parent <code>div</code>, we tell it to use the Flexbox box model. If we wanted our parent <code>div</code> to be inline instead of block-level, we&#8217;d use <code>display: inline-flexbox;</code>.</p>
<pre>
<code>
    body&gt;div {
        display: -webkit-flexbox; /* We need the prefixes for now, unfortunately. */
        display: -moz-flexbox;
        display: -ms-flexbox;
        display: -o-flexbox;
        height: 500px;
        padding: 1em;
        background-color: gray;
    }
</code>
</pre>
<p>Our three child <code>div</code>s, which we&#8217;ll call <em>flexbox items</em> from now on, now live according to the Flexbox box model. Beware: there are rules that determine what a flexbox item is. For example, if we were to use <code>position: absolute;</code> on one of the three boxes, it would <em>no longer be a flexbox item</em> since we&#8217;ve applied a different positioning model. Read <a href="http://www.w3.org/TR/css3-flexbox/#flex-items">more about flexbox items</a> in the spec.</p>
<p>Back to our little exercise. Take a look at the page in your browser. The flexbox items look a bit as if we had applied <code>inline</code>, <code>inline-block</code> or <code>float</code> to them. This is because the Flexbox default is to position flexbox items horizontally. The main difference so far is that we have only added a rule <em>to the parent</em> and not to the items themselves.</p>
<h2>Source-order independence</h2>
<p>Flexible Box Layout Module gets its name from the fact that it allows us to create flexible boxes. In other words, boxes can become flexible by utilizing available space. We&#8217;ll get to that in a minute. But Flexbox offers something at least equally important to us, especially in this Age of Mobile: source-order independence. Let&#8217;s play around and see how we can change the order of flexbox items.</p>
<pre>
<code>
    body&gt;div {
        display: -webkit-flexbox;
        display: -moz-flexbox;
        display: -ms-flexbox;
        display: -o-flexbox; 
        -webkit-flex-flow: row-reverse;
        -moz-flex-flow: row-reverse;
        -ms-flex-flow: row-reverse;
        -o-flex-flow: row-reverse;
        height: 500px;
        padding: 1em;
        background-color: gray;
    }
</code>
</pre>
<p>OMG. Our flexbox items are now right-aligned and the order is reversed! We do this with the <code>flex-flow</code> property, for which <code>row</code> is the default value. <code>row-reverse</code> flips this around. You might have already guessed that when you want to position flexbox items vertically, you would use <code>column</code> or <code>column-reverse</code>. At the time of this writing, <del datetime="2012-05-12">Canary</del><ins datetime="2012-05-12">Chrome</ins> does not support <code>column-reverse</code>, but try out <code>column</code> and see what happens! When you&#8217;re done playing around, set the value back to <code>row</code> and we&#8217;re ready for our next step.</p>
<p>By the way, <code>flex-flow</code> also takes a value for wrapping flexbox items to new rows (or columns, depending on which you&#8217;re using). The values <code>wrap</code> and <code>wrap-reverse</code> serve this purpose, as the default is a single row (or column) of flexbox items which overflows the parent. <code>wrap</code> and <code>wrap-reverse</code> still haven&#8217;t been implemented at the time of this writing (I&#8217;m saying that a lot). But let&#8217;s say, just for fun, that we could use <code>wrap</code> today:</p>
<pre>
<code>
    body&gt;div {
        display: -webkit-flexbox; 
        display: -moz-flexbox;
        display: -ms-flexbox;
        display: -o-flexbox;
        -webkit-flex-flow: row wrap; /* `wrap` gives us a multi-line flexbox. */
        -moz-flex-flow: row wrap;
        -ms-flex-flow: row wrap;
        -o-flex-flow: row wrap;
        height: 500px;
        padding: 1em;
        background-color: gray;
    }
</code>
</pre>
<h3>Mirror, mirror&#8230;</h3>
<p>All the properties dealing with order, direction or alignment of flexbox items are influenced by the current <em>writing mode</em>. The writing mode is the original direction of the text. Many of us are used to top-to-bottom, left-to-right. But as soon as these are changed, the output of the directional Flexbox properties will also change. You&#8217;ve already seen what <code>row-reverse</code> does. But what if your writing mode isn&#8217;t the default (top-to-bottom, left-to-right) but top-to-bottom, right-to-left? Your flexbox items would be laid out from right-to-left <em>in the first place</em>, and <code>row-reverse</code> would flip things so they&#8217;re left-to-right.</p>
<p>Try it out:</p>
<pre>
<code>
    body&gt;div {
        display: -webkit-flexbox; 
        display: -moz-flexbox;
        display: -ms-flexbox;
        display: -o-flexbox;
        direction: rtl; /* The `writing-mode` property currently has no visual effect in Chrome. The `direction` property will suffice for our example. */
        -webkit-flex-flow: row;
        -moz-flex-flow: row;
        -ms-flex-flow: row;
        -o-flex-flow: row;
        height: 500px;
        padding: 1em;
        background-color: gray;
    }
</code>
</pre>
<p>Look at the page in your browser. Now replace <code>row</code> with <code>row-reverse</code>. See what happens?</p>
<p>Confusing? Perhaps a little at first, but the properties all work logically based on the current writing mode. As most of us usually work with the same writing mode most of the time, it shouldn&#8217;t be much of a problem.</p>
<p>In order to understand the effect many Flexbox properties have on flexbox items, it is important to understand what the <em>main axis</em> and the <em>cross axis</em> are. The <em>main axis</em> is the axis along which the flexbox items are placed. In other words, if the flexbox items have been placed horizontally (<code>flex-flow: row;</code>), then the main axis is horizontal. The <em>cross axis</em> is perpendicular to the main axis. In our example, that would be vertical. When using <code>flex-flow: column;</code>, this is switched: the main axis is vertical and the cross axis is horizontal.</p>
<p>That&#8217;s a pain to explain well. Just to be sure we&#8217;re clear, here&#8217;s an illustration:</p>
<p><!-- ascii diagrams for ditaa</p>
<p>HORIZONTAAL MAIN AXIS</p>
<p>               |<br />
    +----------------------+<br />
    | +----+ +----+ +----+ |<br />
----| |cPNK| |cPNK| |cPNK| |---- <- Main axis is horizontaal,<br />
    | +----+ +----+ +----+ |        omdat flexbox items horizontaal<br />
    |                      |        zijn geplaatst.<br />
    |                      |<br />
    |c888                  |<br />
    +----------------------+<br />
               |</p>
<p>               ^<br />
               |</p>
<p>    Cross axis is verticaal</p>
<p>--------------------------------------------------------------------<br />
VERTICAAL MAIN AXIS</p>
<p>               |<br />
    +----------------------+<br />
    | +----+               |<br />
    | |cPNK|               |<br />
    | +----+               |<br />
    |                      |<br />
    | +----+               |<br />
----| |cPNK|               |---- <-Cross axis is horizontaal<br />
    | +----+               |<br />
    |                      |<br />
    | +----+               |<br />
    | |cPNK|               |<br />
    | +----+               |<br />
    |c888                  |<br />
    +----------------------+<br />
               |</p>
<p>               ^<br />
               |</p>
<p>    Main axis is verticaal<br />
    omdat flexbox items verticaal<br />
    zijn geplaatst.<br />
--></p>
<p><img src="http://www.the-haystack.com/wp-content/uploads/2012/01/fb-axis.png" alt="When items are horizontally positioned, the main axis is horizontal." title="When items are horizontally positioned, the main axis is horizontal." width="720" height="672" class="aligncenter size-full wp-image-395" style="max-width:100%;" /></p>
<p>Remember main axis and cross axis, because we&#8217;ll need them in a bit.</p>
<h2>Order! Order in the court!</h2>
<p>Let&#8217;s look at another property which helps the cause for source-order independence: <code>flex-order</code>.</p>
<p>In your example code, make sure you&#8217;ve set <code>flex-flow</code> to <code>row</code> and have removed <code>direction: rtl;</code>. If things are as they should be, you&#8217;ll have three flexbox items: A, B and C, in the top left of <code>body&gt;div</code>. Imagine that although our code contains these items in that order, that we want to display them in the order A-C-B. To do this, we&#8217;ll use <code>flex-order</code>:</p>
<pre>
<code>
    div:nth-child(2) { /* Yes, I could have used an ID or a class. But, hey, whatever. */
        -webkit-flex-order: 1;
        -moz-flex-order: 1;
        -ms-flex-order: 1;
        -o-flex-order: 1;
    }
</code>
</pre>
<p>Check things out in your browser. The order of the flexbox items should be A-C-B.</p>
<p><code>flex-order</code> places flexbox items into <em>ordered groups</em>. Boxes without an explicit <code>flex-order</code> are in group 0 and remain in source order. In our example, the second flexbox item (B) is placed in group 1. A and C remain in group 0 and in source order (A before C). Since group 1 comes after group 0, the B comes last. If we had wanted the order B-A-C, we could have left B in group 0 and put A and C into group 1:</p>
<pre>
<code>
    div&gt;div:first-child,
    div&gt;div:last-child {
        -webkit-flex-order: 1;
        -moz-flex-order: 1;
        -ms-flex-order: 1;
        -o-flex-order: 1;
    }
</code>
</pre>
<h2>Flexibility</h2>
<p>One of the nicest aspects of Flexbox is the ability to create flexible elements. We can decide what to do with any remaining space in our <code>body&gt;div</code> (in this example). We can divide this space up between the flexbox items, or we can make the widths or heights of one or more of these items <em>flexible</em>, alotting a certain amount of available space to each.</p>
<p>We&#8217;ll look at flexibility first and then come back to distributing available space.</p>
<p>Imagine that our three flexbox items are buttons in a web application which might also be used on mobile devices. Sometimes we have three, but sometimes we only have two (just nod and go along with it). We&#8217;d like to say, “No matter how many of these buttons there are, I want them all to generally be the same width, and these widths should be such that the row of buttons takes up all the available width of the parent.” We&#8217;d normally resort to JavaScript for these types of layout problems, but Flexbox might put an end to that. See what happens when we make our flexbox items flexible with the <code>flex()</code> function:</p>
<pre>
<code>
    div&gt;div {
        /* width: 100px; */
        width: -webkit-flex(1 0 100px);
        width: -moz-flex(1 0 100px);
        width: -ms-flex(1 0 100px);
        width: -o-flex(1 0 100px);
        height: 100px;
        background-color: pink;
    }
</code>
</pre>
<p>The <code>flex()</code> function can be used as a value for <code>width</code> or <code>height</code>. <code>flex()</code> takes three values: positive flex, negative flex and <em>preferred size</em>. The last two parameters are optional; the default for negative flex is 0 and the default for preferred size is 0px. Here&#8217;s how <code>flex()</code> works in a nutshell:</p>
<ol>
<li>The <em>preferred width</em> is applied to the flexbox items.</li>
<li>If there is any space left over in the parent, this space is divided up into parts and added to the widths of the flexbox items according to the positive flex value. </li>
<li>If the flexbox items overflow the parent (e.g. together they are wider than the parent), then the negative flex value is used for determining the widths of the items. Please note that negative flex is a <em>positive</em> value (e.g. 2 and not -2).</li>
</ol>
<p>A positive flex value of 1 basically means “one equal part of the available space”. A value of two would mean something like “twice the amount of available space as the items that have <code>flex(1)</code>”. So it&#8217;s nothing like “two parts whiskey, one part cola”. The easiest way to learn it is to try it out. Type the following code <em>under</em> your rules for <code>div&gt;div</code>:</p>
<pre>
<code>
    div&gt;div:first-child,
    div&gt;div:last-child {
        width: -webkit-flex(2);
        width: -moz-flex(2);
        width: -ms-flex(2);
        width: -o-flex(2);
        background-color: magenta; /* This allows us to see the difference clearly. Plus, it hurts your eyes. */
    }
</code>
</pre>
<p>If you check your browser, you&#8217;ll see that the first and the last flexbox items don&#8217;t each have 2 parts of the available space. Rather, they have <em>two times as much</em> available space as the middle box, which has <code>flex(1)</code>. I know, I know. Just be glad you&#8217;re not a browser maker. Unless you are, in which case: have fun and please get this implemented ASAP!</p>
<p>Also, please note that this does <em>not</em> mean that the two outermost boxes are <em>two times as wide</em> as the center box. We&#8217;re only dealing with how the available space in the parent is being distributed.</p>
<p>Remove the declaration you just added. Remove one of the <code>div</code>s and look at the result in your browser. Once you&#8217;ve seen what happens, put the <code>div</code> back in again.</p>
<p>There&#8217;s plenty more about <code>flex()</code> and any other gory details you might want to know about Flexbox; these can all be found in the <a href="http://www.w3.org/TR/css3-flexbox/">spec</a>.</p>
<h2>Alignment of flexbox items</h2>
<p>Did you remember everything about main axis and cross axis? Excellent. Because the <code>flex-pack</code> property determines how flexbox items are aligned along the main axis. In our example file, the main axis is horizontal. In order to study the effect of <code>flex-pack</code>, remove <code>flex()</code> and change the width back to 100px:</p>
<pre>
<code>
    div&gt;div {
        width: 100px;
        height: 100px;
        background-color: pink;
    }
</code>
</pre>
<p><code>flex-pack</code> accepts one of four possible values: <code>start</code>, <code>end</code>, <code>justify</code> and <code>center</code>. Pretty clear. Let&#8217;s center our flexbox items. We do this on the parent:</p>
<pre>
<code>
    body&gt;div {
        display: -webkit-flexbox;
        display: -moz-flexbox;
        display: -ms-flexbox;
        display: -o-flexbox;
        -webkit-flex-flow: row;
        -moz-flex-flow: row;
        -ms-flex-flow: row;
        -o-flex-flow: row;
        -webkit-flex-pack: center; /* &lt;-- */
        -moz-flex-pack: center;
        -ms-flex-pack: center;
        -o-flex-pack: center;
        height: 500px;
        padding: 1em;
        background-color: gray;
    }
</code>
</pre>
<p>Go ahead and play with the other values until you like it.</p>
<p>Of course, there is a property for aligning flexbox items along the <em>cross axis</em>: <code>flex-align</code>. The possible values differ slightly from <code>flex-pack</code>. The most important thing to remember is that while <code>flex-pack</code> is applied to the <em>parent</em> of the flexbox items, <code>flex-align</code> is applied to <em>the flexbox items themselves</em>.</p>
<pre>
<code>
    div&gt;div {
        width: 100px;
        height: 100px;
        background-color: pink;
        -webkit-flex-align: center; /* Also: start | end | baseline | stretch  &lt;-- Try these vales as well! */
        -moz-flex-align: center;
        -ms-flex-align: center;
        -o-flex-align: center;
    }
</code>
</pre>
<p>Not all the values are supported yet, but I don&#8217;t think we&#8217;ll need to wait very long. As the spec solidifies, implementation should come fairly quickly. The browser makers are quite interested in Flexbox.</p>
<h2>Enough! Time to play</h2>
<p>There are a couple of other properties having to do with multi-line flexboxes, but since we can&#8217;t try those out yet, we&#8217;ll stop here for now. Hopefully we&#8217;ve handled enough material to get you started playing around with the “new” Flexbox. Try and consider practical applications. How could Flexbox help within the context of “responsive design” and mobile? What possibilities open up for form styling? Navigation?</p>
<p>You don&#8217;t need to be able to use this today in actual projects to learn and experiment with the possibilities. Implementation might come quicker than you think, and you&#8217;ll already have a head start.</p>
<p>Have fun!</p>
<p><ins datetime="2012-01-04T20:43:48+00:00">Note: This article first <a href="http://fronteers.nl/blog/2011/12/learn-you-a-flexbox-for-great-good">appeared in the Dutch language</a> for the <a href="http://fronteers.nl/blog/categorieen/adventskalender">Fronteers Advent Calendar</a>. Payment for the article was a modest donation to <a href="http://iccf-holland.org/">ICCF Holland</a>.</ins></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheHaystack?a=bGpKj56UP7E:fnhvirr4je8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheHaystack?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheHaystack?a=bGpKj56UP7E:fnhvirr4je8:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/TheHaystack?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheHaystack/~4/bGpKj56UP7E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.the-haystack.com/2012/01/04/learn-you-a-flexbox/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://www.the-haystack.com/2012/01/04/learn-you-a-flexbox/</feedburner:origLink></item>
		<item>
		<title>OMG A Blog Post</title>
		<link>http://feedproxy.google.com/~r/TheHaystack/~3/EkCCUYUaaz4/</link>
		<comments>http://www.the-haystack.com/2011/12/19/omg-a-blog-post/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 16:18:43 +0000</pubDate>
		<dc:creator>Stephen</dc:creator>
				<category><![CDATA[Babble]]></category>

		<guid isPermaLink="false">http://www.the-haystack.com/?p=343</guid>
		<description><![CDATA[When David Storey commented that I should change my company&#8217;s name from Zero Interface to Zero Blogging, I knew I had to write something very soon. The truth is, while I&#8217;ve been traversing mountains of client work, doing some speaking &#8230; <a href="http://www.the-haystack.com/2011/12/19/omg-a-blog-post/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>When <a href="http://twitter.com/dstorey">David Storey</a> commented that I should change my company&#8217;s name from <a href="http://zerointerface.nl">Zero Interface</a> to Zero Blogging, I knew I had to write something very soon. The truth is, while I&#8217;ve been traversing mountains of client work, doing some speaking engagements and becoming a father (again), I actually <em>have</em> been doing <em>some</em> writing. Only not for this blog. I refer you to the <a href="http://www.netmagazine.com/shop/magazines/november-2011-221">November 2011 issue</a> of <a href="http://www.netmagazine.com/">.net Magazine</a>, where I wrote an overview of the new galaxy that is Responsive Web Design. For the readers who know Dutch, I refer you to the <a href="http://fronteers.nl/blog/categorieen/adventskalender">Fronteers Advent Calendar</a>, for which I wrote an <a href="http://fronteers.nl/blog/2011/12/learn-you-a-flexbox-for-great-good">introduction to the new, improved Flexbox spec</a>, which due to some demand I will most likely translate to English and publish here. </p>
<p>See what I did there, David? </p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheHaystack?a=EkCCUYUaaz4:b-ZuxIGTVzE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheHaystack?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheHaystack?a=EkCCUYUaaz4:b-ZuxIGTVzE:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/TheHaystack?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheHaystack/~4/EkCCUYUaaz4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.the-haystack.com/2011/12/19/omg-a-blog-post/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.the-haystack.com/2011/12/19/omg-a-blog-post/</feedburner:origLink></item>
		<item>
		<title>What about that new blogpost?</title>
		<link>http://feedproxy.google.com/~r/TheHaystack/~3/gV1xq06-JxU/</link>
		<comments>http://www.the-haystack.com/2011/04/29/what-about-that-new-blogpost/#comments</comments>
		<pubDate>Fri, 29 Apr 2011 21:28:26 +0000</pubDate>
		<dc:creator>Stephen</dc:creator>
				<category><![CDATA[Babble]]></category>

		<guid isPermaLink="false">http://www.the-haystack.com/?p=332</guid>
		<description><![CDATA[Who was it that said that once I left my position as creative director and went independent, that I would have more time to write on this blog? And what were they smoking?]]></description>
			<content:encoded><![CDATA[<p>Who was it that said that once I left my position as creative director and went independent, that I would have more time to write on this blog?</p>
<p>And what were they smoking?</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheHaystack?a=gV1xq06-JxU:gy0ihBp9qUk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheHaystack?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheHaystack?a=gV1xq06-JxU:gy0ihBp9qUk:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/TheHaystack?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheHaystack/~4/gV1xq06-JxU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.the-haystack.com/2011/04/29/what-about-that-new-blogpost/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.the-haystack.com/2011/04/29/what-about-that-new-blogpost/</feedburner:origLink></item>
		<item>
		<title>It’s okay to do adaptive layout. Really.</title>
		<link>http://feedproxy.google.com/~r/TheHaystack/~3/kGWygQyLGNs/</link>
		<comments>http://www.the-haystack.com/2011/02/22/adaptive-layout-okay/#comments</comments>
		<pubDate>Tue, 22 Feb 2011 21:31:28 +0000</pubDate>
		<dc:creator>Stephen</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Layout]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[adaptive layout]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[responsive design]]></category>

		<guid isPermaLink="false">http://www.the-haystack.com/?p=321</guid>
		<description><![CDATA[Vasilis wrote yesterday about how he altered the layout of the Tropenmuseum website (English homepage) to adapt to different screen sizes. Then came the comments. Nothing really wrong with any of them, but the whole &#8220;layout is not the only &#8230; <a href="http://www.the-haystack.com/2011/02/22/adaptive-layout-okay/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://vasilis.nl/">Vasilis</a> wrote yesterday about how he <a href="http://www.frankwatching.com/archive/2011/02/21/flexibele-lay-out-website-tropenmuseum-geschikt-voor-elk-scherm/" title="This article is in Dutch">altered the layout</a> of the <a href="http://www.tropenmuseum.nl/">Tropenmuseum</a> website <ins datetime="2011-02-23T20:45:00+01:00">(<a href="http://www.tropenmuseum.nl/-/MUS/5853/Tropenmuseum">English homepage</a>)</ins> to adapt to different screen sizes.</p>
<p>Then came the comments. Nothing really wrong with any of them, but the whole &#8220;layout is not the only thing that should concern you; performance/context/content/blah is also (maybe even <strong>more</strong> important)&#8221; thing is getting very tired. Why? Because <strong>nobody is saying those things aren&#8217;t important.</strong></p>
<p>Here&#8217;s a fact: If the homepage of site [x] is 100kB, then it&#8217;s 100kB. If I make that page look decent on several devices via adaptive layout&mdash;unless I go overboard&mdash;it is still going to be 100kB. Okay, maybe 101kB. It&#8217;s either zoom hell or not. So people can complain about that, but unless they&#8217;re willing to add to the client&#8217;s budget, the extra layout flexibility is (often, not always) a relatively quick readability and usability win. <em>Device-agnosticism should be baked into the design approach anyway</em>. There&#8217;s absolutely no harm in it.</p>
<p>So no, do not ignore content strategy and performance. And if you do content strategy, then you&#8217;d do well to be thinking about design. Device-agnostic design applies here as well. </p>
<p>Don&#8217;t feel bad about doing adaptive layout just because these other things are <em>also</em> important. It&#8217;s okay. Really.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheHaystack?a=kGWygQyLGNs:GCWNqGozJOE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheHaystack?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheHaystack?a=kGWygQyLGNs:GCWNqGozJOE:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/TheHaystack?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheHaystack/~4/kGWygQyLGNs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.the-haystack.com/2011/02/22/adaptive-layout-okay/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://www.the-haystack.com/2011/02/22/adaptive-layout-okay/</feedburner:origLink></item>
		<item>
		<title>Upcoming speaking engagements</title>
		<link>http://feedproxy.google.com/~r/TheHaystack/~3/D3tpsaRWNvA/</link>
		<comments>http://www.the-haystack.com/2011/02/21/upcoming-speaking-engagements/#comments</comments>
		<pubDate>Mon, 21 Feb 2011 19:52:57 +0000</pubDate>
		<dc:creator>Stephen</dc:creator>
				<category><![CDATA[Events]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Presentations]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[breaking development]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[mobilism]]></category>

		<guid isPermaLink="false">http://www.the-haystack.com/?p=312</guid>
		<description><![CDATA[When I left Cinnamon last October to focus more on strategy and device-agnostic design and development, I also had another goal in mind: more speaking. I also wanted to write more; you can see how well that&#8217;s working out for &#8230; <a href="http://www.the-haystack.com/2011/02/21/upcoming-speaking-engagements/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>When I left <a href="http://www.cinnamon.nl/">Cinnamon</a> last October to focus more on strategy and device-agnostic design and development, I also had another goal in mind: more speaking. I also wanted to write more; you can see how well that&#8217;s working out for me :).</p>
<p>I love speaking. Except for a couple of hours beforehand, when I&#8217;m so nervous I feel like throwing up. The past few years I&#8217;ve done quite a bit of speaking at conferences and events for clients, and that initial nervousness is there every single time. Fortunately the feeling subsides after the first few minutes of the talk.</p>
<p>I tend to talk a lot, and speaking engagements are a way to channel that into something that might inspire someone, teach them something new, or start a discussion. At web design and development conferences, it&#8217;s no secret that the speakers learn from the audience in the same way the audience might learn from the speakers. It&#8217;s also no secret that the discussions outside of the sessions are at least as interesting and valuable as the sessions themselves.</p>
<p>I&#8217;m very excited to be speaking at two mobile-related events this first half of the year: <a href="http://breakingdc.com">Breaking Development</a> in Dallas and <a href="http://mobilism.nl">Mobilism</a> in Amsterdam.</p>
<p><a href="http://www.breakingdc.com/"><img src="http://www.the-haystack.com/wp-content/uploads/2011/02/breakingdevelopment.png" alt="Breaking Development Conference" title="breakingdevelopment" width="309" height="71" class="aligncenter size-full wp-image-314" style="background-color:#333; padding: 1em;" /></a></p>
<p>Breaking Development will be my first conference talk outside of the Netherlands (and then in the US), which is somewhat ironic, considering that I&#8217;m an American expat. I&#8217;m absolutely thrilled to speak alongside some of the smartest and most inspiring people in web design and development today at both of these conferences. Just take a look at the lists of speakers: </p>
<ul>
<li><a href="http://www.breakingdc.com/speakers">Breaking Development speakers</a></li>
<li><a href="http://mobilism.nl/2011/speakers">Mobilism speakers</a></li>
</ul>
<p>If you&#8217;re interested in designing and developing websites and web apps for mobile (or for <em>anywhere</em>), you might consider attending one of these conferences. Or both, if you <em>really</em> love conferences.</p>
<p>If you do attend, please come over and say hi. Just remember that there&#8217;s some risk in doing that right before my talk.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheHaystack?a=D3tpsaRWNvA:WLmbItd0N3A:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheHaystack?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheHaystack?a=D3tpsaRWNvA:WLmbItd0N3A:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/TheHaystack?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheHaystack/~4/D3tpsaRWNvA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.the-haystack.com/2011/02/21/upcoming-speaking-engagements/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.the-haystack.com/2011/02/21/upcoming-speaking-engagements/</feedburner:origLink></item>
		<item>
		<title>New HTML5 beer logo</title>
		<link>http://feedproxy.google.com/~r/TheHaystack/~3/7_ZeXB000ig/</link>
		<comments>http://www.the-haystack.com/2011/01/18/new-html5-beer-logo/#comments</comments>
		<pubDate>Tue, 18 Jan 2011 15:58:32 +0000</pubDate>
		<dc:creator>Stephen</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Satire]]></category>
		<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://www.the-haystack.com/?p=301</guid>
		<description><![CDATA[Update: The W3C have updated their stance on this subject. Finally, the moment we&#8217;ve all been waiting for: drinking beer is now part of HTML5! This puts drinking beer just ahead of cooking, and right alongside CSS3 as a &#8220;technology &#8230; <a href="http://www.the-haystack.com/2011/01/18/new-html5-beer-logo/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><ins datetime="2011-02-12T10:22:00+01:10"><strong>Update:</strong> The <abbr>W3C</abbr> have <a href="http://www.w3.org/html/logo/faq.html">updated their stance</a> on this subject.</ins></p>
<p>Finally, the moment we&#8217;ve all been waiting for: <strong>drinking beer is now part of <abbr>HTML</abbr>5!</strong> This puts drinking beer just ahead of cooking, and right alongside <abbr>CSS</abbr>3 as a &#8220;technology class&#8221; of <abbr>HTML</abbr>5.</p>
<p><img src="http://www.the-haystack.com/wp-content/uploads/2011/01/html5-beer.png" alt="HTML5 beer logo" title="html5-beer" width="400" height="285" class="aligncenter size-full wp-image-302" /></p>
<p>Obviously, this means a lot for your expense reports while traveling, as the blob that is <abbr>HTML</abbr>5 slowly assimilates all of your activities, allowing you to claim you were working on web stuff the whole time.</p>
<p>To celebrate this milestone in web development, we here at the Haystack decided to step up and use Creative Commons to its full extent by giving beer the logo it deserves. The t-shirts are in the works, so stay tuned!</p>
<h2>Background information</h2>
<ul>
<li><a href="http://www.w3.org/html/logo/">W3C HTML5 logo</a></li>
<li><a href="http://adactio.com/journal/4289/">Jeremy Keith&#8217;s excellent post about it</a></li>
</ul>
<p><em>The <abbr>HTML</abbr>5 logo (excluding the beer) is licensed by the <a href="http://www.w3.org/html/logo/"><abbr>W3C</abbr></a> under a <a href="http://creativecommons.org/licenses/by/3.0/">CC-BY</a> license.</em></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheHaystack?a=7_ZeXB000ig:epd0bQIQkEQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheHaystack?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheHaystack?a=7_ZeXB000ig:epd0bQIQkEQ:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/TheHaystack?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheHaystack/~4/7_ZeXB000ig" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.the-haystack.com/2011/01/18/new-html5-beer-logo/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://www.the-haystack.com/2011/01/18/new-html5-beer-logo/</feedburner:origLink></item>
		<item>
		<title>There is no Mobile Web</title>
		<link>http://feedproxy.google.com/~r/TheHaystack/~3/e9DcVumQNVU/</link>
		<comments>http://www.the-haystack.com/2011/01/07/there-is-no-mobile-web/#comments</comments>
		<pubDate>Fri, 07 Jan 2011 15:37:18 +0000</pubDate>
		<dc:creator>Stephen</dc:creator>
				<category><![CDATA[Babble]]></category>

		<guid isPermaLink="false">http://www.the-haystack.com/?p=291</guid>
		<description><![CDATA[I&#8217;m not sure who said &#8220;Never complain, never explain&#8221; (Disraeli? Ford? Google&#8217;s not helping much), but it sure does apply to me, as I never heed the advice. Today I posted the following on Twitter without thinking much about it: &#8230; <a href="http://www.the-haystack.com/2011/01/07/there-is-no-mobile-web/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m not sure who said &#8220;Never complain, never explain&#8221; (Disraeli? Ford? Google&#8217;s not helping much), but it sure does apply to me, as I never heed the advice.</p>
<p>Today I posted the following on Twitter without thinking much about it:</p>
<blockquote><p>&#8220;There is no Mobile Web. There is only The Web, which we view in different ways. There is also no Desktop Web. Or Tablet Web. Thank you.&#8221;</p></blockquote>
<p>I certainly didn&#8217;t expect the enormous amount of retweets, which hopefully means that most people understood what I <em>meant</em>. But some didn&#8217;t, or didn&#8217;t agree with me. Which is a good thing, but only if my point is clear. So allow me to <em>explain</em>.</p>
<p>Most sites on the web are not built with specific mobile use-cases in mind. However, millions of people access these sites every day through mobile devices. They access a &#8220;normal&#8221; (whatever that means) website through their &#8220;mobile&#8221; device. In these cases, the presentation of the content on mobile devices is potentially important. As are the intrinsic characteristics of this content on the mobile platform; take image size as an example. Manufacturers cater to the users of &#8220;non-mobile&#8221; websites on mobile devices via things like zoom, which although inconsistent across devices, makes viewing most websites on a smartphone bearable. Developers can do their part by adjusting the served content or the presentation.</p>
<p>That said, simply adjusting the presentation of content or pieces of content on a website does <em>not</em>, in my opinion, constitute a &#8220;mobile website&#8221;. It&#8217;s a website for which the developers have considered the users of mobile devices and adjusted certain things accordingly.</p>
<p>As the venerable <a href="http://script.aculo.us/thomasfuchs">Thomas Fuchs</a> <a href="http://twitter.com/#!/thomasfuchs/status/23359052050341888">points out</a>, there are specific mobile use cases and thus mobile-specific websites or web apps. I agree. By the same token, there are websites and web apps which were designed with solely the desktop in mind (and oftentimes with a certain browser in mind). Yet we don&#8217;t speak of the &#8220;Desktop Web&#8221; when referring to these apps. Ironically, that&#8217;s exactly what we do with mobile.</p>
<p>To be honest, I can think of a few, but not many use cases of web sites or apps which are or should be <em>exclusively</em> mobile. It seems like <em>the Mobile Web</em> allows us to revisit all of the talk of inclusion, progressive enhancement and accessibility from years ago.</p>
<p>Much of this is semantics, I&#8217;m sure. I use the word &#8220;mobile&#8221; in my own job title, which obviously borders on hypocrisy. Why? Because if people understand the term this way, it&#8217;s easier for them to understand that part of my job is to consider users of mobile devices when doing design consulting for clients. So I use the term the way they understand it. It&#8217;s just not in line with how I see the Web personally.</p>
<p>Many developers also consider desktop browsers. And text browsers. And screen readers. And possibly print. Or e-books. Or whatever. Because the Web is about <em>universally accessible structured content</em>. Which data you get and use and in what form will depend on your device and your circumstances. Your <em>context</em>, if you are so inclined. And that will constantly be changing.</p>
<p>So maybe it&#8217;s a semantic distinction and I&#8217;m simply exaggerating like the American I am. But as long as there are developers selling and building completely separate mobile websites or iPhone websites or iPad websites where well-designed universal websites would suffice, it&#8217;s not <em>only</em> a semantic distinction.</p>
<p><a href="http://adactio.com/journal/1716">One web</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheHaystack?a=e9DcVumQNVU:BKw7YM3-7A4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheHaystack?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheHaystack?a=e9DcVumQNVU:BKw7YM3-7A4:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/TheHaystack?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheHaystack/~4/e9DcVumQNVU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.the-haystack.com/2011/01/07/there-is-no-mobile-web/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		<feedburner:origLink>http://www.the-haystack.com/2011/01/07/there-is-no-mobile-web/</feedburner:origLink></item>
		<item>
		<title>Death to web services. Long live web services!</title>
		<link>http://feedproxy.google.com/~r/TheHaystack/~3/GHu4Z3-WoFU/</link>
		<comments>http://www.the-haystack.com/2010/12/17/death-to-web-services-long-live-web-services/#comments</comments>
		<pubDate>Fri, 17 Dec 2010 10:38:08 +0000</pubDate>
		<dc:creator>Stephen</dc:creator>
				<category><![CDATA[Babble]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[delicious]]></category>
		<category><![CDATA[flickr]]></category>
		<category><![CDATA[microformats]]></category>
		<category><![CDATA[rdf]]></category>
		<category><![CDATA[semanticweb]]></category>
		<category><![CDATA[syndication]]></category>
		<category><![CDATA[webservices]]></category>

		<guid isPermaLink="false">http://www.the-haystack.com/?p=283</guid>
		<description><![CDATA[Yahoo! is apparently shutting down Delicious, which has people falling all over themselves backing up their own data from the site and putting their bookmarks onto lesser-known services, which I&#8217;m sure will all exist until the end of time. These &#8230; <a href="http://www.the-haystack.com/2010/12/17/death-to-web-services-long-live-web-services/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Yahoo! is <a href="http://techcrunch.com/2010/12/16/is-yahoo-shutting-down-del-icio-us/">apparently shutting down</a> <a href="http://del.icio.us">Delicious</a>, which has people falling all over themselves backing up <em>their own data</em> from the site and putting their bookmarks onto lesser-known services, which I&#8217;m sure will all exist until the end of time. These moves are sometimes underscored by many on <a href="http://twitter.com">Twitter</a> by claiming that these other services &#8220;are better than Delicious anyway&#8221;, which they very well may be, although these comments reek of justification. No need: if you want to move your bookmarks, they&#8217;re yours. Just move them.</p>
<p>But that&#8217;s the thing: we&#8217;re talking about <em>bookmarks</em>, the loss of which will hardly leave you living out of a cardboard box. And what happens when bad things happen to <a href="http://flickr.com/">Flickr</a>? <a href="http://mail.google.com">GMail</a>? <a href="http://www.evernote.com">Evernote</a>? That site you do all your finances on? Project management and invoicing? Time tracking?</p>
<p>You may back up all your data, which makes the downfall of any of these services less painful. Unless you just keep your original photos on your own computer, but all of your photo metadata was entered on Flickr and you have no backup of that. Poof! But we all know Flickr&#8217;s not going anywhere, right? Too many users. Actively developed. Very popular. <em>Cough</em>. It&#8217;s the same reason we can depend on <a href="http://developer.yahoo.com/yql/"><abbr>YQL</abbr><abbr></abbr></a> (which I still find absolutely brilliant <abbr>BTW</abbr>). Yahoo! will give us all at least six months notice if they decide to pull the plug on <abbr>YQL</abbr>, which gives us the time to change all of the client work we made utilizing it. And of course our clients will have six months to get a budget to hire us to make the necessary changes.</p>
<p>But what are we complaining about? It&#8217;s all free. Having to move our bookmarks is not really a huge problem, but we all seem appalled that large companies care about money. Since when is this an anomaly? Company sees something cool, hopes to make money, buys it, doesn&#8217;t make enough money, poof. Here&#8217;s a truth for you: most companies only care about your data insofar as this data can help them make money. They have this site and you fill it. <em>You</em> fill it.</p>
<p>A couple of years ago <a href="http://www.the-haystack.com/2008/05/01/personal-publishing-via-web-services/">I was on the fence about this</a>. No longer. For a while we&#8217;ve posted our data all over the internet on all types of services. These services provide APIs so we can access the data we put into them, so that we can do things with that data. Read that again.</p>
<p>Richard Stallman, in his usual come-out-swinging way, has <a href="http://www.guardian.co.uk/technology/2008/sep/29/cloud.computing.richard.stallman">commented on this before</a>. And I believe he has a point. Our data is our own, and it&#8217;s up to us to look after it. But how?</p>
<p>What if we flipped this all on its head? What if we hosted our own data, and provided APIs for all these webapps so that <em>they</em> can use <em>our</em> data? I can imagine that to be a substantially cool use of <a href="http://www.w3.org/TR/rdfa-syntax/">RDFa</a>/<a href="http://microformats.org/">Microformats</a> and whatever metadata/semantic web technologies you prefer. Isn&#8217;t one of the points of the <a href="http://www.w3.org/2001/sw/">semantic web</a> to make decentralized information meaningful, retrievable and mixable?</p>
<p>So instead of having our own websites aggregate our own data from other people&#8217;s websites, we&#8217;ll let other people use the data from our own websites. Photos, meaningfully tagged, can be pulled in by Flickr via our own <strong>personal API</strong>, if you will. We provide the <em>structured data</em>, Flickr provides the <em>functionality</em>. The <strong>sharing</strong>. The <strong>social</strong>. Why not?</p>
<p>Personal publishing platforms like <a href="http://wordpress.org/">WordPress</a>, <a href="http://drupal.org/">Drupal</a>, [your favorite here] could be extended to make use of microformatting, <abbr>RDF</abbr>, etc. and provide tools for syndication, as we now do with simple blogposts. Services don&#8217;t need to host our data. They only need to <em>do cool things with it</em>. So when I quit service X, or service Y falls the Way of <a href="http://en.wikipedia.org/wiki/GeoCities">GeoCities</a>, I don&#8217;t need to do anything but cancel my account. Or leave it and forget about it. If I change my information, it&#8217;s automatically changed on all the services using it. Storage space is up to me. Privacy settings? Totally up to me.</p>
<p>Awesome, providing the host doesn&#8217;t go *poof*.</p>
<p>Let&#8217;s get to it.</p>
<p>[Disclaimer: As some services die, some of the above links will rot. Make of that what you will.]</p>
<p><ins datetime="2010-12-17">[UPDATE: Please also read <a href="http://adactio.com/journal/1468/">Jeremy Keith's related post</a> from 2008.]</ins></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheHaystack?a=GHu4Z3-WoFU:z6DxsMpLcJ4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheHaystack?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheHaystack?a=GHu4Z3-WoFU:z6DxsMpLcJ4:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/TheHaystack?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheHaystack/~4/GHu4Z3-WoFU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.the-haystack.com/2010/12/17/death-to-web-services-long-live-web-services/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		<feedburner:origLink>http://www.the-haystack.com/2010/12/17/death-to-web-services-long-live-web-services/</feedburner:origLink></item>
		<item>
		<title>New Flexbox tutorial on HTML5Rocks</title>
		<link>http://feedproxy.google.com/~r/TheHaystack/~3/lCf9ROgxPdI/</link>
		<comments>http://www.the-haystack.com/2010/10/18/new-flexbox-tutorial-on-html5rocks/#comments</comments>
		<pubDate>Mon, 18 Oct 2010 12:57:39 +0000</pubDate>
		<dc:creator>Stephen</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Layout]]></category>
		<category><![CDATA[Sightings]]></category>

		<guid isPermaLink="false">http://www.the-haystack.com/?p=279</guid>
		<description><![CDATA[A couple of weeks ago, Paul Irish posted a quick look at CSS3 Flexible Box Layout Module at HTML5Rocks.com. Some of the material was borrowed (legally and with my blessing, of course) from my own tutorial. Paul has added a &#8230; <a href="http://www.the-haystack.com/2010/10/18/new-flexbox-tutorial-on-html5rocks/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A couple of weeks ago, Paul Irish posted a <a href="http://www.html5rocks.com/tutorials/flexbox/quick/">quick look</a> at CSS3 Flexible Box Layout Module at <a href="http://www.html5rocks.com/">HTML5Rocks.com</a>. Some of the material was borrowed (legally and with my blessing, of course) from <a href="http://www.the-haystack.com/2010/01/23/css3-flexbox-part-1/">my own tutorial</a>. Paul has added a few niceties. As for placement on HTML5Rocks.com, Paul sums it up nicely: </p>
<p><img src="http://www.the-haystack.com/wp-content/uploads/2010/10/Screen-shot-2010-10-18-at-2.51.30-PM.png" alt="Paul Irish: Yup! I wrote about CSS3 on an HTML5 site..." width="530" height="233" class="aligncenter size-full wp-image-280" /></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheHaystack?a=lCf9ROgxPdI:6DB7snXKay4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheHaystack?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheHaystack?a=lCf9ROgxPdI:6DB7snXKay4:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/TheHaystack?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheHaystack/~4/lCf9ROgxPdI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.the-haystack.com/2010/10/18/new-flexbox-tutorial-on-html5rocks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.the-haystack.com/2010/10/18/new-flexbox-tutorial-on-html5rocks/</feedburner:origLink></item>
		<item>
		<title>Fronteers 2010 recap</title>
		<link>http://feedproxy.google.com/~r/TheHaystack/~3/b-JZ3M0jmtY/</link>
		<comments>http://www.the-haystack.com/2010/10/14/fronteers-2010-recap/#comments</comments>
		<pubDate>Thu, 14 Oct 2010 18:18:46 +0000</pubDate>
		<dc:creator>Stephen</dc:creator>
				<category><![CDATA[Babble]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[Presentations]]></category>

		<guid isPermaLink="false">http://www.the-haystack.com/?p=271</guid>
		<description><![CDATA[I know, I know. It&#8217;s been a whole week. What can I say? I&#8217;m glad to have so much work. Fronteers 2010 in Amsterdam was definitely the best Fronteers yet. I was honored to have been invited to speak for &#8230; <a href="http://www.the-haystack.com/2010/10/14/fronteers-2010-recap/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I know, I know. It&#8217;s been a whole week. What can I say? I&#8217;m glad to have so much work.</p>
<p><a href="http://fronteers.nl/congres/2010">Fronteers 2010</a> in Amsterdam was definitely the best Fronteers yet. I was honored to have been invited to speak for the third year in a row. As Chris Heilmann <a href="http://www.wait-till-i.com/2010/10/10/fronteers-2010-report-and-my-slides-and-links/">points out</a>, the two of us share that privilege, and a privilege it is; the Fronteers team has put the conference on the map as one of the top front-end design and development conferences around today.</p>
<p>Aside from speaking, Fronteers was a great opportunity to see some friends again and meet new people, and to see some of my favorite web talents speak as well:</p>
<h2>Day one</h2>
<p>Day one kicked off with <a href="http://vimeo.com/15755349">Jeremy Keith on HTML5</a>. <a href="http://adactio.com/journal/">Jeremy</a> is one of the best thinkers in front-end development and a *fantastic* speaker. He presented a clear overview of past, present and future HTML5. I also finally got to meet him in person after reading so much of his work through the years. And, he built <a href="http://huffduffer.com/">Huffduffer</a>, which you should try.</p>
<p><a href="http://robertnyman.com/">Robert Nyman</a>. What a character. A very informative <a href="http://vimeo.com/15758849">presentation</a> peppered with images of celebrities, which misdirected the audience from the fact that Robert has <a href="http://www.flickr.com/photos/jaffathecake/5067683957/">cloned himself</a> several times in order to keep up with all his work.</p>
<p>I&#8217;m a big fan of <abbr title="Scalable Vector Graphics">SVG</abbr>, so I thoroughly enjoyed <a href="http://vimeo.com/15773144">Brad Neuberg&#8217;s presentation</a>, which could have easily been called &#8220;show off and make your friends jealous with <abbr>SVG</abbr>&#8220;. A well-rounded look at this vector graphics format. </p>
<p>Håkon Wium Lie <a href="http://vimeo.com/15775937">shared stories and images</a> about the beginning of the Web and the history of CSS. Especially enlightening was seeing a picture of the world&#8217;s first web server. He finished up by sharing some of his ideas about the future of the Web. Since he is <abbr>CTO</abbr> of Opera Software, I do of course expect him to get <abbr>CSS</abbr>3 Template Layout implemented soon. To this end, I had to have a little chat with him during the break.</p>
<p>I loved <a href="http://www.phpied.com/">Stoyan Stefanov</a>&#8216;s session on performance. Lots of little tricks in this presentation and some things I didn&#8217;t know, but can apply today. Good stuff, and a super-nice guy.</p>
<p>I&#8217;ve admired <a href="http://sushiandrobots.com/">Jina Bolton</a>&#8216;s work for a few years. She&#8217;s done a lot of work educating people about and promoting <abbr>CSS</abbr>, and it&#8217;s easy to see why. While her subject matter was tried and true, it served as a good confirmation of some best practices, especially within teams.</p>
<p><a href="http://www.jakearchibald.com/">Jake Archibald</a>&#8216;s presentation on design principles for building <abbr>API</abbr>s was insane. Jake&#8217;s presentation style is a flurry of insight and humor. There was plenty to learn and lots to laugh about. Absolutely awesome presentation.</p>
<h2>Day two</h2>
<p>I kicked off day two, basically discussing progressive enhancement all over again in light of the current obsession with media queries. The slides were minimalist, but I found using <abbr>SVG</abbr> quite flexible. (Some people have asked about the slides, so I will post the <abbr>SVG</abbr> file very soon, with an explanation of how I made the slides).</p>
<div style="width:425px" id="__ss_5406746"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/stephenhay/realworld-responsive-design" title="Real-world Responsive Design">Real-world Responsive Design</a></strong><object id="__sse5406746" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=fronteers10-rwrd-101010133621-phpapp01&#038;stripped_title=realworld-responsive-design&#038;userName=stephenhay" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse5406746" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=fronteers10-rwrd-101010133621-phpapp01&#038;stripped_title=realworld-responsive-design&#038;userName=stephenhay" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></div>
<h3>Moving on&#8230;</h3>
<p><a href="http://paulirish.com/">Paul Irish</a>&#8230; what can I say? The Web is his little plaything, and does pretty much whatever he wants it to.</p>
<p><a href="http://owltastic.com/">Meagan Fisher</a>&#8216;s slides were <em>gorgeous</em>. She walked us through the subtle use of texture, <abbr>rgba</abbr>() and <code>text-shadow</code> and <code>box-shadow</code> to turn a bland, wireframe-like page into something delicious.</p>
<p>I didn&#8217;t get to see <a href="http://www.nczonline.net/">Nicholas Zakas</a>’ presentation on High Performance JavaScript, as I was drafted by <a href="http://stuffandnonsense.co.uk/blog">Andy Clarke</a> and <a href="http://superfluousbanter.org/">Dan Rubin</a> to take part in their talkshow session which took place in a second room. It was a fun session, and should have lasted at least another half-hour, as not all questions could be answered in time. As far as Nicholas goes, I can&#8217;t wait to see the video of his presentation.</p>
<p><a href="http://www.paciellogroup.com/blog/">Steve Faulkner and Hans Hillen</a> talked about <abbr>HTML</abbr>5 accessibility, and the message was pretty much that it&#8217;s not ready yet. But they did give some valuable tips for introducing some <abbr>WAI-ARIA</abbr> into your <abbr>HTML</abbr>. Christian and I especially loved the slides.</p>
<p>As a big fan of <a href="http://www.flight404.com/blog/">Robert Hodgin</a>&#8216;s work, it was great to see <a href="http://themaninblue.com/">Cameron Adams</a> talk about animation on the Web. Cameron&#8217;s presentation also challenged the Flash-bashers, certainly causing me—and probably many others—to stop and think about which technologies are better suited to which goals. Cameron is also a great guy to have a beer with.</p>
<p>As far as I&#8217;m concerned, the star of the show was <a href="http://www.wait-till-i.com/">Chris Heilmann</a>, with his inspirational and hilarious presentation designed to motivate us to Go Forth and Make Cool Stuff. Being the web developer&#8217;s answer to Anthony Robbins is no easy task, and Chris pulls it off beautifully.</p>
<p>All in all, I had a fantastic time. My compliments go out to the Fronteers team; they really did a superb job putting this conference together. I think we can expect great things for next year!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheHaystack?a=b-JZ3M0jmtY:h57YcWRR8nI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheHaystack?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheHaystack?a=b-JZ3M0jmtY:h57YcWRR8nI:7Q72WNTAKBA"><img src="http://feeds.feedburner.com/~ff/TheHaystack?d=7Q72WNTAKBA" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheHaystack/~4/b-JZ3M0jmtY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.the-haystack.com/2010/10/14/fronteers-2010-recap/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.the-haystack.com/2010/10/14/fronteers-2010-recap/</feedburner:origLink></item>
	</channel>
</rss>

